TI论坛
直播中

卢表镜

8年用户 1109经验值
私信 关注
[问答]

ADS1255读写寄存器的值不对是哪里出了问题?


  • 这是我初始化ADS1255函数 和 读写寄存器函数。SPI速度设置为最低速300KHZ左右。请问各位和ti工程师,这是怎么回事。谢谢!
    经过串口,首先把ADS1255寄存器的缺省值显示出来,再写进去再经串口显示出来。但是无论是读ADS1255寄存器的初始值也不对,读经过写之后的值也不对。
    无论是第一次读,还是写后再读,都是显示一些255 63 253等等的数值(255居多)。
    SPI_SendByte函数就是STM32库函数中SPI发送Byte函数///////////////////////////////////////ADS1255硬件reset函数/////////////////////////////////////void ADS1255_ResetHard(void){        ADS_RESET_LOW();        delay_us(5);        ADS_RESET_HIGH();        delay_us(5);}//////////////////////////////////////ADS1255写寄存器函数//////////////////////////////////void ADS1255_WREG(unsigned char regaddr,unsigned char databyte){        ADS_CS_LOW();        while(ADS_DRDY);        SPI_SendByte(ADS1255_CMD_WREG | (regaddr & 0x0F));        SPI_SendByte(0);        delay_us(100);                //        SPI_SendByte(databyte);        ADS_CS_HIGH();}/////////////////////////////////////////////////ADS1255读寄存器函数//////////////////////////////////////////////unsigned char ADS1255_RREG(unsigned char regaddr){        unsigned char r=0;        ADS_CS_LOW();        while(ADS_DRDY);        SPI_SendByte(ADS1255_CMD_RREG | (regaddr & 0x0F ));        SPI_SendByte(0);        delay_us(10);                //t6        r=SPI_SendByte(0);        ADS_CS_HIGH();        return r;}////////////////////////////////////////////////ADS1255初始化函数///////////////////////////////////////////////void ADS1255_Init(void){        u8 i=0;        unsigned char tab1[4];        ADS1255_ResetHard();        ADS_CS_LOW();        tab1[0]=ADS1255_RREG(0);        //x1h        tab1[1]=ADS1255_RREG(1);        //01h=1d                tab1[2]=ADS1255_RREG(2);        //20h=32d        tab1[3]=ADS1255_RREG(3);        //f0h=240d        //tab1[4]=ADS1255_RREG(4);        //e0h=224d        ADS_CS_HIGH();        for(i=0;i<4;i++)        {                printf("o:%drn",(u8)tab1);                delay_ms(100);        }                ADS_CS_LOW();        while(ADS_DRDY);        SPI_SendByte(ADS1255_CMD_WREG | ADS1255_STATUS);        SPI_SendByte(3);        SPI_SendByte(0x06);                //status        SPI_SendByte(0x10);                //mux        SPI_SendByte(0x00);                //adcon        SPI_SendByte(0x03);                //drate        //SPI_SendByte(0xD0);                //io        ADS_CS_HIGH();                delay_us(100);        tab1[0]=ADS1255_RREG(0);        tab1[1]=ADS1255_RREG(1);        tab1[2]=ADS1255_RREG(2);        tab1[3]=ADS1255_RREG(3);        //tab1[4]=ADS1255_RREG(4);        for(i=0;i<4;i++)        {                printf("a:%drn",(u8)tab1);                delay_ms(100);        }}

回帖(3)

张鑫

2025-1-10 17:56:42
有没有用示波器检查一下读写的波形,看看时序和写入、读出的值跟软件采集到的是否一致?
举报

李凤津

2025-1-10 17:56:51
能的,用示波器的STOP键捕捉到波形数据然后译码成二进制
举报

h1654155275.5669

2025-1-14 17:46:12
根据您的描述,ADS1255读写寄存器的值不正确,可能存在以下几个问题:

1. SPI通信问题:请检查您的SPI通信是否正确配置。确保SPI的时钟极性和相位设置正确,以及SPI的速率是否符合ADS1255的要求。您提到SPI速度设置为300KHZ,这是符合ADS1255要求的,但请确保您的硬件连接没有问题。

2. ADS1255初始化问题:请检查您的ADS1255初始化函数是否正确。确保您已经正确设置了ADS1255的寄存器,包括采样率、增益、输入通道等。

3. 读写寄存器函数问题:请检查您的读写寄存器函数是否正确。确保您已经正确发送了读写命令,以及正确处理了返回的数据。

4. 硬件连接问题:请检查您的ADS1255与STM32之间的硬件连接是否正确。确保数据线、时钟线和片选线都已正确连接。

5. 电源问题:请检查您的ADS1255电源是否稳定。不稳定的电源可能会影响ADS1255的正常工作。

6. ADS1255硬件问题:如果以上问题都排除了,那么可能是ADS1255硬件本身存在问题。您可以尝试更换一个ADS1255模块进行测试。

建议您按照以下步骤进行排查:

1. 检查硬件连接,确保数据线、时钟线和片选线都已正确连接。
2. 检查SPI通信配置,确保时钟极性和相位设置正确,以及速率符合ADS1255的要求。
3. 检查ADS1255初始化函数,确保已经正确设置了ADS1255的寄存器。
4. 检查读写寄存器函数,确保已经正确发送了读写命令,以及正确处理了返回的数据。
5. 检查电源是否稳定。
6. 如果以上步骤都无法解决问题,尝试更换一个ADS1255模块进行测试。

希望以上建议能帮助您解决问题。如果问题仍然存在,请提供更多详细信息,以便我们为您提供更具体的帮助。
举报

更多回帖

×
20
完善资料,
赚取积分