PIC 16f877 中关于10位AD转换问题

2019-03-25 19:09发布

很奇怪,我转换出来的数字线性度很差,有一直上扬的趋势,我只用到了AD0,时钟是Fosc/32,单片机晶振4M, 为什么我得到的转换结果差这么多,直接加1V电压,转换的结果将近1.5V左右,请问是我哪里没用好?当我用其它Fosc/8时,转换结果更差?搞不明白?? 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
bluejb119
1楼-- · 2019-03-26 00:34
我再在是20ms采一次样,采样等待时间2ms
szgaoju
2楼-- · 2019-03-26 05:30
我再在是20ms采一次样,采样等待时间2ms

一般不会轻易怀疑AD的问题,因为从行业上看PIC的片子信誉还是非常高的,呵呵,我以前用过的也不成问题

你用的是时间来使用AD,这可能就出一个问题,你的时间是不是足够长?

如果时间不够,那你的转换可能没有结束,所以,得到的值不正确

你从新写一个小程序,先验证一下你AD的使用方式正确与否

再一个可以看看数据手册,AD的性能能不能满足您的这个速率

如果不行,那只能用片外AD
hzq23
3楼-- · 2019-03-26 08:59
我看一手册, 我现在用的是4M, 选择Fosc/32转换频率,那么TAD时间为8us ,转换一次10位,12TAD=96us可以完成,我20ms采样一次应该没问题呀,应该不是时间的问题
freeaqi
4楼-- · 2019-03-26 14:07
 精彩回答 2  元偷偷看……
cinderella_lh
5楼-- · 2019-03-26 19:59
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,或有些偏差时,是不是会对结果有影响?



xliqi2000
6楼-- · 2019-03-26 21:05
ADRESH&0x03 < <8

有点感觉这个不太安全

听说过有直接用VDD做参考源功能部件开启后被拉下来不准的,嘿嘿

最后还是外置一个参考电压吧

呵呵

一周热门 更多>