很奇怪,我转换出来的数字线性度很差,有一直上扬的趋势,我只用到了AD0,时钟是Fosc/32,单片机晶振4M, 为什么我得到的转换结果差这么多,直接加1V电压,转换的结果将近1.5V左右,请问是我哪里没用好?当我用其它Fosc/8时,转换结果更差?搞不明白??
我再在是20ms采一次样,采样等待时间2ms
一般不会轻易怀疑AD的问题,因为从行业上看PIC的片子信誉还是非常高的,呵呵,我以前用过的也不成问题
你用的是时间来使用AD,这可能就出一个问题,你的时间是不是足够长?
如果时间不够,那你的转换可能没有结束,所以,得到的值不正确
你从新写一个小程序,先验证一下你AD的使用方式正确与否
再一个可以看看数据手册,AD的性能能不能满足您的这个速率
如果不行,那只能用片外AD
我看一手册, 我现在用的是4M, 选择Fosc/32转换频率,那么TAD时间为8us ,转换一次10位,12TAD=96us可以完成,我20ms采样一次应该没问题呀,应该不是时间的问题
好像你现在的问题还不到性能上
而是你的使用上就有问题
嘿嘿
你先看看把AD用正确吧
AD使用一般这几个点:
一:参考源
二:AD基本配置(像位数,工作方式,AD值的存储方式啥的)
三:开始ADC
四:读出值,换算
一二三,可能问题都不大
看是不是换算的时候的问题,比如说10位的,那个前两位有没有放置正确?
或是多读了其它寄存器的值
都有可能
unsigned short ConvertAnalog(char ChannelNo)
{
switch(ChannelNo)
{
case 0:
ADCON0&=0xc7;
break;
case 1:
ADCON0|=0x08 ;
break;
case 2:
break;
case 3:
break;
case 4:
break;
default:
break;
}
ADON=1;
DelayUs(50);
ADGO=1;
while(ADGO);
return((unsigned short)((ADRESH&0x03)<<8)|ADRESL);//右对齐
}
还有就是我没用VREF+,和VREF-功能,用的是VDD,和VSS,当这个VDD不是5V,或有些偏差时,是不是会对结果有影响?
ADRESH&0x03 < <8
有点感觉这个不太安全
听说过有直接用VDD做参考源功能部件开启后被拉下来不准的,嘿嘿
最后还是外置一个参考电压吧
呵呵
VREF+,和VREF- 我已作其它用途,没办法了