微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 硬件电路设计 > TI模拟硬件电路设计 > 请教一下此模拟spi驱动的问题ads1118

请教一下此模拟spi驱动的问题ads1118

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

ads1118驱动,模拟spi,相关代码如下

unsigned int spi_sendRecvWord(unsigned int c)
{
unsigned int data = 0;
unsigned int shift = 0x8000;
int i = 0; 
//while(!(ADS1118_DO_X))

ADS1118_SCK_0;
delay_us(120);
for ( i = 0; i < 16; i++)
{

if (c & shift)
{ADS1118_DI_1;}
else
{ADS1118_DI_0;}
if(ADS1118_DO_X)
data|=shift; 
ADS1118_SCK_1;
delay_us(60);
//if(ADS1118_DO_X)
//data|=shift; 
ADS1118_SCK_0;
delay_us(60); 
(shift) >>= 1;
}

return data;
}

float ADS1118_V(void) 
{

unsigned int adc=0;
unsigned int Config_Register;
float value=0;

Config_Register =0x8393; 

ADS1118_CS_0;
while((ADS1118_DO_X))
{ADS1118_SCK_1;
delay_us(60);
ADS1118_SCK_0;
delay_us(60);
}
delay_us(100);
adc = spi_sendRecvWord(Config_Register);
spi_sendRecvWord(0x0000); 

/* adc = spi_sendRecvWord(Config_Register);



value=adc;
return value;
}

具体问题是无论我怎么改变写入控制字以及测量输入量,dout返回的都是如下错误波形,大家看看是什麽情况

图一:黄sclk,蓝dout

图二黄sclk,蓝din

图三,黄dout,蓝din

你好,

请问你的CS信号大概在什么位置拉低的呢?

我看到图1和图2中的CLK信号最开始的时候有一个额外的时钟周期,是不是受这个影响了通信?

图2 中你所发送的数据是多少?

cs信号本来想16clk就至高的,为了查出问题把所有cs拉高都注释了,现在恒为低

那个多出来的周期是dout拉底时的操作,原来是空指令,现象一样

所发数据为0x8393,应该是对的,我发83e3,83c3,85e3,85c3返回波形也是这个

PS:无论如何,感谢martin先生这么晚还为我解答

cs信号本来想16clk就至高的,为了查出问题把所有cs拉高都注释了,现在恒为低

那个多出来的周期是dout拉底时的操作,原来是空指令,现象一样

所发数据为0x8393,应该是对的,我发83e3,83c3,85e3,85c3返回波形也是这个

PS:无论如何,感谢martin先生这么晚还为我解答

有哪位大神能解答下么

已解决,始终速率与采样率不匹配的问题

你好,

能否分享一下详细的解决过程,谢谢!

首先注意到din波形,也就是控制命令与我设定的相同,对比数据手册的时序,din波形也更sclk相符,

再加上单片机中吧返回信号用lcd显示十六进制吗也与波形相同,由此认为时序正确,但控制命令没能正确写入

更换芯片,情况相同,暂且认为与芯片无关

再注意到1118的采样率最快仅有860,默认128,与我用的msp430f149的8M时钟相比实在太慢,尝试着加大延时,

发现数据字不再是0,控制字也与实际命令相近了,确定是ads1118无法响应过快时钟,以默认采样率算,每个采样周期

至少需时1/128s,远大于430模拟32个时钟周期的时间,故在时钟操作后面加上1/(128*32)s的延时,

至此,我的ads1118工作正常

以上纯属个人理解,若有错误,当我碰巧调出来了正常的结果,请各位大神指出

你好 请问你能不能把用f149写的程序发给我一份 1045727765@qq.com  万分感谢

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

网站地图

Top