Cuprins:
- Pasul 1: Cerințe hardware
- Pasul 2: Subiecte acoperite
- Pasul 3: Noțiuni de bază ale autobuzului I2C
- Pasul 4: Modulul multiplexor TCA9548A I2C
- Pasul 5:
- Pasul 6: Modul în care comandantul trimite și primește date
- Pasul 7: Cod
- Pasul 8: Scanner I2C
- Pasul 9: Cablare și Demo
- Pasul 10: Avantaje și dezavantaje
- Pasul 11: Mulțumesc
Video: TCA9548A Modul multiplexor I2C - Cu Arduino și NodeMCU: 11 pași
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-30 11:45
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
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
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 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:
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
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
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
Î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:
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
* 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:
Interfacing Sensirion, SPS-30, senzor de particule cu Arduino Duemilanove folosind modul I2C: 5 pași
Interfacing Sensirion, SPS-30, senzor de particule cu Arduino Duemilanove Utilizarea modului I2C: Când mă uitam la interfața senzorilor SPS30, am realizat că majoritatea surselor erau pentru Raspberry Pi, dar nu atât de multe pentru Arduino. Petrec puțin timp pentru a face senzorul să funcționeze cu Arduino și am decis să postez experiența mea aici, astfel încât să poată
Tutorial: Cum Arduino controlează mai multe dispozitive cu aceeași adresă utilizând multiplexorul TCA9548A I2C: 3 pași
Tutorial: Cum Arduino controlează mai multe dispozitive cu aceeași adresă utilizând multiplexorul TCA9548A I2C: Descriere: Modulul multiplexor TCA9548A I2C permite conectarea dispozitivelor cu aceeași adresă I2C (până la 8 aceeași adresă I2C) conectate la un microcontroler. Multiplexorul acționează ca un gatekeeper, transferând comenzile la setul selectat o
Modul de controler LCD Uber I2C: 6 pași
Modulul de controler LCD Uber I2C: Preambul Acest instructabil detaliază cum să creați un modul de controler HD44780 pe bază de LCD (imaginea 1 de mai sus). Modulul permite utilizatorului să controleze toate aspectele LCD-ului prin program pe I2C, cuprinzând; LCD și afișaj, contrast și lumină de fundal intensă
Placă HiFive1 Arduino cu modul ESP-01 Tutorial modul: 5 pași
Placă Arduino HiFive1 cu modul ESP-01 Tutorial modul: HiFive1 este prima placă bazată pe RISC-V compatibilă Arduino construită cu CPU FE310 de la SiFive. Placa este de aproximativ 20 de ori mai rapidă decât Arduino UNO, dar la fel ca placa UNO, nu are nici o conectivitate wireless. Din fericire, există mai multe
Arduino + Java (Multiplexor): 16 pași
Arduino + Java (Multiplexor): Herramientas a need: 1 Arduino Uno con cable USB.1 Protoboard.8 Cables.5 Leds.1 Resistencia 330