Innholdsfortegnelse:

TCA9548A I2C Multiplexer Module - With Arduino and NodeMCU: 11 Steps
TCA9548A I2C Multiplexer Module - With Arduino and NodeMCU: 11 Steps

Video: TCA9548A I2C Multiplexer Module - With Arduino and NodeMCU: 11 Steps

Video: TCA9548A I2C Multiplexer Module - With Arduino and NodeMCU: 11 Steps
Video: TCA9548A I2C Multiplexer Module - With Arduino and NodeMCU 2024, November
Anonim
Image
Image

Kom du noen gang i en situasjon der du måtte koble til to, tre eller flere I2C -sensorer til Arduino bare for å innse at sensorene har en fast eller samme I2C -adresse. Videre kan du ikke ha to enheter med samme adresse på de samme SDA/SCL -pinnene!

Så, hva er alternativene dine? Sett dem alle på TCA9548A 1-til-8 I2C multiplexer for å få dem alle til å snakke med hverandre på samme buss! TCA9548A Breakout muliggjør kommunikasjon med flere I2C -enheter som har samme adresse, noe som gjør det enkelt å koble til dem.

Trinn 1: Krav til maskinvare

Emner dekket
Emner dekket

For denne opplæringen trenger vi:

- Brødbrett

- TCA9548A I2C Multiplexer

- Arduino Uno/Nano uansett hva som er praktisk

- NodeMCU

- Noen 0,91 og 0,96 I2C OLED -skjermer

- Jumper Cables, og

- USB -kabel for å laste opp koden

Trinn 2: Emner dekket

Vi starter diskusjonen med å forstå det grunnleggende i I2C -teknologien

Deretter lærer vi om TCA9548A Multiplexer og hvordan master og slave sender og mottar data ved hjelp av I2C -teknologien. Så vil vi sjekke ut hvordan vi kan programmere og bruke multiplexeren i prosjektet vårt ved hjelp av Arduino og NodeMCU Neste, jeg vil vise deg en rask demo ved hjelp av 8 I2C OLED -skjermer, og til slutt avslutter vi opplæringen med å diskutere fordeler og ulemper med TCA9548A Multiplexer

Trinn 3: Grunnleggende om I2C -buss

Grunnleggende om I2C -buss
Grunnleggende om I2C -buss
Grunnleggende om I2C -buss
Grunnleggende om I2C -buss
Grunnleggende om I2C -buss
Grunnleggende om I2C -buss

Interintegrert krets uttalt I-squared-C (I²C) eller I2C er en to-tråds bussteknologi (vel egentlig 4 ledninger fordi du også trenger VCC og jord) som brukes til kommunikasjon mellom flere prosessorer og sensorer.

De to ledningene er:

* SDA - Seriedata (datalinje) og

* SCL - Seriell klokke (klokke linje)

Husk at begge disse linjene er 'synkrone' 'toveis' 'åpne drenering' og er 'trukket opp med motstander'.

I2C -bussteknologien ble opprinnelig designet av Philips Semiconductors på begynnelsen av 80 -tallet for å tillate enkel kommunikasjon mellom komponenter som befinner seg på samme kretskort.

Med I2C kan du koble flere slaver til en enkelt master (som SPI), eller du kan ha flere mestere som kontrollerer enkelt eller flere slaver. Både mestere og slaver kan overføre og motta data. Så en enhet på I2C -buss kan være i en av disse fire tilstandene:

* Mastersending - hovednode sender data til en slave* Hovedmottak - hovednode mottar data fra en slave

* Slaveoverføring - slaveknut sender data til masteren

* Slavemottak - slavenoden mottar data fra masteren

I2C er en 'kort avstand' 'seriell kommunikasjonsprotokoll', så data overføres 'bit for bit' langs enkeltledningen eller SDA-linjen. Utgangen av biter synkroniseres med samplingen av biter av et klokkesignal som er 'delt' mellom master og slave. Klokkesignalet styres alltid av masteren. Mesteren genererer klokken og starter kommunikasjon med slaver.

Så, for å oppsummere det>

Antall brukte ledninger: 2

Synkron eller asynkron: Synkron

Seriell eller parallell: Seriell

Klokkesignal styrt av: Master Node

