Innehållsförteckning:
- Steg 1: Hårdvarukrav
- Steg 2: Ämnen som behandlas
- Steg 3: Grunderna i I2C -buss
- Steg 4: TCA9548A I2C -multiplexermodul
- Steg 5:
- Steg 6: Hur befälhavaren skickar och tar emot data
- Steg 7: Kod
- Steg 8: I2C -skanner
- Steg 9: Kabeldragning och demonstration
- Steg 10: Fördelar och nackdelar
- Steg 11: Tack
Video: TCA9548A I2C Multiplexermodul - Med Arduino och NodeMCU: 11 steg
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:45
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
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
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 ä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:
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
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
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
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:
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
* 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:
Läs el- och gasmätare (belgisk/nederländsk) och ladda upp till Thingspeak: 5 steg
Läs el- och gasmätare (belgisk/nederländsk) och ladda upp till Thingspeak: Om du är orolig för din energiförbrukning eller bara en liten nörd, vill du förmodligen se data från din snygga nya digitala mätare på din smartphone. projekt kommer vi att få aktuell information från en belgisk eller nederländsk digital el
ESP8266 och Visuino: DHT11 webbserver för temperatur och luftfuktighet: 12 steg
ESP8266 och Visuino: DHT11 Temperatur- och luftfuktighetswebbserver: ESP8266-moduler är bra fristående fristående styrenheter med inbyggt Wi-Fi, och jag har redan gjort ett antal instruktioner om dem. DTH11/DTH21/DTH22 och AM2301 är mycket populära kombinerade temperaturer och Arduino -sensorer för fuktighet, och jag gjorde ett antal
Hur man skapar och infogar en tabell och lägger till ytterligare kolumner och/eller rader till den tabellen i Microsoft Office Word 2007: 11 steg
Hur man skapar och infogar en tabell och lägger till ytterligare kolumner och/eller rader till den tabellen i Microsoft Office Word 2007: Har du någonsin haft mycket data du arbetar med och tänkt för dig själv … " hur kan jag göra allt av dessa data ser bättre ut och blir lättare att förstå? " Om så är fallet kan en tabell i Microsoft Office Word 2007 vara ditt svar
Ansluter bearbetning och Arduino och gör 7 segment och servo GUI -kontroller: 4 steg
Ansluta bearbetning och Arduino och göra 7 segment och servo GUI -kontroller: För vissa projekt måste du använda Arduino eftersom det ger en enkel prototypplattform men visning av grafik i seriell bildskärm av Arduino kan ta ganska lång tid och är till och med svårt att göra. Du kan visa grafer på Arduino Serial Monitor
Arduino och SIM900 GSM GPRS 3G Temperatur- och luftfuktighetsloggning, mobilstatistik: 4 steg
Arduino och SIM900 GSM GPRS 3G Temperatur- och luftfuktighetsloggning, mobilstatistik: Med Arduino UNO R3, SIM900 Shield OCH DHT22 kan du logga temperatur- och luftfuktighetsdata utanför, i rummet, växthuset, labbet, kylrummet eller andra platser helt gratis. Detta exempel kommer vi att använda för att logga rumstemperatur och luftfuktighet. Enheten kommer