Innehållsförteckning:

TCA9548A I2C Multiplexermodul - Med Arduino och NodeMCU: 11 steg
TCA9548A I2C Multiplexermodul - Med Arduino och NodeMCU: 11 steg

Video: TCA9548A I2C Multiplexermodul - Med Arduino och NodeMCU: 11 steg

Video: TCA9548A I2C Multiplexermodul - Med Arduino och NodeMCU: 11 steg
Video: Output DC or AC Voltage using MCP4725 DAC with LCD and PWM to Voltage Converter with Arduino 2024, November
Anonim
Image
Image

Har du någonsin hamnat i en situation där du var tvungen att koppla upp två, tre eller fler I2C -sensorer till din Arduino bara för att inse att sensorerna har en fast eller samma I2C -adress. Dessutom kan du inte ha två enheter med samma adress på samma SDA/SCL -stift!

Så, vad är dina alternativ? Lägg dem alla på TCA9548A 1-till-8 I2C-multiplexern för att få alla att prata med varandra på samma buss! TCA9548A Breakout möjliggör kommunikation med flera I2C -enheter som har samma adress vilket gör det enkelt att ansluta till dem.

Steg 1: Hårdvarukrav

Ämnen som behandlas
Ämnen som behandlas

För denna handledning behöver vi:

- Brödbräda

- TCA9548A I2C Multiplexer

- Arduino Uno/Nano vad som helst

- NodeMCU

- Några 0,91 & 0,96 I2C OLED -skärmar

- Bygelkablar och

- USB -kabel för att ladda upp koden

Steg 2: Ämnen som behandlas

Vi börjar vår diskussion med att förstå grunderna i I2C -tekniken

Sedan kommer vi att lära oss om TCA9548A -multiplexern och hur master och slav skickar och tar emot data med hjälp av I2C -tekniken. Sedan kommer vi att kolla hur vi kan programmera och använda multiplexern i vårt projekt med Arduino och NodeMCU. Därefter kommer jag att visa dig en snabb demo med 8 I2C OLED -skärmar och slutligen avslutar vi handledningen med att diskutera fördelar och nackdelar med TCA9548A Multiplexer

Steg 3: Grunderna i I2C -buss

Grunderna i I2C -buss
Grunderna i I2C -buss
Grunderna i I2C -buss
Grunderna i I2C -buss
Grunderna i I2C -buss
Grunderna i I2C -buss

Interintegrerad krets uttalad I-squared-C (I²C) eller I2C är en tvåtråds bussteknik (ja faktiskt 4 ledningar eftersom du också behöver VCC och Ground) som används för kommunikation mellan flera processorer och sensorer.

De två trådarna är:

* SDA - Seriell data (datalinje) och

* SCL - Seriell klocka (klocklinje)

Kom ihåg att båda dessa linjer är "synkrona" "dubbelriktade" "öppna dräneringar" och "dras upp med motstånd".

I2C -busstekniken designades ursprungligen av Philips Semiconductors i början av 80 -talet för att möjliggöra enkel kommunikation mellan komponenter som finns på samma kretskort.

Med I2C kan du ansluta flera slavar till en enda master (som SPI) eller så kan du ha flera masters som styr enkla eller flera slavar. Både mästare och slavar kan överföra och ta emot data. Så en enhet på I2C -buss kan vara i ett av dessa fyra tillstånd:

* Master överföring - master nod skickar data till en slav* Master mottar - master nod tar emot data från en slav

* Slavöverföring - slavnod skickar data till mastern

* Slavmottagning - slavnod tar emot data från mastern

I2C är ett 'kort avstånd' 'seriellt kommunikationsprotokoll', så data överförs 'bit-by-bit' längs den ena ledningen eller SDA-linjen. Utmatningen av bitar synkroniseras med samplingen av bitar med en klocksignal som "delas" mellan mastern och slaven. Klocksignalen styrs alltid av mastern. Mästaren genererar klockan och initierar kommunikation med slavar.

Så, för att sammanfatta det>

Antal trådar som används: 2

Synkron eller asynkron: Synkron

