树莓派RPI4用Python通过TCA9548A I2C复用器访问ADS1100 ADC问题
通过Adafruit TCA9548A库操作ADS1100寄存器的实现方案
核心原理
Adafruit CircuitPython TCA9548A库对外暴露的单通道对象(如tca[0])本身兼容I2C设备读写协议,内置和smbus功能一致的寄存器读写方法,不需要依赖smbus库,也不需要传入总线编号参数,直接使用通道对象即可完成寄存器操作。
实现步骤
1. 初始化硬件对象
首先完成树莓派I2C总线、TCA9548A多路复用器和对应通道的初始化:
import board import adafruit_tca9548a # 初始化树莓派原生I2C总线 i2c = board.I2C() # 初始化TCA9548A,默认地址为0x70,可根据A0/A1/A2引脚电平修改地址参数 tca = adafruit_tca9548a.TCA9548A(i2c, address=0x70) # 取出ADS1100所在的通道,例如设备接在第0通道则取tca[0] ads1100_channel = tca[0]
2. 读写ADS1100寄存器
直接调用通道对象的内置方法即可操作ADS1100,方法参数和smbus的同名方法完全一致:
# ADS1100默认I2C地址,可根据ADDR引脚电平调整 ADS1100_I2C_ADDR = 0x48 # 写入配置寄存器示例:设置为16位分辨率、连续采样、增益1倍 config_val = 0x8C ads1100_channel.writeto_mem(ADS1100_I2C_ADDR, 0x00, bytes([config_val])) # 读取采样结果示例:读取2字节转换结果 raw_bytes = ads1100_channel.readfrom_mem(ADS1100_I2C_ADDR, 0x00, 2) # 转换为有符号16位整数 raw_sample = int.from_bytes(raw_bytes, byteorder='big', signed=True) # 换算为实际电压,参考电压2.048V、增益1倍时的换算公式 voltage = raw_sample * 2.048 / 32768 print(f"当前采样电压:{voltage:.4f}V")
注意事项
- 若多个ADS1100分别接在TCA9548A的不同通道,只需要分别调用对应
tca[n]对象的读写方法即可,库会自动完成通道切换,无需手动操作复用器寄存器 - 原有的smbus操作逻辑无需大量修改,仅需将
smbus.SMBus(1)实例替换为对应的TCA通道对象即可
内容的提问来源于stack exchange,提问作者Marco Bob
相关产品推荐
相关产品推荐

