void WriteSPI(uint config)
{
char i;
unsigned int temp;
CS_H;
SCLK_L;
CS_L;
_NOP();
for(i = 0;i <16;i++)
{ temp = config&0x8000;
if(temp)
DIN_H;
else
DIN_L;
SCLK_L;
_NOP();
config <<= 1;
SCLK_H;
}
SCLK_L;
CS_H;
}
void Config_ADS1118(uchar channel,uchar mode)
{
unsigned int config;
if(mode)
{
switch (channel)
{
case 0: config = 0xC5EB; break; //FS = 2.048V,SingleShot,860SPS 上拉电阻
case 1: config = 0xD5EB; break;
case 2: config = 0xE5EB; break;
case 3: config = 0xF5EB; break;
}
}
else {
switch (channel)
{
case 0: config = 0x44EB; break; //FS = 2.048V,Continue,860SPS 上拉电阻
case 1: config = 0x54EB; break;
case 2: config = 0x64EB; break;
case 3: config = 0x74EB; break; }
}
WriteSPI(config);
WriteSPI(config);
delay_SPI();
delay_SPI();
}
void Read_ADS1118(void)
{
char i;
CS_H;
SCLK_H;
CS_L;
for(i = 0;i<16;i++)
{ SCLK_H;
_NOP(); if(DOUT_val)
value |= 1;
value <<= 1;
SCLK_L;
_NOP();
}
SCLK_L;
CS_H;
}
程序读出来的只有一个不正确的值,不管改变哪个通道采样或改变输入电压值采样值都一样,那位朋友遇到类似的问题?
Decapton Wang:
手册23页和24页有32bit数据传输图和16bit数据传输图,你用的是哪一种传输方式?另外,输入是多少,预期的读出值是多少,实际的读出值是多少?
kai liu1:
回复 Decapton Wang:
我用的是16位的连续采样方式,FS为2.048V,后面16位没读,不管是输入0V还是输入2V,输出的数值都是32768
HaiTao Li:
回复 kai liu1:
0x7FFF?呃,如果你的电路是按照手册上做的的话,那这个信号代表输入0或者信号断线。你要查一下输入了……而且,有了0x7FFF基本上可以认定你的ADS1118是没有问题的。
Decapton Wang:
回复 kai liu1:
上传一下你的硬件电路图,会不会是硬件出错了。
kai liu1:
回复 Decapton Wang:
原理图应该没错,可能是焊接时导致电路出问题,我再仔细检测下。
xiaowen chu:
回复 HaiTao Li:
哈罗~Li~我最近在用ADS1118的时候碰到了这样一个问题,使用的是MSP430F149单片机的SPI通信,但程序写好后与ADS1118进行通信时,发现无论我的模拟量输入(我用直流0~+3.3V做输入)如何变化,输出的数字量总是0x0c,不知道怎么回事,如果可以的话,能不能私下详谈?QQ:382909235 不胜感激……
zhang meng1:
楼主的问题解决没 写了很久都没弄出来 如果可以给发一份吧1181096912@qq.com