- Megszakítások típusai
- Arduino-ban félbeszakít
- Megszakítások használata Arduino-ban
- Szükséges alkatrészek
- Kördiagramm
- Arduino megszakító programozás
- Arduino megszakító demonstráció
Vegyünk egy gyorsan mozgó autót, ha hirtelen egy másik autó ütközik vele ellentétes irányban, az első dolog az történik, hogy az autóban lévő gyorsulásmérő érzékelő hirtelen gyorsulást érzékel, és külső megszakítást indít el a mikrovezérlőben. az autó. Ezután a megszakítás alapján a mikrovezérlő elektromos jelet ad a légzsákok azonnal kioldására. Az autóban jelen lévő mikrovezérlők sok mindent egyszerre figyelnek, például az autó sebességének érzékelését, más érzékelők ellenőrzését, a légkondicionáló hőmérsékletének szabályozását stb. Tehát mi okozza a légzsák hirtelen nyitását másodpercek alatt? A válasz megszakítás, itt egy megszakítási jelet használunk, amely az összes közül a legfontosabb.
A megszakítások másik egyszerű példája az érintőképernyős mobiltelefon, amely a „Touch” értelemben a legfontosabb. Szinte minden elektronikus eszköz rendelkezik valamilyen megszakítással, hogy „megszakítsa” a rendszeres folyamatot, és magasabb prioritású dolgokat végezzen egy adott eseményen. A rendszeres folyamat a megszakítás kiszolgálása után folytatódik.
Tehát technikailag a megszakítás egy olyan mechanizmus, amellyel az I / O vagy az utasítás felfüggesztheti a processzor normál végrehajtását, és úgy szervizeli magát, mintha nagyobb prioritású lenne. Például egy normál végrehajtást végző processzort megszakíthat néhány érzékelő egy adott folyamat végrehajtásához, amely jelen van az ISR-ben (Interrupt Service Routine). Futtatás után az ISR processzor újra folytathatja a normál végrehajtást.
Megszakítások típusai
Kétféle megszakítás létezik:
Hardver megszakítás: Akkor fordul elő, amikor egy külső esemény úgy történik, hogy egy külső megszakító tű megváltoztatja az állapotát LOW-ról HIGH-ra vagy HIGH-ról LOW-ra.
Szoftver megszakítása: A szoftver utasításai szerint történik. Az időzítő megszakítások például szoftveres megszakítások.
Arduino-ban félbeszakít
Most meglátjuk, hogyan kell használni a megszakításokat az Arduino Board-ban. Kétféle megszakítással rendelkezik:
- Külső megszakítás
- Pin Change Interrupt
Külső megszakítás:
Ezeket a megszakításokat a hardver értelmezi és nagyon gyorsak. Ezeket a megszakításokat be lehet állítani, hogy aktiválódjanak FELEMELŐ, BUKÁS vagy LOW szintek esetén.
Arduino Board |
Külső megszakító csapok: |
UNO, NANO |
2,3 |
Mega |
2,3,18,19,20,21 |
Tűcsere megszakítások:
Arduinos is több megszakítás csapok engedélyezett felhasználásával pin változás megszakítások. Az ATmega168 / 328 alapú Arduino táblákban bármelyik érintkező vagy mind a 20 jelzőtű megszakító csapként használható. Ezeket RISING vagy FALLING élek segítségével is kiválthatják.
Megszakítások használata Arduino-ban
A megszakítások Arduino alkalmazásához a következő fogalmakat kell megérteni.
Szolgáltatás megszakítása (ISR)
A megszakító szolgáltatás rutin vagy a megszakítás kezelő olyan esemény, amelyben kis utasítások vannak. Külső megszakítás esetén a processzor először végrehajtja ezeket az ISR-ben található kódokat, és visszatér arra az állapotra, ahol a normál végrehajtást elhagyta.
Az ISR a következő szintaxissal rendelkezik az Arduino-ban:
attachInterrupt (digitalPinToInterrupt (pin), ISR, mód);
digitalPinToInterrupt (pin): Az Arduino Uno NANO-ban a megszakításhoz használt csapok 2,3 és mega 2,3,18,19,20,21. Itt adja meg a külső megszakításhoz használt bemeneti tűt.
ISR: Ez egy olyan függvény, amelyet akkor hívnak meg, ha külső megszakítást hajtanak végre.
Mód: A bekapcsoláshoz szükséges átmenet típusa, pl. Leesés, emelkedés stb.
- RISING: Megszakítás kiváltására, amikor a csap a LOW-ról HIGH-ra vált
- FALLING: Megszakítás kiváltására, amikor a csap a HIGH-ról LOW-ra vált
- VÁLTOZÁS: Megszakítás kiváltására, amikor a csap átmegy a LOW-ról HIGH-ra vagy HIGH-ról LOW-ra (azaz amikor a pin állapota megváltozik).
Néhány feltétel az Interrupt használata közben
- A szolgáltatás megszakításának rutin funkciójának (ISR) a lehető legrövidebbnek kell lennie.
- A késleltetés () függvény nem működik az ISR-en belül, ezért kerülni kell.
Ebben az Arduino Interrupt oktatóanyagban egy számot 0-tól növekszenek, és két nyomógombot használnak a megszakítás kiváltására, mindegyik a D2 és D3-hoz csatlakozik. A megszakítás jelzésére LED-et használnak. Ha megnyomja az egyik nyomógombot, a led bekapcsol, és a kijelzőn a megszakítás2 látható és kialszik, egy másik nyomógomb megnyomásakor pedig a LED kikapcsol, a kijelzőn pedig a megszakítás1 és kialszik.
Szükséges alkatrészek
- Arduino Board (Ebben az oktatóanyagban az Arduino NANO-t használják)
- Nyomógomb - 2
- LED - 1
- Ellenállás (10K) - 2
- LCD (16x2) - 1
- Kenyérlap
- Vezetékek csatlakoztatása
Kördiagramm
Áramköri kapcsolat az Arduino Nano és a 16x2 LCD kijelző között:
LCD |
Arduino Nano |
VSS |
GND |
VDD |
+ 5V |
V0 |
A potenciométer középső PIN-kódjához Az LCD kontrasztjának szabályozásához |
RS |
D7 |
RW |
GND |
E |
D8 |
D4 |
D9 |
D5 |
D10 |
D6 |
D11 |
D7 |
D12 |
A |
+ 5V |
K |
GND |
Két nyomógomb csatlakozik az Arduino Nano-hoz a D2 és D3 csapoknál. Két külső megszakító használatára szolgálnak, az egyik a LED bekapcsolására, a másik pedig a LED kikapcsolására. Minden nyomógombnak van egy 10k lehúzási ellenállása, amely a földhöz csatlakozik. Tehát a nyomógomb megnyomásakor a logika HIGH (1), és ha nem nyomja meg, akkor logika LOW (0). A lehúzható ellenállás kötelező, különben lebegő értékek lesznek a D2 és D3 bemeneti csapoknál.
A LED-et arra is használják, hogy jelezzék, hogy megszakítás indult vagy egy gombot megnyomtak.
Arduino megszakító programozás
Ebben az oktatóanyagban 0-tól növekszik egy szám, amely folyamatosan jelenik meg az Arduino Nano-hoz csatlakoztatott (16x2) LCD-ben, amikor a bal oldali nyomógombot (D3 megszakító csap) lenyomják, a LED bekapcsol és a kijelzőn az Interrupt2 jelenik meg, valamint a jobb oldali nyomógomb (a D2 megszakító tűt) megnyomva a LED kialszik és a kijelzőn az Interrupt1 felirat látható.
A teljes kód egy működő videóval az oktatóanyag végén található.
1. Először tartalmazza az LCD-kijelző fejlécfájlját, majd meghatározza azokat az LCD-érintkezőket, amelyeket az Arduino Nano-hoz használnak.
#include
2. A void setup () funkcióban először jelenítsen meg néhány bevezető üzenetet az LCD kijelzőn. Itt többet tudhat meg az LCD és az Arduino összekapcsolásáról.
lcdbegin (16,2); lcd.setCursor (0,0); lcd.print ("CIRCUIT DIGEST"); lcd.setCursor (0,1); lcd.print ("ArduinoInterrupt"); késés (3000); lcd.clear ();
3. Ezután ugyanabban a void setup () funkcióban meg kell adni a bemeneti és kimeneti csapokat. A D13 tű csatlakozik a LED anódjához, ezért ezt a csapot kimenetként kell meghatározni.
pinMode (13, OUTPUT);
4. Most a programozás legfontosabb része az attachInterrup () függvény, amely szintén a void setup () részén található.
attachInterrupt (digitalPinToInterrupt (2), buttonPressed1, RISING); attachInterrupt (digitalPinToInterrupt (3), buttonPressed2, RISING);
Itt van megadva, hogy a 2-es érintkező külső megszakításra szolgál, és a buttonPressed1 funkció meghívásra kerül, ha a D2-es tűn RISING (LOW to HIGH) van. És a 3. érintkező a külső megszakításra is szolgál, és a buttonPressed2 funkciót hívják meg, ha a D3 tűnél RISING van.
5. Az üreges hurokban () egy számot (i) nullától növekszünk, és az LCD-re (16x2) nyomtatjuk.
lcd.clear (); lcd.print ("SZÁM:"); lcd.print (i); ++ i; késés (1000);
Ugyanebben az üreges hurokban () a digitalWrite () elemet használják a D13 csapra, ahol a LED anódja van csatlakoztatva. A változó kimenet értékétől függően a LED be- vagy kikapcsol
digitalWrite (13, kimenet);
6. A legfontosabb rész egy megszakításkezelő függvény létrehozása az attachInterrupt () függvényben használt név szerint.
Mivel két megszakítócsapot használunk 2 és 3, ezért két ISR szükséges. Ebben a programozásban itt a következő ISR-t használják
buttonPressed1 ():
void buttonPressed1 () { output = LOW; lcd.setCursor (0,1); lcd.print ("1. megszakítás"); }
Ez a funkció akkor működik, amikor a D2 csapon lévő nyomógombot megnyomják (RISING EDGE). Ez a funkció megváltoztatja a kimenet állapotát LOW-ra, aminek következtében a LED kikapcsol, és kinyomtatja az LCD-kijelzőn a „megszakítás1” -t.
buttonPressed2 ():
void buttonPressed2 () {output = HIGH; lcd.setCursor (0,1); lcd.print ("Megszakítás2"); }
Ez a funkció akkor működik, amikor a D3 csapon lévő nyomógombot megnyomják. Ez a funkció megváltoztatja a kimenet állapotát HIGH-ra, ami a LED-ek bekapcsolását eredményezi, és kinyomtatja az LCD-kijelzőn a „megszakítás2” -t.
Arduino megszakító demonstráció
1. A baloldali PUSH GOMB megnyomásakor a LED kigyullad, és az LCD kijelzőn a Interrupt2 felirat látható.
2. A jobb oldali PUSH GOMB megnyomásakor a LED kialszik, és az LCD kijelzőn megszakítás1 látható
Így hasznos lehet a megszakítás bármely fontos feladat kiváltásához a normál végrehajtás között.