Módulo de expansión de dispositivos Octal IIC TCA9845A
Introducción a TCA9845A
Se puede saber por el protocolo de comunicación IIC que se pueden colgar varios dispositivos IIC en los dos buses del IIC, pero se requiere que las direcciones de dispositivo IIC de cada dispositivo sean diferentes. Cuando hay varios dispositivos esclavos IIC idénticos con la misma dirección de dispositivo para comunicarse con el dispositivo maestro IIC, si también se cuelga en los dos buses IIC para comunicarse, se desordenará. TCA9845A puede resolver esta situación de manera efectiva y puede hacer que ocho dispositivos con la misma dirección de esclavo IIC se comuniquen de manera efectiva con el maestro IIC. El dispositivo TCA9548A está equipado con ocho interruptores de transferencia bidireccionales que se pueden controlar a través del bus IIC. Se admite la traducción del nivel de voltaje entre buses de 1,8 V, 2…5 V, 3,3 V y 5 V; el rango de voltaje de suministro operativo es de 1,65 V a 5,5 V; frecuencia de reloj de 0 a 400 kHz.
Tabla de direcciones de dispositivos TCA9548A
Puede conectar 8 TCA9548A al mismo bus IIC, configurar 8 direcciones IIC diferentes y luego expandir y controlar 64 direcciones idénticas de dispositivos esclavos IIC.
TCA9845A conecta 4 módulos OLED con la misma dirección esclava IIC
Código de prueba y resultados experimentales
El administrador de la biblioteca Arduino busca e instala dos bibliotecas Adafruit_GFX y Adafruit_SSD1306
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display1(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
Adafruit_SSD1306 display2(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
Adafruit_SSD1306 display3(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
Adafruit_SSD1306 display4(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
// Select I2C BUS
void TCA9548A(uint8_t bus){
Wire.beginTransmission(0x70); // TCA9548A address
Wire.write(1 << bus); // send byte to select bus
Wire.endTransmission();
Serial.print(bus);
}
void setup() {
Serial.begin(115200);
// Start I2C communication with the Multiplexer
Wire.begin();
// Init OLED display on bus number 2 (display 1)
TCA9548A(2);
if(!display1.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
// Clear the buffer
display1.clearDisplay();
// Init OLED display on bus number 3
TCA9548A(3);
if(!display2.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
// Clear the buffer
display2.clearDisplay();
// Init OLED display on bus number 4
TCA9548A(4);
if(!display3.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
// Clear the buffer
display3.clearDisplay();
// Init OLED display on bus number 5
TCA9548A(5);
if(!display4.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
// Clear the buffer
display4.clearDisplay();
// Write to OLED on bus number 2
TCA9548A(2);
display1.setTextSize(8);
display1.setTextColor(WHITE);
display1.setCursor(45, 10);
// Display static text
display1.println("1");
display1.display();
// Write to OLED on bus number 3
TCA9548A(3);
display2.setTextSize(8);
display2.setTextColor(WHITE);
display2.setCursor(45, 10);
// Display static text
display2.println("2");
display2.display();
// Write to OLED on bus number 4
TCA9548A(4);
display3.setTextSize(8);
display3.setTextColor(WHITE);
display3.setCursor(45, 10);
// Display static text
display3.println("3");
display3.display();
// Write to OLED on bus number 5
TCA9548A(5);
display4.setTextSize(8);
display4.setTextColor(WHITE);
display4.setCursor(45, 10);
// Display static text
display4.println("4");
display4.display();
}
void loop() {
}