In questo articolo vedremo cos'è un'interfaccia I2C (ay-tu-si, i-two-tse), quali sono le sue caratteristiche e come lavorarci.
È necessario
- -Arduino;
- - potenziometro digitale AD5171;
- - Diodo ad emissione luminosa;
- - Resistenza da 220 ohm;
- - 2 resistori per 4,7 kOhm;
- - fili di collegamento.
Istruzioni
Passo 1
Il protocollo di comunicazione seriale IIC (chiamato anche I2C - Inter-Integrated Circuits) utilizza due linee di comunicazione bidirezionali per trasferire i dati, chiamate bus SDA (Serial Data) e bus SCL (Serial Clock). Ci sono anche due linee elettriche. I bus SDA e SCL sono collegati al bus di alimentazione tramite resistori.
Nella rete è presente almeno un Master che avvia la trasmissione dei dati e genera segnali di sincronizzazione. La rete dispone anche di slave che trasmettono dati su richiesta del master. Ogni dispositivo slave ha un indirizzo univoco al quale il master lo indirizza. L'indirizzo del dispositivo è indicato nel passaporto (scheda tecnica). È possibile collegare fino a 127 dispositivi a un bus I2C, inclusi diversi master. I dispositivi possono essere collegati al bus durante il funzionamento, ad es. supporta il collegamento a caldo.
Passo 2
Arduino utilizza due porte per lavorare sull'interfaccia I2C. Ad esempio, in Arduino UNO e Arduino Nano, la porta analogica A4 corrisponde a SDA, la porta analogica A5 corrisponde a SCL.
Per altri modelli di scheda:
Arduino Pro e Pro Mini - A4 (SDA), A5 (SCL)
Arduino Mega - 20 (SDA), 21 (SCL)
Arduino Leonardo - 2 (SDA), 3 (SCL)
Arduino Due - 20 (SDA), 21 (SCL), SDA1, SCL1
Passaggio 3
Per facilitare lo scambio di dati con i dispositivi tramite il bus I2C, è stata scritta una libreria standard "Wire" per Arduino. Ha le seguenti funzioni:
inizio (indirizzo) - inizializzazione della libreria e connessione al bus I2C; se non viene specificato alcun indirizzo, il dispositivo connesso è considerato il master; Viene utilizzato l'indirizzamento a 7 bit;
requestFrom() - utilizzato dal master per richiedere un certo numero di byte allo slave;
beginTransmission (address) - l'inizio del trasferimento dei dati al dispositivo slave a un indirizzo specifico;
endTransmission() - terminazione della trasmissione dei dati allo slave;
write() - scrittura di dati dallo slave in risposta a una richiesta;
available() - restituisce il numero di byte di informazioni disponibili per la ricezione dallo slave;
read() - legge un byte trasferito dallo slave al master o dal master allo slave;
onReceive() - indica la funzione da chiamare quando lo slave riceve una trasmissione dal master;
onRequest() - Indica una funzione da chiamare quando il master riceve una trasmissione dallo slave.
Passaggio 4
Vediamo come lavorare con il bus I2C utilizzando Arduino.
Innanzitutto, assembleremo il circuito, come mostrato in figura. Controlleremo la luminosità del LED utilizzando il potenziometro digitale a 64 posizioni AD5171, che si collega al bus I2C. L'indirizzo a cui faremo riferimento al potenziometro è 0x2c (44 in decimale).
Passaggio 5
Ora apriamo uno schizzo dagli esempi della libreria "Wire":
File -> Campioni -> Filo -> potenziometro_digitale. Carichiamolo nella memoria di Arduino. Accendiamolo.
Vedete, la luminosità del LED aumenta ciclicamente e poi si spegne improvvisamente. In questo caso, controlliamo il potenziometro utilizzando Arduino tramite il bus I2C.