Seriellt eller parallellt: Seriellt

Klocksignal styrs av: Master Node

Spänningar som används: +5 V eller +3,3 V

Maximalt antal Masters: Obegränsat

Maximalt antal slavar: 1008

Maxhastighet: Standardläge = 100 kbps

Snabbläge = 400 kbps

Höghastighetsläge = 3,4 Mbps

Ultrasnabbt läge = 5 Mbps

Steg 4: TCA9548A I2C -multiplexermodul

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

TCA9548A är en åtta-kanals (dubbelriktad) I2C-multiplexer som gör att åtta separata I2C-enheter kan styras av en enda värd I2C-buss. Du behöver bara ansluta I2C -sensorerna till SCn / SDn -multiplexbussarna. Till exempel, om åtta identiska OLED-skärmar behövs i en applikation, kan en av varje bildskärm anslutas till var och en av dessa kanaler: 0-7.

Multiplexern ansluter till VIN-, GND-, SDA- och SCL-linjer på mikrokontrollern. Breakout -kortet accepterar VIN från 1,65v till 5,5v. Både ingående SDA- och SCL-ledningar är anslutna till VCC via ett 10K uppdragningsmotstånd (storleken på uppdragningsmotståndet bestäms av mängden kapacitans på I2C-ledningarna). Multiplexorn stöder både normala (100 kHz) och snabba (400 kHz) I2C -protokoll. Alla I/O-stift på TCA9548A är 5-voltstoleranta och kan också användas för att översätta från hög till låg eller låg till hög spänning.

Det är en bra idé att sätta upp dragmotstånd på alla kanaler i TCA9548A, även om spänningarna är desamma. Anledningen till detta är på grund av den interna NMOS -omkopplaren. Den överför inte högspänning särskilt bra, å andra sidan överför den låga spänningar mycket bra. TCA9548A kan också användas för spänningsöversättning, vilket möjliggör användning av olika busspänningar på varje SCn/SDn-par så att 1,8-V, 2,5-V eller 3,3-V delar kan kommunicera med 5-V delar. Detta uppnås genom att använda externa uppdragningsmotstånd för att dra bussen upp till önskad spänning för mastern och varje slavkanal.

Om mikrokontrollern upptäcker en busskonflikt eller annan felaktig funktion kan TCA9548A återställas genom att ange en låg till RESET-stiftet.

Steg 5:

Bild
Bild
Bild
Bild
Bild
Bild

TCA9548 tillåter en enda mikrokontroller att kommunicera med upp till '64 sensorer 'alla med samma eller olika I2C-adress genom att tilldela varje sensorslavsubus en unik kanal.

När vi pratar om att skicka data över två ledningar till flera enheter behöver vi sedan ett sätt att ta itu med dem. Det är samma sak som brevbäraren som kommer på en enda väg och tappar postpaketen till olika hus eftersom de har olika adresser skrivna på dem.

Du kan ha max 8 av dessa multiplexrar anslutna ihop på 0x70-0x77 adresser för att styra 64 av samma I2C adresserade delar. Genom att ansluta de tre adressbitarna A0, A1 och A2 till VIN kan du få olika kombinationer av adresserna. Så här ser en adressbyte i TCA9548A ut. De första 7-bitarna kombineras för att bilda slavadressen. Den sista biten i slavadressen definierar operationen (läs eller skriv) som ska utföras. När den är hög (1) väljs en läsning medan en låg (0) väljer en skrivoperation.

Steg 6: Hur befälhavaren skickar och tar emot data

Hur befälhavaren skickar och tar emot data
Hur befälhavaren skickar och tar emot data
Hur befälhavaren skickar och tar emot data
Hur befälhavaren skickar och tar emot data

Följande är den allmänna proceduren för en master att få åtkomst till en slavenhet:

1. Om en master vill skicka data till en slav (WRITES):

-Master-sändaren skickar ett START-tillstånd följt av adresserna till slavmottagaren och R/W inställd på 0

-Master-sändaren skickar data i "8-bitars styrregistren" till slavmottagaren när slaven erkänner att den är klar

