Sommario:

Presentazione di I2C con moduli Zio e Qwiic: 6 passaggi
Presentazione di I2C con moduli Zio e Qwiic: 6 passaggi

Video: Presentazione di I2C con moduli Zio e Qwiic: 6 passaggi

Video: Presentazione di I2C con moduli Zio e Qwiic: 6 passaggi
Video: Usare il convertitore ADC ADS1115 via i2c con Arduino - Video 346 2024, Dicembre
Anonim
Presentazione di I2C con moduli Zio e Qwiic
Presentazione di I2C con moduli Zio e Qwiic

Robin Sharma ha dichiarato: "Piccoli miglioramenti quotidiani nel tempo portano a risultati sorprendenti". Potresti pensare: "Aw, un altro post I2C?". Bene, ci sono sicuramente migliaia di informazioni quando si tratta di I2C. Ma restate sintonizzati, questo non è solo un altro articolo di I2C. Il sistema Qwiic Connect e le schede breakout periferiche Zio sono decisamente rivoluzionarie per I²C!

introduzione

Se stai realizzando progetti elettronici e fai cose fantastiche, potresti aver realizzato che man mano che i tuoi progetti diventano più grandi, la tua breadboard inizia a sembrare una fossa di serpenti (un po' disordinata vero?).

Inoltre, se hai più progetti in corso, passi un sacco di tempo a cambiare i cavi da un progetto all'altro.

Siamo creatori, quindi comprendiamo la lotta. Il nostro contributo più recente alla comunità OHS è un sistema di prototipazione modulare chiamato ZIO, che adotta il sistema di connessione Qwiic. Qwiic è un modo molto conveniente per comunicare un circuito programmabile a sensori, attuatori e schede breakout tramite I²C.

Passaggio 1: cos'è I²C e perché ci piace

Che cos'è I²C e perché ci piace
Che cos'è I²C e perché ci piace

I²C è il bus multimaster più utilizzato, il che significa che allo stesso bus possono essere collegati più chip. Viene utilizzato in molte applicazioni tra un master e uno slave o più dispositivi master e slave. Dai microcontrollori, agli smartphone, alle applicazioni industriali, in particolare per i dispositivi video come i monitor dei computer. Può essere facilmente implementato in molti progetti elettronici (e recentemente anche più facilmente con il connettore Qwiic).

Se dovessimo descrivere I²C in due parole, probabilmente useremmo semplicità e flessibilità.

Uno dei maggiori vantaggi di I²C rispetto ad altri protocolli di comunicazione è che si tratta di un'interfaccia a due fili, il che significa che richiede solo due fili di segnale, SDA (Serial Data Line) e SCL (Serial Clock Line). Potrebbe non essere il protocollo più veloce, ma è noto per essere molto flessibile, consentendo flessibilità nella tensione del bus.

Un'altra caratteristica significativa che rende attraente questo autobus è la comunione tra padrone e schiavo. È possibile collegare più dispositivi allo stesso bus e non è necessario modificare il cablaggio tra i dispositivi poiché ogni dispositivo ha un indirizzo univoco (il master seleziona il dispositivo con cui comunicare).

Passaggio 2: diamo un'occhiata più da vicino

Diamo un'occhiata più da vicino
Diamo un'occhiata più da vicino
Diamo un'occhiata più da vicino
Diamo un'occhiata più da vicino
Diamo un'occhiata più da vicino
Diamo un'occhiata più da vicino
Diamo un'occhiata più da vicino
Diamo un'occhiata più da vicino

Quindi, come funziona I²C? In precedenza abbiamo detto che una delle caratteristiche più significative è la tolleranza di tensione, questo è possibile poiché I²C utilizza un collettore aperto (noto anche come open drain) per le linee di comunicazione SDA e SCL.

SCL è il segnale di clock, sincronizza il trasferimento dati tra i dispositivi sul bus I²C ed è generato dal master. Mentre SDA trasporta i dati da inviare o ricevere dai sensori o da altri dispositivi collegati al bus.

L'uscita del segnale è collegata a terra, il che significa che ogni dispositivo è imposto come basso. Per ripristinare il segnale alto, entrambe le linee sono collegate a una tensione di alimentazione positiva tramite un resistore di pull up da terminare.

Con i moduli ZIO ti abbiamo coperto, tutte le nostre schede breakout incorporano il resistore di pull-up necessario.

I²C segue un protocollo di messaggio per comunicare il master con i dispositivi slave. Le due linee (SCL e SDA) sono comuni a tutti gli slave I²C, tutti gli slave sul bus ascoltano il messaggio.

Il protocollo del messaggio segue il formato mostrato nell'immagine allegata:

Potrebbe sembrare complicato a prima vista, ma abbiamo alcune buone notizie. Quando si usa Arduino IDE c'è la libreria Wire.h, per semplificare tutta la configurazione per il protocollo di messaggi I²C.

La condizione di avvio viene generata quando la linea dati (SDA) scende in basso mentre la linea di clock (SCL) è ancora alta. Quando si imposta un progetto sull'interfaccia Arduino non è necessario preoccuparsi di generare la condizione di avvio, verrà avviato con una funzione specifica (Wire.beginTransmission(slaveAddress)).

Inoltre, questa funzione avvia anche la trasmissione con l'indirizzo slave specifico. Per scegliere lo slave con cui comunicare sul bus condiviso, il master procede a trasmettere l'indirizzo allo slave per comunicare. Dopo che l'indirizzo è stato impostato per comunicare con lo slave corrispondente, segue il messaggio con un bit di lettura o scrittura, a seconda della modalità selezionata.

Il salvataggio dà una risposta con un riconoscimento (ACK o NACK), e altri dispositivi slave sul bus scontano il resto dei dati fino a quando il messaggio è completo e il bus è libero. Dopo l'ACK, una sequenza di un registro di indirizzamento interno degli slave continua la trasmissione.

Quando i dati vengono inviati, il messaggio di trasferimento termina con una condizione di arresto. Per terminare la trasmissione la linea dati passa ad alta e la linea di clock rimane alta.

Passaggio 3: I²C e ZIO

I²C e ZIO
I²C e ZIO

Abbiamo capito che sarebbe stato meglio stampare tutte le informazioni sopra in una conversazione tra un master (a.k.a Zuino, il nostro micro) e gli slave (a.k.a ZIO breakout board).

In questo esempio di base stiamo usando il sensore di distanza ZIO TOF e il display OLED ZIO. Il TOF fornisce le informazioni sulla distanza mentre lo ZIO Oled visualizza i dati. I componenti e i dispositivi utilizzati:

  • ZUINO M UNO - il Maestro
  • Display OLED ZIO - Slave_01
  • Sensore di distanza ZIO TOF - Slave_02
  • Cavo Qwiic - Facile connessione per dispositivi I²C

Ecco come è facile collegare le schede tra loro utilizzando Qwiic, non è necessaria alcuna breadboard, non sono necessari cavi aggiuntivi o pin ZUINO. La linea seriale Orologio e Dati dello ZUINO si collega automaticamente al Sensore di Distanza e all'OLED tramite il connettore Qwiic. Gli altri due cavi sono il 3V3 e il GND.

Prima di tutto, diamo un'occhiata alle informazioni necessarie, per comunicare il master con gli slave avremmo bisogno di conoscere gli indirizzi univoci.

Dispositivo: sensore di distanza ZIO

  • Numero parte: RFD77402
  • Indirizzo I2C: 0x4C
  • Collegamento alla scheda tecnica

Dispositivo: display OLED ZIO

  • Numero parte: SSD1306
  • Indirizzo: 0x3C
  • Collegamento alla scheda tecnica

Per trovare l'indirizzo univoco per i dispositivi slave, aprire il datasheet fornito. Per il sensore di distanza l'indirizzo è fornito nella sezione Interfaccia modulo. Ogni sensore o componente ha una scheda tecnica diversa con informazioni diverse fornite. A volte può essere difficile trovarlo su un foglio dati di 30 pagine (suggerimento: apri lo strumento di ricerca nel visualizzatore PDF e digita "indirizzo" o "ID dispositivo" per una ricerca rapida).

Ora che è noto l'indirizzo univoco per ogni dispositivo, per leggere/scrivere dati, è necessario identificare l'indirizzo del registro interno (anche dal datasheet). Dando un'occhiata al datasheet del sensore di distanza ZIO l'indirizzo per ottenere la distanza corrisponde a 0x7FF.

In questo caso particolare non abbiamo davvero bisogno di queste informazioni per utilizzare il sensore poiché la libreria lo fa già.

Passaggio successivo, mani sul codice. ZUINO M UNO è compatibile con Arduino IDE, il che rende la configurazione molto più semplice. Le librerie necessarie per questo progetto sono le seguenti:

  • Filo.h
  • Adafruit_GFX.h
  • Adafruit_SSD1306.h
  • SparkFun_RFD77402_Arduino_Library.h

Wire.h è una libreria arduino, le due librerie Adafruit sono utilizzate per l'OLED e l'ultima è utilizzata per il sensore di distanza. Controlla questo tutorial su come collegare le librerie *.zip all'IDE di Arduino.

Guardando il codice, prima devono essere dichiarate le librerie e l'indirizzo per l'OLED.

In setup() inizia la trasmissione e viene visualizzato il testo per la funzionalità del sensore di distanza.

Il loop() misura la distanza e l'OLED la stampa.

Controlla il codice sorgente di esempio sul link github.

L'utilizzo di entrambe le schede breakout è piuttosto semplice in tutti i sensi. Sul lato hardware, il connettore Qwiic rende la configurazione hardware più veloce e molto meno complicata rispetto a una breadboard e cavi di collegamento. E per il firmware, l'utilizzo delle librerie corrispondenti per la comunicazione I2C, il sensore e il display rende il codice molto più semplice.

Passaggio 4: qual è la lunghezza massima del cavo?

La lunghezza massima dipende dai resistori di pull up utilizzati per SDA e SCL e dalla capacità del cavo. I resistori determinano anche la velocità del bus, minore è la velocità del bus, maggiore è il limite del cavo. La capacità del cavo limita il numero di dispositivi sul bus, nonché la lunghezza del cavo. Le applicazioni tipiche limitano la lunghezza del cavo a 2,5-3,5 m (9-12 piedi), ma vi è una variazione a seconda del cavo utilizzato. Per riferimento, la lunghezza massima sulle applicazioni I2C che utilizzano cavi a doppino intrecciato schermati da 22 AWG è di circa 1 m (3 piedi) a 100 kbaund, 10 m (30 piedi) a 10 kbaud.

Ci sono alcuni siti come mogami o WolframAlpha che permettono di stimare la lunghezza del cavo.

Passaggio 5: come collegare più dispositivi sullo stesso bus?

Come collegare più dispositivi sullo stesso bus?
Come collegare più dispositivi sullo stesso bus?
Come collegare più dispositivi sullo stesso bus?
Come collegare più dispositivi sullo stesso bus?

I2C è un bus seriale, dove tutti i dispositivi sono collegati a un bus condiviso. Con il connettore Qwiic le diverse schede breakout possono essere collegate una dopo l'altra utilizzando il connettore Qwiic. Ogni scheda ha almeno 2 connettori Qwiic.

Abbiamo creato diverse schede per risolvere alcune delle limitazioni di Qwiic e I2C. La scheda adattatore Zio Qwiic viene utilizzata per connettersi tramite dispositivi Qwiic senza un connettore Qwiic, utilizzando un cavo header maschio da Qwiic a breadboard. Questo semplice trucco crea possibilità illimitate.

Per connettere diversi dispositivi su un bus o su una rete ad albero, abbiamo creato Zio Qwiic Hub.

Ultimo ma non meno importante, Zio Qwiic MUX consente la connessione di due o più dispositivi utilizzando lo stesso indirizzo.

Passaggio 6: cos'è la terminazione I2C?

I2C è necessario per terminare, quindi la linea è libera di aggiungere altri dispositivi. Questo può creare un po' di confusione, poiché il termine di terminazione è comunemente usato per descrivere i resistori di pull-up del bus (per fornire uno stato predefinito, in questo caso per fornire corrente al circuito). Per le schede Zuino, il valore del resistore è 4.7kΩ.

Se la terminazione viene omessa, non ci sarà alcuna comunicazione sul bus, il master non sarebbe in grado di generare la condizione di avvio, quindi il messaggio non verrà trasmesso agli slave.

Per ulteriori informazioni e funzionalità di Zio, controlla gli ultimi prodotti Zio. L'obiettivo di questo articolo è spiegare le basi della comunicazione I²C e come funziona con il connettore Zio e Qwiic. Restate sintonizzati per ulteriori aggiornamenti.

Consigliato: