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

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

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
Martin:

你好,

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

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

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

qingxiang chen:

回复 Martin:

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

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

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

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

qingxiang chen:

回复 Martin:

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

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

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

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

qingxiang chen:

回复 Martin:

有哪位大神能解答下么

qingxiang chen:

回复 qingxiang chen:

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

Martin:

回复 qingxiang chen:

你好,

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

honghong du:

回复 qingxiang chen:

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

赞(0)
未经允许不得转载:TI中文支持网 » 请教一下此模拟spi驱动的问题ads1118
分享到: 更多 (0)