Fórum témák

» Több friss téma
Fórum » MSP430 mikrovezérlők
 
Témaindító: gomzito, idő: Ápr 21, 2006
Témakörök:
Lapozás: OK   59 / 139
(#) gyengus válasza kissi hozzászólására (») Jún 2, 2012 /
 
Szia!

Én is így tudom. Viszont Szitko szerint megáll.
Majd lehet, kipróbálom
(#) szitko válasza gyengus hozzászólására (») Jún 2, 2012 /
 
Nem. Akkor rosszul fogalmaztam, vagyis rosszul írtam. Csak a debugg áll le!
(#) gyengus válasza szitko hozzászólására (») Jún 2, 2012 /
 
Így már értem.
Köszönöm!
(#) szitko hozzászólása Jún 2, 2012 /
 
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.
(#) icserny hozzászólása Jún 2, 2012 /
 
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.

main.c
    
(#) szitko hozzászólása Jún 3, 2012 /
 
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.
(#) szitko hozzászólása Jún 4, 2012 /
 
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.
(#) icserny válasza szitko hozzászólására (») Jún 4, 2012 /
 
Idézet:
„úgy vettem észre, hogy a megszakítási rutin, többször lefut egymás után, egy gombnyomás alkalmával.”
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.
(#) szitko válasza icserny hozzászólására (») Jún 4, 2012 /
 
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.
(#) idlob válasza szitko hozzászólására (») Jún 4, 2012 /
 
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.
(#) idlob hozzászólása Jún 4, 2012 /
 
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.:
  1. #pragma vector=PORT1_VECTOR
  2. __interrupt void PORT1_ISR(void)
  3. {
  4.     P1IES ^= BIT0;
  5.     P1IFG &= ~BIT0;
  6. }

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?
(#) szitko válasza idlob hozzászólására (») Jún 4, 2012 /
 
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.
(#) idlob válasza szitko hozzászólására (») Jún 4, 2012 /
 
Í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?
(#) szitko válasza idlob hozzászólására (») Jún 4, 2012 /
 
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.
(#) icserny válasza idlob hozzászólására (») Jún 4, 2012 / 1
 
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:
  1. P1IES = P1IN;
  2. P1IFG = 0;
  3. P1IE = 0xFF;

Természetesen maszkolni kell, ha nem akarsz minden bitet érzékenyíteni...
(#) kisedison hozzászólása Jún 4, 2012 /
 
Üdv mindenkinek!

Csak egy olyan kérdésem van hogy akkor a Launchpad szállítása ingyen van?
(#) icserny válasza kisedison hozzászólására (») Jún 4, 2012 /
 
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...
(#) kardexcsaba hozzászólása Jún 4, 2012 /
 
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.

LCD_MSP430.h
    
(#) szitko válasza kardexcsaba hozzászólására (») Jún 4, 2012 /
 
Ezeket nézd át. Itt megtalálod a választ.
(#) kisedison válasza icserny hozzászólására (») Jún 4, 2012 /
 
Oké. Köszönöm
(#) szitko hozzászólása Jún 4, 2012 /
 
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?
(#) kissi válasza szitko hozzászólására (») Jún 4, 2012 /
 
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
(#) idlob válasza szitko hozzászólására (») Jún 4, 2012 /
 
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?
(#) idlob válasza icserny hozzászólására (») Jún 4, 2012 /
 
Ravasz megoldás. Köszönöm!
(#) szitko válasza idlob hozzászólására (») Jún 4, 2012 /
 
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.
(#) kissi válasza szitko hozzászólására (») Jún 4, 2012 /
 
Idézet:

  1. P2IE |= BIT3;         // P2.3 megszakítás engedélyezése
  2. P2IFG &= ~BIT3;       // P2.3 flag törlése



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
(#) szitko válasza kissi hozzászólására (») Jún 4, 2012 /
 
Ez igaz, köszi az észrevételt, de sajnos a probléma ugyanúgy megmaradt.
(#) kissi válasza szitko hozzászólására (») Jún 4, 2012 /
 
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
(#) szitko válasza kissi hozzászólására (») Jún 4, 2012 /
 
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.

main.c
    
(#) kissi válasza szitko hozzászólására (») Jún 4, 2012 /
 
A PCF nem lenyomáskor és felengedéskor is küld megszakítást ( nem néztem meg!) ?

Steve
Következő: »»   59 / 139
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem