- Vrste prekinitev
- Prekinitve v Arduinu
- Uporaba prekinitev v Arduinu
- Potrebne komponente
- Shema vezja
- Programiranje prekinitev Arduino
- Demonstracija prekinitve Arduino
Razmislite o hitro premikajočem se avtomobilu. Če ga nenadoma udari drug avto v nasprotni smeri, se najprej zgodi, da senzor merilnika pospeška, prisoten v avtomobilu, zazna nenaden pospešek in sproži zunanjo prekinitev mikrokrmilnika, ki je prisoten v avto. Nato na podlagi te prekinitve mikrokrmilnik proizvede električni signal za takojšnjo sprožitev zračnih blazin. Mikrokrmilniki, ki so prisotni v avtomobilu, hkrati spremljajo številne stvari, na primer zaznavanje hitrosti avtomobila, preverjanje drugih senzorjev, nadzor temperature klimatske naprave itd. Kaj torej nenadoma odpre zračno blazino v nekaj sekundah? Odgovor so prekinitve, tukaj je uporabljen prekinitveni signal, ki ima največjo prednost od vseh.
Drug preprost primer motenj so mobilni telefoni z zaslonom na dotik, ki imajo največjo prednost občutka za dotik. Skoraj vsaka elektronska naprava ima neke vrste prekinitve, da 'prekine' redni postopek in na določenem dogodku opravi nekaj bolj prioritetnih stvari. Redni postopek se nadaljuje po vročitvi prekinitve.
Tehnično je torej prekinitev mehanizem, s katerim lahko V / I ali ukaz ustavi normalno izvajanje procesorja in se servisira, kot da ima višjo prioriteto. Na primer, procesor, ki izvaja normalno izvajanje, lahko prekine neki senzor za izvajanje določenega procesa, ki je prisoten v ISR (Interrupt Service Routine). Po izvedbi procesorja ISR lahko spet nadaljuje normalno izvajanje.
Vrste prekinitev
Obstajata dve vrsti prekinitev:
Strojna prekinitev: zgodi se, ko pride do zunanjega dogodka, ko zunanji prekinitveni zatič spremeni svoje stanje iz LOW v HIGH ali HIGH v LOW.
Prekinitev programske opreme: zgodi se v skladu z navodili programske opreme. Na primer prekinitve s časovnikom so programske prekinitve.
Prekinitve v Arduinu
Zdaj bomo videli, kako uporabljati prekinitve v Arduino Board. Ima dve vrsti prekinitev:
- Zunanja prekinitev
- Prekinitev pri spreminjanju pinov
Zunanja prekinitev:
Te prekinitve razlaga strojna oprema in so zelo hitre. Te prekinitve lahko nastavite tako, da se sprožijo v primeru RISING ali FALLING ali LOW.
Arduino Board |
Zunanji prekinitveni zatiči: |
UNO, NANO |
2,3 |
Mega |
2,3,18,19,20,21 |
Prekinitve spreminjanja pripenjanja:
Arduinosi imajo lahko več prekinjevalnih nožic z uporabo prekinitev zamenjave nožic. Na ploščah Arduino, ki temeljijo na ATmega168 / 328, lahko kateri koli zatič ali vseh 20 signalnih zatičev uporabite kot prekinitveni zatiči. Sprožijo jih lahko tudi z RISING ali FALLING robovi.
Uporaba prekinitev v Arduinu
Za uporabo prekinitev v Arduinu je treba razumeti naslednje koncepte.
Rutinska storitev prekinitve (ISR)
Rutina storitve prekinitev ali obdelovalec prekinitev je dogodek, ki vsebuje majhen nabor navodil. Ko pride do zunanje prekinitve, procesor najprej izvrši to kodo, ki je prisotna v ISR, in se vrne v stanje, kjer je zapustil normalno izvajanje.
ISR ima v Arduinu naslednjo sintakso:
attachInterrupt (digitalPinToInterrupt (pin), ISR, način);
digitalPinToInterrupt (pin): V Arduino Uno, NANO so nožice, ki se uporabljajo za prekinitev, 2,3 in mega 2,3,18,19,20,21. Tu določite vhodni zatič, ki se uporablja za zunanje prekinitve.
ISR: To je funkcija, ki se pokliče, ko se izvede zunanja prekinitev.
Način: vrsta prehoda za sprožitev, npr. Padanje, naraščanje itd.
- RISING: sproži prekinitev, ko zatič preide iz LOW v HIGH.
- FALLING: sproži prekinitev, ko zatič preide iz HIGH v LOW.
- SPREMENI: sproži prekinitev, ko zatič preide iz LOW v HIGH ali HIGH v LOW (tj. Ko se stanje zatiča spremeni).
Nekateri pogoji med uporabo prekinitve
- Rutinska funkcija prekinitve (ISR) mora biti čim krajša.
- Funkcija Delay () znotraj ISR ne deluje in se ji je treba izogniti.
V tej vadnici za Arduino Interrupt se število poveča od 0 in z dvema tipkama se sproži prekinitev, vsaka pa je priključena na D2 in D3. Za prikaz prekinitve se uporablja LED. Če pritisnete eno tipko, se LED vklopi in na zaslonu se prikaže prekinitev2 in ugasne. Ko pritisnete drugi gumb, se LED ugasne, zaslon pa prekine1 in ugasne.
Potrebne komponente
- Arduino Board (v tej vadnici je uporabljen Arduino NANO)
- Potisni gumb - 2
- LED - 1
- Upor (10K) - 2
- LCD (16x2) - 1
- Odbor za kruh
- Povezovanje žic
Shema vezja
Circuit Connection med Arduino Nano in 16x2 LCD zaslonom:
LCD |
Arduino Nano |
VSS |
GND |
VDD |
+ 5V |
V0 |
Na kodo PIN Potentiometer Center Za nadzor kontrasta LCD-ja |
RS |
D7 |
RW |
GND |
E |
D8 |
D4 |
D9 |
D5 |
D10 |
D6 |
D11 |
D7 |
D12 |
A |
+ 5V |
K |
GND |
Dve tipki sta povezani z Arduino Nano na nožici D2 in D3. Uporabljajo se za uporabo dveh zunanjih prekinitev, enega za vklop LED in drugega za izklop LED. Vsak potisni gumb ima na tla pritrjen upor 10k. Ko je pritisnjen gumb, je to logika VISOKO (1), če ga ne pritisnete, pa logika LOW (0). Povlečni upor je obvezen, sicer bodo na vhodnih zatičih D2 in D3 plavajoče vrednosti.
LED se uporablja tudi kažejo, da je bila prekinitev sproži ali ste pritisnili gumb.
Programiranje prekinitev Arduino
V tej vadnici se število poveča od 0, kar se neprekinjeno prikaže na (16x2) LCD-ju, priključenem na Arduino Nano, vsakič, ko pritisnete levi gumb (prekinitveni zatič D3), se LED prižge in zaslon prikaže Interrupt2 in ko desni gumb (prekinitveni zatič D2) se pritisne, lučka ugasne in na zaslonu se prikaže Interrupt1.
Na koncu te vadnice je navedena celotna koda z delujočim videoposnetkom.
1. Najprej je vključena datoteka z glavo za LCD zaslon, nato pa so definirani zatiči LCD, ki se uporabljajo za povezovanje z Arduino Nano.
#include
2. Znotraj funkcije void setup () najprej prikažite nekaj uvodnih sporočil na LCD zaslonu. Več o povezovanju LCD-ja z Arduinom lahko preberete tukaj.
lcd.begin (16,2); lcd.setCursor (0,0); lcd.print ("DIGEST CIRCUIT"); lcd.setCursor (0,1); lcd.print ("ArduinoInterrupt"); zamuda (3000); lcd.clear ();
3. Nato je treba v isti funkciji nastavitve praznine () določiti vhodne in izhodne nožice. Zatič D13 je povezan z anodo LED, zato mora biti ta zatič definiran kot izhod.
pinMode (13, IZHOD);
4. Zdaj prihaja glavni pomemben del pri programiranju, ki je funkcija attachInterrupt (), vključena pa je tudi v nastavitev void ().
attachInterrupt (digitalPinToInterrupt (2), buttonPress1, RISING); attachInterrupt (digitalPinToInterrupt (3), buttonPress2, RISING);
Tu je določeno, da je zatič 2 namenjen zunanjim prekinitvam, funkcija buttonPress1 pa se pokliče, kadar je na zatiču D2 RISING (LOW to HIGH). In pin 3 je tudi za zunanjo prekinitev in funkcija buttonPress2 se prikliče, kadar je na D3 pin RISING.
5. Znotraj void zanke () se število (i) poveča od nič in natisne na LCD (16x2).
lcd.clear (); lcd.print ("ŠTEVILEC:"); lcd.print (i); ++ i; zamuda (1000);
V isti void zanki () se digitalWrite () uporablja na zatiču D13, kjer je priključena anoda LED. Glede na vrednost v spremenljivem izhodu se bo LED vklopil ali izklopil
digitalWrite (13, izhod);
6. Najpomembnejši del je ustvarjanje funkcije za obdelavo prekinitev glede na ime, ki se uporablja v funkciji attachInterrupt () .
Ker se uporabljata dva prekinitvena zatiča 2 in 3, sta potrebna dva ISR. Tu v tem programiranju so uporabljeni naslednji ISR
buttonPress1 ():
gumb za praznitevPress1 () { output = LOW; lcd.setCursor (0,1); lcd.print ("Prekinitev 1"); }
Ta funkcija se izvede, ko pritisnete gumb na zatiču D2 (RISING EDGE). Ta funkcija spremeni stanje izhoda v LOW, zaradi česar se LED izklopi in na LCD zaslon natisne “interrupt1”.
buttonPress2 ():
gumb za voidPress2 () {izhod = VISOKO; lcd.setCursor (0,1); lcd.print ("Prekinitev2"); }
Ta funkcija se izvede, ko pritisnete gumb na zatiču D3. Ta funkcija spremeni stanje izhoda v HIGH, zaradi česar se LED vklopi in na LCD zaslon natisne “interrupt2”.
Demonstracija prekinitve Arduino
1. Ko pritisnete tipko PUSH na levi strani, se LED prižge in LCD prikaže Interrupt2.
2. Ko pritisnete tipko PUSH na desni strani, se LED ugasne in na LCD-prikazovalniku se prikaže Interrupt1
Tako je prekinitev lahko koristna za sprožanje katere koli pomembne naloge med običajnim izvajanjem.