Sommario:

Modulo multiplexer I2C TCA9548A - Con Arduino e NodeMCU: 11 passaggi
Modulo multiplexer I2C TCA9548A - Con Arduino e NodeMCU: 11 passaggi

Video: Modulo multiplexer I2C TCA9548A - Con Arduino e NodeMCU: 11 passaggi

Video: Modulo multiplexer I2C TCA9548A - Con Arduino e NodeMCU: 11 passaggi
Video: HC4067 16-Channel Analog Multiplexer/Demultiplexer 2024, Giugno
Anonim
Image
Image

Ti sei mai trovato in una situazione in cui dovevi collegare due, tre o più sensori I2C al tuo Arduino solo per renderti conto che i sensori hanno un indirizzo I2C fisso o uguale. Inoltre, non puoi avere due dispositivi con lo stesso indirizzo sugli stessi pin SDA/SCL!

Quindi quali sono le tue opzioni? Mettili tutti sul multiplexer I2C 1-to-8 TCA9548A per farli parlare tutti sullo stesso bus! Il TCA9548A Breakout consente la comunicazione con più dispositivi I2C che hanno lo stesso indirizzo, semplificando l'interfaccia con essi.

Passaggio 1: requisiti hardware

Argomenti trattati
Argomenti trattati

Per questo tutorial abbiamo bisogno di:

- Tagliere

- Multiplexer I2C TCA9548A

- Arduino Uno/Nano qualunque cosa sia a portata di mano

- NodeMCU

- Pochi display OLED I2C da 0,91 e 0,96

- Cavi jumper, e

- Cavo USB per caricare il codice

Passaggio 2: argomenti trattati

Inizieremo la nostra discussione comprendendo le basi della tecnologia I2C

Quindi impareremo a conoscere il multiplexer TCA9548A e come il master e lo slave inviano e ricevono dati utilizzando la tecnologia I2C Quindi verificheremo come possiamo programmare e utilizzare il multiplexer nel nostro progetto utilizzando Arduino e NodeMCU Successivamente, ti mostrerò un rapido demo utilizzando 8 display OLED I2C e infine finiremo il tutorial discutendo i vantaggi e gli svantaggi del multiplexer TCA9548A

Passaggio 3: basi del bus I2C

Nozioni di base sul bus I2C
Nozioni di base sul bus I2C
Nozioni di base sul bus I2C
Nozioni di base sul bus I2C
Nozioni di base sul bus I2C
Nozioni di base sul bus I2C

Il circuito inter-integrato pronunciato I-squared-C (I²C) o I2C è una tecnologia bus a due fili (beh, in realtà 4 fili perché hai anche bisogno di VCC e Ground) che viene utilizzata per la comunicazione tra più processori e sensori.

I due fili sono:

* SDA - Dati seriali (linea dati) e

* SCL - Orologio seriale (linea orologio)

Ricorda, entrambe queste linee sono 'sincrone' 'bidirezionali' 'open-drain' e sono 'tirate con resistori'.

La tecnologia del bus I2C è stata originariamente progettata da Philips Semiconductors nei primi anni '80 per consentire una facile comunicazione tra i componenti che risiedono sullo stesso circuito stampato.

Con I2C, puoi collegare più slave a un singolo master (come SPI) oppure puoi avere più master che controllano uno o più slave. Sia i master che gli slave possono trasmettere e ricevere dati. Quindi, un dispositivo sul bus I2C può trovarsi in uno di questi quattro stati:

* Trasmissione master – il nodo master sta inviando dati a uno slave* Ricezione master – il nodo master sta ricevendo dati da uno slave

* Trasmissione slave: il nodo slave sta inviando dati al master

* Ricezione slave: il nodo slave sta ricevendo dati dal master

I2C è un "protocollo di comunicazione seriale" a "corta distanza", quindi i dati vengono trasferiti "bit per bit" lungo il filo singolo o la linea SDA. L'uscita dei bit è sincronizzata al campionamento dei bit da un segnale di clock 'condiviso' tra il master e lo slave. Il segnale di clock è sempre controllato dal master. Il Master genera l'orologio e avvia la comunicazione con gli slave.

Quindi, per riassumere>

Numero di fili utilizzati: 2

Sincrono o asincrono: sincrono

Seriale o Parallelo: Seriale

Segnale di clock controllato da: Master Node

Tensioni utilizzate: +5 V o +3,3 V

Numero massimo di Master: Illimitato

Numero massimo di Slave: 1008

Velocità massima: modalità standard = 100 kbps

Modalità veloce = 400 kbps

Modalità ad alta velocità = 3,4 Mbps

Modalità ultra veloce = 5 Mbps

Passaggio 4: modulo multiplexer I2C TCA9548A

Modulo multiplexer I2C TCA9548A
Modulo multiplexer I2C TCA9548A
Modulo multiplexer I2C TCA9548A
Modulo multiplexer I2C TCA9548A
Modulo multiplexer I2C TCA9548A
Modulo multiplexer I2C TCA9548A

TCA9548A è un multiplexer I2C a otto canali (bidirezionale) che consente di controllare otto dispositivi I2C separati da un singolo bus I2C host. È sufficiente collegare i sensori I2C ai bus multiplex SCn / SDn. Ad esempio, se in un'applicazione sono necessari otto display OLED identici, uno di ciascun display può essere collegato a ciascuno di questi canali: 0-7.

Il Multiplexer si collega alle linee VIN, GND, SDA e SCL del microcontrollore. La breakout board accetta VIN da 1.65v a 5.5v. Entrambe le linee di ingresso SDA e SCL sono collegate a VCC tramite un resistore di pull-up da 10K (la dimensione del resistore di pull-up è determinata dalla quantità di capacità sulle linee I2C). Il multiplexer supporta i protocolli I2C normali (100 kHz) e veloci (400 kHz). Tutti i pin I/O di TCA9548A sono tolleranti a 5 volt e possono essere utilizzati anche per convertire da alta a bassa o da bassa ad alta tensione.

È una buona idea inserire resistori di pull-up su tutti i canali di TCA9548A, anche se le tensioni sono le stesse. Il motivo è dovuto all'interruttore NMOS interno. Non trasmette molto bene l'alta tensione, d'altra parte trasmette molto bene le basse tensioni. Il TCA9548A può essere utilizzato anche per la traduzione della tensione, consentendo l'uso di diverse tensioni bus su ciascuna coppia SCn/SDn in modo che le parti da 1,8 V, 2,5 V o 3,3 V possano comunicare con parti da 5 V. Ciò si ottiene utilizzando resistori di pull-up esterni per portare il bus alla tensione desiderata per il master e ciascun canale slave.

Se il microcontrollore rileva un conflitto di bus o un'altra operazione impropria, il TCA9548A può essere ripristinato asserendo un valore basso al pin RESET.

Passaggio 5:

Immagine
Immagine
Immagine
Immagine
Immagine
Immagine

TCA9548 consente a un singolo microcontrollore di comunicare con un massimo di '64 sensori' tutti con lo stesso o diverso indirizzo I2C assegnando un canale univoco a ciascun sub-bus slave del sensore.

Quando parliamo di inviare dati su 2 fili a più dispositivi, abbiamo bisogno di un modo per indirizzarli. È come il postino che arriva da un'unica strada e lascia i pacchetti di posta in case diverse perché hanno scritti indirizzi diversi.

Si potrebbero avere al massimo 8 di questi multiplexer collegati tra loro su indirizzi 0x70-0x77 in modo da controllare 64 delle stesse parti indirizzate I2C. Collegando i tre bit di indirizzo A0, A1 e A2 al VIN è possibile ottenere diverse combinazioni degli indirizzi. Ecco come appare un byte di indirizzo del TCA9548A. I primi 7 bit si combinano per formare l'indirizzo slave. L'ultimo bit dell'indirizzo dello slave definisce l'operazione (lettura o scrittura) da eseguire. Quando è alto (1), viene selezionata una lettura, mentre basso (0) seleziona un'operazione di scrittura.

Passaggio 6: come il master invia e riceve i dati

Come il Master invia e riceve i dati
Come il Master invia e riceve i dati
Come il Master invia e riceve i dati
Come il Master invia e riceve i dati

La seguente è la procedura generale per un master per accedere a un dispositivo slave:

1. Se un master vuole inviare dati a uno slave (WRITE):

– Il trasmettitore master invia una condizione di START seguita dagli indirizzi del ricevitore slave e R/W impostato a 0

