这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 板卡试用 » 【换取手持数字示波器】+使用TCA9548A拓展I2C口

共4条 1/1 1 跳转至

【换取手持数字示波器】+使用TCA9548A拓展I2C口

专家
2024-05-18 17:15:26   被打赏 40 分(兑奖)     打赏

TCA9548A 是低压 8 通道 I2C开关,工作电压范围1.65V 至 5.5V,本例中适配ESP8266没有任何问题。

图片1.png内部构成框图:

图片2.png典型的应用电路:

图片3.png

TCA9548A支持硬件复位的,由RESET引脚控制,实际测试时,被悬空了,没有接入ESP8266。

A0~A2用来设置地址,实际测试时,全部接地了。

地址的配置:

图片4.png

图片5.png

本例中使用的TCA9648的模块及其电路:

图片6.png

图片7.png

Arduino的程序:

/*
 * ESP8266通过TCA9548驱动两个OLED
 */
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include "TCA9548A.h"
#define TCA9548_ADDR  0x70
#define TCA9548_RESET 16
#define OLED_ADDR     0x3C
TCA9548A I2CMux;
// 接线备注:SCL(GPIO5---D1), SDA(GPIO4---D2)
// 分辨率: 128 * 32 像素单位
// 使用Wire默认总线:SCL(D1) - GPIO5 ; SDA(D2) - GPIO4
Adafruit_SSD1306 oled(128, 32, &Wire, -1);
uint8_t cnt = 0;
void setup() {
  // 初始化串口
  Serial.begin(115200);
  Serial.println();
  Serial.println("Test TCA9548A.");
  pinMode(TCA9548_RESET, OUTPUT);
  I2CMux.begin(Wire);
  I2CMux.closeAll(); 
  // 选择第一个I2C口
  I2CMux.openChannel(0);
  oled.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR);
  // 白色字体
  oled.setTextColor(WHITE);
  // 清屏
  oled.clearDisplay();
  // 设置字体大小  
  oled.setTextSize(1); 
  // 设置显示位置
  oled.setCursor(35, 5);
  // 显示的文字
  oled.println("OLED0");
  // 开显示
  oled.display(); 
  // 关闭通道
  I2CMux.closeChannel(0);
  // 选择第一个I2C口
  I2CMux.openChannel(1);
  oled.begin(SSD1306_SWITCHCAPVCC,0x3C);
  oled.setTextColor(WHITE);//开像素点发光
  oled.clearDisplay();//清屏
  oled.setTextSize(2);//设置字体大小  
  oled.setCursor(35, 5);//设置显示位置
  oled.println("OLED1");
  oled.display(); // 开显示
  I2CMux.closeChannel(1);
}
void loop() {}

测试效果:

图片8.png



专家
2024-05-19 08:23:06     打赏
2楼

谢谢楼主分享


院士
2024-05-24 17:56:27     打赏
3楼

您还真能研究

I2C多路开关我们多是用于电平不匹配时使用。




专家
2024-05-25 10:32:36     打赏
4楼

这个思路好,原来还可以这样用啊。谢谢指导!


共4条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]