Fórum témák
» Több friss téma |
Szia!
Én is így tudom. Viszont Szitko szerint megáll. Majd lehet, kipróbálom
Nem. Akkor rosszul fogalmaztam, vagyis rosszul írtam. Csak a debugg áll le!
Az lehetséges, hogy a pcf8574-nél a megszakítás csak akkor működik, ha legalább egyszer már beolvastam a port tartalmát?
Mert nálam addig nem csinál semmit.
Hamut hintek a fejemre és elnézést kérek minden olvasómtól!
A 2. cikk mintapéldái közül a p1_3_change_state projekt forráskódja (main.c) hibás (valószínűleg valamelyik korábbi, javítatlan próbálkozás került be a csomagba). A csatolt mellékletben található a javított forráskód. Ebben már benne van a P1.3 bemenet belső felhúzásának bekapcsolása is, tehát az új kiadású (Rev 1.5) Launchpad kártyával is működik! Most egyébként épp azon dolgozom, hogy a korábbi mintaprogramokat aktualizáljam az új kiadású kártyához.
Sziasztok.
Végre sikerrel jártam a pcf8574-g2xx2 i2c vezérlésében. Ismét én voltam a figyelmetlen! Sikerült egy egyszerű 3x4-es bill.mátrix vezérlést is összehoznom, a fenti alkatrészekkel. (csatolva) Viszont lenne egy kérdésem. Hogy oldjam meg a prellmentesítést? Vagy kell-e, mert az i2c írás-olvasás, plusz a kiértékelés elég sok időt vesz igénybe. (de nem biztos, hogy mindíg 1Mhz-en lesz használva) Még igazából nem teszteltem, csak debugg módban lépésenként, a programot. Igaz a kapcsolás is csak dogdosós panelon van összegányolva.
Teszteltem a 3x4-es keypad vezérlést. (előző hsz.)
Szomorúan tapasztaltam, hogy a gombok pergésmentesítését meg kell oldani, de még nem jöttem rá, a hogyanra. (Jó lenne ha valaki tudna ebben segíteni.) A lényeg. A programot kis mértékben módosítottam, és úgy vettem észre, hogy a megszakítási rutin, többször lefut egymás után, egy gombnyomás alkalmával. Mivel a megszakítást lefutó élre állítottam be, nem hiszem/(tudom), hogy a felengedésre is reagálna. Próbáltam az i2c, rutinok után berakni egy 30ms-os várakozást, de nem vezetett eredményre. Idézet: Ezért nem érdemes megszakítást pergő nyomógombra tenni. Szerencsésebb volna bizonyos időközönként (pl. 20-30 ms-onként) mintavételezni a billentyűzet állapotát. „úgy vettem észre, hogy a megszakítási rutin, többször lefut egymás után, egy gombnyomás alkalmával.”
A megszakítást a pcf int lába okozza, az adatlapnak mefelelően. Én azt "hittem"/gondoltam, hogy az i2c írás/olvasás, gombkiértékelés, (megállapítás, hogy melyik gomb lett lenyomva) rutin elegendő időt vesz igénybe, ahoz, hogy ne vegye észre a pergést. De tévedtem. Mostmár viszont teljesen összezavar, mert hiába rakok a P2 flag törlése elé akármekkora késleltetést, mindenképpen többször fut le a megszakítás.
A SLAU144I FUG 339 oldalának alsó harmadában van a következő:
Idézet: „If any PxIFGx flag becomes set during a Px interrupt service routine, [...] the set PxIFGx flag generates another interrupt. This ensures that each transition is acknowledged.” Tehát az ISRben késleltethetsz bármennyit, akkor is újra meg fog hívódni.
Egyúttal én is kérdeznék, ugyancsak interruptról.
Nekem úgy tűnik, hogy a 430x2xx uC-k nem tudnak "pin change" interruptot generálni. Valóban nem sűrűn kell, de néha jól jönne. Áthidaló megoldásként működik az, hogy az ISR-ben megfordítom a detektálandó élet. Pl.:
Ezzel viszont az első váltást 50% eséllyel "elveszítem", ha az pont nem a kezdetben beállított irányú. Valóban jól látom, hogy nincs ilyen szolgáltatás, vagy csak figyelmetlen voltam? Ha nincs, van-e a fent említettnél jobb módszer?
De miért? A pcf8574 megszakítása, úgy működik, hogy ha bármely I/O lábon állapotválltozás van, akkor az "int" láb alacsony lesz. A uC megszakításban, először letiltom a P2 megszakítást, és a végén törlöm a flag-et is. Tehát ami a kettő között történik az nem befolyásolhatná. Vagy mégis? Ezért gondoltam, hogy rakok be késleltetést.
Így valóban nem kéne. Másik megszakításban nem módosítod P2IE bitjeit, ami itt összekócolhatja a dolgot?
A PCF-nek nem lebeg valamelyik lába? Idézet: „Másik megszakításban nem módosítod P2IE bitjeit,” Egyenlőre nem használok mást. Idézet: „A PCF-nek nem lebeg valamelyik lába?” De. Egy lába lebeg, de mielött kiértékelésre kerül a sor, még a flag törlése elött, visszaállítom kimenetre, ami ebben az esetben, szerintem nem szólhat bele. Ugyanis akkor, mindíg visszaugrálna a megszakításba. Idézet: „Ezzel viszont az első váltást 50% eséllyel "elveszítem", ha az pont nem a kezdetben beállított irányú.” Nincs akadálya annak, hogy a megszakítás engedélyezése előtt megnézd, hogy milyen állapotban vannak a bemenetek, s aszerint állítsd be az érzékenyítést. Például így:
Természetesen maszkolni kell, ha nem akarsz minden bitet érzékenyíteni...
Üdv mindenkinek!
Csak egy olyan kérdésem van hogy akkor a Launchpad szállítása ingyen van?
Kitöltöd a megrendelőt, s akkor a fizetés előtt meglátod, hogy 0 vagy sem a szállítási díj. Én csak azt tudom mondani, hogy nekem eddig nulla volt, de a jövőbe nem látok. Sajnos, vagy szerencsére...
Sziasztok.
Az alábbi belinkelt program segítségével sikerült megoldanom egy 16x2-es lcd kijelzőre kiíratnom egy szöveget. A bekötéshez használom a P1.2 -től P1.7 ig a lábakat. Mivel analóg jelek beolvasására szeretném használni ezeket a lábakat probáltam átírni az lcd kijelzőt P2.2 - P2.7 re. Amit a programon változtattam az csak annyi, hogy PIOUT és P1DIR helyett P2OUT és P2DIR raktam, de nem működik. Tudna valaki segíteni, hogy mi lehet a probléma? Köszönettel, Csaba.
Ezeket nézd át. Itt megtalálod a választ.
Na sikerült a végére járnom a bill.mátrix pergés ügynek, szkóppal, és minden féle egyéb műszerrel. Az eredmény, hogy jó volt az első gondolatom, hogy az i2c, és egyéb rutinok elegek a pergésmentesítésre. A baj a megszakításban van. Akármit csinálok, mindíg pontossan kétszer fut le, egy gomb megnyomásakor.
Ilyenkor mit lehet tenni?
Szia!
Anélkül, hogy használnám: ha nem tudod kikapcsolni a felesleges lefutást, akkor az egyikben ne csinálj semmit ( ha egy billentyű lenyomáshoz mindig két esemény tartozik, akkor ez megoldás, bár nem a legelegánsabb!)! Steve
Azt sikerült a mérések során kideríteni, hogy a PCF ad dupla megszakítás jelet, vagy az uC dupláz?
A P2IE-ben biztosan ki van maszkolva minden más lábról érkező megszakítás?
Nem érkezik más lábról megszakítás. Erről a programról van szó, egy az egyben. A megszakításban ,a bill. lekérdezésénél a pcf ki/be kapcsolgatja az int lábat, de elméletileg ezt nem vehetné figyelembe a uC. Vagy mégis? Hisz olyankor ki van kapcsolva a megszakítás. Már nem értem az egésszet.
A megszakításjelzőt miért az engedélyezés után törlöd? Ha közben jött INT, akkor ez már élni fog !? A megszakítás tiltása nem a megszakításkérés érzékelését tiltja ( legalábbis a PIC-nél, de más processzoroknál is úgy láttam, gondolom itt is !), hanem csak az elfogadását! Steve
Ez igaz, köszi az észrevételt, de sajnos a probléma ugyanúgy megmaradt.
Ne haragudj, ha esetleg hülyeséget írok, de nem használom még ezt a procit...
Nézve a programodat a következőt látom: a main függvényed szerintem mindig elölről indul újra, azaz megint konfigurálod a lábakat. Ez nem tud megszakítást okozni ( nincs ezért él az adott lábon?!) ?! Steve Idézet: „main függvényed szerintem mindig elölről indul újra” Csak akkor, ha az 5-ös gombot nyomom meg. De már átírtam egy kicsit, hogy lássam mit is csinál. Csatolom. A változás csak annyi, hogy másik lábon van a megszakítás figyelés (BIT4), és a P2.0-3-ra raktam ledeket.
A PCF nem lenyomáskor és felengedéskor is küld megszakítást ( nem néztem meg!) ?
Steve |
Bejelentkezés
Hirdetés |