Brukte spenninger: +5 V eller +3,3 V

Maksimalt antall Masters: Ubegrenset

Maksimalt antall slaver: 1008

Maksimal hastighet: Standardmodus = 100 kbps

Hurtigmodus = 400 kbps

Høyhastighetsmodus = 3,4 Mbps

Ultra Fast Mode = 5 Mbps

Trinn 4: TCA9548A I2C Multiplexer -modul

TCA9548A I2C Multiplexer -modul
TCA9548A I2C Multiplexer -modul
TCA9548A I2C Multiplexer -modul
TCA9548A I2C Multiplexer -modul
TCA9548A I2C Multiplexer -modul
TCA9548A I2C Multiplexer -modul

TCA9548A er en åtte-kanals (toveis) I2C multiplexer som gjør at åtte separate I2C-enheter kan styres av en enkelt vert I2C-buss. Du trenger bare å koble I2C -sensorene til SCn / SDn -multiplexbussene. For eksempel, hvis det er nødvendig med åtte identiske OLED-skjermer i en applikasjon, kan en av hver skjerm kobles til på hver av disse kanalene: 0-7.

Multiplexeren kobles til VIN, GND, SDA og SCL linjer på mikrokontrolleren. Breakout -bordet godtar VIN fra 1.65v til 5.5v. Både input SDA- og SCL-linjer er koblet til VCC gjennom en 10K pull-up-motstand (størrelsen på pull-up-motstanden bestemmes av kapasitansmengden på I2C-linjene). Multiplexeren støtter både normale (100 kHz) og raske (400 kHz) I2C -protokoller. Alle I/O-pinner på TCA9548A er 5 volt tolerante og kan også brukes til å oversette fra høy til lav eller lav til høy spenning.

Det er en god idé å sette pull-up-motstander på alle kanaler i TCA9548A, selv om spenningene er de samme. Grunnen til dette er på grunn av den interne NMOS -bryteren. Den overfører ikke høyspenning veldig bra, på den annen side overfører den lave spenninger veldig bra. TCA9548A kan også brukes til spenningsoversettelse, slik at du kan bruke forskjellige busspenninger på hvert SCn/SDn-par slik at 1,8-V, 2,5-V eller 3,3-V deler kan kommunisere med 5-V deler. Dette oppnås ved å bruke eksterne pull-up motstander for å trekke bussen opp til ønsket spenning for master og hver slave kanal.

Hvis mikrokontrolleren oppdager en busskonflikt eller annen feil operasjon, kan TCA9548A nullstilles ved å angi en lav til RESET-pinnen.

Trinn 5:

Bilde
Bilde
Bilde
Bilde
Bilde
Bilde

TCA9548 lar en enkelt mikrokontroller kommunisere med opptil '64 sensorer 'alle med samme eller forskjellige I2C-adresse ved å tildele en unik kanal til hver sensorslave-sub-buss.

Når vi snakker om å sende data over 2 ledninger til flere enheter, trenger vi en måte å adressere dem på. Det er det samme som at postbudet kommer på en enkelt vei og slipper postpakkene til forskjellige hus fordi de har forskjellige adresser skrevet på dem.

Du kan ha maks 8 av disse multiplexerne koblet sammen på 0x70-0x77 adresser for å kontrollere 64 av de samme I2C adresserte delene. Ved å koble de tre adressebitene A0, A1 og A2 til VIN kan du få en annen kombinasjon av adressene. Slik ser en adresse -byte i TCA9548A ut. De første 7-bitene kombineres for å danne slave-adressen. Den siste biten av slaveadressen definerer operasjonen (les eller skriv) som skal utføres. Når den er høy (1), velges en avlesning, mens en lav (0) velger en skriveoperasjon.

Trinn 6: Hvordan master sender og mottar data

Hvordan master sender og mottar data
Hvordan master sender og mottar data
Hvordan master sender og mottar data
Hvordan master sender og mottar data

Følgende er den generelle prosedyren for en master for å få tilgang til en slaveenhet:

1. Hvis en master vil sende data til en slave (WRITES):

-Master-sender sender en START-tilstand etterfulgt av adressene til slave-mottakeren og R/W satt til 0

