Innholdsfortegnelse:
- Trinn 1: Krav til maskinvare
- Trinn 2: Emner dekket
- Trinn 3: Grunnleggende om I2C -buss
- Trinn 4: TCA9548A I2C Multiplexer -modul
- Trinn 5:
- Trinn 6: Hvordan master sender og mottar data
- Trinn 7: Kode
- Trinn 8: I2C -skanner
- Trinn 9: Kabling og demonstrasjon
- Trinn 10: Fordeler og ulemper
- Trinn 11: Takk
Video: TCA9548A I2C Multiplexer Module - With Arduino and NodeMCU: 11 Steps
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:24
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
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
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 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:
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
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
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
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:
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
* 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:
Hardware and Software Hack Smart Devices, Tuya and Broadlink LEDbulb, Sonoff, BSD33 Smart Plug: 7 Steps
Hardware and Software Hack Smart Devices, Tuya and Broadlink LEDbulb, Sonoff, BSD33 Smart Plug: I denne instruksjonsfilen viser jeg deg hvordan jeg blinket flere smarte enheter med min egen fastvare, så jeg kan kontrollere dem av MQTT via mitt Openhab -oppsett. Jeg vil legge til nye enheter da jeg hacket dem. Selvfølgelig er det andre programvarebaserte metoder for å blinke tilpassede
Micro: bit MU Vision Sensor for Beginners - I2C and Shape Card Recognition: 8 Steps
Micro: bit MU Vision Sensor for Beginners - I2C og Shape Card Recognition: Jeg har fått tak i en MU vision sensor for Micro: bit. Det ser ut til å være et kult verktøy som gjør at jeg kan lage mange forskjellige visjonsbaserte prosjekter. Dessverre er det ikke så mange guider til det, og selv om dokumentasjonen virkelig er
Opplæring: Hvordan Arduino styrer flere samme adresseenheter ved å bruke TCA9548A I2C Multiplexer: 3 trinn
Opplæring: Hvordan Arduino styrer flere samme adressenheter ved å bruke TCA9548A I2C Multiplexer: Beskrivelse: TCA9548A I2C Multiplexer -modulen gjør det mulig å koble til enheter med samme I2C -adresse (opptil 8 samme adresse I2C) koblet til en mikrokontroller. Multiplexeren fungerer som en portvakt og sender kommandoene til det valgte settet
Roll and Pitch Axis Gimbal for GoPro Using Arduino - Servo and MPU6050 Gyro: 4 Steps
Roll and Pitch Axis Gimbal for GoPro Using Arduino - Servo and MPU6050 Gyro: Denne instruerbare ble opprettet for å oppfylle prosjektkravet til Makecourse ved University of South Florida (www.makecourse.com) Målet med dette prosjektet var å bygge en 3-akset Gimbal for GoPro ved å bruke Arduino nano + 3 servomotorer +
555 Timer With a Decade Counter and LEDs and Piezo Buzzer; basic Description of Circuit: 6 Steps
555 Timer With a Decade Counter and LEDs and Piezo Buzzer; grunnleggende beskrivelse av krets: Denne kretsen består av tre deler. De er en piezo -summer som produserer lyd. En kode (program) spiller "Happy Birthday" av Arduino gjennom piezo. Det neste trinnet er en 555 timer som vil produsere pulser som fungerer som en klokke