Indholdsfortegnelse:

TCA9548A I2C Multiplexer -modul - Med Arduino og NodeMCU: 11 trin
TCA9548A I2C Multiplexer -modul - Med Arduino og NodeMCU: 11 trin
Anonim
Image
Image

Er du nogensinde kommet i en situation, hvor du skulle koble to, tre eller flere I2C -sensorer til din Arduino bare for at indse, at sensorerne har en fast eller samme I2C -adresse. Desuden kan du ikke have to enheder med den samme adresse på de samme SDA/SCL -ben!

Så hvad er dine muligheder? Sæt dem alle på TCA9548A 1-til-8 I2C multiplexeren for at få dem alle til at tale med hinanden på den samme bus! TCA9548A Breakout muliggør kommunikation med flere I2C -enheder, der har den samme adresse, hvilket gør det let at kommunikere med dem.

Trin 1: Krav til hardware

Emner dækket
Emner dækket

Til denne vejledning har vi brug for:

- Brødbræt

- TCA9548A I2C Multiplexer

- Arduino Uno/Nano uanset hvad der er praktisk

- NodeMCU

- Få 0,91 & 0,96 I2C OLED -skærme

- Jumperkabler og

- USB -kabel til upload af koden

Trin 2: Emner dækket

Vi starter vores diskussion med at forstå det grundlæggende i I2C -teknologien

Derefter lærer vi om TCA9548A Multiplexer og hvordan master og slave sender og modtager data ved hjælp af I2C -teknologien. Så vil vi tjekke, hvordan vi kan programmere og bruge multiplexeren i vores projekt ved hjælp af Arduino og NodeMCU Næste, vil jeg vise dig en hurtig demo ved hjælp af 8 I2C OLED -skærme, og endelig afslutter vi selvstudiet med at diskutere fordele og ulemper ved TCA9548A Multiplexer

Trin 3: Grundlæggende om I2C Bus

Grundlæggende om I2C Bus
Grundlæggende om I2C Bus
Grundlæggende om I2C Bus
Grundlæggende om I2C Bus
Grundlæggende om I2C Bus
Grundlæggende om I2C Bus

Interintegreret kredsløb udtalt I-squared-C (I²C) eller I2C er en totråds busteknologi (faktisk 4 ledninger, fordi du også har brug for VCC og jord), der bruges til kommunikation mellem flere processorer og sensorer.

De to ledninger er:

* SDA - Serielle data (datalinje) og

* SCL - Serielt ur (urlinje)

Husk, at begge disse linjer er 'synkrone' 'tovejs' 'open-drain' og er 'trukket op med modstande'.

I2C -busteknologien blev oprindeligt designet af Philips Semiconductors i begyndelsen af 80'erne for at muliggøre let kommunikation mellem komponenter, der findes på det samme printkort.

Med I2C kan du forbinde flere slaver til en enkelt master (som SPI), eller du kan have flere mestre til at styre enkelt eller flere slaver. Både mestre og slaver kan overføre og modtage data. Så en enhed på I2C -bus kan være i en af disse fire tilstande:

* Master transmit - master node sender data til en slave* Master modtager - master node modtager data fra en slave

* Slaveoverførsel - slaveknude sender data til masteren

* Slave modtagelse - slave node modtager data fra masteren

I2C er en 'kort afstand' 'seriel kommunikationsprotokol', så data overføres 'bit-by-bit' langs den enkelte ledning eller SDA-linjen. Udgangen af bits synkroniseres med samplingen af bits af et kloksignal, der er 'delt' mellem master og slave. Ursignalet styres altid af masteren. Mesteren genererer uret og starter kommunikation med slaver.

Så for at opsummere det>

Antal anvendte ledninger: 2

Synkron eller asynkron: Synkron

Seriel eller parallel: Seriel

Ur Signal styret af: Master Node

Anvendte spændinger: +5 V eller +3,3 V

Maksimalt antal mestre: Ubegrænset

Maksimalt antal slaver: 1008

Maksimal hastighed: Standardtilstand = 100 kbps

Hurtig tilstand = 400 kbps

