TI中文支持网
TI专业的中文技术问题搜集分享网站

ADS122C04: ADS122C04初始化配置失败

Part Number:ADS122C04Other Parts Discussed in Thread: TIDA-01526

你好,

我使用ADS122C04采集传感器输出的电压值,硬件原理图如下

使用STM32与ADS122C04通讯时候出现寄存器配置失败的情况,通讯步骤数据及如下

step1,复位ADS122C04,通讯成功

step2,设置配置寄存器00h,通讯成功

step3,设置配置寄存器01h,通讯成功

step4,启动转换

step5,等待10ms后读取转换结果通讯成功。返回数据一直为0x03ffff

因数据不正常,再读取配置传感器的值确认是否配置成功

step6,读取寄存器00h,通讯成功。返回数据(全部寄存器都是)一直为0x01

在这块儿折腾挺久没有效果,我怀疑我的配置过程有错误,请帮我分析下。感谢!

Kailyn Chen:

您好,有两点需要确认下:

第一,上电后,reset拉高之后至少要delay  td(RSSTA)=100ns再开始I2C 通讯,不知是否满足?

第二,我看您的时序是在读取转换结果时,返回值都是FF,读取寄存器的值是没问题的。

那在读取转换值的时候,我们可通过DRDYpin去监测转换是否完成, 您是采取的单次转换还是连续转换?

 

另外,TIDA-01526这个方案是ADS122C04搭配MCU的测量方案,链接中给出了sample code,您可以参考下:

https://www.ti.com/tool/TIDA-01526

 code的下载链接,下载之后在fw文件夹中:

https://www.ti.com/lit/zip/tidcee5

,

Walter wu:

谢谢Kailyn答复,两个确认的地方答复如下:

Kailyn Chen 说:第一,上电后,reset拉高之后至少要delay  td(RSSTA)=100ns再开始I2C 通讯,不知是否满足?

上电后到开始通讯的时间满足需求,上电后约6秒才开始通讯。

Kailyn Chen 说:

第二,我看您的时序是在读取转换结果时,返回值都是FF,读取寄存器的值是没问题的。

那在读取转换值的时候,我们可通过DRDYpin去监测转换是否完成, 您是采取的单次转换还是连续转换?

采取的是连续转换,现在最亟待解决的问题是:写入配置寄存器的值跟读回来的值不一致。以当前通讯为例

初始化I2C通讯数据为0x90,0x40,0x80。

0x90为器件地址和写命令

0x40为WREG命令

0x80为写入Configuration Register 0的值

从下图可以看出ADS122C04有应答ACK

再读取刚写入的Configuration Register 0的值却返回0x01,按我理解应该返回0x80才对

我怀疑是不是我理解错了,请帮再看下

,

Kailyn Chen:

您应该是理解错了, 您是要读取某个寄存器值的时序吗? 我们以R0=0x80 为例,正常的时序是这样的:

Start–Slave address(/W)0x90–ACK—PREG 0x20—ACK–Repeat Start–Slave address(R)0x91—ACK—Register data 0x80—NACK—Stop

注意: PREG 0010rrxx,rr指的是寄存器地址,比如您要读取寄存器R0的值,那么rr=00,xx写0或1都可以,所以PREG这里为00100000

,

Kailyn Chen:

刚才附的读取寄存器的时序图没有附上,也就是datasheet中的Figure 58.

,

Walter wu:

谢谢Kallyn答复,我这边通讯时候的时序图是正确的,有疑问的地方是:读出的寄存器00h值应该等于写入的值,但我这边读出的值和写入的值不一致,因此应该是初始化失败的。通讯过程如下:

配置寄存器00h,也就是Configuration Register 0的值为0x80,I2C通讯数据如下

0x90 0x40 0x80(器件写地址为0x90,写配置寄存器0的命令为0x40,写入的数据为0x80)

然后再读取配置寄存器0的数据,I2C通讯数据如下

0x90 0x20 0x91 0x01(器件写地址为0x90,读配置寄存器0的命令为0x20,器件读地址为0x91,读回的数据为0x01)

时序完全满足你发的时序图要求,但读回来的数据不是我写入的数据,因此应该是初始化失败了。不理解这里为什么会失败,通讯数据截图如下请帮分析是什么原因。

配置寄存器00h的I2C通讯数据

读取配置寄存器00h的I2C通讯数据

,

Kailyn Chen:

您好,嗯,时序没问题。寄存器0的最高位7:4是输入多路选择器的配置位。

所以您配置的位0x80, 即1000,选择的AINP = AIN0, AINN = AVSS,单端输入AINP=AIN0端,AINN接地。而读取的高4位是0000。

所以想和您确认下,实际电路中,输入端连接的是哪个?

不论是写命令还是读命令,我看了下配置的时序是没问题的。

其他寄存器的配置,读回的值是否也和写入的不一致?

,

Walter wu:

谢谢答复Kailyn,实际电路中输入端连接AIN0接电压信号VOUT_O3(单端信号),原理图如下。

其它寄存器不管写入什么值,读回的都是0x01。

如果是读转换结果,读回的都是0x3fffff

,

Kailyn Chen:

您好,抱歉回复晚了,不知您的问题解决了吗?

I2C的上拉阻值是多少?

另外,我认为还是和程序的语法有关。

程序是从其他成功的I2C案例中移植过来更改的吗?

赞(0)
未经允许不得转载:TI中文支持网 » ADS122C04: ADS122C04初始化配置失败
分享到: 更多 (0)

© 2024 TI中文支持网   网站地图 鲁ICP备2022002796号-1