-Master-sändaren avslutar överföringen med ett STOP-tillstånd

2. Om en master vill ta emot eller läsa data från en slav (READS):

-Master-mottagaren skickar ett START-villkor följt av adresserna till slavmottagaren och R/W inställd på 1

-Master-mottagaren skickar det begärda registret för att läsa till slavsändaren

-Master-mottagare tar emot data från slavsändaren

- När alla byte har mottagits skickar Master NACK -signalering till slaven för att stoppa kommunikationen och släppa bussen

- Master-mottagaren avslutar överföringen med ett STOP-tillstånd

En buss anses vara inaktiv om både SDA- och SCL -linjerna är höga efter ett STOP -tillstånd.

Steg 7: Kod

Koda
Koda

Nu kan Int -koden börja med att inkludera "Wire" -biblioteket och genom att definiera multiplexeradressen.

#inkludera "Wire.h"

#inkludera "U8glib.h"

#define MUX_Address 0x70 // TCA9548A Kodares adress

Då måste vi välja porten vi vill kommunicera till och skicka data på den med denna funktion:

void selectI2CChannels (uint8_t i) {

om (i> 7) återgår;

Wire.beginTransmission (MUX_Address);

Wire.write (1 << i);

Wire.endTransmission ();

}

Därefter initierar vi displayen i installationsdelen genom att ringa "u8g.begin ();" för varje bildskärm ansluten till MUX "tcaselect (i);"

När vi väl initierats kan vi göra vad vi vill bara genom att kalla funktionen "tcaselect (i);" där "i" är värdet på den multiplexerade bussen och sedan skicka data och klocka därefter.

Steg 8: I2C -skanner

I2C -skanner
I2C -skanner

Om du inte är säker på enhetsadressen för din I2C -skärm, kör sedan den bifogade "I2C Scanner" -koden för att hitta enhetens hexadress. När den laddas till en Arduino kommer skissen att skanna I2C -nätverket och visa adresserna som svarar.

Steg 9: Kabeldragning och demonstration

Kabeldragning och demo
Kabeldragning och demo
Kabeldragning och demo
Kabeldragning och demo

Kabeldragning:

Låt oss börja med att ansluta multiplexern till ett NodeMCU -kort. Ansluta:

VIN till 5V (eller 3.3V)

GND till jord

SDA till D2 och

SCL till D1 stift

För ett Arduino -kort, anslut:

VIN till 5V (eller 3.3V)

GND till jord

SDA till A4 och

SCL till A5 stift respektive

När MUX är ansluten till mikrokontrollen behöver du bara ansluta sensorerna till SCn / SDn-paren.

Låt oss nu kolla in den här snabbdemon där jag har anslutit 8 OLED -skärmar till TCA9548A Multiplexer. Eftersom dessa skärmar använder I2C -kommunikation kommunicerar de med Arduino med bara 2 stift.

Steg 10: Fördelar och nackdelar

Fördelar och nackdelar
Fördelar och nackdelar

FÖRDELAR

* Kommunikation kräver bara två busslinjer (ledningar)

* Det finns en enkel master/slav -relation mellan alla komponenter

* Inga strikta baudhastighetskrav som till exempel med RS232, master genererar en bussklocka

* Hårdvara är mindre komplicerad än UART

* Stöder flera mästare och flera slavar

* ACK/NACK -bit ger bekräftelse på att varje ram har överförts

* I2C är en "äkta multimasterbuss" som ger skiljedom och kollisionsdetektering

* Varje enhet som är ansluten till bussen kan adresseras med en unik adress

* De flesta I2C -enheter kan kommunicera vid 100 kHz eller 400 kHz

* I²C är lämpligt för kringutrustning där enkelhet och låga tillverkningskostnader är viktigare än hastighet

* Välkänt och mycket använt protokoll

Nackdelar

* Lågare dataöverföringshastighet än SPI

* Dataramens storlek är begränsad till 8 bitar

* Mer komplicerad hårdvara som behövs för att implementera än SPI -tekniken

Rekommenderad: