Cuprins:

TCA9548A Modul multiplexor I2C - Cu Arduino și NodeMCU: 11 pași
TCA9548A Modul multiplexor I2C - Cu Arduino și NodeMCU: 11 pași

Video: TCA9548A Modul multiplexor I2C - Cu Arduino și NodeMCU: 11 pași

Video: TCA9548A Modul multiplexor I2C - Cu Arduino și NodeMCU: 11 pași
Video: Output DC or AC Voltage using MCP4725 DAC with LCD and PWM to Voltage Converter with Arduino 2024, Noiembrie
Anonim
Image
Image

Ați ajuns vreodată într-o situație în care a trebuit să conectați doi, trei sau mai mulți senzori I2C la Arduino doar pentru a vă da seama că senzorii au o adresă fixă sau aceeași I2C. Mai mult, nu puteți avea două dispozitive cu aceeași adresă pe aceiași pini SDA / SCL!

Deci, care sunt opțiunile tale? Puneți-le pe toate pe multiplexorul ICA-TCA9548A 1-la-8 pentru a-i face pe toți să vorbească între ei pe același autobuz! TCA9548A Breakout permite comunicarea cu mai multe dispozitive I2C care au aceeași adresă, facilitând interfața cu acestea.

Pasul 1: Cerințe hardware

Subiecte acoperite
Subiecte acoperite

Pentru acest tutorial avem nevoie de:

- Pană de pâine

- Multiplexor TCA9548A I2C

- Arduino Uno / Nano orice este la îndemână

- NodeMCU

- Puține afișaje OLED I2C de 0,91 și 0,96

- Cabluri jumper și

- Cablu USB pentru a încărca codul

Pasul 2: Subiecte acoperite

Vom începe discuția prin înțelegerea elementelor de bază ale tehnologiei I2C

Apoi vom afla despre multiplexorul TCA9548A și modul în care masterul și sclavul trimite și primește date folosind tehnologia I2C Apoi vom verifica modul în care putem programa și utiliza multiplexorul în proiectul nostru folosind Arduino și NodeMCU În continuare, vă voi arăta o scurtă demo folosind 8 ecrane I2C OLED și în cele din urmă vom termina tutorialul discutând avantajele și dezavantajele multiplexorului TCA9548A

Pasul 3: Noțiuni de bază ale autobuzului I2C

Bazele autobuzului I2C
Bazele autobuzului I2C
Bazele autobuzului I2C
Bazele autobuzului I2C
Bazele autobuzului I2C
Bazele autobuzului I2C

Circuitul inter-integrat pronunțat I-squared-C (I²C) sau I2C este o tehnologie de magistrală cu două fire (de fapt, 4 fire, deoarece aveți nevoie și de VCC și masă), care este utilizată pentru comunicarea între procesoare multiple și senzori.

Cele două fire sunt:

* SDA - Serial Data (linia de date) și

* SCL - Serial Clock (linie de ceas)

Amintiți-vă, ambele linii sunt „sincrone” „bidirecționale” „deschise” și sunt „trase cu rezistențe”.

Tehnologia autobuzului I2C a fost inițial proiectată de Philips Semiconductors la începutul anilor '80 pentru a permite o comunicare ușoară între componentele care se află pe aceeași placă de circuit.

Cu I2C, puteți conecta mai mulți sclavi la un singur master (cum ar fi SPI) sau puteți avea mai mulți masteri care controlează un singur sau mai mulți sclavi. Atât stăpânii, cât și sclavii pot transmite și primi date. Deci, un dispozitiv pe magistrala I2C poate fi în una dintre aceste patru stări:

* Master transmite - nodul master trimite date către un sclav * Master recepție - nodul master primește date de la un slave

* Slave transmit - nodul slave trimite date către master

* Slave reception - nodul slave primeste date de la master

I2C este un „protocol de comunicație serial” de „distanță scurtă”, astfel încât datele sunt transferate „bit-by-bit” de-a lungul firului unic sau a liniei SDA. Ieșirea biților este sincronizată cu eșantionarea biților printr-un semnal de ceas „partajat” între comandant și sclav. Semnalul ceasului este întotdeauna controlat de comandant. Maestrul generează ceasul și inițiază comunicarea cu sclavii.

Deci, pentru a rezuma>

Număr de fire utilizate: 2

Sincron sau Asincron: Sincron

Serial sau Paralel: Serial

Semnal de ceas controlat de: Master Node

