You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

树莓派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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 01:06:01