Inhoudsopgave:

TCA9548A I2C-multiplexermodule - met Arduino en NodeMCU - Ajarnpa
TCA9548A I2C-multiplexermodule - met Arduino en NodeMCU - Ajarnpa

Video: TCA9548A I2C-multiplexermodule - met Arduino en NodeMCU - Ajarnpa

Video: TCA9548A I2C-multiplexermodule - met Arduino en NodeMCU - Ajarnpa
Video: I2C мультиплексор TCA9548A или как подключить несколько часов к Arduino? 2024, November
Anonim
Image
Image

Ben je ooit in een situatie terechtgekomen waarin je twee, drie of meer I2C-sensoren op je Arduino moest aansluiten om te beseffen dat de sensoren een vast of hetzelfde I2C-adres hebben. Bovendien kunt u niet twee apparaten met hetzelfde adres op dezelfde SDA/SCL-pinnen hebben!

Dus, wat zijn uw opties? Zet ze allemaal op de TCA9548A 1-naar-8 I2C multiplexer om ze allemaal met elkaar te laten praten op dezelfde bus! De TCA9548A Breakout maakt communicatie mogelijk met meerdere I2C-apparaten die hetzelfde adres hebben, waardoor het eenvoudig is om ermee te communiceren.

Stap 1: Hardwarevereiste

Behandelde onderwerpen
Behandelde onderwerpen

Voor deze tutorial hebben we nodig:

- Broodplank

- TCA9548A I2C-multiplexer

- Arduino Uno/Nano wat maar handig is

- NodeMCU

- Weinig 0,91 & 0,96 I2C OLED-schermen

- Startkabels, en

- USB-kabel om de code te uploaden

Stap 2: Behandelde onderwerpen

We beginnen onze discussie met het begrijpen van de basis van de I2C-technologie

Daarna zullen we leren over de TCA9548A Multiplexer en hoe de master en slave gegevens verzenden en ontvangen met behulp van de I2C-technologie. Daarna zullen we bekijken hoe we de multiplexer kunnen programmeren en gebruiken in ons project met Arduino en NodeMCU. demo met 8 I2C OLED-schermen en tot slot zullen we de tutorial afronden door de voor- en nadelen van de TCA9548A Multiplexer te bespreken

Stap 3: Basisprincipes van I2C Bus

Basisprincipes van I2C Bus
Basisprincipes van I2C Bus
Basisprincipes van I2C Bus
Basisprincipes van I2C Bus
Basisprincipes van I2C Bus
Basisprincipes van I2C Bus

Inter-integrated Circuit uitgesproken als I-squared-C (I²C) of I2C is een tweedraads bustechnologie (nou ja, eigenlijk 4 draden omdat je ook de VCC en Ground nodig hebt) die wordt gebruikt voor communicatie tussen meerdere processors en sensoren.

De twee draden zijn:

* SDA - Seriële gegevens (datalijn) en

* SCL - Seriële klok (kloklijn)

Onthoud dat beide lijnen 'synchroon' 'bidirectioneel' 'open-drain' zijn en 'opgetrokken met weerstanden'.

De I2C-bustechnologie is oorspronkelijk ontworpen door Philips Semiconductors in het begin van de jaren '80 om gemakkelijke communicatie mogelijk te maken tussen componenten die zich op dezelfde printplaat bevinden.

Met I2C kunt u meerdere slaves aansluiten op een enkele master (zoals SPI) of u kunt meerdere masters hebben die enkele of meerdere slaven besturen. Zowel masters als slaves kunnen data verzenden en ontvangen. Een apparaat op de I2C-bus kan zich dus in een van deze vier toestanden bevinden:

* Master verzenden – master node verzendt data naar een slave* Master ontvangt – master node ontvangt data van een slave

* Slave-overdracht - slave-knooppunt verzendt gegevens naar de master

* Slave-ontvangst - slave-knooppunt ontvangt gegevens van de master

I2C is een 'short distance' 'seriële communicatieprotocol', dus gegevens worden 'bit-by-bit' overgedragen langs de enkele draad of de SDA-lijn. De uitvoer van bits wordt gesynchroniseerd met de bemonstering van bits door een kloksignaal dat wordt 'gedeeld' tussen de master en de slave. Het kloksignaal wordt altijd door de master aangestuurd. De Master genereert de klok en start de communicatie met slaves.

Dus, om het samen te vatten>

Aantal gebruikte draden: 2

Synchroon of asynchroon: Synchroon

Serieel of parallel: serieel

Kloksignaal bestuurd door: Master Node

Gebruikte spanningen: +5 V of +3,3 V

