微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 硬件电路设计 > TI模拟硬件电路设计 > ADS8345返回的结果不是很准确

ADS8345返回的结果不是很准确

时间:10-02 整理:3721RD 点击:

void ADS8345_start(void)
{
DCLK = 0;
CS = 1;
DIN1 = 1;
// DOUT = 0;
DCLK =1 ;
CS = 0;
// BUSY = 0;
}

void ADS8345_WR(uchar dat)
{
uchar count;

DCLK = 0;
for(count = 0; count < 8; count++)
{
dat <<= 1;
DIN1 = CY;
DCLK = 0;
_nop_();
_nop_();
_nop_();
DCLK = 1;
_nop_();
_nop_();
_nop_();
}
}

uint ADS8345_RD(void)
{
uchar count = 0;
uint dat = 0;


for(count = 0; count < 17; count++)
{
dat <<= 1;
DCLK = 1;
_nop_();
_nop_();
_nop_();
DCLK = 0;
_nop_();
_nop_();
_nop_();
if(DOUT == 1)
{
dat++;
}
}
return (dat);
}


void main()
{while(1)

{
ADS8345_start();
delay(2);
ADS8345_WR(0x87);
DIN1 = 0;
// delay(2);
DCLK = 0;
_nop_();
_nop_();
_nop_();
_nop_();
DCLK = 1;
_nop_();
_nop_();
_nop_();
_nop_();

//while(BUSY == 1);
result = ADS8345_RD();
CS = 1;
AD_result = (double)result * 5 / 65535;


}
}

他转换完的结果都是错的 但是时序用示波器看到都是正确的

上传一下你的电路图和用示波器抓到的SPI时序图,以方便分析。

谢谢您的回复  ADS8345抓到的时序图和电路图为以下内容:

求解答哈。。。。

模拟部分,检查各个输入的绝对电压是不是在(-0.2,VCC+0.2)这个范围。检查VREF是不是在(0.5,2.5)这个范围。

数字部分,可以参考图8或图9来检查波形是不是和手册一致。

都测试过  模拟部分都是正确的   那些时序和PDF里面的时序图都是正确的

AD_result = (double)result * 5 / 65535;
为什么是*5?手册15页左边那个表格,是数字编码和输入信号的关系,你检查一下你的程序和这个表格是不是吻合的。

谢谢您的回复      现在测量GND的时候AD返回的数据是00024    测量5V的时候是56458   测量基准电压2.5V的时候  返回来的数据也是65534      现在返回数据都不正确  算出来的结果一定是错的。。。

怎么可能算出来56458和65534?!按手册15页的data format,输出应该在-32768~32767之间啊。你是不是把2的补码搞成二进制偏移码了?

也就是说他虽说是十六位的AD  实际上是十五位么?  可以这样理解么?

 

您能解释的详细一点儿么? 

不能这样理解。如果是二进制偏移码(offset binary),那么编码范围是0~65535,都是正数。如果是二进制补码(2's complementary),那么编码范围是-32768~+32767,有正有负,但是一样是65536个数,只不过中点从原来的32768移到了0,不能因此就说这是个15位的。如果想把补码转成偏移码,可以在处理器里做个简单运算即可。至于偏移码和补码的具体表示方法和区别,你可以查一下相关资料,网上应该有很多。

哦哦 谢谢您的回复 我已经改过来了 但是从AD的返回值还是不正确的  测量基准电压的时候  他测出来的是4.98V 

如果是单端输入VREF=2.5V,在单5V供电下,由手册第10页analog input单端输入所示,编码值应该在0x0000附近。请提供你的编码值是多少,以及4.98V是怎么算出来的。

哦  但是阅读PDF是这一段疏忽了  我大概的看了一下  理解如下  您看一下我是不是可以这样理解呢  就是说我单端输入的话, 基准电压在2.5v的时候AD采集会的数据只能是在2.1v~2.8v之间么  要是基准电压是0.1v的时候  AD可以采集回来的值是0.1v~4.9v么?(谢谢您之前的回复)

为什么是2.1~2.8?手册第10页,analog input上说得很明确了,单端输入,如果单端的共模点和VREF相同,则把COM接到VREF,电路的输入范围可以达到2*VREF。举个例子,输入是0~5V,单端,共模点是2.5V,等于VREF,则此时把COM脚连到VREF上,输入可以支持的电压范围就是(VREF-VREF,VREF+VREF),即(0,5)。如果共模点不是2.5,而是2,则设法把2V的共模提取出来,连接到COM,ADC的输入可以支持的电压范围就是(-0.2,4.5),-0.2是ADC可以接受的最低电压。

你好 ,我也正在调试这个芯片,然后示波器的波形显示都是正确,结果却不稳定,不知你找到解决办法了吗?

上一篇:ADS1232转换模式的问题
下一篇:DAC8560

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top