Actualment, la comunicació I2C s'ha convertit en un dels mètodes més utilitzats per connectar múltiples dispositius a un microcontrolador com Arduino. TCA9548A és un extensor de bus I2C de 8 canals que soluciona un dels problemes més comuns en aquest tipus de connexions: el conflicte d'adreces I2C. Aquest article t'ajudarà a comprendre com funciona aquest extensor i com el pots integrar en els teus projectes amb Arduino.
Si alguna vegada t'has trobat amb dispositius que comparteixen la mateixa adreça al bus I2C, sabràs com pot ser de frustrant intentar comunicar-s'hi sense generar conflictes. Amb l'ús del TCA9548A, podem evitar aquests problemes i expandir el nombre de dispositius connectats a un únic bus I2C.
Què és un TCA9548A?
El TCA9548A és un extensor de bus I2C de 8 canals desenvolupat especialment per a dispositius com Arduino. La seva principal funció és permetre la connexió de diversos busos a un únic bus I2C, cosa que el converteix en un element fonamental per gestionar la comunicació amb diversos dispositius de manera eficient. Fins i tot es podria comparar amb un multiplexor, però dissenyat especÃficament per a la comunicació I2C.
Aquest dispositiu té una entrada de bus I2C que consta de dues lÃnies, SDA (dades) i SCL (rellotge), connectades a 8 sortides independents, cadascuna amb les corresponents SDA i SCL. Això permet que el microcontrolador es comuniqui amb fins a 8 dispositius, triant amb quina interactuar a cada moment.
A més, és comú utilitzar el TCA9548A per gestionar dispositius que comparteixen la mateixa adreça I2C, cosa habitual en certs sensors i displays que no permeten canviar la seva adreça. Amb aquest multiplexor, podeu activar un canal i comunicar-vos amb un dispositiu sense interferir en altres canals.
Beneficis i caracterÃstiques més destacades
Entre els beneficis més rellevants del TCA9548A es troba la capacitat de treballar amb busos I2C de diferents nivells de voltatge sense necessitat dutilitzar adaptadors lògics. Això permet la comunicació amb dispositius que funcionen a 1.8V, 2.5V, 3.3V i 5V, cosa que amplia les possibilitats d'integració en diversos projectes.
Una altra de les seves caracterÃstiques clau és que el multiplexor es pot controlar directament des del bus dentrada I2C, el que ho fa molt simple de manejar des del microcontrolador. El seu voltatge de funcionament va des de 1.65V fins a 5.5V, i admet busos I2C amb freqüències de fins a 400 kHz, cosa que el fa adequat per a una varietat de dispositius.
Connexió i configuració

La connexió del TCA9548A és força senzilla. Només cal connectar el bus d'entrada a les lÃnies SDA i SCL d'Arduino, juntament amb els pins d'alimentació corresponents (GND i 5V, per exemple). A l'altre extrem, pots connectar fins a 8 dispositius I2C, cadascun als seus respectius canals amb SDA i SCL.
Una caracterÃstica interessant és que podeu modificar l'adreça I2C del TCA9548A de 0x70 a 0x77 utilitzant els pins A0, A1 i A2. Això és útil si necessiteu utilitzar més d'un multiplexor en un mateix projecte. A més, si per alguna raó necessites reiniciar el multiplexor, pots fer-ho posant a LOW el pin RST, que està configurat per defecte a pull-up.
És fonamental tenir en compte que a mesura que augmenti la longitud dels cables o la complexitat dels dispositius connectats, pot ser necessari afegir resistències pull-up per assegurar la correcta transmissió de les dades al bus I2C.
Exemple de codi per escanejar dispositius I2C
Abans d'interactuar amb els dispositius connectats al TCA9548A, primer és important assegurar-se que el multiplexor sigui detectat correctament. Per fer-ho, es pot fer un escaneig del bus I2C. A continuació, mostrem un exemple bà sic per detectar el propi multiplexor al bus.
#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);
}
El codi anterior escaneja les possibles adreces del bus I2C, buscant el TCA9548A o altres dispositius connectats Un cop identificat el multiplexor, pots procedir a seleccionar el canal que necessites activar.
Seleccionant un canal del TCA9548A
Quan tenim el multiplexor configurat i detectat, necessitem seleccionar el canal correcte per comunicar-nos amb el dispositiu desitjat. Això es pot fer fà cilment escrivint un byte que activi el canal especÃfic. A continuació, un exemple de com seleccionar un canal:
#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);
}
}
Amb aquest codi, pots seleccionar i interactuar amb qualsevol dels dispositius connectats al TCA9548A, un alhora. Recordeu que també podeu modificar el codi per escanejar les sortides de cada canal, cercant dispositius addicionals.
El TCA9548A és una excel·lent eina per ampliar les capacitats del bus I2C en els teus projectes amb Arduino, permetent connectar múltiples dispositius amb la mateixa direcció o de diferents nivells de voltatge d'una manera eficient i senzilla.