Maximaal aantal Masters: Onbeperkt

Maximaal aantal slaven: 1008

Maximale snelheid: standaardmodus = 100 kbps

Snelle modus = 400 kbps

Hoge snelheidsmodus = 3,4 Mbps

Ultrasnelle modus = 5 Mbps

Stap 4: TCA9548A I2C-multiplexermodule

TCA9548A I2C-multiplexermodule
TCA9548A I2C-multiplexermodule
TCA9548A I2C-multiplexermodule
TCA9548A I2C-multiplexermodule
TCA9548A I2C-multiplexermodule
TCA9548A I2C-multiplexermodule

TCA9548A is een achtkanaals (bidirectionele) I2C-multiplexer waarmee acht afzonderlijke I2C-apparaten kunnen worden bestuurd door een enkele host-I2C-bus. U hoeft alleen de I2C-sensoren aan te sluiten op de SCn / SDn-multiplexbussen. Als er bijvoorbeeld acht identieke OLED-schermen nodig zijn in een toepassing, kan een van elk scherm op elk van deze kanalen worden aangesloten: 0-7.

De multiplexer maakt verbinding met VIN-, GND-, SDA- en SCL-lijnen van de microcontroller. Het breakout-bord accepteert VIN van 1.65v tot 5.5v. Zowel ingang SDA- als SCL-lijnen zijn verbonden met VCC via een 10K pull-up-weerstand (de grootte van de pull-up-weerstand wordt bepaald door de hoeveelheid capaciteit op de I2C-lijnen). De multiplexer ondersteunt zowel normale (100 kHz) als snelle (400 kHz) I2C-protocollen. Alle I/O-pinnen van TCA9548A zijn 5-volt tolerant en kunnen ook worden gebruikt om van hoge naar lage of lage naar hoge spanningen te vertalen.

Het is een goed idee om pull-up weerstanden op alle kanalen van TCA9548A te plaatsen, zelfs als de spanningen hetzelfde zijn. De reden hiervoor is vanwege de interne NMOS-schakelaar. Het zendt geen hoogspanning goed uit, aan de andere kant zendt het lage spanningen heel goed uit. De TCA9548A kan ook worden gebruikt voor spanningstranslatie, waardoor het gebruik van verschillende busspanningen op elk SCn/SDn-paar mogelijk is, zodat onderdelen van 1,8 V, 2,5 V of 3,3 V kunnen communiceren met onderdelen van 5 V. Dit wordt bereikt door externe pull-up-weerstanden te gebruiken om de bus naar de gewenste spanning voor het master- en elk slave-kanaal te trekken.

Als de microcontroller een busconflict of een andere onjuiste werking detecteert, kan de TCA9548A worden gereset door een laag naar de RESET-pin te bevestigen.

Stap 5:

Afbeelding
Afbeelding
Afbeelding
Afbeelding
Afbeelding
Afbeelding

Met TCA9548 kan een enkele microcontroller communiceren met maximaal '64 sensoren', allemaal met hetzelfde of een ander I2C-adres door een uniek kanaal toe te wijzen aan elke sensor-slave-subbus.

Als we het hebben over het verzenden van gegevens over 2 draden naar meerdere apparaten, hebben we een manier nodig om ze aan te pakken. Het is hetzelfde als de postbode die op een enkele weg komt en de postpakketten naar verschillende huizen laat vallen omdat er verschillende adressen op staan.

Je zou maximaal 8 van deze multiplexers met elkaar kunnen verbinden op 0x70-0x77 adressen om 64 van dezelfde I2C geadresseerde delen te besturen. Door de drie adresbits A0, A1 en A2 met VIN te verbinden, kunt u verschillende combinaties van de adressen krijgen. Zo ziet een adresbyte van de TCA9548A eruit. De eerste 7-bits vormen samen het slave-adres. Het laatste bit van het slave-adres definieert de bewerking (lezen of schrijven) die moet worden uitgevoerd. Wanneer het hoog (1) is, wordt een leesbewerking geselecteerd, terwijl een laag (0) een schrijfbewerking selecteert.

Stap 6: Hoe de master gegevens verzendt en ontvangt

Hoe de master gegevens verzendt en ontvangt
Hoe de master gegevens verzendt en ontvangt
Hoe de master gegevens verzendt en ontvangt
Hoe de master gegevens verzendt en ontvangt

Het volgende is de algemene procedure voor een master om toegang te krijgen tot een slave-apparaat:

1. Als een master data naar een slave wil sturen (WRITES):

– Master-zender verzendt een START-voorwaarde gevolgd door de adressen van de slave-ontvanger en R/W ingesteld op 0

