- Tipuri de întreruperi
- Se întrerupe în Arduino
- Utilizarea întreruperilor în Arduino
- Componente necesare
- Diagrama circuitului
- Programare de întrerupere Arduino
- Demonstrație de întrerupere Arduino
Luați în considerare o mașină în mișcare rapidă, dacă este lovită brusc de o altă mașină în direcție opusă, primul lucru care se întâmplă este că, senzorul accelerometrului prezent în mașină detectează o accelerare bruscă și declanșează o întrerupere externă a microcontrolerului prezent în mașina. Apoi, pe baza acestei întreruperi, microcontrolerul produce un semnal electric pentru a declanșa imediat airbagurile. Microcontrolerele prezente în mașină monitorizează simultan multe lucruri, cum ar fi detectarea vitezei mașinii, verificarea altor senzori, controlul temperaturii aparatului de aer condiționat etc. Deci, ce face o deschidere bruscă a unui airbag în câteva secunde? Răspunsul este întreruperile, aici se folosește un semnal de întrerupere care are cea mai mare prioritate dintre toate.
Un alt exemplu simplu de întreruperi sunt telefoanele mobile cu ecran tactil care au cea mai mare prioritate în sensul „Touch”. Aproape fiecare dispozitiv electronic are un fel de întrerupere pentru a „întrerupe” procesul regulat și pentru a face unele lucruri cu prioritate superioară la un anumit eveniment. Procesul regulat este reluat după ce a servit întreruperea.
Deci, din punct de vedere tehnic, întreruperile sunt un mecanism prin care o I / O sau o instrucțiune poate suspenda executarea normală a procesorului și poate fi întreținută ca și cum ar avea prioritate mai mare. De exemplu, un procesor care efectuează o execuție normală poate fi întrerupt de un senzor pentru a executa un anumit proces care este prezent în ISR (Interrupt Service Routine). După executarea procesorului ISR poate relua din nou executarea normală.
Tipuri de întreruperi
Există două tipuri de întreruperi:
Întrerupere hardware: Se întâmplă atunci când un eveniment extern are loc ca un pin extern de întrerupere care își schimbă starea de la LOW la HIGH sau HIGH la LOW.
Întreruperea software-ului: se întâmplă în conformitate cu instrucțiunile din software. De exemplu, întreruperile cu temporizator sunt întreruperi de software.
Se întrerupe în Arduino
Acum vom vedea cum să folosim întreruperile în placa Arduino. Are două tipuri de întreruperi:
- Întrerupere externă
- Întreruperea modificării pinului
Întrerupere externă:
Aceste întreruperi sunt interpretate de hardware și sunt foarte rapide. Aceste întreruperi pot fi setate să se declanșeze în cazul nivelurilor RISING sau FALLING sau LOW.
Placa Arduino |
Pinii de întrerupere externi: |
UNO, NANO |
2,3 |
Mega |
2,3,18,19,20,21 |
Întreruperea modificării pinului:
Arduino-urile pot avea mai mulți pini de întrerupere activate utilizând întreruperi de modificare a pini. În plăcile Arduino bazate pe ATmega168 / 328, orice pini sau toți cei 20 de pini de semnal pot fi folosiți ca pini de întrerupere. Acestea pot fi, de asemenea, declanșate folosind margini RIDICARE sau CĂDERE
Utilizarea întreruperilor în Arduino
Pentru a utiliza întreruperile în Arduino trebuie să fie înțelese următoarele concepte.
Rutina serviciului de întrerupere (ISR)
Rutina de întrerupere a serviciului sau un manipulator de întrerupere este un eveniment care conține un set mic de instrucțiuni. Când apare o întrerupere externă, procesorul execută mai întâi acest cod care este prezent în ISR și revine la starea în care a lăsat execuția normală.
ISR are următoarea sintaxă în Arduino:
attachInterrupt (digitalPinToInterrupt (pin), ISR, mod);
digitalPinToInterrupt (pin): În Arduino Uno, NANO pinii utilizați pentru întrerupere sunt 2,3 și în mega 2,3,18,19,20,21. Specificați pinul de intrare care este utilizat pentru întreruperea externă aici.
ISR: Este o funcție care se numește atunci când se face o întrerupere externă.
Mod: Tipul de tranziție pe care trebuie să-l declanșezi, de exemplu căderea, creșterea etc.
- RISING: Pentru a declanșa o întrerupere atunci când pinul tranzitează de la LOW la HIGH.
- FALLING: Pentru a declanșa o întrerupere atunci când pinul trece de la HIGH la LOW.
- SCHIMBARE: Pentru a declanșa o întrerupere atunci când pinul tranzitează de la LOW la HIGH sau HIGH la LOW (adică când starea pinului se schimbă).
Unele condiții în timpul utilizării întreruperii
- Funcția de rutină de întrerupere a serviciului (ISR) trebuie să fie cât mai scurtă posibil.
- Funcția Delay () nu funcționează în interiorul ISR și ar trebui evitată.
În acest tutorial Arduino Interrupt, un număr este crescut de la 0 și două butoane sunt utilizate pentru a declanșa Interrupt, fiecare fiind conectat la D2 și D3. Un LED este utilizat pentru a indica întreruperea. Dacă este apăsat un buton, ledul se aprinde și afișajul arată interrupt2 și se stinge, iar când este apăsat un alt buton, ledul se oprește și afișajul arată interrupt1 și se stinge.
Componente necesare
- Placa Arduino (În acest tutorial este utilizat Arduino NANO)
- Apăsați butonul - 2
- LED - 1
- Rezistor (10K) - 2
- LCD (16x2) - 1
- Pâine
- Conectarea firelor
Diagrama circuitului
Conexiune circuit între Arduino Nano și afișaj LCD 16x2:
LCD |
Arduino Nano |
VSS |
GND |
VDD |
+ 5V |
V0 |
La codul PIN al centrului potențiometrului Pentru controlul contrastului ecranului LCD |
RS |
D7 |
RW |
GND |
E |
D8 |
D4 |
D9 |
D5 |
D10 |
D6 |
D11 |
D7 |
D12 |
A |
+ 5V |
K |
GND |
Două butoane sunt conectate la Arduino Nano la pinul D2 și D3. Acestea sunt utilizate pentru utilizarea a două întreruperi externe, una pentru aprinderea LED-ului și alta pentru stingerea unui LED. Fiecare buton are un rezistor de 10k conectat la sol. Deci, atunci când butonul este apăsat, este logic HIGH (1) și când nu este apăsat, este logic LOW (0). Un rezistor de tragere este obligatoriu în caz contrar, vor exista valori flotante la pinul de intrare D2 și D3.
Un LED este, de asemenea, utilizat pentru a indica faptul că a fost declanșată o întrerupere sau a fost apăsat un buton.
Programare de întrerupere Arduino
În acest tutorial se crește un număr de la 0 care se afișează continuu în (16x2) LCD conectat la Arduino Nano, ori de câte ori este apăsat butonul stânga (pinul de întrerupere D3) LED-ul se aprinde și afișajul arată Interrupt2, iar când butonul drept (pinul de întrerupere D2) este apăsat, LED-ul se stinge și afișajul arată Interrupt1.
Codul complet cu un videoclip funcțional este dat la sfârșitul acestui tutorial.
1. Mai întâi este inclus fișierul antet pentru afișajul LCD și apoi sunt definite pinii LCD care sunt utilizați pentru conectarea cu Arduino Nano.
#include
2. În interiorul funcției de configurare nulă (), afișați mai întâi un mesaj introductiv pe afișajul LCD. Aflați mai multe despre interfața LCD cu Arduino aici.
lcd.inceput (16,2); lcd.setCursor (0,0); lcd.print ("CIRCUIT DIGEST"); lcd.setCursor (0,1); lcd.print ("ArduinoInterrupt"); întârziere (3000); lcd.clear ();
3. Apoi, în aceeași funcție de setare nulă () trebuie specificate pinii de intrare și ieșire. Pinul D13 este conectat la anodul LED-ului, deci acest pin trebuie definit ca ieșire.
pinMode (13, OUTPUT);
4. Acum, principala parte importantă din programare vine că este funcția attachInterrupt (), este inclusă și în setarea void ().
attachInterrupt (digitalPinToInterrupt (2), buttonPressed1, RISING); attachInterrupt (digitalPinToInterrupt (3), buttonPressed2, RISING);
Aici se specifică faptul că pinul 2 este pentru întrerupere externă, iar funcția butonului apăsat1 este apelată când există RISING (LOW to HIGH) la pinul D2. Și pinul 3 este, de asemenea, pentru întrerupere externă și funcția Buton Pressed2 este apelată atunci când există RISING la pinul D3.
5. În interiorul buclei de gol (), un număr (i) este incrementat de la zero și imprimat pe LCD (16x2).
lcd.clear (); lcd.print ("CONTOR:"); lcd.print (i); ++ i; întârziere (1000);
În aceeași buclă de gol (), digitalWrite () este utilizat pe pinul D13 unde este conectat anodul LED-ului. În funcție de valoarea în ieșire variabilă, LED-ul se va aprinde sau se va stinge
digitalWrite (13, ieșire);
6. Cea mai importantă parte este crearea unei funcții de gestionare a întreruperilor în funcție de numele care este utilizat în funcția attachInterrupt () .
Deoarece se utilizează 2 pini de întrerupere 2 și 3, este necesar doi ISR. Aici în această programare se utilizează următoarele ISR
buton Apăsat1 ():
buton gol Apăsat1 () { ieșire = LOW; lcd.setCursor (0,1); lcd.print ("Întrerupere 1"); }
Această funcție se execută când este apăsat butonul de pe pinul D2 (RISING EDGE). Această funcție schimbă starea de ieșire la LOW provocând stingerea LED-ului și imprimă „întreruperea1” pe afișajul LCD.
buton Apăsat2 ():
void buttonPressed2 () {output = HIGH; lcd.setCursor (0,1); lcd.print ("Întrerupere2"); }
Această funcție se execută când se apasă butonul de pe pinul D3. Această funcție schimbă starea de ieșire la HIGH, determinând aprinderea LED-ului și imprimă „interrupt2” pe afișajul LCD.
Demonstrație de întrerupere Arduino
1. Când se apasă butonul PUSH de pe partea stângă, LED-ul se aprinde și ecranul LCD afișează Interrupt2.
2. Când se apasă butonul PUSH din partea dreaptă, LED-ul se stinge și LCD-ul afișează Interrupt1
Acesta este modul în care o întrerupere poate fi utilă pentru a declanșa orice sarcină importantă între executarea normală.