打印

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

[复制链接]
2202|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
冰点柔情|  楼主 | 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配置对了吗

使用特权

评论回复
5
冰点柔情|  楼主 | 2014-5-26 22:03 | 只看该作者
自己顶一下,求高手

使用特权

评论回复
6
kvdong| | 2014-5-28 09:13 | 只看该作者
为什么结果要左移6位乘4呢

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

12

帖子

0

粉丝