你好!我在使用ADS131A04时,RDRY引脚始终为高电平,我跟踪了所涉及的寄存器,没发现有任何错误,请指正我错在哪里?
// 3.3V的IOVCC,5V的AVCC,16.384无源晶振,M0-IOVDD,M1悬空,M2-GND,ADS131A04通过CA-IS3762与MCU隔离。
//复位
ADReset =0; //低电平复位AD
Delay(10); //延时10us(要求800ns以上)
ADReset =1;
Result =0;
do{
Result = SendCommand(0x0000,0); //第2个参数0表示只发送2个命令字节,不读取AD转换值
}while(Result !=0xFF04);
//复位完成,以下是读写突破口
Result = SendCommand(0x0000,0); //Result返回0xFF04
Result = SendCommand(0x0655,0); //Result返回0xFF04
Result = WriteReg(0x0D, 0x04, 0); //Result返回0x0655, 向0dh寄存器写入0x04,16.384M晶振4分频,第3个参数0表示不读取AD转换结果
Result = WriteReg(0x0E, 0x21, 0); //Result返回0x2D04
for(i=2; i<21; i++) Result = ReadReg(i,0); //读取02h~14h寄存器,第2个参数0表示不读取AD转换值
//Result返回{0x2E21, 0x2200, 0x2300, 0x2400, 0x2500,0x2600, 0x2709, 0x2800, 0x2900, 0x2A00, 0x2B60, 0x2C3C, 0x2D04,0x2E21, 0x2f00, 0x3000, 0x3100, 0x3200, 0x3300}
Result = WriteReg(0x0F, 0x0F, 0); //Result返回0x3400,使能AD转换
//接下来,用下边两行
Result = SendCommand(0x0033,0); //Result返回0x2F0F,第2个参数1表示发送2个命令字节后,接着读取各通道
Result = SendCommand(0x0555,0); //Result返回0x0033,第2个参数1表示发送2个命令字节后,接着读取各通道
//或是用下边
Result = SendCommand(0x0033,1); //Result返回0x2F0F,第2个参数1表示发送2个命令字节后,接着读取各通道
Result = SendCommand(0x0555,1); //Result返回0x0033,第2个参数1表示发送2个命令字节后,接着读取各通道
//都会死在下面这行
while(RDRY);
//我尝试用
Result = SendCommand(0x0033,0); //Result返回0x2F0F,第2个参数1表示发送2个命令字节后,接着读取各通道
//或 Result = SendCommand(0x0033,1); //Result返回0x2F0F,第2个参数1表示发送2个命令字节后,接着读取各通道
while(RDRY); //也会死在这一行
Result = SendCommand(0x0555,1); //执行不到这一行
读出的各突破口值都正确,可就是没有AD转换完成信号,请帮我找出问题出在哪里,谢谢!
David 2025.12.23