Tensiuni utilizate: +5 V sau +3,3 V

Număr maxim de maeștri: nelimitat

Numărul maxim de sclavi: 1008

Viteza maximă: modul standard = 100 kbps

Mod rapid = 400 kbps

Mod de viteză mare = 3,4 Mbps

Mod ultra rapid = 5 Mbps

Pasul 4: Modulul multiplexor TCA9548A I2C

TCA9548A Modul multiplexor I2C
TCA9548A Modul multiplexor I2C
TCA9548A Modul multiplexor I2C
TCA9548A Modul multiplexor I2C
TCA9548A Modul multiplexor I2C
TCA9548A Modul multiplexor I2C

TCA9548A este un multiplexer I2C cu opt canale (bidirecțional) care permite controlul a opt dispozitive I2C separate de o singură magistrală I2C gazdă. Trebuie doar să conectați senzorii I2C la magistralele multiplexate SCn / SDn. De exemplu, dacă sunt necesare opt afișaje OLED identice într-o aplicație, unul din fiecare afișaj poate fi conectat la fiecare dintre aceste canale: 0-7.

Multiplexorul se conectează la liniile VIN, GND, SDA și SCL ale microcontrolerului. Placa de distribuție acceptă VIN de la 1,65v la 5,5v. Ambele linii SDA și SCL de intrare sunt conectate la VCC printr-un rezistor de tracțiune de 10K (Dimensiunea rezistorului de tracțiune este determinată de cantitatea de capacitate pe liniile I2C). Multiplexorul acceptă atât protocoale I2C normale (100 kHz), cât și rapide (400 kHz). Toți pinii I / O ai TCA9548A sunt toleranți la 5 volți și pot fi folosiți, de asemenea, pentru a traduce de la tensiuni mari la mici sau mici la mari.

Este o idee bună să puneți rezistențe pull-up pe toate canalele TCA9548A, chiar dacă tensiunile sunt aceleași. Motivul pentru aceasta se datorează comutatorului intern NMOS. Nu transmite foarte bine tensiunea înaltă, pe de altă parte transmite foarte bine tensiunile joase. TCA9548A poate fi, de asemenea, utilizat pentru traducerea tensiunii, permițând utilizarea diferitelor tensiuni de magistrală pe fiecare pereche SCn / SDn, astfel încât părțile 1,8-V, 2,5-V sau 3,3-V să poată comunica cu părțile de 5-V. Acest lucru se realizează utilizând rezistențe de tracțiune externe pentru a trage magistrala până la tensiunea dorită pentru master și pentru fiecare canal slave.

Dacă microcontrolerul detectează un conflict de magistrală sau altă funcționare necorespunzătoare, TCA9548A poate fi resetat prin afirmarea unui nivel scăzut la pinul RESET.

Pasul 5:

Imagine
Imagine
Imagine
Imagine
Imagine
Imagine

TCA9548 permite unui singur microcontroler să comunice cu până la '64 senzori ', toți cu aceeași adresă I2C sau diferită, prin atribuirea unui canal unic fiecărei sub-magistrale slave a senzorului.

Când vorbim despre trimiterea de date prin 2 fire către mai multe dispozitive, atunci avem nevoie de o modalitate de a le aborda. Este la fel ca poștașul care vine pe un singur drum și aruncă pachetele poștale în case diferite, deoarece au adrese diferite scrise pe ele.

Ați putea avea la maximum 8 dintre aceste multiplexoare conectate împreună pe adrese 0x70-0x77 pentru a controla 64 din aceleași părți adresate I2C. Prin conectarea celor trei biți de adresă A0, A1 și A2 la VIN puteți obține o combinație diferită de adrese. Așa arată un octet de adresă al TCA9548A. Primii 7 biți se combină pentru a forma adresa slave. Ultimul bit al adresei slave definește operația (citire sau scriere) care trebuie efectuată. Când este mare (1), este selectată o citire, în timp ce o valoare mică (0) selectează o operație de scriere.

Pasul 6: Modul în care comandantul trimite și primește date

Modul în care comandantul trimite și primește date
Modul în care comandantul trimite și primește date
Modul în care comandantul trimite și primește date
Modul în care comandantul trimite și primește date

Următoarea este procedura generală pentru ca un master să acceseze un dispozitiv slave:

1. Dacă un maestru dorește să trimită date unui sclav (SCRIVE):

- Master-transmițătorul trimite o condiție START, urmată de adresele receptorului slave și R / W setate la 0

