Fórum témák
» Több friss téma |
Köszönöm, ezt nem tudtam hogy üres definíciónak is van értelme Egyébként valamiért a megszakítással kezdi a program a futást Kérhetnék még egy kis segítséget abban hogy magát a megszakítás kiszolgáló ruint hogyan kell elhelyezni? Valamiért így nem jó...
A #define USE_INTERRUPT az #include előtt legyen, hiszen abban vizsgáljuk, hogy definiálva van-e! A szóközök se hiányozzanak!
A hi_isr a PGM CODE szekcióban legyen (ahol a főprogram is), ne írj elé ORG direktívát! A GOTO START utasításnak sem látom értelmét, az már a #include direktívával becsatolt részben benne van.
Kijavítottam amiket kellett, de a fordító hibát jelez, a hi_isr re ismétldő cimke hibát ír.. kimaradt még valami? Eddig itt tartok.
Idézet: Ideiglenes orvoslásul kommenteld ki az "extern hi_isr" sort a p18_all.inc állományban. Erre akkor lenne szükség, ha külön állományban (pontosabban külön fordítási egységben) lenne a hi_isr címke. „a fordító hibát jelez, a hi_isr re ismétldő cimke hibát ír..”
Az, hogy a #define es a USE_INTERRUPT kozott nincs szunet, valamint, hogy az utasitasaid tobbsege a sor legelejen kezdodnek az csak annak koszonheto, hogy TAB karaktert hasznaltal esazt nem jol jelenteti meg a HE?
Amugy a define utan nem kellene egy "1" -es? Masik: Nem lehet, hogy a p18_all.inc hasznalja azt a hi_isr cimket?
Sziasztok.
12F675-re próbálok szoftveres pwm-et készíteni. Sikerült is. Csak sajnos lassúnak tűnik. RGB LED-eket a akarok vezérelni. HP41C megoldását használom. Timer0 megszakítást használok. Ha a növekményt 1-re állítom akkor villog a led. Ezt azzal próbáltam orvosolni, hogy mielőtt kilépnék a megszakításból akkor a TMR0 regisztert átállítom 160-ra. Így nem villog. Ez mennyire szép megoldás? Van esetleg ennél egyszerűbb?
Szia!
Teljesen jó a megoldásod. Más kontrollert választva, timer2 -t felhasználval könnyebb: 12F683, 12F1822, 12F1823, 12F1840. Ez a PWM megvalósítási mód nem az én ötletem...
Köszi. Tudom hogy másik kontrollerrel könnyebben meg lehet oldani, de sajnos csak ez van kéznél.
Akkor úgy mondom hogy azt használom amit Te javasoltál. A másik kérdés. Keresgéltem neten pic-es rgb vezérlőket. A forráskódokban láttam eléggé sok helyen, hogy egy DT paranccsal táblázat szerűen voltak megadva a színek kitöltési tényezője. Keresgéltem leírást a DT parancsról de nem nagyon találtam. Tud ebben nekem segíteni valaki?
Nézd meg az MPLAB editor/asm helpjében !
Steve u.i. Ránéztem, az asm részben van !
Köszi. Megtaláltam. Ezzel nagyon jókat el lehet majd játszani.
Idézet: Nem használja, hanem externalként deklarálja. Ez mnost gondot okozott, mert egy fordítási egységben szerepelt az external és a lokális definiíció. „Nem lehet, hogy a p18_all.inc hasznalja azt a hi_isr cimket?”
Szia!
Ha a szimulátorral ellenőrzöd, hogy mit csinál, akkor nem sokáig kell "játszani", lehet vele "melózni" is ! Steve
Az extern hi és lo isr eket kikommenteltem, így lefordul, viszont valamiért fut rendesen a progi az mplab simben nem látom a zöld nyilacskát, mikor léptetném... Csatoltam a jelenlegi állást, szerintem valami apróság lehet amit nem veszek észre...
Szia, a HE rosszul kezeli a TAB-okat. a projektben ezekkel nincs gond, az definíció után azért nem írtam egyest, mert Icserny írta hogy üresen is lehet definiálni, és tényleg. A másik cimkét pedig pedig valóban a p18_all.inc állomány tartalmazta... Köszönöm a javaslatokat
Kiderült, hogy az utolsó verzió működik a valóságban csak szimulátorban hibát jelez ezt írja: CORE-E0001: Stack over flow error occurred from instruction at 0x001060 Köszönöm szépen az eddigi segítségeket!
A TAB problemat beirtam a fejlesztesi otletekbe, remelem javitjak majd.
Igen, ha nem #if -el, hanem #ifdef -el van lekerdezve akkor nem kell, hogy erteke legyen, csak, hogy definialva legyen.
Sziasztok!
Lenne egy egyszerű kérdésem, amire sehol nem sikerült tutorialt vagy bármit találni a neten.. PicKit2-vel 16f690 internal EEPROM-ját hogyan tudom programozni? Ha jól sejtem elég lenne a hex fileban egy eeprom részbe beleírni, hogy mit is szeretnék, de sehol nem találtam erre egy konkrét példát :/ Előre is köszi
Szia!
Indítsd el a PICKit2 programját, csatlakoztasd a 16F690 -et, olvasd ki. A program memória fölött a bal oldalon levő négyzetből vedd ki a pipát. Az adat EEProm területét kézzel is át lehet írni az ablakában. A módosítás után kiadott Write már csak az adat területet írja át.
Szia!
Igen, ez így működik nagyon jól, csak igazából nekem pont az lenne a lényeg, hogy fájlból programozza Mindenestre köszi
A propeller óra topikba már feltöltöttem egyszer a 16F628(A) -hoz. A 16F690 -hez is jó lesz (processzor megadását át kell írni). MpLab asm programjával kell lefordítani.
Sziasztok!
Hogyan lehetséges egy frekvencia mérő építése, ami 40Mhz-ig is mér, aminek 4Mhz-es oszcillátora van? A TMR0 -t léptetik kívülről és abból számol a program? Pl a TMR0 külső forrását a saját órajele felett működtetthetem, és rendesen kikalkulálhatom a saját órajeléből?
Szia!
Pl. frekiosztók (számlálók) használatával.
Nekem egy 16f84- el épített Lcd-s van. Azért kérdezem, mert előtte nincsen semmilyen számláló csak egy nand schmitt tigger.
Szervusz!
A TMR0 előosztója aszinkron módban mehet nagyobb frekvenciáról is mint a PIC órajele, csak maga a TMR0 nem (50 Mhz-ig általában elmennek)
Szia!
Én nem tudok róla, hogy az órajelhez lenne kötve a sebessége, sőt használtam is nagyobb frekvencián és működött... Szerintem csak egy számláló, amit lehet szinkronizálni az órajelhez és működik a rendszer órajelénél nagyobb frekvencián is ( az 50 MHz viszont emlékeim szerint jó, most nem néztem az adatlapot ). Steve
Szervusz!
Azért vess egy pillantást arra az adatlapra: 16F84 A TMR0 és annak az előosztója nem ugyanaz mint az előbb utaltam is rá. A TMR0 mindenképp szinkronizálva van az órajelhez, az előosztó nélkül bemenő jel minimális periódusideje = Tcy+40ns. Előosztó nélkül az utasításfrekvenciánál (órafrekvencia/4) nagyobb frekvencia esetén fog ugyan számolni a TMR0, de kiszámíthatatlan lesz az eredmény. Te valószínüleg az előosztóval használtad... vagy a microchip következetesen hibás adatlapokat publikál, vagy azt sem tudja mit gyárt. István
Akkor ha jól értem, a pic belső órajelét figyelve mondjuk 5us -onként megnézem mennyit növekedett a tmr0? Ami az 5us alatt lehet akár pl 200 is?
De az alább hozzászólásod viszont?? A szerint ha nem lassabb pl 4Mhz-es rendszer frekinél 1Mhz-nél akkor pontatlan és használhatatlan? Akkor ezt hogyan oldják meg?
Szia!
Igazad van ! 16F877-el csináltam és ezek szerint a TMR1-et használhattam, mert ott elkerülhető ez a szinkronozás, ha jól láttam ( de működött ) ... Steve
Egyszerűbb esetben több méréshatár (automata) van és csak a nagyobb frekvenciáknál mérnek előosztóval, általában egyszerű kvarccal amúgy is csak 4-5 digit a pontosság.
Az előosztó állása közvetlenül ugyan nem olvasható ki, de szükség esetén megoldható pl.: Bővebben: Link ebben a kapcsolásban a 74hc132-vel történik bemenet kapuzása, a mérés végén a bemenetet letiltja a szoftver, ekkor az előosztó 0 - 255 (256-os előosztásnál) között bármilyen értéket felvehet, de nem tudjuk direkt kiolvasni ezért ekkora lenne a pontatlanság, a bemenő impulzusok száma pedig N*256 lesz, ha 1 másodpercig mérünk, akkor a frekvencia is ez lesz. Ennél a megoldásnál trükk az, hogy a mérés végén a letiltott bemenet helyett, maga a PIC billegteti az előosztó bemenetét amíg az nullára nem vált, léptetve egyet a TMR0-t (a TMR0 változása már figyelhető). ebből kalkulálható hol állt az előosztó, és pontosan megmondható hány bemenőimpulzusunk (X) volt a kapuidő alatt: N*256+X Remélem érthető voltam. |
Bejelentkezés
Hirdetés |