Fórum témák
» Több friss téma |
Nem! Pont, hogy tiltani kell a BOR-t és nem engedélyezni!
Nem. Ha a RA5 digitális bemenet, a MCLR a chipen belül a Vdd -re van kötve. Nem árt a felhúzás, a programozási módba való véletlen belépés ellen.
Az a baj, hogy a Brown-out reset még mindig be van kapcsolva. Kódvédelem nélkül a konfigurációs szó jó értéke: 0x3F09
Ja hogy brown out ki kene kapcsolnom?0.0 Ha igen azt hittem azt on olni kell.
Sziasztok,
Megírtam életem első programját egy PIC16LF1825-re. MPLAB X-el szimuláltam, tökéletesen működik, viszont eléggé energia pocsékoló. Szeretnék megszakítást és sleep üzemmódot használni, de sajnos nem tudom hogyan tehetném! Nem másolom be a teljes programot, mert a kérdésemhez az felesleges, de a lényeg:
A program elindulásakor amíg "PORTAbits.RA4 & PORTAbits.RA5" feltétel nem teljesül, igazából semmit nem csinál, csak LATC regiszter értékét 0b00110000 bináris értéken tartja. "PORTAbits.RA4 & PORTAbits.RA5" feltétel teljesülését hogyan tudnám megoldani megszakítással? Amíg ez nem teljesül, mehetne a sleep üzemmód is, igaz? Köszönöm a segítséget! A hozzászólás módosítva: Máj 7, 2017
A4 és A5-os PIN-eket bemenetre kell állítanod és amikor ezen PIN-eken egyszerre van jelen magas szint, akkor fog lefutni a feltétel. (gomb, ...stb)
Kicsit részletesebb leírás kellene mit akarsz mert érthetetlen, egyelőre...
Szia,
Bemenetekre van állítva, és nem az a gondom, hogy nem működik, hanem hogyan tudnék beiktatni sleep üzemmódot a programba. Mert, ha elindul a program, belép a while végtelen függvénybe, és csak akkor megy tovább ha RA4 és RA5-re 1-es érkezik. De mire ez megérkezik eltelhet 6 óra hossza is, addig miért ne aludhatna...?
Meg kell nézni az adatlapban, hogy azokra a lábakra lehet-e IT-t beállítani. Ha lehet nyert ügyed van, csak beállítod és az első ciklus után mehet hajcsizni. Ha nem lehet akkor egy timert kell beállítani ami ha lejár, felébreszti a PIC-ket. Ébredés után ránézel a bemenetre ha még mindig semmi akkor hajcsi megint. A két ébredés közti idő lehet viszonylag nagy is, ha pl. gombról van szó mert csak annyit kell tenni, hogy hosszan kell lenyomva tartani. Persze ha mást figyelsz a bemenettel akkor az más tészta, de kivételesen egyetértek Péterrel, több infó kellene.
Igen ilyen működésre gondoltam!
Igazából RA4 és RA5-öt két schmitt trigger buffer vezérel (amit elvileg ezzel a PIC-el ki is válthatnék..? ) A buffereket nyitott drain kimenetű komparátorok kapcsolják, amiket áramgenerátoros feszültség referenciák kapcsolnak. Lehet inkább megkímélnék mindenkit, hogy pontosan mit is csinál, mert elmagyarázásban nem vagyok a legjobb Pontosan a beállításokkal van problémám, ezért ebben kérnék egy kis segítséget! Ha egyszer megértem és megtanulom akkor utána menni fog
Elméletileg be lehet állítani a PORTA-t, hogy változásra megszakítást generáljon, csak azt is meg kell nézni, hogy kiválasztható-e egy-egy lábra. Az adatlap 143. oldalától kezdődik a leírás, azt kell jó alaposan átrágni, értelmezni. Sajnos a te általad használd programnyelvhez én kuka vagyok, de majd a többiek talán mondanak valami okosat.
Be kell állítani a két bemenetre megszakítást (nem tudom, hogy ezekre lehet-e, nézz utána, max másik lábakat kell), ami felkelti a sleep-ből.
Az else ágban a LATC állítás után be kell rakni egy sleep-et. Aztán ha felébreszti az egyik bemenet változása, akkor az if részre ugrik, ott ha nem érvényes a feltétel, belép az else ágba, LATC.. majd sleep. Aztán ha jön változás ugyanez megint. Nem tudom ez a PIC sleep-ből hogy reagál a megszakításra (belép rögtön a megszakítás vektorra, vagy onnan folytatja, ahol volt a sleep, illetve az IT flag bitet törölni kell..). Ha ritkán van a lábakon változás, akkor már ezzel elég sokat lehet spórolni fogyasztás ügyileg, kezdésnek talán elég is lehet.
Ha valakinek van ideje letudná ellenörizni jöl gondolkottam köszönöm.
A müködése annyi inditáskor betöltöma 24 órát és 2 másodpercet és amikor elérjük a 24 órát akkor a kimarad bitet be billentem igy 2 secet nem add hozzá utánna pedig mindent vissza állítok. úgyfog müködni ahogy elgondoltam? A hozzászólás módosítva: Máj 7, 2017
Átrágom az adatlapot (mondjuk nem vagyok hozzá szokva a majd' 500 oldalas doksikhoz )
Megpróbálkozom megírni MPLAB-ban és leszimulálni, ha nem sikerül, akkor lehetséges (sőt igen valószínű), hogy zaklatlak még titeket.
Az adatlap 13. fejezetében lévő megszakítás kell Neked. Úgy néz ki, RA4 és RA5-re is lehet megszakítást beállítani. Lehet pozitív és negatív, ill. mindkét élet beállítani. Neked végülis elég a pozitív élet (tehát felfutót) beállítani mindkét lábra, az IOCAP regiszterben (IOCAP5 és IOCAP4 legyen 1). Ennek eredményeképp csak akkor fog feléledni a PIC az alvásból, ha bármelyik lábra felfutó él kerül.
Közben az még eszembe jutott, hogy ha a sleep-ből feléled a PIC a megszakításra, akkor utána a következő sleep-ig ki kell kapcsolni az IOC (Interrup On Change) megszakítást, különben mindig belépked a megszakítás címre (sleep előtt pedig engedélyezni). Illetve mielőtt elküldöd aludni a PIC-et, meg kell győződni róla, hogy tutira nincs magas szinten a két láb (szóval amíg kikapcsolod a megszakítást, nehogy jöjjön mindkét lábra egy felfutó..). A hozzászólás módosítva: Máj 8, 2017
Szia!
Sikerült beállítani. MPLAB-al a stimulus segítségével szimuláltam. Tökéletesen működik. Sőt a program egy másik részébe (ahol csak egy nyomógomb megnyomására vár) oda is implementáltam ezt a megoldást. Annyi kérdésem még lenne, hogy a "IOCAF: INTERRUPT-ON-CHANGE PORTA FLAG REGISTER" pontosan mire való? Ezt nem sikerült megfejtenem. Az adatlap 137. oldalán van az IOC blokk ábrája Ha beállítom 1-re az IOCAPx regisztert, akkor a D ff állapota RAx felfutó élére tárolja IOCAPx 1-esét. Ami a kapuzás után egy D ff-t aszinkron 1-be állít majd ez lesz a megszakítás. A Q4Q1 nem tudom mi lehet.. Az IOCAFx regiszterrel elvileg szintén lehetne megszakítást előidézni, de csak akkor ha a D ff nincs aszinkron 1-be állítva. Vagy teljesen félre értelmezem? A programomban van egy rész amivel azt érzékelem, hogy hosszan vagy röviden nyomták meg a gombot, ezt is szeretném lecserélni megszakítás alapúra .Ezt biztos nem úszom meg a Timer modul nélkül, bár még azt se használtam soha! Szóval én így oldottam meg:
Ennek milyen jobb megoldása lehet?
Most nézem a 127. oldalon lévű ábrát.
Elvileg ha az utolsó D ff is tárolta az 1-et, akkor az aszinkron resetbe állítja az egész fel-lefutó él figyelő D ff-kat, ha Q2 =1. Kicsit homály A hozzászólás módosítva: Máj 8, 2017
Az IOCAF regiszter kiolvasásával megtudhatod,mmely bite(ke)n történ jelváltás.
Bit 5..0: 1 = An enabled change was detected on the associated pin. Ebbe a regiszterbe való beírással lehet törölni az egyes (vagy csoportos) kéréseket. Csak andwf utasítással ajánlott törölni a már feldolgozott változás(ok)hoz tarozó bitet, hogy a végrehajtás alatt bejövő újabb változások ne vesszenek el.
Sziasztok!
Megint lenne egy problémám a pic-es hőmérővel, de nem tudok rájönni mi a baj. Lm35dz ic-vel csináltam. A pic típusa: 16f877a, a hőmérő IC az RA2 analóg bemenetre csatlakozik. Most olyan jellegű a problémám, hogy mutatja a hőmérsékletet helyesen, de ahogy el kezd nőni a hőmérséklet, úgy pl: 27 28 29 30, majd 31 foknál -31 re vált, nem 32-re, majd tovább -30, -29, -28.....és így tovább lefelé. Nem hiszem, hogy a kódban lenne a hiba, mert mutatja a hőmérsékletet korrektül, igazából a -28 fok, megfelel a 35 foknak. Szerintetek a hőmérő ic nyekkent meg a zsugorfoliázás és forrasztás alatt, vagy valami más, rejtett, általam nem felfedezett hiba van. Pl. gondoltam még arra, hogy lehet az a baj, hogy nincsenek a komparátorok kikapcsolva? Köszi a segítségeteket!
Nem lehet, hogy a programban valahol a hőmérséklet érték 6 biten van tárolva? Előjelesen? Csak akkor tudom elképzelni ezt a hibát. Nem hiszem, hogy a hőmérő IC a rossz, mert analog jelet ad ki. Programhiba lehet.
Mérj műszerrel is feszültséget az analóg lábon. Ha az stimmel, akkor a programban/konfigurációban van a hiba. Olyan ADC, amely negatív végeredményű is lehet, viszonylag kevés PIC-ben van a nyolc bitesek között. Ez a tény is a programhibát feltételezi.
6 bites (signed) változó lenne használva? A hozzászólás módosítva: Máj 8, 2017
A temp és a vartemp változód is előjeles egész (int), próbáld meg előjel nélküli egésszel.
Jó megfogom unsigned int-tel próbálni.
Csak az zavar, és ez válasz az előző hszónak is, hogy az inttostr() műveletben amibe konvertálok az 6 bites elvben.... Hiszen az lcd-n vmi ilyesmi látszik: [4 digit semmi, ezt eddig nem sikerült eltüntetni]25 és mikor minusz lesz, akkor a 2-es előtti digitben lesz a minusz. És mindig a fent leírt sorozatnál következik be... De helyes amúgy, mert kissé nevetséges, hogy a víz -(33-77) fokon forr.
De hogy miért pont +31 nél kattan be, az rejtély....
Sziasztok egyszerüen nem tudom miért de a 5. tömb sokkal fényesebb mint a többi. Legföképp akkor jön ki a dolog amikor 1ms re állítom a kirajzolást. Miért?? Vagy láttok benne hibát??
Mert előjeles ,és 6.bit az előjel. 5 biten 31 a maxi érték.Ha nem előjeles ,akkor 63-ig tudsz elmenni.
Így a felső bit az előjel: 31 = 0b011111 32 = -0? = 0b100000 33 = -31 = 0b100001 34 = -30 = 0b100010 A hozzászólás módosítva: Máj 8, 2017
Úgy látom, az 5. után nincs kikapcsolva a kijelzés, ezért a számítások idejével tovább világít. Hogy a multiplexben egyenletesek legyenek az idők, inkább fordítva csináld: betöltöd az értékeket, felvillantod egy adott ideig, majd betöltöd az új értékeket, az is adott ideig világít.
Nem úgy csináltam???
Betöltöm a szinten lévő "LEDEKET" 1.2..5 ig
tombol_rajz bent van egy forciklusom 1...5 ig ott megyek végig a tömbökön.
És esetleg van valami ötlet, hogyan tudnám 100 fokig ezt megnövelni?
Ugye azt 7 biten, ha előjel is számít akkor 8 biten lehet ábrázolni. long int? Vagy unsigned long int esetleg? És azt a "4 üres" karaktert, amit a inttostr() csinál, azzal mit lehet tenni hogy megszűnjön?
Gondolom az oszlopok()-ban engedélyezed, hogy melyik oszlop aktív. Ezt hol kapcsolod ki? Az első négyet a következő kirajzolás kikapcsolja, de az ötödiket mi kapcsolja ki? Én megfordítanám: kirakni a ledek állapotát 1-25-ig, majd adott szint bekapcsolása, várakozás (200us), kikapcsolás, új szint betöltés ....
|
Bejelentkezés
Hirdetés |