Come gestire un interrupt con la Raspberry Pi Pico
In un precedente articolo, utilizzando Arduino UNO avevamo parlato degli interrupt, spiegando cosa sono e come gestirli. Anche la Raspberry Pi Pico, come la maggior parte dei microcontrollori è in grado di gestire gli interrupt. Utilizzando il linguaggio Micropython questa operazione diventa molto semplice.
Questo meccanismo è molto utile perché sostituisce il meccanismo di polling che in un microcontrollore può essere molto svantaggioso. Ad esempio se devo controllare ciclicamente lo stato di un ingresso non posso mettere il microcontrollore in sleep mode perchè andrei a fermare il controllo del pin mentre un interrupt viene gestito dall’hardware e quindi è possibile superare questo limite.
Nel caso della Pico, programmata usando Micropython non sono sicuro se questa funzione sia disponibile anche quando il microcontrollore è in sleep mode.
Gestire le interruzioni
Come accade per Arduino dobbiamo definire una funzione (che verrà richiamata quando avviene l’evento di interrupt) e definire un pin capace di gestire l’interrupt.
Nello schema seguente viene mostrato come ho eseguito i collegamenti di un circuito di test.
Mentre il codice seguente descrive le istruzioni necessarie a gestire l’interrupt:
import machine import utime #definisco il pin 0 come ingresso #su questo pin è collegato un pulsante con una #resistenza di pull down button = machine.Pin(0, machine.Pin.IN, machine.Pin.PULL_DOWN) #definisco il pin 1 come uscita #su questo pin collego un led e una resistenza da 330 ohm led = machine.Pin(1, machine.Pin.OUT) #definisco una funzione che verrà richiamata quando #viene scatenato l'interrupt def ev_handler(pin): print("bottone premuto") #associo al pin in ingresso la funzione di interrupt #l'evento videne generato usando il parametro RISING button.irq(trigger=machine.Pin.IRQ_RISING, handler=ev_handler) #loop che fa blinkare il led while True: led.toggle() utime.sleep(1)
Dopo le dichiarazione dei pi e della funzione il codice entra nel ciclo while ed esegue continuamente la commutazione del pin 1. Non appena premiamo il pulsante collegato al pin 0 viene generato un evento che interrompe il ciclo e richiamata la funzione ev_handler(). Terminata l’esecuzione del codice nella funzione ev_handler() viene ripresa l’esecuzione del codice del ciclo while().
Da notare che l’interruzione non è asincrona quindi il codice nella funzione ev_handler() deve essere il più rapido possibile per non impattare sul codice del ciclo while().
Pi Pico usare gli interrupt
Supporta il mio sito
Compra italiano
Categorie
- CorsoArduino (2)
- Elettronica (11)
- Ghi-FEZ (5)
- MikroC (1)
- Notizie (38)
- OpenPicus (8)
- Programmazione (32)
- Tutorial Arduino (97)
- Tutorial Netduino (36)
- Tutorial Python (4)
- Tutorial Raspberry PI (13)
- Tutorial Zerynth (1)