| 如题,我使用的是达盛公司的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);
 
 }
 |