Højhastighedstilstand = 3,4 Mbps

Ultrahurtig tilstand = 5 Mbps

Trin 4: TCA9548A I2C -multiplexermodul

TCA9548A I2C multiplexermodul
TCA9548A I2C multiplexermodul
TCA9548A I2C multiplexermodul
TCA9548A I2C multiplexermodul
TCA9548A I2C multiplexermodul
TCA9548A I2C multiplexermodul

TCA9548A er en otte-kanals (tovejs) I2C-multiplexer, som gør det muligt at styre otte separate I2C-enheder af en enkelt vært I2C-bus. Du skal bare koble I2C -sensorerne til SCn / SDn -multipleksede busser. Hvis der f.eks. Er brug for otte identiske OLED-skærme i en applikation, kan en af hver skærm tilsluttes på hver af disse kanaler: 0-7.

Multiplexeren opretter forbindelse til VIN-, GND-, SDA- og SCL-linjer på mikrokontrolleren. Breakout -bordet accepterer VIN fra 1.65v til 5.5v. Både input SDA- og SCL-linjer er forbundet til VCC via en 10K pull-up-modstand (størrelsen på pull-up-modstanden bestemmes af mængden af kapacitans på I2C-linjerne). Multiplexeren understøtter både normale (100 kHz) og hurtige (400 kHz) I2C -protokoller. Alle I/O-ben på TCA9548A er 5-volt-tolerante og kan også bruges til at oversætte fra høj til lav eller lav til høj spænding.

Det er en god idé at sætte pull-up modstande på alle kanaler i TCA9548A, selvom spændingerne er de samme. Årsagen til dette er på grund af den interne NMOS -switch. Det transmitterer ikke højspænding særlig godt, på den anden side overfører det lavspændinger meget godt. TCA9548A kan også bruges til spændingsoversættelse, hvilket tillader brug af forskellige busspændinger på hvert SCn/SDn-par, således at 1,8-V, 2,5-V eller 3,3-V dele kan kommunikere med 5-V dele. Dette opnås ved at bruge eksterne pull-up modstande til at trække bussen op til den ønskede spænding for masteren og hver slave kanal.

Hvis mikro-controlleren registrerer en buskonflikt eller anden forkert betjening, kan TCA9548A nulstilles ved at hæve en lav til RESET-stiften.

Trin 5:

Billede
Billede
Billede
Billede
Billede
Billede

TCA9548 tillader en enkelt mikro-controller at kommunikere med op til '64 sensorer 'alle med den samme eller forskellige I2C-adresse ved at tildele en unik kanal til hver sensorslave-subbus.

Når vi taler om at sende data over 2 ledninger til flere enheder, har vi brug for en måde at adressere dem på. Det er det samme som at postbudet kommer på en enkelt vej og smider postpakkerne til forskellige huse, fordi de har forskellige adresser skrevet på dem.

Du kunne maksimalt have 8 af disse multiplexere forbundet til 0x70-0x77 adresser for at styre 64 af de samme I2C adresserede dele. Ved at forbinde de tre adressebit A0, A1 og A2 til VIN kan du få en anden kombination af adresserne. Sådan ser en adresse -byte i TCA9548A ud. De første 7-bits kombineres for at danne slave-adressen. Den sidste bit af slaveadressen definerer den operation (læs eller skriv), der skal udføres. Når den er høj (1), vælges en læsning, mens en lav (0) vælger en skriveoperation.

Trin 6: Sådan sender og modtager mesteren data

Sådan sender og modtager mesteren data
Sådan sender og modtager mesteren data
Sådan sender og modtager mesteren data
Sådan sender og modtager mesteren data

Følgende er den generelle procedure for en master til at få adgang til en slaveenhed:

1. Hvis en master ønsker at sende data til en slave (SKRIFTER):

-Master-sender sender en START-tilstand efterfulgt af adresserne på slave-modtageren og R/W indstillet til 0

-Master-sender sender data i '8-bit kontrolregistre' til slave-modtageren, når slaven erkender, at den er klar

-Master-sender afslutter overførslen med en STOP-tilstand

