- Tipus d’interrupcions
- Interrupcions a Arduino
- Ús d’interrupcions a Arduino
- Components necessaris
- Esquema de connexions
- Programació d'interrupcions Arduino
- Demostració d’interrupcions d’Arduino
Penseu en un cotxe que es mou ràpidament, si de cop es veu atropellat per un altre cotxe en direcció contrària, el primer que passa és que el sensor de l’acceleròmetre present al cotxe detecta una desacceleració sobtada i provoca una interrupció externa al microcontrolador present a el cotxe. Després, basant-se en aquesta interrupció, el microcontrolador produeix un senyal elèctric per desplegar els coixins de seguretat immediatament. Els microcontroladors presents al cotxe controlen simultàniament moltes coses, com ara detectar la velocitat del cotxe, comprovar altres sensors, controlar la temperatura de l’aire condicionat, etc. Què provoca, doncs, l’obertura sobtada d’un airbag en qüestió de segons? La resposta són les interrupcions, aquí s’utilitza un senyal d’interrupció que té la màxima prioritat de totes.
Un altre exemple senzill d'interrupcions són els telèfons mòbils amb pantalla tàctil que tenen la màxima prioritat en el sentit "tàctil". Gairebé tots els dispositius electrònics tenen alguna mena d'interrupcions per "interrompre" el procés habitual i fer algunes coses de més prioritat en un esdeveniment concret. El procés regular es reprèn després de publicar la interrupció.
Per tant, tècnicament, Interrupts és un mecanisme mitjançant el qual una E / S o una instrucció poden suspendre l'execució normal del processador i obtenir un servei com si tingués una prioritat més alta. Per exemple, un processador que realitza una execució normal pot ser interromput per algun sensor per executar un procés concret que està present a ISR (Interrupt Service Routine). Després d'executar el processador ISR es pot reprendre l'execució normal.
Tipus d’interrupcions
Hi ha dos tipus d’interrupcions:
Interrupció de maquinari: ocorre quan es produeix un esdeveniment extern com si un pin d'interrupció extern canviés l'estat de BAIX a ALT o ALT a BAIX.
Interrupció del programari: ocorre segons les instruccions del programari. Per exemple, les interrupcions temporitzadores són interrupcions de programari.
Interrupcions a Arduino
Ara veurem com utilitzar les interrupcions a la placa Arduino. Té dos tipus d'interrupcions:
- Interrupció externa
- Interrupció del canvi de pin
Interrupció externa:
Aquestes interrupcions són interpretades pel maquinari i són molt ràpides. Aquestes interrupcions es poden configurar per activar-se en cas de nivells RISING o FALLING o BAIX.
|
Tauler Arduino |
Pins d'interrupció externs: |
|
UNO, NANO |
2,3 |
|
Mega |
2,3,18,19,20,21 |
Interrupcions del canvi de pin:
Els arduinos poden tenir més pins d'interrupció habilitats mitjançant interrupcions de canvi de pin. A les plaques Arduino basades en ATmega168 / 328 es poden utilitzar qualsevol pins o tots els 20 pins de senyal com a pins d'interrupció. També es poden activar mitjançant vores RISING o FALLING.
Ús d’interrupcions a Arduino
Per utilitzar interrupcions a Arduino, cal entendre els conceptes següents.
Rutina de servei d’interrupció (ISR)
La rutina de servei d'interrupció o un controlador d'interrupcions és un esdeveniment que conté un petit conjunt d'instruccions. Quan es produeix una interrupció externa, el processador primer executa aquest codi present a ISR i torna a l'estat on va deixar l'execució normal.
ISR té la sintaxi següent a Arduino:
attachInterrupt (digitalPinToInterrupt (pin), ISR, mode);
digitalPinToInterrupt (pin): A Arduino Uno, NANO els pins utilitzats per a la interrupció són 2,3 i en mega 2,3,18,19,20,21. Especifiqueu el pin d'entrada que s'utilitzarà per a una interrupció externa aquí.
ISR: és una funció que es diu quan es fa una interrupció externa.
Mode: tipus de transició a activar, per exemple, caure, pujar, etc.
- RISING: per provocar una interrupció quan el passador passa de BAIX a ALT.
- CAU: Per provocar una interrupció quan el passador passa de HIGH a LOW.
- CANVI: per provocar una interrupció quan el pin transita de BAIX a ALT o ALT a BAIX (és a dir, quan canvia l'estat del pin).
Algunes condicions en utilitzar Interrupt
- La funció de rutina de servei d’interrupció (ISR) ha de ser el més curta possible.
- La funció Delay () no funciona dins d’ISR i s’ha d’evitar.
En aquest tutorial d’Arduino Interrupt, s’incrementa un número des de 0 i s’utilitzen dos botons per activar Interrupt, cadascun està connectat a D2 i D3. S’utilitza un LED per indicar la interrupció. Si es prem un polsador, el led s'encén i la pantalla mostra interrupt2 i s'apaga, i quan es prem un altre botó, el led s'apaga i la pantalla mostra interrupt1 i s'apaga.
Components necessaris
- Taula Arduino (En aquest tutorial s’utilitza Arduino NANO)
- Polsador: 2
- LED - 1
- Resistència (10 K) - 2
- Pantalla LCD (16x2) - 1
- Taula de pa
- Connexió de cables
Esquema de connexions

Connexió del circuit entre Arduino Nano i pantalla LCD de 16x2:
|
LCD |
Arduino Nano |
|
VSS |
GND |
|
VDD |
+ 5V |
|
V0 |
Al PIN del Potentiometer Center Per controlar el contrast de la pantalla LCD |
|
RS |
D7 |
|
RW |
GND |
|
E |
D8 |
|
D4 |
D9 |
|
D5 |
D10 |
|
D6 |
D11 |
|
D7 |
D12 |
|
A |
+ 5V |
|
K |
GND |
Es connecten dos botons polsadors a Arduino Nano als pins D2 i D3. S'utilitzen per utilitzar dues interrupcions externes, una per encendre el LED i una altra per apagar un LED. Cada polsador té una resistència de 10k connectada a terra. Per tant, quan es prem el botó és lògic HIGH (1) i quan no es prem és lògic LOW (0). Una resistència pull down és obligatòria, en cas contrari, hi haurà valors flotants al pin d'entrada D2 i D3.
També s’utilitza un LED per indicar que s’ha activat una interrupció o s’ha premut un botó.
Programació d'interrupcions Arduino
En aquest tutorial s’incrementa un número des de 0 que es mostra contínuament a la pantalla LCD (16x2) connectada a l’Arduino Nano, sempre que es prem el botó esquerre (pin d’interrupció D3), el LED s’encén i la pantalla mostra Interrupt2, i quan el botó dret (el pin d'interrupció D2) es prem, el LED s'apaga i la pantalla mostra Interrupt1.
Al final d’aquest tutorial es proporciona un codi complet amb un vídeo de treball.
1. Primer s'inclou el fitxer de capçalera de la pantalla LCD i, a continuació, es defineixen els pins LCD que s'utilitzen per connectar-se amb l'Arduino Nano.
#incloure
2. Dins de la funció void setup (), primer mostreu algun missatge d'introducció a la pantalla LCD. Obteniu més informació sobre la interfície de la pantalla LCD amb Arduino aquí.
lcd.begin (16,2); lcd.setCursor (0,0); lcd.print ("CIRCUIT DIGEST"); lcd.setCursor (0,1); lcd.print ("ArduinoInterrupt"); retard (3000); lcd.clear ();
3. A continuació, en la mateixa funció de configuració de buit () s'han d'especificar els pins d'entrada i sortida. El pin D13 està connectat a l’ànode del LED, de manera que aquest pin s’ha de definir com a sortida.
pinMode (13, OUTPUT);
4. Ara la principal part important de la programació és que és la funció attachInterrupt (), també s'inclou dins de la configuració de buit ().
attachInterrupt (digitalPinToInterrupt (2), buttonPressed1, RISING); attachInterrupt (digitalPinToInterrupt (3), buttonPressed2, RISING);
Aquí s’especifica que el pin 2 és per a una interrupció externa i que es crida la funció buttonPressed1 quan hi ha RISING (BAIX a ALT) al pin D2. I el pin 3 també serveix per a una interrupció externa i la funció buttonPressed2 es diu quan hi ha RISING al pin D3.
5. Dins del bucle buit (), un número (i) s'incrementa des de zero i s'imprimeix a la pantalla LCD (16x2).
lcd.clear (); lcd.print ("COUNTER:"); lcd.print (i); ++ i; retard (1000);
En el mateix bucle buit (), s'utilitza digitalWrite () al pin D13 on està connectat l'ànode del LED. Depenent del valor de sortida variable , el LED s'encendrà o s'apagarà
digitalWrite (13, sortida);
6. La part més important és crear una funció de control d'interrupcions segons el nom que s'utilitza a la funció attachInterrupt () .
Com que s’utilitzen dos pins d’interrupció 2 i 3, es necessiten dos ISR. Aquí en aquesta programació s’utilitzen els següents ISR
botó Prement1 ():
void buttonPressed1 () { sortida = BAIX; lcd.setCursor (0,1); lcd.print ("Interrupció 1"); }
Aquesta funció s'executa quan es prem el botó del pin D2 (RISING EDGE). Aquesta funció canvia l'estat de la sortida a BAIX i fa que el LED s'apaga i imprimeix la "interrupció1" a la pantalla LCD.
buttonPressed2 ():
void buttonPressed2 () {output = HIGH; lcd.setCursor (0,1); lcd.print ("Interrupt2"); }
Aquesta funció s'executa quan es prem el botó del pin D3. Aquesta funció canvia l'estat de la sortida a HIGH provocant que el LED s'encengui i imprimeixi la "interrupt2" a la pantalla LCD.
Demostració d’interrupcions d’Arduino
1. Quan es prem el BOTÓ PUSH a la part esquerra, el LED s'encén i la pantalla LCD mostra Interrupt2.

2. Quan es prem el BOTÓ PUSH del costat dret, el LED s'apaga i la pantalla LCD mostra Interrupt1

Així és com una interrupció pot ser útil per activar qualsevol tasca important entre l'execució normal.
