TI论坛
直播中

久醉不醒

10年用户 1121经验值
擅长:可编程逻辑 电源/新能源
私信 关注
[问答]

ADS1216Y读AD转换后的值是乱的,为什么?


  • 写完寄存器后再读出来写的值是对的,通信是可以的,读转换值是乱的,代码如下,不知道配置后直接写读数据对不对
    write_byte(0xfe); //¸复位
    delay_us(100);
    write_byte(0x50); //写配置
    write_byte(0x02);
    write_byte(0x0e);//内部参考电压2.5V
    write_byte(0x02);//Ain0+ Ain2-
    write_byte(0x05);//PGA 32
    delay_us(100);
    write_byte(0x59);
    write_byte(0x00);
    write_byte(0x07);
    。。。。
    while(DRDY);//
    write_byte(0x01); //写命令读数据
    delay_us(1);
    read_24bit(VALUE);
    读的值
    FF EE 24
    FF F6 77
    00 04 2A
    00 02 AC
    FF F0 1A
    00 12 11

回帖(2)

杨剑东

2024-12-9 14:26:08
这个问题主要是观察和调整时序,建议通过逻辑分析仪或者带存储的示波器抓取一下时序,然后和手册里做对比。
举报

卞轮辉

2024-12-9 17:21:56
从您提供的代码和描述来看,您使用的是ADS1216Y模数转换器。根据您的描述,您在写入寄存器后可以正确读取写入的值,但是在读取AD转换值时得到的是乱码。这可能是由于以下几个原因导致的:

1. 配置问题:请确保您的ADS1216Y配置正确。根据您的代码,您已经设置了内部参考电压、输入通道、增益等参数。请检查这些参数是否符合您的实际需求。

2. 读取数据时序问题:在读取数据时,您需要确保遵循正确的时序。根据您的代码,您在读取数据前等待了DRDY(数据就绪)信号。这是正确的。但是,请确保在读取数据后,您正确地处理了24位数据。您可以尝试使用以下代码读取24位数据:

```c
uint32_t value = 0;
uint8_t high_byte, mid_byte, low_byte;

read_byte(high_byte);
read_byte(mid_byte);
read_byte(low_byte);

value = (high_byte << 16) | (mid_byte << 8) | low_byte;
```

3. 通信问题:虽然您提到通信是正常的,但是请确保您的通信接口(如I2C或SPI)配置正确,并且没有受到干扰。您可以尝试使用示波器检查通信信号的质量。

4. 电源问题:请确保您的ADS1216Y电源稳定,并且符合其电源要求。不稳定的电源可能会导致数据读取错误。

5. 硬件问题:如果以上方法都无法解决问题,可能是您的ADS1216Y模块存在硬件问题。您可以尝试更换一个新的模块进行测试。

总之,您需要检查配置、时序、通信、电源和硬件等方面,以找到导致读取AD转换值乱码的原因。希望这些建议能帮助您解决问题。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分