急!急!急!,ADC读出数据不对
uint ad124s021 ()
{ uint ValH,ValL; uint i,j;
uint return_val=0;//返回值
uint ad_channel;//ADC通道
CS1 = 1; CS1 = 0; //使能线
for (j=0;j<4;j++)//循环读两次数据,取4次的值
{ ad_channel = 0xc7;//通道1
ValH = 0; //数据高位
ValL = 0; //数据低位
SCLK1 = 1; //时钟线
for (i = 1; i < 17; i++)
{ if(i<9) { ad_channel = ad_channel << 1; //取高位
DIN = CY;
}
SCLK1 = 1; SCLK1 = 0; SCLK1 = 1;
if(i>5&&i < 9)
{ ValH =(ValH<<1)|DOUT;
}
if (i >=9)
{
ValL =(ValL<<1)|DOUT;
}
}
return_val+= ((ValH<<8)+ValL);
}
CS1 = 1;
return (return_val>>2);求平均数
}
SCLK1 = 1; SCLK1 = 0; SCLK1 = 1;
没有说你的mcu 类型, 这样处理可能速度太快, 中间加点延时吧
SCLK1 = 1; SCLK1 = 0; SCLK1 = 1;
没有说你的mcu 类型, 这样处理可能速度太快, 中间加点延时吧
Hi Fushuang,
为了能让我们更好地帮助你解决问题,能否更具体地介绍一下你现在所遇到的问题?用的是那款ADC,是怎么连接的?
谢谢合作!
Br
Martin
应该是中断没有处理好。
您用的是哪款单片机,还有AD芯片是那一款。转换的时候,是需要适当的延时的。
你给的信息不够详细,无法解答。建议你把ADC型号和MCU型号都列举出来,把电路原理图也放出来。
另外,读取出错大多数原因都是寄存器没有配置好,电气连接有问题,或者是受到了干扰。
最好把读取出来的数据也发送出来以便检查问题所在。
SCLK1 = 1; SCLK1 = 0; SCLK1 = 1;这速度太快了吧,建议加点延时。。
中断也没有处理好。有没有检查下中断呢?
你把这个语句SCLK1 = 1; SCLK1 = 0; SCLK1 = 1;
换为以下:
SCLK1 = 1; NOP; NOP; NOP; NOP; NOP; NOP;
SCLK1 = 0; NOP; NOP; NOP; NOP; NOP; NOP;
SCLK1 = 1; NOP; NOP; NOP; NOP; NOP; NOP;
你用的ADC是哪一个型号呢?不同的ADC对时序的要求也不是很一样。
LZ 能不能将你的程序发给我一下,我也在做这个芯片的程序,谢谢, 邮箱:916208723@qq。com
我怎么没看出来上面讨论的是那一颗ADC呢!