TI论坛
直播中

刘丽

7年用户 1273经验值
私信 关注
[问答]

ADS1255配置PGA时,更改ADCON寄存器不起作用,为什么?


  • 最近使用ADS1255时,可以正确采集到数据,但在配置PGA时,更改ADCON寄存器不起作用,怀疑是ADS1256WREG函数可能有问题,导致配置寄存器失败,可以帮我看看哪里有问题吗?
    void ADS1256WREG(unsigned char regaddr,unsigned char databyte)
    {
    AD_ON;
    while((*AT91C_PIOA_PDSR>>15)&0x0001); //当ADS1256_DRDY为低时才能写寄存器
    spiReadWrite(ADS1256_CMD_WREG | (regaddr & 0x0F)); //向寄存器写入数据地址
    spiReadWrite(0x00); //写入寄存器的个数n-1
    spiReadWrite(databyte); //向regaddr地址指向的寄存器写入数据databyte
    AD_OFF;
    }
    //初始化ADS1256
    void ADS1255_Init(void)
    {
    ADS1256WREG(ADS1256_STATUS,0x06); // 高位在前、校准、使用缓冲
    ADS1256WREG(ADS1256_ADCON,ADS1256_GAIN_2);
    ADS1256WREG(ADS1256_DRATE,ADS1256_DRATE_30000SPS);
    ADS1256WREG(ADS1256_IO,0x00);
    }
    //读取AD值
    unsigned int ADS1256ReadData(void)
    {
    unsigned int sum=0;
    AD_ON;while((*AT91C_PIOA_PDSR>>15)&0x0001); //当ADS1256_DRDY为低时才能写寄存器
    spiReadWrite(ADS1256_CMD_SYNC);
    spiReadWrite(ADS1256_CMD_WAKEUP);
    spiReadWrite(ADS1256_CMD_RDATA);
    sum |= (spiReadWrite(0xff) << 16);
    sum |= (spiReadWrite(0xff) << 8);
    sum |= spiReadWrite(0xff);
    AD_OFF;
    return sum;
    }

    unsigned int ADS_sum(unsigned char channel)
    {
    return ADS1256ReadData();//读取AD值,返回24位数据。
    }

回帖(3)

金晖

2024-12-2 11:10:32
您是仅对ADCON寄存器操作不起作用,还是其他寄存器也不能正确读写?现在能正确读取寄存器值吗,数据手册RREG: Read from Registers和WREG: Write to Register部分有对读和写寄存器命令有详细说明,也有时序图,您可以附上读取ADCON寄存器的示波器波形图吗
举报

黄敏

2024-12-2 11:10:39
您可以同时用三个探头分别测试SCLK、DIN和DOUT三个信号线上的波形图吗,因为只有这样才能看出您发出的命令字节是否正确,同时可以查看设备返回的寄存器值是否正确
举报

HCPcry

2024-12-2 17:45:28
从您提供的代码来看,ADS1256WREG函数的基本结构是正确的。但是,我注意到您在检查ADS1256_DRDY引脚状态时使用了`while((*AT91C_PIOA_PDSR>>15)&0x0001);`,这里可能存在问题。您需要确保ADS1256_DRDY引脚连接到正确的引脚,并且您的硬件连接是正确的。

此外,您提到怀疑ADS1256WREG函数可能有问题,导致配置寄存器失败。为了进一步排查问题,您可以尝试以下步骤:

1. 确保您的ADS1256WREG函数中的spiReadWrite函数能够正确地发送和接收数据。您可以通过检查spiReadWrite函数的实现来确保它能够正确地与ADS1256通信。

2. 检查您的ADS1256硬件连接,确保所有引脚都正确连接,特别是ADS1256_DRDY引脚。您可以使用示波器或逻辑分析仪来检查ADS1256_DRDY引脚的状态,以确保它在写入寄存器时为低电平。

3. 在ADS1256WREG函数中添加调试信息,例如使用串口打印函数来输出spiReadWrite函数的返回值,以及ADS1256_DRDY引脚的状态。这将帮助您确定问题是否出在spiReadWrite函数或ADS1256_DRDY引脚的状态检查。

4. 如果您的ADS1256WREG函数仍然无法正确配置PGA,您可以尝试使用其他方法来配置PGA,例如通过I2C接口。这将帮助您确定问题是否出在SPI通信上。

5. 最后,您可以参考ADS1256的数据手册,确保您正确地配置了PGA。数据手册中提供了详细的寄存器配置信息,您可以根据手册中的示例来配置PGA。

希望这些建议能帮助您解决问题。如果您还有其他问题,请随时提问。
举报

更多回帖

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