Come utilizzare più dispositivi I2C con Arduino

Come utilizzare più dispositivi I2C con Arduino

Arduino è una scheda elettronica costruita per la progettazione di progetti. Mentre la costruzione di progetti Arduino la comunicazione svolge un ruolo importante. Arduino hanno più protocolli di comunicazione come USART seriale, SPI e I2C. Questi protocolli migliorano la funzionalità e l'utilizzo di Arduino su una vasta gamma di prodotti. Se il nostro dispositivo non supporta un protocollo specifico, allora abbiamo il vantaggio di utilizzare gli altri due. Tra tutti questi I2C c'è uno dei protocolli più avanzati utilizzati nelle schede Arduino. Discutiamo di come configurare il protocollo I2C per più dispositivi.

I2C con Arduino

I2C noto anche come circuito integrato è un protocollo di comunicazione utilizzato nelle schede Arduino. Utilizza solo due righe per la comunicazione e uno dei protocolli più complessi da implementare con una scheda Arduino. Usando I2C possiamo connettere fino a 128 dispositivi con una scheda Arduino su una singola linea di dati.

I2C usa due righe che sono SDA e SCL. Insieme a queste due linee, viene utilizzata una resistenza pull -up per mantenere alti sia la linea SDA che la linea SCL.

I protocolli I2C supportano più configurazione di slave master, il che significa che utilizzando l'Arduino singolo possiamo controllare più dispositivi slave.

Come usare più i2c con Arduino

Poiché i2c ha un supporto di configurazione di maestro-slave in modo da poter controllare più dispositivi contemporaneamente. In alcuni progetti utilizziamo moduli, sensori e hardware diversi che supportano la comunicazione I2C, tutti questi possono essere collegati su un singolo bus i2c se hanno un indirizzo I2C unico. Ma se abbiamo più di un dispositivo che condivide lo stesso indirizzo I2C può causare problemi per entrambi i dispositivi e non possiamo controllarli usando lo stesso bus i2c. Tuttavia, questo problema può essere risolto utilizzando un file TCA9548A Multiplexer i2c, questo mux utilizza un singolo bus i2c da Arduino e si converte in 8 canali diversi con tutti con indirizzi separati.

Tutti gli indirizzi I2C sono principalmente di due tipi 7 bit o 10 bit. La maggior parte delle volte i dispositivi utilizzano 7 bit i2c, tuttavia i2c a 10 bit viene utilizzato raramente nei dispositivi. Quindi, significa utilizzare un indirizzo a 7 bit che Arduino può collegare 128 dispositivi.

Ora collegheremo due diversi dispositivi con protocolli I2C unici con linee Arduino Uno I2C.

Schema elettrico

La figura seguente mostra uno schermo OLED collegato ad Arduino usando le linee I2C SDA e SCL. Mentre uno schermo LCD 16x2 è anche collegato utilizzando lo stesso bus i2c in parallelo con lo schermo OLED. Una cosa importante da notare qui è che il LCD 16x2 utilizza solo 4 fili i2C anziché 8 fili per il suo controllo. Insieme a LCD abbiamo usato un modulo I2C con Arduino che richiede solo 4 pin per il display LCD: VCC, GND, SDA, SCL. Usando il modulo I2C con LCD abbiamo salvato 4 pin digitali su Arduino, il che ridurrà su tutti i cablaggi e migliorerà la funzionalità di Arduino.

Come controllare gli indirizzi dei dispositivi I2C

Prima di collegare qualsiasi dispositivo I2C con Arduino è importante notare quale indirizzo quel dispositivo specifico è collegato. Alcuni moduli hanno scritto gli indirizzi I2C predefiniti mentre alcuni di essi non hanno istruzioni per controllare gli indirizzi I2C. Per risolvere questo problema, abbiamo a filo Codice della libreria che controlla tutti i dispositivi I2C connessi e a quale indirizzo sono collegati ad Arduino. Questo aiuterà a debug e miglioramento del circuito Arduino.

Codice

#include /*include il filo.Biblioteca H*/
void setup ()

Filo.inizio(); /*Filo i2c comunicazione avvia*/
Seriale.Inizia (9600); /*Tasso di baud impostato per la comunicazione seriale*/
Mentre (!Seriale); /*In attesa di output seriale sul monitor seriale*/
Seriale.println ("\ NI2C Scanner");

void loop ()

byte err, ADR; /*L'errore variabile è definito con indirizzo di I2C*/
int numero_of_devices;
Seriale.println ("scansione.");
numero_of_devices = 0;
per (ADR = 1; ADR < 127; adr++ )

Filo.BeginTransmission (ADR);
err = filo.endTransmission ();
if (err == 0)

Seriale.stampa ("dispositivo i2c all'indirizzo 0x");
if (ADR < 16)
Seriale.print ("0");
Seriale.stampa (ADR, esadecimale);
Seriale.println (" !");
numero_of_devices ++;

altrimenti se (err == 4)

Seriale.print ("Errore sconosciuto all'indirizzo 0x");
if (ADR < 16)
Seriale.print ("0");
Seriale.println (ADR, esadecimale);


if (numero_of_devices == 0)
Seriale.println ("no i2c dispositivi allegati \ n");
altro
Seriale.println ("done \ n");
ritardo (5000); /*Aspetta 5 secondi per la prossima scansione I2C*/

Questo codice aiuterà a trovare il numero di dispositivi I2C e il loro indirizzo a cui sono connessi. Questo codice è comunemente indicato come codice scanner I2C.

Innanzitutto, abbiamo incluso un "Filo.H" biblioteca. Quindi nella parte di configurazione del codice abbiamo iniziato questa libreria. Successivamente inizializziamo la comunicazione seriale definendo il tasso di baud 9600. Ciò contribuirà a vedere l'output sul monitor seriale.

Nella sezione Loop, abbiamo definito due variabili "Err" E "ADR". Quindi abbiamo definito un'altra variabile "Dispositivi" e impostalo su zero. Dopo quello a per Loop è inizializzato con valori tra 0 e 127.

Successivamente, inseriamo l'indirizzo sul filo usando filo.BeginTransmission (), Lo scanner I2C cercherà il riconoscimento dei dispositivi e il loro indirizzo. Il valore lettura verrà archiviato nella variabile "errore". Il valore di restituzione sarà uguale a 0 se il dispositivo riconosce l'indirizzo altrimenti il ​​valore diventerà 4. Successivamente, abbiamo utilizzato una condizione if che stamperà l'indirizzo del dispositivo I2C se il valore è <16. Final address of the device is printed in Hexadecimal form.

Circuito

Produzione

L'uscita di dispositivi collegati ad Arduino su protocolli I2C apparirà come mostrato nel diagramma di seguito. Qui 0x3c è l'indirizzo del LCD I2C Mentre 0x27 è l'indirizzo dell'OLED schermo.

Conclusione

I dispositivi di collegamento che utilizzano i2c in Arduino possono salvare una serie di pin. Più dispositivi possono essere collegati utilizzando I2C nella configurazione di Master-Slave, ma la cosa principale da considerare è che tutti i dispositivi devono avere un indirizzo I2C univoco, non ci sono due dispositivi che hanno lo stesso indirizzo non possono essere gestiti utilizzando un singolo bus i2c. Quindi, suggeriamo che una soluzione a questo problema sia usare un TCA9548A Multiplexer i2c, può convertire un singolo bus i2c in 8 canali diversi.