各位大佬,我用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;
}
|