-Master-sender sender data i '8-biters kontrollregistre' til slave-mottakeren når slaven erkjenner at den er klar

-Master-sender avslutter overføringen med en STOPP-tilstand

2. Hvis en master ønsker å motta eller lese data fra en slave (READS):

-Master-mottaker sender en START-tilstand etterfulgt av adressene til slave-mottakeren og R/W satt til 1

-Master-mottaker sender det forespurte registeret for å lese til slave-sender

-Master-mottaker mottar data fra slave-senderen

- Når alle byte er mottatt sender Master NACK -signal til slaven for å stoppe kommunikasjonen og slippe bussen

- Master-mottaker avslutter overføringen med en STOPP-tilstand

En buss regnes som inaktiv hvis både SDA- og SCL -linjene er høye etter en STOPP -tilstand.

Trinn 7: Kode

Kode
Kode

Nå kan Int -koden starte med å inkludere "Wire" -biblioteket og ved å definere multiplexeradressen.

#inkludere "Wire.h"

#include "U8glib.h"

#define MUX_Address 0x70 // TCA9548A Koderadresse

Deretter må vi velge porten vi vil kommunisere til og sende dataene på den ved hjelp av denne funksjonen:

void selectI2CChannels (uint8_t i) {

hvis (i> 7) returnerer;

Wire.beginTransmission (MUX_Address);

Wire.write (1 << i);

Wire.endTransmission ();

}

Deretter vil vi initialisere displayet i oppsettdelen ved å ringe "u8g.begin ();" for hver skjerm festet til MUX "tcaselect (i);"

Når vi er initialisert, kan vi gjøre hva vi vil bare ved å kalle funksjonen "tcaselect (i);" hvor "i" er verdien til den multipleksede bussen og deretter sende dataene og klokken deretter.

Trinn 8: I2C -skanner

I2C -skanner
I2C -skanner

Bare i tilfelle hvis du ikke er sikker på enhetsadressen til I2C -skjoldet, kan du kjøre den vedlagte 'I2C Scanner' -koden for å finne hexadressen til enheten din. Når den er lastet til en Arduino, vil skissen skanne I2C -nettverket og vise adressene som svarer.

Trinn 9: Kabling og demonstrasjon

Kabling og demo
Kabling og demo
Kabling og demo
Kabling og demo

Kabling:

La oss starte med å koble multiplexeren til et NodeMCU -kort. Koble:

VIN til 5V (eller 3.3V)

GND til bakken

SDA til D2 og

SCL til D1 pins

For et Arduino -kort, koble til:

VIN til 5V (eller 3.3V)

GND til bakken

SDA til A4 og

SCL til A5 pins

Når MUX er koblet til mikrokontrolleren, trenger du bare å koble sensorene til SCn / SDn-parene.

La oss nå sjekke ut denne raske demoen der jeg har koblet 8 OLED -skjermer til TCA9548A Multiplexer. Siden disse skjermene bruker I2C -kommunikasjon, kommuniserer de med Arduino ved hjelp av bare 2 pinner.

Trinn 10: Fordeler og ulemper

Fordeler og ulemper
Fordeler og ulemper

FORDELER

* Kommunikasjon krever bare to busslinjer (ledninger)

* Det eksisterer et enkelt master/slave -forhold mellom alle komponentene

* Ingen strenge baudhastighetskrav som for eksempel med RS232, master genererer en bussur

* Maskinvare er mindre komplisert enn UART

* Støtter flere mestere og flere slaver

* ACK/NACK -bit gir bekreftelse på at hver ramme er vellykket overført

* I2C er en "ekte multi-master buss" som gir voldgift og kollisjonsdeteksjon

* Hver enhet som er koblet til bussen, kan adresseres med programvare med en unik adresse

* De fleste I2C -enheter kan kommunisere med 100 kHz eller 400 kHz

* I²C passer for eksterne enheter der enkelhet og lave produksjonskostnader er viktigere enn hastighet

* Velkjent og mye brukt protokoll

ULEMPER

* Lavere dataoverføringshastighet enn SPI

* Størrelsen på datarammen er begrenset til 8 bits

* Mer komplisert maskinvare som trengs for å implementere enn SPI -teknologien

Anbefalt: