Indholdsfortegnelse:
- Trin 1: Krav til hardware
- Trin 2: Emner dækket
- Trin 3: Grundlæggende om I2C Bus
- Trin 4: TCA9548A I2C -multiplexermodul
- Trin 5:
- Trin 6: Sådan sender og modtager mesteren data
- Trin 7: Kode
- Trin 8: I2C -scanner
- Trin 9: Ledningsføring og demo
- Trin 10: Fordele og ulemper
- Trin 11: Tak
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:28
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
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
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 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:
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
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
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
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
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
* 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:
I2C Relæ Met Arduino IDE: 5 trin
I2C Relay Met Arduino IDE: Jeg bestiller et flot relayboard, men der var ingen ArduinoIDE instruktion, bare Raspberry Pi e.o. Jeg finder ud af, hvordan jeg bruger det med Arduino og vil dele det, så du kan spare den tid. Originalt RaspberryPi -eksempel: wiki.52pi.com/index.php/DockerPi_4_Channel_R
Tutorial: Sådan styrer Arduino flere samme adresseenheder ved hjælp af TCA9548A I2C Multiplexer: 3 trin
Tutorial: Hvordan Arduino styrer flere samme adresseenheder ved hjælp af TCA9548A I2C Multiplexer: Beskrivelse: TCA9548A I2C Multiplexer -modulet gør det muligt at forbinde enheder med den samme I2C -adresse (op til 8 samme adresse I2C) tilsluttet en mikrokontroller. Multiplexeren fungerer som en portvagt og sender kommandoerne til det valgte sæt
HALL MULTIPLEXER: 4 trin
HALL MULTIPLEXER: (Opdateret 24. maj 2019, fremtidige opdateringer følger) Hej. Jeg læste på et andet forum (kan jeg ikke huske hvilken?) Af denne fyr, der søgte efter en smart måde at måle niveauet på en eller anden "væske" i en stor (dyb) tank? Problemet for ham var behovet
I2C / IIC LCD -skærm - Konverter en SPI LCD til I2C LCD Display: 5 trin
I2C / IIC LCD -skærm | Konverter en SPI LCD til I2C LCD Display: Brug af spi lcd display har brug for for mange forbindelser til at gøre, hvilket er virkelig svært at gøre, så jeg fandt et modul, der kan konvertere i2c lcd til spi lcd, så lad os komme i gang
OLED I2C Display Arduino/NodeMCU Tutorial: 15 trin
OLED I2C Display Arduino/NodeMCU Tutorial: Det allerførste program, du skriver, når du begynder at lære et nyt programmeringssprog, er: "Hello World!". Selve programmet gør ikke andet end at udskrive en "Hello World" tekst på skærmen. Så hvordan får vi vores Arduino til at vise & quot