Descripción
Este chip TCA9548A es un conmutador de canales i2c (multiplexor de puertos): un sólo canal de entrada, hasta 8 canales de salida seleccionables individualmente. Funciona como un multiplexor pero para multiplexar el propio bus i2c. Es útil, por ejemplo, si se desea conectar en el mismo bus 8 sensores de temperatura idénticos; puede conectarse uno a cada canal de salida. Así, el bus de lectura irá alternando el canal para acceder de manera independiente a cada uno de los 8 sensores idénticos (con la misma dirección). Posibilita también conectar entre sí buses i2c de distinto nivel de tensión (level shifter); es compatible con buses de 1.8, 2.5, 3,3 y 5V.
Además, la configuración de los canales de salida activos es flexible, pudiéndose activar de manera simultánea varios de ellos.
- Alimentación: 1,65V – 5,5V
- Entradas: Todas tolerantes a 5V
- Frecuencia de reloj: hasta 400kHz
- Conexiones A0/A1/A2: Modifican la dirección propia del TCA9548A. Puedes conectar hasta 8 TCA9548A en el mismo bus i2c. Direcciones posibles: 0x70 a 0x77
- Conexión SDA/SCL: Conexión i2c al maestro
- Conexiones SD0/SCL0 a SDA7/SCL7: Salidas multiplexadas i2c hacia los esclavos
- Conexión RST: Resetea la configuración del chip cuando se conecta a nivel bajo. A nivel alto si se deja sin conectar.
Más información: Hoja de datos tca9548a
Código de ejemplo (escáner de dispositivos i2c en los buses de salida):
#include "Wire.h" void TCA_outbus(uint8_t i) { //Función para seleccionar un puerto de salida (0 a 7) if (i > 7) return; //Si el bus pedido es superior al 7 no se realiza ninguna acción Wire.beginTransmission(0x70); //Dirección del TCA9548A Wire.write(1 << i); //Se indica el bus de salida que se desea activar Wire.endTransmission(); } // *** CONFIGURACIÓN *** void setup() { Wire.begin(); Serial.begin(9600); //Inicializa el puerto serie (Monitor Serie) Serial.println("\n --- Escaner de puertos i2c ---"); for (uint8_t bus=0; bus<8; bus++) { //Escanea los 8 buses de salida TCA_outbus(bus); // Apunta a un bus en concreto Serial.print("Bus #"); Serial.println(bus); for (uint8_t dir = 0; dir <=127; dir ++) { // Recorre las 128 posibles direcciones dentro del bus if (dir == 0x70) continue; //En caso de intentar apuntar a la propia dirección del TCA9548 se pasa a la siguiente iteración Wire.beginTransmission(dir ); if (!Wire.endTransmission()) { Serial.print("Encontrado dispositivo i2c en 0x"); Serial.println(dir,HEX); } } } Serial.println("\n +++ FINALIZADO +++"); } void loop(){ // El código de aplicación, si lo hay, va aquí }
Valoraciones
No hay valoraciones aún.