This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

关于ADS122C04的咨询

Other Parts Discussed in Thread: ADS122C04, ADS1220

ADS122C04 寄存器配置可以正确读写,但是读取数据的时候,读出的数据全都是0,代码如下:

寄存器配置值为:static uint8_t C_ADS1220_Par_Default_W[4] = {0x91,0x08,0x00,0x00};

uint32_t ADS122C_GetData(void)
{
uint8_t ret;
uint32_t L_ADS122C_Data = 0;
uint32_t L_ADS122C_Buf[N];

ADS122C_DRDY();

ret = ADS122C_Config_Init();

if(ret == 1)
{

ADS122C_StartConversion();

for(uint8_t i = 0; i < N; i++)
{

while(ADS122CDRDY_IN);

delay_ms(10);

ADS122C_Read_Data(&L_ADS122C_Buf[i]);

}

for(uint8_t i = 0; i < N; i++)
{

L_ADS122C_Data += L_ADS122C_Buf[i];

}

L_ADS122C_Data = (uint32_t)(L_ADS122C_Data / N);//取平均值

}
else
{
//异常
L_ADS122C_Data = 0;
}

ADS122C_PowerDown();

return L_ADS122C_Data;
}

请问是为什么呢?

  • //读取AD1220转换数据
    uint8_t ADS122C_Read_Data(uint32_t *R_Data)
    {
    uint32_t l_Data = 0;

    if(!I2C_Start())
    return HAL_I2C_ERROR_TIMEOUT;

    I2C_SendByte((ADS122C_ADDR_WRITE));//写器件地址

    if(!I2C_WaitAck())
    {
    I2C_Stop();
    return HAL_I2C_ERROR_TIMEOUT;
    }

    I2C_SendByte((ADS122CREG_DATA));//写器件地址

    if(!I2C_WaitAck())
    {
    I2C_Stop();
    return HAL_I2C_ERROR_TIMEOUT;
    }


    I2C_Stop();

    if(!I2C_Start())
    return HAL_I2C_ERROR_TIMEOUT;

    I2C_SendByte(ADS122C_ADDR_READ); //读器件地址

    if(!I2C_WaitAck())
    {
    I2C_Stop();
    return HAL_I2C_ERROR_TIMEOUT;
    }


    l_Data = I2C_ReceiveByte();

    I2C_Ack();

    l_Data = (l_Data<<8) | I2C_ReceiveByte();

    I2C_Ack();

    l_Data = (l_Data<<8) | I2C_ReceiveByte();

    I2C_NoAck();

    I2C_Stop();

    *R_Data = l_Data;

    return HAL_I2C_ERROR_NONE;
    }

  • 读取数据的时候,读出的数据全都是0

    最好先排除一下硬件问题, 比如数据接收线连接不良. 对地短路

  • 因为配置寄存器的时候,写入的和读出来的是一样的,所以我想I2C通信应该是没问题的吧。数据接收线?是那个AD输入端吗?那里是悬空测试的。

  • 你好,你的问题解决了么?
  • 问题解决了吗?这两天也在调试ADS122C04,也碰到类似的问题。

  • 您好,
    这两个函数里是怎么操作的:
    ADS122C_DRDY();

    ret = ADS122C_Config_Init();

    持续转换模式CM位需要在START/SYNC命令之后置1,才能开始转换。

    您的输入信号是什么样的,输入范围是多少,接在那个管脚上了,还有供电电压是怎么的

  • 调了两个晚上,解决了,必须要等到DRDY为LOW的时候才可以读转换数据,否则都出来都为0,在此之前必须要配置好寄存器,然后发送START指令,再读DRDY为低就可以正常读数据了。