Fórum témák
» Több friss téma |
Cikkek » WILL-I THE END (robotika és AVR kezdőknek) WILL-I THE END (robotika és AVR kezdőknek)
Szerző: Fizikus, idő: Máj 17, 2010, Olvasva: 30588, Oldal olvasási idő: kb. 4 perc
ATMega8 külső megszakítások beállítása Elég gyakori feladat azt vizsgálni, hogy egy adott I/O láb állapota mikor változik meg. Úgy is megírhatjuk a mikrovezérlő programját, hogy időközönként megvizsgálja egy láb állapotát, de az AVR-eknél megszakításokat is beállíthatunk. A megszakításokat arra használhatjuk hogy figyelmeztesse a mikrovezérlőn futó programot, hogy egy láb állapota megváltozott.
Az első dolgunk kideríteni, hogy az általunk használt mikrovezérlő milyen megszakításokkal rendelkezik. Ehhez meg kell nézni az Atmega8-as adatlapját: Látható, hogy az Atmega8-as két külső megszakítással rendelkezik (INT0 és INT1). Az adatlapot tanulmányozva azt is kideríthetjük, hogy a 4-es (PD2) és az 5-ös (PD3) lábak tartoznak az INT0-hoz és INT1-hez, ezek használhatóak külső megszakítás létrehozásához. A következő lépésben azt kell megtalálni, hogy az Atmega8 esetében melyik regiszter(ek) vezérlik a külső megszakításokat es a hozzájuk tartozó lábakat. A lábak négyfajta különböző állapotváltozása tud megszakítást kiváltani:
Az MCUCR regiszterben lehet beállitani, hogy a fenti állapotváltozások közül melyik aktiválja a megszakítást (INT0 esetén az ISC00 és ISC01, INT1 esetén pedig az ISC10 és ISC11 biteket kell beállitani a regiszteren belül). Mielőtt használni tudnánk a megszakításokat, előtte engedélyezni kell őket. Az Általános Megszakítás Vezérlő Regiszter (GICR) szabályozza hogy melyik megszakítás van engedélyezve (bekapcsolva). Egy adott megszakítás engedélyezéséhez a megfelelő bitet be kell állítani a GICR regiszterben, majd engedélyezni kell az általános megszakításokat a sei() makróval. Általános MegszakításJelző Regiszter (GICR). Ebben a regiszterben az adott külső megszkításhoz tartozó bit értékének 1-et adva a korábbi megszakítások törölhetőek (lásd később). A megszakítások használatának főbb lépései:
Az alábbi elméleti példa az INT0 külső megszakítás használatának főbb lépéseit mutatja be. Megszakítás akkor keletkezik, amikor a PD2-es láb állapota magasról alacsonyra vált (lefutó él esetén lesz megszakítás).
Először megadjuk, hogy melyik lábat (melyik külső megszakítást) fogjuk használni.
A kapcsolásunkat figyelembe véve (a nyomógombnál a belső felhúzóellenállás be van kapcsolva), egy lefutó élre aktivált megszakítást akarunk, ezért az ISC01 bitet kell beállítani. Ezután beállítjuk, hogy az adott láb lefutó élre adjon megszakítást.
Végül bekapcsoljuk a megszakítást
Már csak azt kell kinyomoznunk, hogy melyik megszakításvektor hívódik meg, amikor a külső megszakításkérelem érkezik. A különböző megszakítások elnevezéseit megtalálhatjuk a WINAVR dokumentációban a <avr/interrupt.h> fejlécfájra vonatkozó részben Amikor az adott megszakításkérelem érkezik, a mikrovezérlő a hozzá tartozó megszakítás kiszolgáló rutinban lévő utasítasokat hajtja végre. Egy megszakítás kiszolgáló rutint az ISR() makróval tudunk definiálni. A makróban a megszakítás nevét mint parmétert kell megadni. A kód törzsrésze tartalmazza magát az ISR kódot. Az INT0_vect jelzi, hogy ez a 0-ás külső megszakításhoz (INT0) tartozó ISR. Figyeljük meg hogy az ISR fejléc sehol máshol nincs deklarálva a programon belül.
Egy fontos dolgot említenék még meg a megszakításokkal kapcsolatban, egy ISR-nek a lehető leggyorsabbnak kell lennie. Sok mikrokontroller által végrehajtott feladatban kritikus az időzítés (például a soros kommunikáció), ha egy hosszú ISR rutint használunk és egy megszakítás kérelem érkezik amikor épp egy időzítésre érzékeny rutin végrehajtása történik, akkor a promramunk elszállhat. Ha nem tudjuk elkerülni, és mindenképpen hosszú ISR rutint vagyunk kénytelen használni, akkor megvédhetjük az időzítésre érzékeny programkódunkat, ha a megszakításokat letiltjuk a cli() utasítással a kritikus kód előtt, majd a megszakításokat újra engedélyezzük a sei() utasítással a kritikus kód után. Ezután a rövid elméleti összefoglaló után lássuk hogyan is kell a valóságban megvalósítani a megszakításokat. A cikk még nem ért véget, lapozz! Értékeléshez bejelentkezés szükséges! |
Bejelentkezés
Hirdetés |