如题,我使用的是达盛公司的EL-ARM-860实验箱,做位移传感器的项目。
LCD单元: 8.4吋,65536色,640X480像素;
触摸屏单元:四线电阻屏,640X480,8.4吋;
A/D转换单元:芯片自带的8路10位A/D,满量程2.5V;
信号源单元: 方波输出;
电源模块单元。
内核ARM920T,芯片三星的S3C2410,工作频率最高202MHz(内部自带AD)
我是刚接触的ARM9 老师要求我做位移传感,把滑动变阻器的电压变化通过AD转换在LCD屏幕上显示,要求显示波形和实时电压值的变化,因为刚接触ARM不懂编程,但懂一些C言语,所以我根据这个实验箱的实验指导书里面的《ARM的AD接口实验》的程序
(是达盛公司的开发人员写的)修改了一下,自己加了显示电压实时变化的小程序,问题就在我用直流电压源直接输入6V电压,AD寄存器的量化竟然没有出现10个1(我自己又加了显示AD量化2进制和10进制表示的小程序),而是出现760+(10进制),超过6V也是如此,可是AD的参考电压是2.5V或者3.3V啊(指导书上写明”电压经过缩放和偏置处理使得ARM CPU板所采集的电压值变化范围不足0-2.5V故而采集到的数字值不能满程,但这些不会影响实验原理的显示“这句话我没有理解错的话就是因为输入的电压经过了一些处理使得AD量化最大不超过760+),那么请问如果我想测得准确的电压变化值要怎么做?
求高手指导
附代码,从通道0采样开始自己加上的
short Get_AD(unsigned char ch)
{ int i;
int val=0;
if(ch>7) return 0;
for(i=0;i<1;i++)
{
rADCCON |= 0x1; //启动 A/D 转换
rADCCON = rADCCON & 0xffc7 | (ch<<3);
while (rADCCON & 0x1); //避免第一个标志出错
while (!(rADCCON & 0x8000)); //避免第二个标志出错
val += (rADCDAT0 & 0x03ff);
Delay(10);
}
return (val);
while (1)
{
for (i = 0; i < Length; i++){
yy = Get_AD(0); //通道0采样
GUI_DispDecAt(yy,488,334,4); //ADC采样后量化的值10进制显示
GUI_DispBinAt(yy,488,350,10); //ADC采样后量化的值2进制显示
k=yy/0.1024*0.25; //10位满量化1023 参考电压2.5V
Disp_String ("voltage:",220, 334);//电压瞬时值
GUI_DispDecAt((k/1000),288,334,1);
Disp_String (".",296, 334);
GUI_DispDecAt((k%1000/100),304,334,1);
GUI_DispDecAt((k%1000%100/10),312,334,1);
GUI_DispDecAt((k%1000%100%10),320,334,1);
Disp_String ("V",328, 334);
} |