- Transmițătorul principal trimite date în „registrele de control pe 8 biți” către receptorul-sclav când acesta recunoaște că este gata

- Master-transmițătorul termină transferul cu o stare STOP

2. Dacă un maestru dorește să primească sau să citească date de la un sclav (CITEȘTE):

- Receptorul principal trimite o condiție START, urmată de adresele receptorului slave și R / W setate la 1

- Receptorul principal trimite registrul solicitat pentru a fi citit către transmițătorul sclav

- Receptorul principal primește date de la transmițătorul sclav

- Odată ce toți octeții sunt primiți, Master trimite semnalizare NACK către sclav pentru a opri comunicațiile și a elibera magistrala

- Master-receptor încetează transferul cu o condiție STOP

Un autobuz este considerat inactiv dacă ambele linii SDA și SCL sunt ridicate după o stare STOP.

Pasul 7: Cod

Cod
Cod

Acum, codul Int permite să înceapă prin includerea bibliotecii „Wire” și prin definirea adresei multiplexoarelor.

#include „Wire.h”

#include „U8glib.h”

#define MUX_Address 0x70 // TCA9548A Adresa codificatorilor

Apoi, trebuie să selectăm portul către care dorim să comunicăm și să trimitem datele de pe acesta folosind această funcție:

void selectI2CChannels (uint8_t i) {

dacă (i> 7) returnează;

Wire.beginTransmission (MUX_Address);

Wire.write (1 << i);

Wire.endTransmission ();

}

Apoi vom inițializa afișajul în secțiunea de configurare apelând „u8g.begin ();” pentru fiecare afișaj atașat la MUX "tcaselect (i);"

Odată inițializat, putem face orice vrem doar apelând funcția „tcaselect (i);” unde „i” este valoarea magistralei multiplexate și apoi trimite datele și ceasul în consecință.

Pasul 8: Scanner I2C

Scaner I2C
Scaner I2C

În cazul în care nu sunteți sigur cu privire la adresa dispozitivului scutului dvs. I2C, rulați codul „I2C Scanner” atașat pentru a găsi adresa hexagonală a dispozitivului. Când este încărcat pe un Arduino, schița va scana rețeaua I2C, afișând adresele care răspund.

Pasul 9: Cablare și Demo

Cablare și demonstrație
Cablare și demonstrație
Cablare și demonstrație
Cablare și demonstrație

Cablare:

Să începem prin conectarea multiplexorului la o placă NodeMCU. Conectați:

VIN la 5V (sau 3,3V)

GND la sol

SDA la D2 și

SCL la pinii D1 respectiv

Pentru o placă Arduino conectați-vă:

VIN la 5V (sau 3,3V)

GND la sol

SDA la A4 și

SCL la pinii A5 respectiv

Odată ce MUX este conectat la microcontroler, trebuie doar să conectați senzorii la perechile SCn / SDn.

Acum, să verificăm această demonstrație rapidă în care am conectat 8 afișaje OLED la multiplexorul TCA9548A. Deoarece aceste afișaje utilizează comunicații I2C, acestea comunică cu Arduino folosind doar 2 pini.

Pasul 10: Avantaje și dezavantaje

Avantaje și dezavantaje
Avantaje și dezavantaje

AVANTAJE

* Comunicarea necesită doar două linii de magistrală (fire)

* Există o relație simplă master / slave între toate componentele

* Nu există cerințe stricte privind rata de transmisie ca de exemplu cu RS232, masterul generează un ceas de autobuz

* Hardware-ul este mai puțin complicat decât UART-urile

* Suportă mai mulți maeștri și mai mulți sclavi

* Bitul ACK / NACK confirmă faptul că fiecare cadru este transferat cu succes

* I2C este o „adevărată magistrală multi-master” care oferă arbitraj și detectarea coliziunilor

* Fiecare dispozitiv conectat la magistrală este software-adresabil printr-o adresă unică

* Majoritatea dispozitivelor I2C pot comunica la 100kHz sau 400kHz

* I²C este adecvat pentru periferice unde simplitatea și costul redus de fabricație sunt mai importante decât viteza

* Protocol bine cunoscut și utilizat pe scară largă

DEZAVANTAJE

* Rată de transfer de date mai lentă decât SPI

* Dimensiunea cadrului de date este limitată la 8 biți

* Hardware mai complicat necesar implementării decât tehnologia SPI

Recomandat: