硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1468|回复: 3
收起左侧

关于AD1255读数与输入电压成反比的问题

[复制链接]

4

主题

2

回帖

14

积分

新手上路

积分
14
发表于 2024-7-23 22:32:59 | 显示全部楼层 |阅读模式
各位大佬,我用ADS1255读数,结果读数结果与输入电压的大小成反比,线性关系是满足的,检查了高位和低位读取顺序没有问题,不知道会是什么原因呢?参考电压2.5V,输入电压0-2.5V,PGA设置为1.
读取函数如下:

signed int ADS1256ReadData(unsigned char channel)  
{
        unsigned int sum=0,sum1,sum2,sum3=0;
        while(ADS1256_DRDY);                                                                //当ADS1256_DRDY为低时才能写寄存器
        ADS1256WREG(ADS1256_MUX,channel);                                        //设置通道
        CS_0();
        SPI_WriteByte(ADS1256_CMD_SYNC);
        SPI_WriteByte(ADS1256_CMD_WAKEUP);                      
        SPI_WriteByte(ADS1256_CMD_RDATA);
        delay_us(1000);

        sum1 = (SPI_WriteByte(0xff) << 16);
        sum2 = (SPI_WriteByte(0xff) << 8);
        sum3 = SPI_WriteByte(0xff);
        sum = sum1+sum2+sum3;
        CS_1();
        if (sum>0x7FFFFF)                                                           // if MSB=1,
        {
                sum -= 0x800000;                                                       // do 2's complement
        }
       sum = sum*0.000596;//求电压 单位mv
        return sum;
}


回复

使用道具 举报

34

主题

206

回帖

308

积分

高级会员

积分
308
发表于 2024-7-24 09:08:28 | 显示全部楼层
SPI_WriteByte干了啥 按照字面意思也是写入1个byte
sum1-sum3 这部分不应该是SPI _ReadByte()吗
还是SPI_WriteByte也去读了?
回复

使用道具 举报

4

主题

2

回帖

14

积分

新手上路

积分
14
 楼主| 发表于 2024-7-24 15:00:22 | 显示全部楼层
LinY 发表于 2024-7-24 09:08
SPI_WriteByte干了啥 按照字面意思也是写入1个byte
sum1-sum3 这部分不应该是SPI _ReadByte()吗
还是SPI_ ...

//  函数名称:        SPI_WriteByte()
//        函数功能:        模拟SPI通信
//        入口参数:        TxData:发送的SPI数据
//        出口参数:        RxData:接收的SPI数据
//        全局变量:        无
//        函数说明:        发送接收函数
//-----------------------------------------------------------------------------------------------//
unsigned char SPI_WriteByte(unsigned char TxData)
{
        unsigned char RxData=0;
        while(SPI_I2S_GetFlagStatus(SPI2,SPI_I2S_FLAG_TXE)==RESET);
        SPI_I2S_SendData(SPI2,TxData);
       
        while(SPI_I2S_GetFlagStatus(SPI2,SPI_I2S_FLAG_RXNE)==RESET);
       
        RxData=SPI_I2S_ReceiveData(SPI2);
        return RxData;
}
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117512
QQ
发表于 2024-7-25 11:53:55 | 显示全部楼层
可以参考我们的1256代码修改下。是不是输出结果顺序搞反了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-12 04:43 , Processed in 0.038707 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表