- Typy prerušenia
- Prerušuje Arduino
- Používanie prerušení v Arduine
- Súčasti sú povinné
- Schéma zapojenia
- Programovanie prerušenia Arduino
- Demonštrácia prerušenia Arduina
Zvážte rýchlo sa pohybujúce auto, ak ho náhle zrazí iné auto v protismere, prvá vec, ktorá sa stane, je to, že senzor akcelerometra prítomný vo vozidle zaznamená náhle spomalenie a spustí externé prerušenie mikrokontroléra prítomného v auto. Na základe tohto prerušenia potom mikrokontrolér vydá elektrický signál na okamžité aktivovanie airbagov. Mikrokontroléry prítomné vo vozidle monitorujú veľa vecí súčasne, napríklad snímanie rýchlosti vozidla, kontrolu ďalších senzorov, kontrolu teploty klimatizácie atď. Čo teda spôsobí náhle otvorenie airbagu za niekoľko sekúnd? Odpoveďou sú prerušenia, tu sa použije signál prerušenia, ktorý má zo všetkých najvyššiu prioritu.
Ďalším jednoduchým príkladom prerušenia sú mobilné telefóny s dotykovou obrazovkou, ktoré majú najvyššiu prioritu v zmysle „Touch“. Takmer každé elektronické zariadenie má nejaký druh prerušenia, aby „prerušilo“ bežný proces a urobilo niečo s vyššou prioritou pri konkrétnej udalosti. Pravidelný proces je obnovený po podaní prerušenia.
Technicky je teda prerušenie mechanizmom, pomocou ktorého môže I / O alebo inštrukcia pozastaviť bežné vykonávanie procesora a nechať sa obsluhovať, akoby mal vyššiu prioritu. Napríklad procesor vykonávajúci normálne vykonávanie môže byť prerušený niektorým snímačom na vykonanie konkrétneho procesu, ktorý je prítomný v ISR (Interrupt Service Routine). Po vykonaní môže procesor ISR opäť pokračovať v normálnom vykonávaní.
Typy prerušenia
Existujú dva typy prerušenia:
Prerušenie hardvéru: Stáva sa to, keď dôjde k externej udalosti, keď kolík externého prerušenia zmení svoj stav z LOW na HIGH alebo HIGH na LOW.
Prerušenie softvéru: Deje sa to podľa pokynov zo softvéru. Napríklad prerušenia časovača sú softvérové prerušenia.
Prerušuje Arduino
Teraz uvidíme, ako používať prerušenia v Arduino Board. Má dva typy prerušenia:
- Externé prerušenie
- Prerušenie zmeny PIN
Externé prerušenie:
Tieto prerušenia sú interpretované hardvérom a sú veľmi rýchle. Tieto prerušenia je možné nastaviť tak, aby sa spúšťali pri úrovniach RISING alebo FALLING alebo LOW.
Doska Arduino |
Kolíky externého prerušenia: |
UNO, NANO |
2,3 |
Mega |
2,3,18,19,20,21 |
Prerušenie výmeny PIN:
Arduinos môže mať povolených viac pinov prerušenia pomocou prerušenia výmeny pinov. Na doskách Arduino založených na ATmega168 / 328 môžu byť ako prerušovacie piny použité akékoľvek piny alebo všetkých 20 signálnych pinov. Môžu byť tiež spustené pomocou RISING alebo FALLING edge.
Používanie prerušení v Arduine
Aby bolo možné v Arduine používať prerušenia, je potrebné porozumieť nasledujúcim konceptom.
Rutina prerušenia služby (ISR)
Rutina prerušenia služby alebo obsluha prerušenia je udalosť, ktorá obsahuje malý súbor pokynov. Keď dôjde k externému prerušeniu, procesor najskôr vykoná tento kód, ktorý je prítomný v ISR, a vráti sa späť do stavu, v ktorom opustil normálne vykonanie.
ISR má v Arduine nasledujúcu syntax:
attachInterrupt (digitalPinToInterrupt (pin), ISR, režim);
digitalPinToInterrupt (pin): V Arduino Uno, NANO, piny použité na prerušenie sú 2,3 & v mega 2,3,18,19,20,21. Tu zadajte vstupný pin, ktorý sa použije na externé prerušenie.
ISR: Je to funkcia, ktorá sa volá, keď sa vykoná externé prerušenie.
Režim: Typ prechodu, pri ktorom sa má spúšťať, napr. Klesanie, stúpanie atď.
- RISING: Na spustenie prerušenia, keď sa kolík prepne z LOW na HIGH.
- PÁD: Na spustenie prerušenia pri prechode kolíka z HIGH na LOW.
- ZMENA: Spustí prerušenie, keď sa kolík prepne z LOW na HIGH alebo HIGH na LOW (tj. Keď sa zmení stav kolíka).
Niektoré podmienky pri používaní prerušenia
- Funkcia prerušenia servisnej rutiny (ISR) musí byť čo najkratšia.
- Funkcia Delay () vo vnútri ISR nefunguje a je potrebné sa jej vyhnúť.
V tomto výukovom programe Arduino Interrupt sa číslo zvýši od 0 a na spustenie prerušenia sa používajú dve tlačidlá, každé z nich je pripojené k D2 a D3. LED dióda sa používa na indikáciu prerušenia. Ak je stlačené jedno tlačidlo, LED dióda zhasne a na displeji sa zobrazí prerušenie 2 a zhasne. Po stlačení iného tlačidla LED zhasne a na displeji sa zobrazí prerušenie 1 a zhasne.
Súčasti sú povinné
- Doska Arduino (V tomto výučbe sa používa Arduino NANO)
- Tlačidlo - 2
- LED - 1
- Rezistor (10K) - 2
- LCD (16x2) - 1
- Chlebová doska
- Pripojenie drôtov
Schéma zapojenia
Okruhové spojenie medzi Arduino Nano a 16x2 LCD displejom:
LCD |
Arduino Nano |
VSS |
GND |
VDD |
+ 5V |
V0 |
Na stredový PIN potenciometra Na kontrolu kontrastu LCD |
RS |
D7 |
RW |
GND |
E |
D8 |
D4 |
D9 |
D5 |
D10 |
D6 |
D11 |
D7 |
D12 |
A |
+ 5V |
K |
GND |
Dve tlačidlá sú pripojené k Arduino Nano na pinoch D2 a D3. Používajú sa na použitie dvoch externých prerušení, jedného na zapnutie LED a druhého na vypnutie LED. Každé tlačidlo má sťahovací rezistor 10k pripojený k zemi. Takže keď je stlačené tlačidlo, je logické HIGH (1) a keď nie je stlačené, je logické LOW (0). Pull down rezistor je povinný, inak na vstupnom kolíku D2 a D3 budú pohyblivé hodnoty.
LED sa tiež používa na označenie, že prerušenie bolo spustené alebo bolo stlačené tlačidlo.
Programovanie prerušenia Arduino
V tomto tutoriáli sa číslo zvyšuje od 0, ktoré sa nepretržite zobrazuje na (16x2) LCD pripojenom k Arduino Nano, kedykoľvek je stlačené ľavé tlačidlo (prerušovací kolík D3), LED sa rozsvieti a na displeji sa zobrazí prerušenie2, a keď pravé tlačidlo (pin prerušenia D2), LED zhasne a na displeji sa zobrazí prerušenie1.
Kompletný kód s pracovným videom je uvedený na konci tohto tutoriálu.
1. Najprv je zahrnutý hlavičkový súbor pre LCD displej a potom sú definované kolíky LCD, ktoré sa používajú pri pripojení k Arduino Nano.
#include
2. Vo vnútri funkcie void setup () najskôr zobrazte úvodnú správu na LCD displeji. Viac informácií o prepojení LCD s Arduino sa dozviete tu.
lcd.začiatok (16,2); lcd.setCursor (0,0); lcd.print ("OKRUH DIGEST"); lcd.setCursor (0,1); lcd.print ("ArduinoInterrupt"); oneskorenie (3 000); lcd.clear ();
3. Potom v rovnakej funkcii void setup () musia byť zadané vstupné a výstupné piny. Pin D13 je pripojený k anóde LED, takže tento pin musí byť definovaný ako výstup.
pinMode (13, VÝSTUP);
4. Teraz prichádza k najdôležitejšej časti programovania, ktorou je funkcia attachInterrupt (), ktorá je tiež zahrnutá do void setup ().
attachInterrupt (digitalPinToInterrupt (2), buttonPressed1, RISING); attachInterrupt (digitalPinToInterrupt (3), buttonPressed2, RISING);
Tu je určené, že pin 2 je určený na externé prerušenie a funkcia buttonPressed1 sa vyvolá, keď je na kolíku D2 RISING (LOW to HIGH). A pin 3 je tiež na externé prerušenie a funkcia buttonPressed2 sa vyvolá, keď je na kolíku D3 RISING.
5. Vo vnútri prázdnej slučky () sa číslo (i) zvýši od nuly a vytlačí sa na LCD (16x2).
lcd.clear (); lcd.print ("POČÍTAČ:"); lcd.print (i); ++ i; oneskorenie (1 000);
V rovnakej prázdnej slučke () sa používa digitalWrite () na kolíku D13, kde je pripojená anóda LED. V závislosti na hodnote premenlivého výstupu sa LED rozsvietia alebo zhasnú
digitalWrite (13, výstup);
6. Najdôležitejšou časťou je vytvorenie funkcie obsluhy prerušenia podľa názvu, ktorý sa používa vo funkcii attachInterrupt () .
Pretože sa používajú dva prerušovacie piny 2 a 3, sú potrebné dva ISR. Tu sa v tomto programovaní používajú nasledujúce ISR
buttonPressed1 ():
void buttonPressed1 () { output = LOW; lcd.setCursor (0,1); lcd.print („Prerušiť 1“); }
Táto funkcia sa vykoná po stlačení tlačidla na kolíku D2 (RISING EDGE). Táto funkcia zmení stav výstupu na LOW, čo spôsobí zhasnutie LED a vytlačí „prerušenie 1“ na LCD displeji.
buttonPressed2 ():
void buttonPressed2 () {výstup = VYSOKÝ; lcd.setCursor (0,1); lcd.print ("Prerušenie2"); }
Táto funkcia sa vykoná po stlačení tlačidla na kolíku D3. Táto funkcia zmení stav výstupu na VYSOKÝ, čo spôsobí rozsvietenie LED a vytlačí „prerušenie2“ na LCD displeji.
Demonštrácia prerušenia Arduina
1. Po stlačení PUSH TLAČIDLA na ľavej strane sa LED rozsvieti a na LCD displeji sa zobrazí Interrupt2.
2. Po stlačení PUSH TLAČIDLA na pravej strane LED zhasne a na LCD displeji sa zobrazí Interrupt1
Takto môže byť prerušenie užitočné na spustenie akejkoľvek dôležitej úlohy medzi normálnym vykonaním.