ADC 输入0v结果寄存器不为0

[复制链接]
 楼主| 冰点柔情 发表于 2014-5-14 21:15 | 显示全部楼层 |阅读模式
给AD口输入0v电压,但经过AD转换后,结果寄存器的值160 左右,不为0,请各位指教:具体程序如下:
static void Adc_init(void)
{
        ADCON1bits.ADCS = 0b010;//AD conveter clock choose
  //TRISAbits.TRISA3 = 1;   //Set the port A3 as Input
        TRISB0 = 1; //Set as input
        ANSB0 =1; // Set as analog input

        ADCON1bits.ADPREF = 0b00; //reference votage choose
       

        ADCON1bits.ADFM =1;//output right allain

}

Uint ADkey(void)
{
        ADCON0bits.CHS = 0b01100; //AD channel choose
        Uint ADC_Result = 0;
        ADCON0bits.ADON =1; //enable AD convertion       
       
        Delay(20);

        ADCON0bits.GO_nDONE  =1; //start the ADC
        while(ADCON0bits.GO_nDONE == 1);
        ADC_Result = ADRES0L; //get the low result;
        ADC_Result = ADRES0L + (ADRES0H<<6)*4; //get the result
        return (ADC_Result);

}
yewuyi 发表于 2014-5-15 10:44 | 显示全部楼层
第一:输入的OV是相对谁而言的?只有相对ADC的参考电压才行。
第二:输入0V,因为ADC误差形成的各种因素影响,AD值可能会有一个很小的数字,但也应该基本接近0
第三:你现在AD值为160,显然不对,可能是你没有正确设置ADC各项寄存器的原因。

具体原因,只能自己对照手册一点点的找问题。
 楼主| 冰点柔情 发表于 2014-5-15 21:00 | 显示全部楼层
我是按照手册编写的啊,有能给改善一下的吗?
ayb_ice 发表于 2014-5-19 11:40 | 显示全部楼层
GPIO配置对了吗
 楼主| 冰点柔情 发表于 2014-5-26 22:03 | 显示全部楼层
自己顶一下,求高手
kvdong 发表于 2014-5-28 09:13 | 显示全部楼层
为什么结果要左移6位乘4呢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

12

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

4

主题

12

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部