Tegenwoordig is I2C-communicatie een van de meest gebruikte methoden geworden om meerdere apparaten op een microcontroller zoals Arduino aan te sluiten. Hij TCA9548A is een 2-kanaals I8C-busextender die een van de meest voorkomende problemen bij dit soort verbindingen oplost: het I2C-adresconflict. Dit artikel zal u helpen begrijpen hoe deze extender werkt en hoe u deze in uw Arduino-projecten kunt integreren.
Als u ooit apparaten bent tegengekomen die hetzelfde adres delen op de I2C-bus, weet u hoe frustrerend het kan zijn om ermee te communiceren zonder conflicten te veroorzaken. Met het gebruik van TCA9548Akunnen we deze problemen vermijden en het aantal apparaten dat op een enkele I2C-bus is aangesloten uitbreiden. Laten we de mogelijkheden van deze multiplexer in detail onderzoeken.
Wat is een TCA9548A?
El TCA9548A is een 2-kanaals I8C-busextender speciaal ontwikkeld voor apparaten zoals Arduino. De belangrijkste functie ervan is om de aansluiting van meerdere bussen op één enkele I2C-bus mogelijk te maken, waardoor het een fundamenteel element is om de communicatie met verschillende apparaten efficiënt te beheren. Je zou het zelfs kunnen vergelijken met een multiplexer, maar dan specifiek ontworpen voor I2C-communicatie.
Dit apparaat heeft een I2C-busingang bestaande uit twee lijnen, SDA (data) en SCL (klok), verbonden met 8 onafhankelijke uitgangen, elk met de bijbehorende SDA en SCL. Dit maakt het mogelijk de microcontroller communiceert met maximaal 8 apparaten, waarbij u op elk moment kiest met wie u wilt communiceren.
Bovendien is het gebruikelijk om de TCA9548A te gebruiken om apparaten te beheren die hetzelfde I2C-adres delen, iets wat gebruikelijk is bij bepaalde sensoren en displays waarbij het adres niet kan worden gewijzigd. Met deze multiplexer kunt u één kanaal activeren en met één apparaat communiceren zonder andere kanalen te storen.
Voordelen en hoogtepunten
Een van de meest relevante voordelen van TCA9548A Er is de mogelijkheid om met I2C-bussen met verschillende spanningsniveaus te werken zonder dat er logische adapters nodig zijn. Hierdoor kan de communicatie met apparaten die werken op 1.8V, 2.5V, 3.3V en 5V, wat de integratiemogelijkheden in verschillende projecten vergroot.
Een ander belangrijk kenmerk is dat de multiplexer rechtstreeks vanaf de I2C-ingangsbus kan worden aangestuurd, waardoor bediening vanaf de microcontroller heel eenvoudig is. De bedrijfsspanning varieert van 1.65 V tot 5.5 V en ondersteunt I2C-bussen met frequenties tot 400 kHz, waardoor hij geschikt is voor een verscheidenheid aan apparaten.
Aansluiting en configuratie
Het aansluiten van de TCA9548A is vrij eenvoudig. U hoeft alleen de ingangsbus aan te sluiten op de SDA- en SCL-lijnen van de Arduino, samen met de bijbehorende stroompinnen (GND en 5V bijvoorbeeld). Aan de andere kant kunt u maximaal 8 I2C-apparaten aansluiten, elk op hun respectievelijke kanalen met SDA en SCL.
Een interessante functie is dat je het I2C-adres van de TCA9548A kunt wijzigen van 0x70 naar 0x77 met behulp van pinnen A0, A1 en A2. Dit is handig als u meer dan één multiplexer in hetzelfde project moet gebruiken. Als u om wat voor reden dan ook de multiplexer moet resetten, kunt u dit doen door de RST-pin LAAG in te stellen, die standaard is ingesteld op pull-up.
Het is essentieel om in gedachten te houden dat naarmate de lengte van de kabels of de complexiteit van de aangesloten apparaten toeneemt, het nodig kan zijn om pull-up-weerstanden toe te voegen om de juiste overdracht van gegevens op de I2C-bus te garanderen.
Codevoorbeeld voor het scannen van I2C-apparaten
Voordat u interactie aangaat met apparaten die zijn aangesloten op de TCA9548A, is het eerst belangrijk om ervoor te zorgen dat de multiplexer correct wordt gedetecteerd. Om dit te doen, kunt u een scan van de I2C-bus uitvoeren. Hieronder laten we een eenvoudig voorbeeld zien om de multiplexer zelf op de bus te detecteren.
#include "Wire.h"
void setup() {
Wire.begin();
Serial.begin(9600);
Serial.println("Escaneando bus I2C...");
for (byte address = 8; address <= 119; address++) {
Wire.beginTransmission(address);
byte error = Wire.endTransmission();
if (error == 0) {
Serial.print("Encontrado dispositivo en dirección 0x");
Serial.println(address, HEX);
}
}
Serial.println("Escaneo finalizado");
}
void loop() {
delay(1000);
}
De bovenstaande code scant de mogelijke I2C-busadressen, op zoek naar de TCA9548A of andere aangesloten apparaten. Zodra de multiplexer is geïdentificeerd, kunt u doorgaan met het selecteren van het kanaal dat u wilt activeren.
Een kanaal van de TCA9548A selecteren
Zodra we de multiplexer hebben geconfigureerd en gedetecteerd, moeten we het juiste kanaal selecteren om met het gewenste apparaat te communiceren. Dit kan eenvoudig worden gedaan door een byte te schrijven die het specifieke kanaal activeert. Hier is een voorbeeld van hoe u een kanaal selecteert:
#define TCAADDR 0x70
void tcaselect(uint8_t i) {
if (i > 7) return;
Wire.beginTransmission(TCAADDR);
Wire.write(1 << i);
Wire.endTransmission();
}
void setup() {
Wire.begin();
Serial.begin(115200);
for (uint8_t t=0; t<8; t++) {
tcaselect(t);
Serial.print("Escaneando salida ");
Serial.println(t);
}
}
Met deze code kunt u elk apparaat selecteren en gebruiken dat op het apparaat is aangesloten TCA9548A, één voor één. Vergeet niet dat u de code ook kunt wijzigen om de uitgangen van elk kanaal te scannen, op zoek naar extra apparaten.
El TCA9548A is een uitstekend hulpmiddel om de mogelijkheden van de I2C-bus in uw Arduino-projecten uit te breiden, waardoor u op een efficiënte en eenvoudige manier meerdere apparaten met hetzelfde adres of verschillende spanningsniveaus kunt aansluiten.