Fórum témák
» Több friss téma |
Sziasztok!
Egy olyan kérdésem/kérésem lenne, hogy Pic-be írok progit... És néha lefagy...igazából elég "egyszerű" a progi, de nem szabadna, hogy lefagyjon... Szóval szeretnék valaki hozzáértőt megkérni, hogyha tud akkor MPLab c18-hoz ha tudna egy nagyon egyszerű példaprogramot adni/mutatni azt pontal jutalmaznám és nagyon megköszönném! Előre is köszönöm!
Értelemszerűen a PIC.
Nem vagyok jártas a témában, de rengeteg watchdog-példát lehet találni a guglival. Szerk.: Ebben van egy watchdog-részlet Részletes leírás a watchdog-ról Leírás PDF-ben Mégsem lehet C-ben sok példát találni...
A watchdog-ot a következő képpen kell használni a progi elején bekapcsolod a WDT_ON és a fő szálba pedig a CLRWDT utasítással reseteled az időzítőjét hogy ne resetelje a PIC-et ha lejár az időzítése.
Nézd meg ezt is: http://t-t.freeweb.hu/elokep/pic/felhkk/kk/sz090312.htm Nem tudom nem-e valami külső zavar okozza a PIC-ed leállását, mint nekem nem rég a "mikrokontrollerek zavarszűrése" topic-ban. Idézet: „Szóval szeretnék valaki hozzáértőt megkérni, hogyha tud akkor MPLab c18-hoz ha tudna egy nagyon egyszerű példaprogramot” Ezzel kapcsolod be: #pragma config WDT = ON Ezzel a lejárási idejét állítod #pragma config WDTPS = 1 Az 1 helyett 2 hatványai mehetnek egészen 32768-ig. A szimulátor szerint a 18F2550-nél ha 1-re állítottam, akkor 4ms után generál resetet. Ezzel meg nullázod a regiszterét _asm CLRWDT _endasm
Hát srácok!
Ezért szeretem a hobbielektronikát! Kérdezek valamit és egyből van válasz! Köszönöm! Holnap kipróbálom és ha megy akkor adom a pontot! Különben a kapcsolás nagyon egyszerű: van a pic 2 lábát használom, egyikkel egy ledet kapcsolok 1k ohmon keresztül, másikon pedig egy relét egy pnp tranzisztoron keresztül ami relé bázisára van rakva egy 1 k-s ellenállás. A tranyó E és C közé van dióda berakva és a relé kimenetén is. Probléma: ha a ledet és a relé egyszerre kapcsolom akkor nem mennek....ok...gondolom, hogy a túl nagy áram lehet....kimértem led ugye 5mA....tranyónyitás 4mA...ok lehet hogy nyitáskor többet vesz fel, de azt nem tudom mérni.. A pic összes többi lábát lekötöttem földre és bementere állítottam...azt olvastam, hogy ez javallott művelet, hogy elkerüljem a zavarokat. Szóval a progi a következő: Végtelen ciklus Usart beolvasás 13 byte stb .... És az olvasás közben néha kifagy: Progi részletesen: Idézet: „ if(DataRedyUSART){ Do{ if(DataRedyUSART) {i++; in[i]=getcharUSART();} }While(i<13) PORTBbits.RB0=1; Delay_ms(1);PORTBbits.RB0=0; ///És itt fagy be....honnan tudom....égve marad a led... } If (i>13) {i=0; ....stb} ” [/quote] Szóval nullázom az i-t... Szóval valakinek ötlete? Tudom, hogy elég kaotikusnak tűnik így....de hátha van valami biztonságosabb módja az USART kezelésnek.... Az stb-ket azért írtam mert azok nem lényegesek
Az a relé bekötése nekem zavaros. Általában npn tranzisztorral kapcsoljuk a relét, emitter gnd-n, bázis mondjuk 1k-n a pic lábára, táp és kollektor között a relé tekercse, és a tekercsel párhuzamosan dióda. Mondjuk lehet pnp tranzisztorral is, akkor az emitter megy a tápra, és a relé a kollektor és a gnd közé.
Azt nézd meg, hogy az összes megszakítás le legyen tiltva, amit nem használsz. Töröld kézzel az engedélyező biteket, lehet, hogy resetkor nemjól áll be Különösképpen az ilyen lábváltozásokból eredők a veszélyesek, ha mégis bemegy valami zavar a lábakon. 100nF-os kerámiakondenzátor(ok)ral szűröd a tápot, igaz?
Bocs Igaz! NPN-t használok! Nem tudom, hogy írhattam el.....
A tápon van 100nF kondi.
A PIC táplábaihoz közel van téve az a 100n?
A diódát a relé tekercsére tegyed! A tápot legalább 1000µF-al szűrni kell, ha ugyanarról megy a relé is! WDT-t csak akkor használj, ha már stabilan működik a program. Az nem arra való, hogy egy rossz áramkört megjavítson!
Köszönöm!
Tökéletes megoldás! Megy a dolog teljes siker
Csak az a kérdés, hogy mitől fagyott meg a pic, mert én még csak programhibából kifolyólag láttam leállni. Aminek jó a programja az kikapcsolt watchdoggal is probléma nélkül megy. Ezek nem pc-k, nem fagynak meg csak úgy maguktól.
Megvan a hiba oka....
Az történt, hogy amit fentebb leírtam kódrészletet az nem jó, ugyanis ha jön mondjuk 13 byte egyszerre akkor azt nem mindig olvassa ki, és néha marad anyag a bufferban, hogy miért...nem tudom... Szóval a lényeg hogy átírtam ilyenre ungigned char in[13]; ... getsUSART(in,13); (ez a parancs egy stringet olvas be) Szóval lényeg, hogy ez megoldotta a buffer beragadást..és mostmár nem fagy. Szóval köszönöm a segítségéet! De a watchdog jól jön.....már csak be kell állítanom hogy a számláló legalább 2 másodpercig fusson, de azt biztos megoldom valahogy.... Még 1x kösz! |
Bejelentkezés
Hirdetés |