– Il trasmettitore master invia i dati nei "registri di controllo a 8 bit" al ricevitore slave quando lo slave riconosce che è pronto

– Il trasmettitore master termina il trasferimento con una condizione di STOP

2. Se un master vuole ricevere o leggere dati da uno slave (READS):

– Il ricevitore master invia una condizione di START seguita dagli indirizzi del ricevitore slave e R/W impostato a 1

– Il ricevitore master invia il registro richiesto da leggere al trasmettitore slave

– Il ricevitore master riceve i dati dal trasmettitore slave

- Una volta ricevuti tutti i byte il Master invia la segnalazione NACK allo slave di interrompere le comunicazioni e rilasciare il bus

- Il ricevitore master termina il trasferimento con una condizione di STOP

Un bus è considerato inattivo se entrambe le linee SDA e SCL sono alte dopo una condizione di STOP.

Passaggio 7: codice

Codice
Codice

Ora, il codice Int inizia includendo la libreria "Wire" e definendo l'indirizzo del multiplexer.

#include "Wire.h"

#include "U8glib.h"

#define MUX_Address 0x70 // TCA9548A Indirizzo encoder

Quindi dobbiamo selezionare la porta con cui vogliamo comunicare e inviare i dati su di essa utilizzando questa funzione:

void selectI2CChannels(uint8_t i) {

se (i > 7 ritorna);

Wire.beginTransmission(MUX_Address);

Wire.write(1 << i);

Wire.endTransmission();

}

Successivamente inizializzeremo il display nella sezione di configurazione chiamando "u8g.begin();" per ogni display collegato al MUX "tcaselect(i);"

Una volta inizializzato, possiamo quindi fare ciò che vogliamo semplicemente chiamando la funzione "tcaselect(i);" dove "i" è il valore del bus multiplexato e quindi invia i dati e l'orologio di conseguenza.

Passaggio 8: scanner I2C

Scanner I2C
Scanner I2C

Nel caso in cui non sei sicuro dell'indirizzo del dispositivo del tuo shield I2C, esegui il codice 'I2C Scanner' allegato per trovare l'indirizzo esadecimale del tuo dispositivo. Quando viene caricato su un Arduino, lo sketch eseguirà la scansione della rete I2C, mostrando gli indirizzi che stanno rispondendo.

Passaggio 9: cablaggio e demo

Cablaggio e demo
Cablaggio e demo
Cablaggio e demo
Cablaggio e demo

Cablaggio:

Iniziamo collegando il multiplexer a una scheda NodeMCU. Collegare:

VIN a 5V (o 3.3V)

GND a terra

SDA a D2 e

Pin SCL a D1 rispettivamente

Per una scheda Arduino collegare:

VIN a 5V (o 3.3V)

GND a terra

SDA in A4 e

rispettivamente da SCL a A5

Una volta collegato il MUX al microcontrollore, è sufficiente collegare i sensori alle coppie SCn/SDn.

Ora, diamo un'occhiata a questa rapida demo in cui ho collegato 8 display OLED al multiplexer TCA9548A. Poiché questi display utilizzano la comunicazione I2C, comunicano con Arduino utilizzando solo 2 pin.

Passaggio 10: vantaggi e svantaggi

Vantaggi e svantaggi
Vantaggi e svantaggi

VANTAGGI

* La comunicazione richiede solo due linee bus (fili)

* Esiste una semplice relazione master/slave tra tutti i componenti

* Nessun requisito di baud rate rigoroso come ad esempio con RS232, il master genera un clock del bus

* L'hardware è meno complicato degli UART

* Supporta più master e più slave

* Il bit ACK/NACK conferma che ogni frame è stato trasferito con successo

* I2C è un "vero bus multi-master" che fornisce arbitraggio e rilevamento delle collisioni

* Ogni dispositivo connesso al bus è indirizzabile via software da un indirizzo univoco

* La maggior parte dei dispositivi I2C può comunicare a 100kHz o 400kHz

* I²C è appropriato per le periferiche in cui semplicità e bassi costi di produzione sono più importanti della velocità

* Protocollo ben noto e ampiamente utilizzato

SVANTAGGI

* Velocità di trasferimento dati più lenta rispetto a SPI

* La dimensione del frame di dati è limitata a 8 bit

* Hardware più complicato da implementare rispetto alla tecnologia SPI

Consigliato: