Fórum témák
» Több friss téma |
Szia!
A program szerint a nyomógomb csak az RB5-re lehet kötve, nem írtad, hogy nálad hol van. A megszakítás részben a flag bitek törlése nem a legszerencsésebb helyen van. Ha szimulátorba megnézed, jelen állapotban ha az RB5-re adott impulzus hatására a megszakítás területre megy a végrehajtás, nem tud belőle kilépni, mert a flag bitek törlését folyton átugorja. Ha a W és S visszaállítása elé teszed akkor már ki tud lépni.
Köszi a választ! Igen RB5-re van kötve a nyomógomb. Próbáltam ahogy írtad, de így sem akar úgy működni, ahogy szeretném. Úgy tűnik a szimulátor használatába is bele kell mélyednem, de nem tudom, hogy a nyomógomb pergésénél fellépő állapotváltozásokat hogyan lehetne szimulálni vele. Meg az egész megszakítást át kell gondolnom, hogy mikor milyen esemény következik be.
Megoldás lehet, hogy a nyomógomb lekérdezésekor kb,20 ciklus után megint lekérdezed, és ha azonos az érték, akkor elfogadva. Ellenben eldobva az adat.
Aztán még van egy pár módszer.. Megszakításban meg eleve necces gombokat figyelni sőt fölösleges, mert nem időkritikus. Megszakítás a pontos és fontos dolgoknak kell, a lehető legrövidebb programmal. üdv. Foxi A hozzászólás módosítva: Jan 9, 2015
Azt hiszem megtaláltam a hiba forrását. Az egyik, amit tegnap írtál, hogy volt a megszakításban olyan rész, amikor a kiváltó okot jelző flag törölése elmaradt. A másik pedig, hogy a kimenetként, amire a ledet kötöttem az RB0-t definiáltam, és úgy tűnik ez nem jó ötlet volt, mert egy másik portot használva már működik a dolog. Bár azt nem értem, hogy ez miért okoz hibát, mert ha az RB0/INT külső megszakítás nincs engedélyezve a programban, akkor hogyan idézhet elő mégis megszakítást? Esetleg úgy, hogy függetlenül, hogy engedélyezve van vagy nincs, az RB0 INT flag külső fel vagy lefutó él hatására mégis átállítódik, és ha ez éppen a megszakítási rutinban történt, kiválthat nem várt hatást?
Egyébként nem tökéletes még mindig a programom, mert a gomb felengedésekor is néha átvált a kimenet. Akkor azt mondod, ez a módszer, amit elgondoltam nem igazán alkalmas nyomógomb lekezelésére? Innen vettem egyébként az ötletet, bár ebben nem tér ki a prellmentesítére: Bővebben: Link Találtam itt egy régi hozzászólásban egy másfajta módszert, de nem igazán tudom ezt még értelmezni, nem olyan rég kezdtem el PIC-ekkel foglalkozni. Bővebben: Link
Valóban bebillennek a megszakítás kérő bitek, de ezek logikai és kapcsolatban vannak a megszakítás engedélyező regiszterekkel, tehát vizsgálhatóak, de nem okoznak megszakítást.
Például a timer túlcsordulás jelző is bebillen, de mégse okoz megszakítást.... Tehát ha az RB0 nincs engedélyezve, nem is okozhat megszakítást. A legjobb megoldás, hogy készítesz egy időzítő áramkört, és 1/10 másodpercenként hívod meg a gomb figyelést, és akkor csak 1x olvasod be és kész , nincs és nem is lehet prellezés.
Én mindig időzítőmegszakítás ütemezése szerint szoktam a gombokat lekérdezni. A következő példa egy óra két gombjának kezelése. Tudja értelmezni a rövid gombnyomást (felengedéskor), a hosszú gombnyomást, hosszú gombnyomáskor az ismétlést, a hosszú lenyomás végén a felengedést és végül mindezt a két gomb együttes lenyomásával együtt is.
A LED kijelző frissítési frekvenciájával hivogatva (100Hz) remekül működik.
Értem, köszi a segítséget. Kipróbálom ezt a módszert is.
De jó, pont azon gondolkoztam, hogy ezt a hosszú gombnyomás lekezelését hogyan is lehetne megvalósítani, mindenképpen kipróbálom, csak át kell állítanom ehhez az agyamat C nyelvre.
Köszi neked is! A hozzászólás módosítva: Jan 9, 2015
Üdv,
A switch operátor mire van? Ha valaki példán keresztül tudná bemutatni nekem megköszöném
Altalaban tobbszalu elagazas feldolgozasara hasznaljuk. Alljon itt egy pelda nyomogomb bemenetek lekezelesere.
Ebben az esetben a fvenyt meghivjuk egy valtozoval, ami pl egy port allapotat tukrozi. amennyiben az allapot valamelyik #define allapotat tukrozi, a hozza tartozo ertekkel ter vissza, amennyiben nem akkor >>0<< ertekkel. Fontos a break; utasitas amely megszakitja a tovabbi kiertekelest es kilep a fvenybol. Ellenkezo esetben vegigfut a tobbi reszen is. A hozzászólás módosítva: Jan 9, 2015
Na itten szepen le van irva (rajzolva).
A switch az utasitas, nem operator. Az operatorok azok a "muveleti jelek" mint pl. az osszeadas vagy kivonas.
Hello!
Szóval felmerült egy kérdés. Újra kell ahhoz programozni a kontrollert, hogy a config biteket módosítsd? Mert azt mondja az adatlap, hogy Idézet: Szóval akkor csak a Brown-out interface speciális és ezért nem lehet később újrakonfigurálni, vagy egyáltalán semmit sem tudunk újraprogramozás nélkül újrakonfigurálni (pl. watch dog)? „Placing the BOR under software control gives the user the additional flexibility of tailoring the application to its environment without having to reprogram the device to change BOR configuration.”
Egy PIC bármely programozható területén egy bit 1 értékről 0 értékre átprogramozható törlés nélkül. Vannak olyan típusok, ahol a konfigurációs szó tetszőleges más értékre is átírható. Ld DS70619A
Hogyha azt szeretném, hogy egy bemenet logikai 1ről 0ra váltson nyomógomb nélkül, konkrétan egy vezeték elvágásával, akkor hogy lenne célszerű bekötni?
A vezeték egyik vége egy port lábára, a másik vége a Vss -re van kötve. A port lába fel van húzva a Vdd feszültsége külső vagy belső ellenállással (Internal weak pullup). Alapállapotban a lábról alacsony szint olvasható, ha elszakad a vezeték a láb magas szintre kerül a felhúzó ellenállás miatt.
A hozzászólás módosítva: Jan 11, 2015
Fordítva akarja 1-->0, pedig így egyszerűbben/kevesebb alkatrésszel megoldható lett volna !
csiberaptor: A vezetéket + 5V-ra kötöd és a lábhoz teszel egy lehúzó ellenállást ( pl. 4k7 ). Amíg a vezeték él, addid 5V van a lábon, ha elvágod, akkor 0 V lesz! A hozzászólás módosítva: Jan 11, 2015
kissi leírása lerajzolva.
Köszönöm szépen mindkettőtöknek.
Sziasztok !
Tulajdonképpen vicsys oktató videójához (gong hang előállító áramkör) lenne pár kérdésem. setup_timer_2(T2_DIV_BY_16,236,1); //1,8 ms overflow, 1,8 ms interrupt Itt a timernél hogy jön ki az 1,8 ms-um (tudom, hogy ez kb 528 Hz 1/528Hz az 1.8ms) de ebből ez miként következik: T2_DIV_BY_16,236,1 setup_ccp1(CCP_PWM); set_pwm1_duty((int16)472);//528Hz Itt hogy lett beállítva , hogy 50 százalék lett a kitöltési tényező ? (4 Mhz/16/472=528 Hz ez így ok ? ) A 4 Mhz a pic órajele. Ha mondjuk 10 százalékos kitöltési tényezőt szeretnék akkor hogy fog ez kinézni ? Köszi
Egy kis segítség: Töltsd le a projektet és kukkants bele a main.h fájlba. Láthatod, hogy már 8MHz a belső órajel. Ha a varázslót használod, van beépített kis számító része, amivel egyszerű méretezni. A képlet is ott van, ha később változtatni kell és újraszámolni.
Sziasztok!
Van egy PICkit 3-am és próbálom rávenni, hogy tápfeszültségként adjon ki 5 V-ot, de csak 4.85 V van rajta (mikor mind a két láb szabadon lóg, nincs bekötve sehová). Leellenőriztem az USB tápfeszültséget is, de az OK (5.03 V) és ez egy USB 3.0-ás power port szóval 1 A-t simán le tud adni. Van valami ötletetek, hogy mi a gebasz?
Azt nem tudom, hogy a PK3-nál is van-e teszt lehetőség. Ha igen, érdemes lenne lefuttatni.
Nem nincsen, nem találtam semmit...
A belső kapcsoló elemein (tranzisztor, FET ) esik ez a feszültség. Szerintem nincs semmi baja.
Eredeti Microchip?
igen
Ha megpróbálom 5.5 V-ra állítani, akkor is csak 4+ V-ot ad és beszól, hogy
Idézet: „PICkit 3 is trying to supply 5.500000 volts from the USB port, but the target VDD is measured to be 4.875000 volts. This could be due to the USB port power capabilities or the target circuitry affecting the measured VDD.” +, ha csatlakoztatom a PIC-hez, akkor az 5 V-os beállításnál is siránkozik, hogy nem tudja kiadni a megfelelő feszkót. A hozzászólás módosítva: Jan 11, 2015
|
Bejelentkezés
Hirdetés |