TCA9845A八路IIC器件扩展模块

TCA9845A简介

由IIC通信协议可知IIC两根总线上可以挂多个IIC器件,但要求每个器件的IIC器件地址各不相同。当有多个相同的IIC从机器件且从机的器件地址相同要和IIC主机器件进行通信,若也挂在IIC两根总线上进行通信将会变得紊乱。TCA9845A能有效的解决这种情况的出现,可以使八个IIC从机地址相同的器件和IIC主机进行有效的通信。TCA9548A 器件配有八个可通过 IIC 总线控制的双向转换开关。支持1.8V、2…5V、3.3V 和 5V 总线间进行电压电平转换;工作电源电压范围为1.65V至5.5 V;0 至 400kHz 时钟频率。
在这里插入图片描述
TCA9548A器件地址表
在这里插入图片描述
可以将8个TCA9548A连接到同一个IIC总线上,配置8个不同的IIC地址,进而扩展控制64个相同的IIC从机器件地址。

TCA9845A连接4个IIC从机地址相同的OLED模块

在这里插入图片描述
在这里插入图片描述

测试代码与实验结果

Arduino库管理器搜索安装Adafruit_GFX和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() {
    
    
  
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_42250136/article/details/124008692