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: 30587, Oldal olvasási idő: kb. 2 perc
Lapozás: OK   1 / 8
Ebben a cikkben az ATmega8 külső megszakításaival foglalkozom. Példaként bemutatom, hogy hogyan használtam őket WILL-I robot végső verziójában.

Bevezetés

WILL-I fejlesztése során, ahogy tudásom egyre jobban gyarapodott az ATmega8 mikrovezérlővel kapcsolatban, a robotom is fokozatosan egyre bonyolultabb, és fejlettebb lett.  

  •  WILL-I V1.0: A legelső verzió csak vakon tapogatózott a karjain lévő 2 db mikrokapcsolóval, de a motorok vezérlése már PWM jellel történt.
  •  WILL-I V2.0: A második verzióban WILL-I az ADC-t felhasználva, egy Sharp infravörös távolságérzékelő szenzorral érzékelte a körülötte lévő tárgyakat. De csak akkor, ha a tárgy a keskeny IR sugárnyaláb útjába került. A szenzor a robot tetején lett elhelyezve és vízszintesen pásztázott, ezért az alacsonyabb akadályokat nem érzékelte (a karon lévő 2 mikrokapcsoló jeleit ekkor még nem használta a vezérlőprogram).
  •  WILL-I V3.0: A harmadik verzióban, a fenti hiányosságok kiküszöbölésére, a karokon lévő mikrokapcsolókat is felhasználjuk az akadályok érzékelésére. A kapcsolók ha beleütköznek valamibe, akkor külső megszakításokat fognak kelteni.

De nézzük is meg kicsit részletesebben, hogy mi is az a megszakítás, és mire is lesz ez jó nekünk!

A való életben legtöbbször a külvilággal kapcsolatban lévő mikrovezérlőnek, mielőtt végrehajtana egy feladatot, külső esemény(ek) bekövetkezésére kell várni (például egy gombnyomásra). Például tegyük fel, hogy egy nyomógomb, és egy LED van a mikrovezérlőre kötve, és az a feladat, hogy a LED-et a gombnyomással ki/be kapcsolgassuk. Ezt a feladat alapvetően kétféle módszerrel oldható meg.

  •  Az un. “polling” módszerrel
  •  Megszakítások használatával

Az un. “polling” módszer esetén a programban létrehozunk egy ciklust, amelyben a mikrovezérlő folyamatosan ellenőrzi a gomb állapotát, hogy le van-e nyomva, vagy nincs. Amennyiben a gomb le van nyomva, a mikrovezérlő végrehajtja az adott eseményhez tartozó feladatot (ki-/bekapcsolja a LED-et). Ennél a módszernél a mikrovezérlő folyamatosan egy aktív várakozó ciklust hajt végre amíg a gombnyomásra vár, és mással nem tud eközben foglalkozni, csak pazarolja a processzoridőt. Ez akkor kellemetlen amikor más, sok processzoridőt igénylő feladatot is szeretnénk végrehajtani eközben.


Mennyivel egyszerűbb lenne, ha a processzor végezné a számításokat, ahelyett hogy folyton a gombnyomásra figyelne, és a gomb szólna a mikrovezérlőnek, hogy kapcsolja be a LED-et ha gombnyomás történt.


Megszakítások használatakor pont ez történik. Amikor lenyomjuk a gombot, akkor az egy hardveresen generált jelet küld a mikrovezérlőnek, ami azonnal reagál erre a kérelemre, félbehagyja az éppen futó feladatot (ezért hívjuk megszakításnak), és végrehajtja a megszakítást kiszolgáló eljárást, majd visszatér a fő programhoz, és ott folytatja a félbehagyott feladat végrehajtását ahol abbahagyta. Megszakítások használatakor a processzor nem várakozik feleslegesen.


Megpróbálom egy példán keresztül kicsit érthetőbben szemléltetni a két módszer közötti különbséget.
   

Tegyük fel, hogy éppen kedvenc filmünket akarjuk otthon megnézni DVD-n. Tegyük fel azt is hogy éhesek is vagyunk, és rendeltünk egy pizzát.


Ha a pizzafutárt a “polling” módszerrel akarjuk beengedni, akkor az azt jelenti, hogy néhány percenként odamegyünk az ajtóhoz, kinyitjuk, és megnézzük hogy megjött-e már a pizzánk. Látható, hogy ilyenkor a folyamatos ajtónyitogatás mellett nem nagyon tudunk filmet nézni.


Ha megszakítások használatával akarjuk beengedni a pizzafutárt, akkor kényelmesen leülünk kedvenc fotelünkbe, és elkezdjük nézni a filmet. Ha a pizzafutár megérkezik, küld egy megszakítás kérelmet (becsenget), ekkor mi megállítjuk a filmet, és végrehajtjuk a megszakítást kiszolgáló utasításokat (kinyitjuk az ajtót, fizetünk és átvesszük a pizzát). Ha ezzel készen vagyunk, akkor folytathatjuk azt a tevékenységet amit a csengetés előtt végeztünk (mehetünk vissza filmet nézni, pontosan onnantól nézve tovább ahol megállítottuk).
 


A cikk még nem ért véget, lapozz!
Következő: »»   1 / 8
Értékeléshez bejelentkezés szükséges!
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