2. Hvis en master ønsker at modtage eller læse data fra en slave (READS):

-Master-modtager sender en START-tilstand efterfulgt af adresserne på slave-modtageren og R/W indstillet til 1

-Master-modtager sender det ønskede register til at læse til slave-sender

-Master-modtager modtager data fra slave-senderen

- Når alle bytes er modtaget, sender Master NACK -signalering til slaven for at standse kommunikationen og frigive bussen

- Master-modtager afslutter overførslen med en STOP-tilstand

En bus betragtes som inaktiv, hvis både SDA- og SCL -linjer er høje efter en STOP -tilstand.

Trin 7: Kode

Kode
Kode

Nu kan Int -koden starte med at inkludere "Wire" -biblioteket og ved at definere multiplexeradressen.

#inkluder "Wire.h"

#include "U8glib.h"

#define MUX_Address 0x70 // TCA9548A Encoders address

Derefter skal vi vælge den port, vi vil kommunikere til, og sende dataene på den ved hjælp af denne funktion:

void selectI2CChannels (uint8_t i) {

hvis (i> 7) vender tilbage;

Wire.beginTransmission (MUX_Address);

Wire.write (1 << i);

Wire.endTransmission ();

}

Dernæst vil vi initialisere displayet i opsætningsafsnittet ved at kalde "u8g.begin ();" for hvert display, der er knyttet til MUX "tcaselect (i);"

Når vi er initialiseret, kan vi derefter gøre hvad vi vil bare ved at kalde funktionen "tcaselect (i);" hvor "i" er værdien af den multipleksede bus og derefter sende data og ur i overensstemmelse hermed.

Trin 8: I2C -scanner

I2C -scanner
I2C -scanner

Bare hvis du ikke er sikker på enhedsadressen på dit I2C -skjold, skal du køre den vedhæftede 'I2C Scanner' -kode for at finde hex -adressen på din enhed. Når skitsen indlæses i en Arduino, scanner I2C -netværket og viser de adresser, der reagerer.

Trin 9: Ledningsføring og demo

Kabelføring og demo
Kabelføring og demo
Kabelføring og demo
Kabelføring og demo

Ledninger:

Lad os starte med at forbinde multiplexeren til et NodeMCU -kort. Forbinde:

VIN til 5V (eller 3.3V)

GND til jorden

SDA til D2 og

SCL til D1 ben

For et Arduino -kort tilsluttes:

VIN til 5V (eller 3.3V)

GND til jorden

SDA til A4 og

SCL til A5 ben

Når MUX er tilsluttet mikrokontrolleren, skal du bare forbinde sensorerne til SCn / SDn-parene.

Lad os nu tjekke denne hurtige demo, hvor jeg har tilsluttet 8 OLED -skærme til TCA9548A Multiplexer. Da disse skærme bruger I2C -kommunikation, kommunikerer de med Arduino ved hjælp af kun 2 ben.

Trin 10: Fordele og ulemper

Fordele og ulemper
Fordele og ulemper

FORDELE

* Kommunikation kræver kun to buslinjer (ledninger)

* Der findes et enkelt master/slave -forhold mellem alle komponenter

* Ingen strenge baudhastighedskrav som f.eks. Med RS232, master genererer et busur

* Hardware er mindre kompliceret end UART'er

* Understøtter flere mestre og flere slaver

* ACK/NACK bit giver bekræftelse på, at hver ramme blev overført

* I2C er en 'sand multi-master bus', der giver voldgift og kollisionsdetektion

* Hver enhed, der er forbundet til bussen, kan softwareadresseres med en unik adresse

* De fleste I2C -enheder kan kommunikere ved 100 kHz eller 400 kHz

* I²C er egnet til periferiudstyr, hvor enkelhed og lave fremstillingsomkostninger er vigtigere end hastighed

* Kendt og meget udbredt protokol

ULEMPER

* Langsommere dataoverførselshastighed end SPI

* Datarammens størrelse er begrænset til 8 bit

* Mere kompliceret hardware er nødvendig for at implementere end SPI -teknologien

Anbefalede: