TI中文支持网
TI专业的中文技术问题搜集分享网站

ADS8345返回的结果不是很准确

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;

}
}

bin yang3:

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

Decapton Wang:

回复 bin yang3:

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

bin yang3:

回复 Decapton Wang:

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

bin yang3:

回复 Decapton Wang:

求解答哈。。。。

Decapton Wang:

回复 bin yang3:

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

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

bin yang3:

回复 Decapton Wang:

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

Decapton Wang:

回复 bin yang3:

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

bin yang3:

回复 Decapton Wang:

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

Decapton Wang:

回复 bin yang3:

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

bin yang3:

回复 Decapton Wang:

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

 

赞(0)
未经允许不得转载:TI中文支持网 » ADS8345返回的结果不是很准确
分享到: 更多 (0)