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.

使用Ads1148,采集多个通道的AD值,AD值没有变动

Other Parts Discussed in Thread: ADS1256, ADS1148

应用部分已验证没有问题,而且寄存器的读写操作没有问题,但是在通过SPI读取AD值时一直不变化,并且一直为0x00,

  • 0 是复位后的默认值, 如果应用部分已验证没有问题,而且寄存器的读写操作没有问题,那可能没有启动转换

    也可能你验证时正常, 但在现在测试的时候, 意外断电了

  • 很感谢你的回复,但是不太明白你说的启动转换是什么意思,下面是我写了一个通道切换的函数,及一个中断服务程序,请你再给说说

    /*
    ******************************************************************************************************
    * 函 数 名: ADS1256_SetChannal
    * 功能说明: 配置通道号。多路复用。AIN- 固定接地(ACOM).
    * 形 参: _ch : 通道号, 0-7
    * 返 回 值: 无
    ******************************************************************************************************
    */
    static void ADS1148_SetChannal(uint8_t _ch)
    {
    uint8_t ad_reg_wr[4];
    uint8_t reg_idac1 = 0x01;
    if (_ch > 7)
    {
    return;
    }
    ad_reg_wr[0]=((_ch << 3) | 3);
    reg_idac1=((_ch << 4) | 3);
    ADS_WR_REG(REG_MUX0,ad_reg_wr, 1); /* Bit3 = 1, AINN 固定接 AINN3 */
    // ADS_WR_REG(REG_IDAC1, &reg_idac1, 1);
    }

    下面为中断服务函数

    /*
    *********************************************************************************************************
    * 函 数 名: ADS1148_ISR
    * 功能说明: 定时采集中断服务程序
    * 形 参: 无
    * 返 回 值: 无if (DRDY_IS_LOW())
    *********************************************************************************************************
    */
    void ADS1148_ISR(void)
    {
    INT32U Timeout;
    if (g_tADS1148.ScanMode == 0) /* 0 表示单端8路扫描,1表示差分4路扫描 */
    {


    ADS1148_SetChannal(g_tADS1148.Channel); /* 切换模拟通道 */
    DelayNops(5);

    SPI_ADS_SendCMD(CMD_ADS_SYNC_1st);
    DelayNops(5);

    SPI_ADS_SendCMD(CMD_ADS_WAKEUP);
    DelayNops(25);


    if (g_tADS1148.Channel == 0)
    {
    //Timeout = 0x03FFFFFF;
    // while ((!DRDY_IS_LOW()) && (Timeout-- > 1)); /* 等待 DRDY 低 */
    g_tADS1148.AdcNow[7] = SPI_ADS_ReadHalfWord() & 0xFFFF; /* 注意保存的是上一个通道的数据 */
    // g_tADS1148.AdcNow[7] = ADS1148ReadData();
    // g_tADS1148.AdcNow[7] = 0x0101;
    }
    else
    {
            //Timeout = 0x03FFFFFF;
           //while ((!DRDY_IS_LOW()) && (Timeout-- > 1)); /* 等待 DRDY 低 */

              g_tADS1148.AdcNow[g_tADS1148.Channel-1] = SPI_ADS_ReadHalfWord() & 0xFFFF; /* 注意保存的是上一个通道的数据 */
              // g_tADS1148.AdcNow[g_tADS1148.Channel-1] = ADS1148ReadData();
             // g_tADS1148.AdcNow[g_tADS1148.Channel-1] = g_tADS1148.Channel;
    }

    if (++g_tADS1148.Channel >= 8)
    {
              g_tADS1148.Channel = 0;
    }

    }

    }