În acest articol vă voi spune despre întreruperea externă Arduino.
În general, o întrerupere este un semnal transmis către microcontroler, care spune că este necesar să se întrerupă execuția programului și să se execute mai multe instrucțiuni cu o prioritate ridicată. Aceste instrucțiuni sunt numite manipulatorul de întrerupere.
Întreruperile sunt o unealtă foarte puternică, necesară doar când aveți nevoie de procesor pentru a controla ceva (de exemplu, LED-uri, afișaj, motoare etc.) și a fost întotdeauna gata să execute orice comandă. de exemplu după apăsarea butonului.
Există mai multe tipuri de întreruperi. Cele mai importante sunt întreruperea temporizării și întreruperile externe. Întreruperile externe sunt întreruperi efectuate atunci când se schimbă o stare a oricărui pin al microcontrolerului nostru. Pe ele mă voi opri în detaliu.
Deci, de obicei, microcontrolerele se pot descurca până la două întreruperi externe. Cum ar fi Arduino Mega, Leonardo, Due pot procesa mai multe întreruperi, dar principiul de a lucra cu ei rămâne același. Voi vorbi despre lucrul cu întreruperile pe exemplul lui Arduino Uno.
Pentru a lucra cu o întrerupere externă Arduino Uno, se utilizează pini 2 și 3. În consecință, microcontrolerul le definește ca întreruperi externe 0 (zero) și 1 (prima).
Pentru a apela întreruperi, se utilizează designul standard Arduino IDE:
attachInterrupt (întrerupere, funcție, mod)
Când apelați această funcție, trebuie să specificați următorii parametri:
1) Numărul întreruperii - adică pinul din care citim condiția pentru apariția unei întreruperi. În consecință, numărul poate fi 0 sau 1 (adică, știfturile 2 și 3).
2) Funcția handlerului de întrerupere - aici specificăm funcția care va fi apelată când apare un eveniment de întrerupere.
3) Tip de întrerupere - aici este specificat un eveniment, care va aștepta ca microcontrolerul să pornească dispozitivul de tratare a întreruperilor. Tipul de întrerupere are următoarele valori:
HIGH - pornește handler-ul când primește +5 V sau logic 1;
LOW - pornește handler-ul când primește 0V sau logic 0;
RISING - pornește mânerul când primește marginea în creștere a semnalului (variația tensiunii de la 0 la + 5V);
FALLING - pornește manualul când semnalul coboară (tensiunea se schimbă de la + 5V la 0);
SCHIMBARE - pornește manualul atunci când se schimbă semnalul, de la + 5V la 0 și invers.
În plus, pentru întreruperi, există și alte funcții:
Cu funcții permit și executarea de dezactivare întrerupere pentru a lucra foarte selectiv, mai ales atunci când se lucrează cu bibliotecile de legătură, deoarece interzicerea toate întreruperile poate provoca o funcționare defectuoasă a funcțiilor legate de cronometre interne și așa mai departe. Mă voi ocupa de acest lucru într-un articol despre micul meu proiect în care am folosit întreruperi externe și un afișaj TFT.
Și încă o digresiune teoretică. Când lucrați cu întreruperi externe, dacă aveți de gând să citiți butoanele de presare, problema combaterii deranjamentului de contacte este urgentă. Dacă ați lucrat deja cu butoane, atunci știți că există mai multe schimbări în starea când apăsați butoanele care nu sunt percepute de persoana, iar microcontrolerul le observă perfect. De obicei, în proiecte simple, această problemă este rezolvată prin utilizarea unor mici întârzieri, care nu afectează în mod deosebit timpul de execuție al programului, dar permit stabilizarea butonului. Când lucrăm cu întreruperi externe, o astfel de abordare nu mai funcționează, astfel încât sărirea de contact trebuie eliminată nu prin software, ci prin hardware. Pentru această sarcină declanșatorul inversator Schmidt se potrivește perfect. Eu folosesc cipul 74HC14N, care include opt astfel de declanșatoare. Deci, vom afla cum se conectează și cum funcționează toate. Funcția de declanșare Schmidt funcționează foarte simplu, când se alimentează + 5V pe ieșire, ieșind 0 și invers, adică inversează semnalul recepționat. Acum vom compila diagrama după cum se arată în figură.