Corso base di Arduino: manipolazione delle porte di I/O

Un approccio differente di programmazione consente di utilizzare le varie porte di I/O attraverso dei registri. Tale metodo consente di ottimizzare il codice, sia in termini di velocità di esecuzione che in lunghezza.

Avatar di Elettronica Open Source

a cura di Elettronica Open Source

banner prova1

Per comprendere l'uso dei registri legati alle porte di comunicazione di Arduino, è opportuno esaminare anche alcuni esempi che prevedono il metodo tradizionale.

Lampeggio di otto diodi LED con il metodo tradizionale

Immaginiamo di dover fare lampeggiare ben otto diodi LED, collegati ad altrettante porte di uscita di Arduino, come mostrato nello schema di cui in figura 1. Per il lampeggio all'unisono di otto diodi LED, in realtà, basterebbe una porta sola, ma potrebbe sorgere, in futuro, l'esigenza di rendere tali dispositivi di segnalazione indipendenti tra loro. A noi, tuttavia, interessa comprendere la filosofia generale di funzionamento. Bene, con il metodo tradizionale occorre configurare le otto porte (siglate dalla numero 0 alla numero 7) come uscite digitali e alternare l'accensione e lo spegnimento concretizzando, di fatto, il lampeggio dei LED, alla cadenza di un secondo. Il listato di cui alla figura 2 mostra tale metodo, utilizzato sicuramente da tutti quando si comincia a muovere i primi passi con Arduino.

figura 1 schema 8 led
Figura 1: schema con 8 led

figura 2 listato lampeggio tradizionale
Figura 2: listato con lampeggio tradizionale

Lampeggio di otto diodi LED con l'uso dei registri

I registri legati alle porte di I/O consentono un accesso a basso livello e una gestione più veloce e ottimizzata. Inoltre permettono di accedere a più pin con un'unica istruzione. Relativamente ad Arduino Uno vi sono le seguenti porte multiple digitali trattate, a tutti gli effetti, come un normale byte:

  • La porta multipla D, che comprende le porte 0, 1, 2, 3, 4, 5, 6 e 7
  • La porta multipla B, che comprende le porte 8, 9, 10, 11, 12 e 13

L'insieme delle porte è controllato da tre registri:

  • Il registro DDR (e precisamente DDRD e DDRB) che configura la direzione delle singole porte, bit per bit
  • Il registro PORT (e precisamente PORTD e PORTB) che accede fisicamente alla singola porta
  • Il registro PIN (e precisamente PIND e PINB) che legge lo stato logico di una singola porta

Per effettuare il lampeggio di otto diodi LED in un'unica soluzione, occorre seguire le seguenti fasi:

  • Configurare le otto porte (0, 1, 2, 3, 4, 5, 6, 7) come output, con l'istruzione DDRD=B11111111. Per settare, invece, la porta 0 e 1 come input e le altre sei come output si deve inoltrare l'istruzione DDRD=B11111100
  • Comandare, a livello di bit, le singole porte con l'istruzione PORTD=Bxxxxxxxx. Ad esempio, per accendere tutti i Led si inoltri l'istruzione PORTD=B11111111 oppure PORTD=255. Per accendere i LED in posizione pari si usi, invece, il comando PORTD=B10101010 oppure l'equivalente PORTD=170

La figura 3 riporta, pertanto, il brevissimo listato equivalente, per funzionamento, a quello della figura 2.

figura 3 listato lampeggio registri
Figura 3: listato con lampeggio a registri

Con questa filosofia, si può facilmente realizzare un prototipo di generatore di segnale multiplo che eroghi, da ogni uscita, le seguenti frequenze:

  • Dalla porta 0: segnale quadro di 128 Hz
  • Dalla porta 1: segnale quadro di 64 Hz
  • Dalla porta 2: segnale quadro di 32 Hz
  • Dalla porta 3: segnale quadro di 16 Hz
  • Dalla porta 4: segnale quadro di 8 Hz
  • Dalla porta 5: segnale quadro di 4 Hz
  • Dalla porta 6: segnale quadro di 2 Hz
  • Dalla porta 7: segnale quadro di 1 Hz

Lo schema è il medesimo del precedente ma senza l'ausilio dei diodi LED. La figura 4 mostra il semplicissimo sketch.

figura 4 sketch generatore multiplo
Figura 4: sketch per generatore multiplo di segnale

L'esecuzione del prototipo genera otto diversi segnali quadri, con frequenza doppia della precedente, come quelli visualizzati in figura 5.

figura 5 grafico
Figura 5: grafico degli otto segnale generati

Tom's Consiglia

Per chi inizia ora e voglia dotarsi di tutto l'occorrente, Arduino Uno si trova facilmente a un prezzo abbordabile.