ADS1262的寄存器配置和读写都没有问题,但是发现采集到的32位数据一直为128 0 0 0,这是怎么回事呀?
adc_code = ADS1262ReadData(6,1); //AD读取数据
val = ((long double)adc_code/0x7fffffff);
val*=2.499;
printf("CODE: %10d CODE: %10d VOL: %.8Lf \r\n ",adc_code,adc_code,val);
下面是AD读取数据的程序
int32_t ADS1262ReadData(uint8_t NumBytes, uint8_t DataByteStartNum)
{
// assert((4 == NumBytes) || (5 == NumBytes) || (6 == NumBytes)); //Aborts program if FALSE
// assert((0 == DataByteStartNum) || (1 == DataByteStartNum)); //Aborts program if FALSE
uint8_t ADC_Bytes[6]; //Holds
int32_t ADC_Data_Only;
int i;
DACNCSS(0);
// while(ADS_DRDY);
for( i = 0; i < NumBytes; ++i)
ADC_Bytes[i] = SPI_DAC_SendByte(0);
ADC_Data_Only = ((int32_t)ADC_Bytes[DataByteStartNum + 0] << 24) | //Data MSB
((int32_t)ADC_Bytes[DataByteStartNum + 1] << 16) |
((int32_t)ADC_Bytes[DataByteStartNum + 2] << 8) |
((int32_t)ADC_Bytes[DataByteStartNum + 3] << 0); //Data LSB
DACNCSS(1);
return ADC_Data_Only;
}
user151383853:
xyz549040622:
1.你是单电源供电还是双电源?参考电压是多少?
2.你应该是溢出了吧
user6063817:
回复 xyz549040622:
这是我的电路原理图,用的单电源供电,参考电压选择的是内部2.5V。REFOUT引脚输出2.5V,START引脚启动后为高电平。
user6063817:
回复 user151383853:
我们选择的是默认的内部参考电压,芯片的REFOUT引脚输出2.5V。
user6063817:
将差分输入的两个引脚共地接,也还一直是这样。
xyz549040622:
回复 user6063817:
如果读取的是32位数据的话,单电源供电出现128 0 0 0,说明输入检测到的是负电压。还有没看懂你的ADC读取程序,你读的是24位数据还是32位数据呢,说实话,没看懂,ADC_Bytes的数据是哪来的,用的中断吗?提供的资料太少了。
user6063817:
回复 xyz549040622:
我采用的是read data by command的方式读取32位数据,ADC_Bytes就是通过SPI通信发送操作码后的返回数据,一共有6个八位的数据,中间四位为32位的ADC采集到的数据。
顺便问您一下如果像我这样采用单电源供电,然后用内部2.5V的参考电压,PGA设置为1倍放大,那么ADC的电压输入范围应为多少呢?
user6063817:
问题已找到,第一次测试的时候把芯片给烧了!
驱动是没问题的
结贴,感谢各位大佬的关注。
xyz549040622:
回复 user6063817:
你把芯片烧了,还能读写寄存器吗?不应该吧。
user6063817:
回复 xyz549040622:
是可以的,由于不会用我烧坏了好几片AD了,寄存器读写没问题但就是读不出来数据,同样的代码放在另一个同样的硬件里就能跑通。
能问您一下关于ADS1262的校准问题吗,我看datasheet上有写offset和gain的校准命令,但是我没有看懂offset校准寄存器OFCAL[2:0] 里的值与实际数值的对应关系。能指点一下吗。