https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1239646/tca9548a-tca9548a
器件型号:TCA9548A我正在使用适用于 TCA9548A 的 iI2C 扫描器。 我可以看到总线上的 I2C 地址、但看不到任何连接到 TCA 的地址。 我已经使用了这个芯片与 Arduino Mega 并按预期工作。 下面是 Arduino 的输出:
TCAScanner 已就绪
TCA 端口0
TCA 端口1
找到 I2C 0x1E
TCA 端口2
TCA 端口3
找到 I2C 0x1E
TCA 端口4
TCA 端口5
TCA 端口6
TCA 端口7
我可以看到 TCA 的端口上有一个器件。
以下是来自以下代码的结果。
TCA 端口#0ACK 地址:E0
找到:1
TCA 端口1ACK 地址:E0
找到:1
TCA 端口2ACK 地址:E0
找到:1
TCA 端口#3ACK 地址:E0
找到:1
TCA 端口#4ACK 地址:E0
找到:1
TCA 端口#5ACK 地址:E0
找到:1
TCA 端口#6ACK 地址:E0
找到:1
TCA 端口#7ACK 地址:E0
找到:1
我正在尝试在 PIC16F877A 和 CCS PCWH Complier 5.115版上复制。
这是规范。
#include <16F877a.h>
#设备 ADC=16
#device ICD=true
//#HS 保险丝
#fuse NOWDT //无看门狗定时器
//#fuse WDT128 //看门狗定时器使用1:128后标度
#fuse NOBROWNOUT //无欠压复位
#fuse NOPUT ///用于 I/O 的无低压注入、B3 (PIC16)或 B5 (PIC18)
#使用延迟(crystal=20MHz)
#use rs232(BAU=9600,奇偶校验=N,UART1、bits=8、stream=rs232,错误)
#use i2c (主器件、慢速、i2c1、FORCE_HW)
无符号 INT8 I2C_Address;
无符号 INT8状态;
无符号 INT8 Device_Count = 0;
INT8通道;
#define TCAaddr 0xEE //表示 A0、A1、A2 = 0b111
const int8 bus_array [8]={1、2、4、8、16、32、64,128};
void select_BUS (int 总线)
{
如果(总线>7 )
return;//陷阱非法的总线号
I2C_START();
I2C_WRITE (TCAaddr);
I2C_WRITE (bus_array[bus]);//选择指定的总线编号
I2C_STOP ();//I2C bus 现在路由到总线编号
}
//然后如上所述对 ADXL 进行布线,只需调用
// select_BUS (0);
//并且 ADXL 现在将连接到 I2C 总线,
//转换。
//您可以正常写入 ADXL。
INT8 GET_ACK_STATUS (INT8地址)
{
int8 ack;
I2C_START();
delay_us (20);
ACK = i2c_write (address);//如果得到 ACK、则状态= 0
I2C_STOP();
delay_us (20);
if (ack =0)
返回(真);
否则
返回(假);
}
void get_I2C_addresses (void){
//尝试从0x10到0xEF 的所有从地址。
//查看是否从任何从器件得到响应
//这可能是在 i2c 总线上。
// for (I2C_Address = 0x10;I2C_Address < 0xF0;I2C_Address+=2)//原始值
for (I2C_Address = 0x10;I2C_Address < 0xE8;I2C_Address+=2)//进行了下调以避免扫描多路复用器地址,以防万一
{
STATUS = GET_ACK_STATUS (I2C_Address);
if (status == true)
{
printf ("ACK addr:%X\n\r"、I2C_Address);
DEVICE_COUNT++;
delay_ms (100);
}
}
if (Device_Count == 0){
printf("Nothing Founding\n\r");
delay_cycles (1);
}
否则{
printf ("找到:%u\n\n"、Device_Count);
delay_cycles (1);
}
}
//========================
空 main (){
output_float (PIN_B0);
output_float (PIN_B1);
对于(Channel = 0;Channel < 8;Channel++)
{//循环通过通道
select_BUS (bus_array[通道]);
printf ("\n\nRTCA 端口#%d"、通道);
DEVICE_Count = 0;
get_I2C_addresses ();//I2C 扫描仪
}
while (1);
}
我是否需要此驱动程序?