智能车制作
标题:
AD转换加显示问题
[打印本页]
作者:
gracesky1194
时间:
2011-2-14 14:21
标题:
AD转换加显示问题
本人用XS128做电压表,就是想看看AD采样的数据对不对,可是显示的结果就是不对,只能正确的显示0.000.其他的电压值就不对了,只要接上电压,就显示一个代码。任何电压都一样,恳请高手解答:、
//前面的显示程序没有问题,我就不发了,很简单的查表。
下面的是主要的程序:
void ADCInit()
{
ATD0CTL2=0xC0; //AD模块上电, 快速清零, 无等待模式, 禁止外部触发, 中断禁止
ATD0CTL3=0x22; // 每个序列4次转换,转换完成后睡眠
ATD0CTL4=0x45; //0100.0101 10位, 8个AD时钟,12div
ATD0CTL5=0xa0; //右对齐无符号,单通道采样,通道0
ATD0DIEN=0x00;
}
void main(void)
{ /* put your own code here */
ADCInit(); //AD初始化
DDRA = 0xFF; //端口定义为out
DDRB = 0xFF; //端口定义为OUT
PORTA = 0xFF; //端口拉1, on LED
PORTB = 0xFF; //端口拉1,off LED
/* put your own code here */
EnableInterrupts;
for(;;)
{ ATD0CTL5=0xA0; //因为有 ATD0CTL3=0x22;转换完成休眠,故每次要重新启动
while(!ATD0STAT0_SCF); //等待转换结束
data=(ATD0DR0+ATD0DR1+ATD0DR2+ATD0DR3)/4 ;//一个通道采4次求平均。
t=((data)/1023)*5000; //我觉得关键的就是这里,能不能这样换算?我用的是10位的AD,满量程1023.
dispbuf[0]=t%10; // 个位
dispbuf[1]=t/10%10;//十位
dispbuf[2]=t/100%10;//百位
dispbuf[3]=t/1000;//千位
Display();
}
}
作者:
jazyfantasy
时间:
2011-2-23 00:45
参考电压接错了吧?检查一下
作者:
gracesky1194
时间:
2011-3-24 20:48
参考电压是开发板子上已经接好的啊。5V
作者:
vgjkl
时间:
2011-3-24 21:00
t是什么类型的数?Unsigned int?
作者:
vgjkl
时间:
2011-3-24 21:01
建工程时,定义浮点数了没?
作者:
gracesky1194
时间:
2011-4-8 21:20
定义浮点数?什么意思啊?希望能解释的明白一点,谢谢了
作者:
doramin
时间:
2011-4-8 23:16
学下数据结构吧...
先乘5000再除1023试试,另外把这个数定义为long型
作者:
夏天C的微笑
时间:
2012-3-22 19:25
试试用超频PLL来设定频率,我觉得是频率不够高,这个跟t没关系,t=((data)/1023)*5000;这个算法是对的。
欢迎光临 智能车制作 (http://111.231.132.190/)
Powered by Discuz! X3.2