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.
inserte la descripción de la imagen aquí
Tabla de direcciones de dispositivos TCA9548A
inserte la descripción de la imagen aquí
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

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

Código de prueba y resultados experimentales

El administrador de la biblioteca Arduino busca e instala dos bibliotecas Adafruit_GFX y Adafruit_SSD1306
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

#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() {
    
    
  
}

inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/qq_42250136/article/details/124008692
Recomendado
Clasificación