– Master-zender stuurt gegevens in de '8-bit control registers' naar de slave-ontvanger wanneer de slave bevestigt dat deze gereed is

– Master-zender beëindigt de overdracht met een STOP-voorwaarde

2. Als een master data van een slave wil ontvangen of lezen (READS):

– Master-ontvanger verzendt een START-voorwaarde gevolgd door de adressen van de slave-ontvanger en R/W ingesteld op 1

– Master-ontvanger stuurt het gevraagde register om te lezen naar slave-zender

– Master-ontvanger ontvangt gegevens van de slave-zender

- Zodra alle bytes zijn ontvangen, stuurt de master NACK-signalering naar de slave om de communicatie te stoppen en de bus vrij te geven

- Master-ontvanger beëindigt de overdracht met een STOP-voorwaarde

Een bus wordt als inactief beschouwd als zowel SDA- als SCL-lijnen hoog zijn na een STOP-conditie.

Stap 7: Coderen

Code
Code

Nu, Int, de code, laten we beginnen met het opnemen van de "Wire" -bibliotheek en door het adres van de multiplexer te definiëren.

#include "Wire.h"

#include "U8glib.h"

#define MUX_Address 0x70 // TCA9548A Encoders adres

Vervolgens moeten we de poort selecteren waarnaar we willen communiceren en de gegevens erop verzenden met behulp van deze functie:

void selectI2CChannels(uint8_t i) {

als (i > 7) terugkeer;

Wire.beginTransmission (MUX_Address);

Wire.write(1 << i);

Wire.endTransmission();

}

Vervolgens initialiseren we de weergave in de setup-sectie door "u8g.begin();" aan te roepen. voor elk scherm dat is aangesloten op de MUX "tcaselect(i);"

Eenmaal geïnitialiseerd, kunnen we doen wat we willen door de functie "tcaselect(i);" aan te roepen. waarbij "i" de waarde is van de gemultiplexte bus en vervolgens de gegevens en klok dienovereenkomstig verzenden.

Stap 8: I2C-scanner

I2C-scanner
I2C-scanner

Voor het geval u niet zeker bent van het apparaatadres van uw I2C-schild, voert u de bijgevoegde 'I2C-scanner'-code uit om het hexadecimale adres van uw apparaat te vinden. Wanneer de schets in een Arduino wordt geladen, scant hij het I2C-netwerk en toont de adressen die reageren.

Stap 9: bedrading en demo

Bedrading en demo
Bedrading en demo
Bedrading en demo
Bedrading en demo

bedrading:

Laten we beginnen met het aansluiten van de multiplexer op een NodeMCU-bord. Aansluiten:

VIN tot 5V (of 3.3V)

GND naar aarde

SDA naar D2 en

SCL naar D1-pinnen respectievelijk

Sluit voor een Arduino-bord aan:

VIN tot 5V (of 3.3V)

GND naar aarde

SDA naar A4 en

SCL naar A5 pinnen respectievelijk

Zodra de MUX is aangesloten op de microcontroller, hoeft u alleen maar de sensoren aan te sluiten op de SCn / SDn-paren.

Laten we nu eens kijken naar deze snelle demo waarin ik 8 OLED-schermen heb aangesloten op de TCA9548A Multiplexer. Omdat deze displays I2C-communicatie gebruiken, communiceren ze met de Arduino met slechts 2 pinnen.

Stap 10: Voor- en nadelen

Voor-en nadelen
Voor-en nadelen

VOORDELEN

* Communicatie vereist slechts twee buslijnen (draden)

* Er bestaat een eenvoudige master/slave-relatie tussen alle componenten

* Geen strikte baudrate-eisen zoals bijvoorbeeld bij RS232, de master genereert een busklok

* Hardware is minder ingewikkeld dan UART's

* Ondersteunt meerdere masters en meerdere slaves

* ACK/NACK-bit geeft bevestiging dat elk frame met succes is overgedragen

* I2C is een 'echte multi-master bus' die arbitrage en botsingsdetectie biedt

* Elk apparaat dat op de bus is aangesloten, is software-adresseerbaar met een uniek adres

* De meeste I2C-apparaten kunnen communiceren op 100 kHz of 400 kHz

* I²C is geschikt voor randapparatuur waar eenvoud en lage fabricagekosten belangrijker zijn dan snelheid

* Bekend en veelgebruikt protocol

NADELEN

* Langzamere gegevensoverdrachtsnelheid dan SPI

* De grootte van het dataframe is beperkt tot 8 bits

* Meer gecompliceerde hardware nodig om te implementeren dan de SPI-technologie

Aanbevolen: