- Tipi di interruzioni
- Interruzioni in Arduino
- Utilizzo degli interrupt in Arduino
- Componenti richiesti
- Schema elettrico
- Programmazione degli interrupt Arduino
- Dimostrazione dell'interruzione di Arduino
Si consideri un'auto in rapido movimento, se viene investita all'improvviso da un'altra macchina in direzione opposta, la prima cosa che accade è che il sensore dell'accelerometro presente nell'auto rileva un'improvvisa de-accelerazione e fa scattare un interrupt esterno al microcontrollore presente in la macchina. Quindi, in base a quell'interruzione, il microcontrollore produce un segnale elettrico per attivare immediatamente gli airbag. I microcontrollori presenti nell'auto monitorano molte cose contemporaneamente come il rilevamento della velocità dell'auto, il controllo di altri sensori, il controllo della temperatura del condizionatore d'aria, ecc. Allora cosa rende un'apertura improvvisa di un airbag in pochi secondi? La risposta è interrupt, qui viene utilizzato un segnale di interrupt che ha la priorità più alta di tutti.
Un altro semplice esempio di interrupt sono i telefoni cellulari touch screen che hanno la massima priorità al senso "Touch". Quasi ogni dispositivo elettronico ha qualche tipo di interruzione per "interrompere" il normale processo e fare alcune cose con priorità più alta su un particolare evento. Il normale processo viene ripreso dopo aver servito l'interruzione.
Quindi, tecnicamente, gli interrupt sono un meccanismo mediante il quale un I / O o un'istruzione può sospendere la normale esecuzione del processore e viene riparato come se avesse una priorità più alta. Ad esempio, un processore che esegue una normale esecuzione può essere interrotto da un sensore per eseguire un particolare processo che è presente in ISR (Interrupt Service Routine). Dopo aver eseguito il processore ISR può riprendere la normale esecuzione.
Tipi di interruzioni
Esistono due tipi di interruzioni:
Interrupt hardware: si verifica quando si verifica un evento esterno come un pin di interrupt esterno cambia il suo stato da BASSO ad ALTO o da ALTO a BASSO.
Interruzione software: avviene in base alle istruzioni del software. Ad esempio, gli interrupt del timer sono interrupt software.
Interruzioni in Arduino
Ora vedremo come utilizzare gli interrupt nella scheda Arduino. Ha due tipi di interruzioni:
- Interrupt esterno
- Interruzione cambio pin
Interrupt esterno:
Questi interrupt vengono interpretati dall'hardware e sono molto veloci. Questi interrupt possono essere impostati per attivarsi in caso di aumento o caduta o livelli bassi.
Scheda Arduino |
Pin di interrupt esterni: |
UNO, NANO |
2,3 |
Mega |
2,3,18,19,20,21 |
Interruzioni di cambio pin:
Arduino può avere più pin di interrupt abilitati utilizzando interrupt di cambio pin. Nelle schede Arduino basate su ATmega168 / 328 tutti i pin o tutti i 20 pin di segnale possono essere utilizzati come pin di interrupt. Possono anche essere attivati utilizzando bordi SALITA o CADUTA.
Utilizzo degli interrupt in Arduino
Per poter utilizzare gli interrupt in Arduino è necessario comprendere i seguenti concetti.
Interrupt Service Routine (ISR)
La routine del servizio di interrupt o un gestore di interrupt è un evento che contiene un piccolo insieme di istruzioni. Quando si verifica un interrupt esterno, il processore esegue prima il codice presente in ISR e torna allo stato in cui ha lasciato la normale esecuzione.
ISR ha la seguente sintassi in Arduino:
attachInterrupt (digitalPinToInterrupt (pin), ISR, mode);
digitalPinToInterrupt (pin): In Arduino Uno, NANO i pin utilizzati per l'interrupt sono 2,3 e in mega 2,3,18,19,20,21. Specificare qui il pin di ingresso utilizzato per l'interrupt esterno.
ISR: è una funzione che viene chiamata quando viene eseguito un interrupt esterno.
Modalità: tipo di transizione su cui attivare l'attivazione, ad es.
- SALITA: per attivare un interrupt quando il pin transita da BASSO ad ALTO.
- FALLING: per attivare un interrupt quando il pin transita da HIGH a LOW.
- CHANGE: per attivare un interrupt quando il pin transita da LOW a HIGH o da HIGH a LOW (cioè, quando lo stato del pin cambia).
Alcune condizioni durante l'utilizzo di Interrupt
- La funzione Interrupt Service Routine (ISR) deve essere il più breve possibile.
- La funzione Delay () non funziona all'interno di ISR e dovrebbe essere evitata.
In questo tutorial sull'interruzione di Arduino, un numero viene incrementato da 0 e vengono utilizzati due pulsanti per attivare l'interruzione, ciascuno collegato a D2 e D3. Un LED viene utilizzato per indicare l'interruzione. Se viene premuto un pulsante il led si accende e il display mostra interrupt2 e si spegne, quando viene premuto un altro pulsante il led si spegne e il display mostra interrupt1 e si spegne.
Componenti richiesti
- Scheda Arduino (in questo tutorial viene utilizzato Arduino NANO)
- Pulsante - 2
- LED - 1
- Resistore (10K) - 2
- LCD (16x2) - 1
- Tagliere per il pane
- Collegamento dei cavi
Schema elettrico
Collegamento del circuito tra Arduino Nano e display LCD 16x2:
LCD |
Arduino Nano |
VSS |
GND |
VDD |
+ 5V |
V0 |
Al potenziometro PIN centrale Per controllare il contrasto del display LCD |
RS |
D7 |
RW |
GND |
E |
D8 |
D4 |
D9 |
D5 |
D10 |
D6 |
D11 |
D7 |
D12 |
UN |
+ 5V |
K |
GND |
Due pulsanti sono collegati ad Arduino Nano ai pin D2 e D3. Sono utilizzati per utilizzare due interrupt esterni, uno per accendere il LED e un altro per spegnere un LED. Ogni pulsante ha una resistenza di pull down da 10k collegata a terra. Quindi quando il pulsante viene premuto è logico ALTO (1) e quando non premuto è logico BASSO (0). Una resistenza pull down è obbligatoria altrimenti ci saranno valori fluttuanti sul pin di ingresso D2 e D3.
Viene inoltre utilizzato un LED per indicare che è stato attivato un interrupt o è stato premuto un pulsante.
Programmazione degli interrupt Arduino
In questo tutorial viene incrementato un numero da 0 che viene visualizzato continuamente nel display LCD (16x2) collegato ad Arduino Nano, ogni volta che si preme il pulsante sinistro (interrupt pin D3) il LED si accende e il display mostra Interrupt2 e quando il pulsante destro (interrupt pin D2) viene premuto il LED si spegne e il display mostra Interrupt1.
Alla fine di questo tutorial viene fornito il codice completo con un video funzionante.
1. Innanzitutto viene incluso il file di intestazione per il display LCD, quindi vengono definiti i pin LCD utilizzati per il collegamento con Arduino Nano.
#includere
2. All'interno della funzione void setup (), visualizzare prima un messaggio di introduzione sul display LCD. Scopri di più sull'interfacciamento dell'LCD con Arduino qui.
lcd.begin (16,2); lcd.setCursor (0,0); lcd.print ("CIRCUIT DIGEST"); lcd.setCursor (0,1); lcd.print ("ArduinoInterrupt"); ritardo (3000); lcd.clear ();
3. Quindi nella stessa funzione void setup () devono essere specificati i pin di input e output. Il pin D13 è collegato all'anodo del LED, quindi questo pin deve essere definito come uscita.
pinMode (13, OUTPUT);
4. Ora la parte più importante nella programmazione viene che è la funzione attachInterrupt (), anch'essa inclusa all'interno di void setup ().
attachInterrupt (digitalPinToInterrupt (2), buttonPressed1, RISING); attachInterrupt (digitalPinToInterrupt (3), buttonPressed2, RISING);
Qui viene specificato che il pin 2 è per l'interruzione esterna, e la funzione buttonPressed1 viene chiamata quando c'è RISING (da LOW a HIGH) sul pin D2. E il pin 3 è anche per l'interruzione esterna e la funzione buttonPressed2 viene chiamata quando c'è RISING sul pin D3.
5. All'interno del loop void (), un numero (i) viene incrementato da zero e stampato sul display LCD (16x2).
lcd.clear (); lcd.print ("COUNTER:"); lcd.print (i); ++ i; ritardo (1000);
Nello stesso void loop (), digitalWrite () viene utilizzato sul pin D13 dove è collegato l'anodo del LED. A seconda del valore nell'uscita variabile , il LED si accenderà o spegnerà
digitalWrite (13, output);
6. La parte più importante è creare una funzione di gestore di interrupt in base al nome utilizzato nella funzione attachInterrupt () .
Poiché vengono utilizzati due pin di interrupt 2 e 3, sono necessari due ISR. Qui in questa programmazione vengono utilizzati i seguenti ISR
buttonPressed1 ():
void buttonPressed1 () { output = LOW; lcd.setCursor (0,1); lcd.print ("Interrupt 1"); }
Questa funzione viene eseguita premendo il pulsante sul pin D2 (RISING EDGE). Questa funzione cambia lo stato dell'uscita in BASSO provocando lo spegnimento del LED e la stampa di "interrupt1" sul display LCD.
buttonPressed2 ():
void buttonPressed2 () {output = HIGH; lcd.setCursor (0,1); lcd.print ("Interrupt2"); }
Questa funzione viene eseguita quando viene premuto il pulsante sul pin D3. Questa funzione cambia lo stato dell'uscita in HIGH provocando l'accensione del LED e la stampa di "interrupt2" sul display LCD.
Dimostrazione dell'interruzione di Arduino
1. Quando si preme il PULSANTE sul lato sinistro, il LED si accende e il display LCD visualizza Interrupt2.
2. Quando si preme il PULSANTE sul lato destro, il LED si spegne e il display LCD visualizza Interrupt1
Questo è il modo in cui un interrupt può essere utile per attivare qualsiasi attività importante tra la normale esecuzione.