[PIC®/AVR®/dsPIC®产品] PIC18F的AD问题

[复制链接]
 楼主| 禹雨小鱼 发表于 2015-8-10 20:54 | 显示全部楼层 |阅读模式
请问,我使用的是PIC18F14K50,使用了RC0/RC1/RC2三路AD,使用了内部4.096V的基准电压,VDD供电是5V,发现检测的电压不准确。同时做了个实验,将RB6与RC2接到同一个电压上,在程序中分别设置为AD检测,发现检测出来的电压值不一致,求指教!
AD初始化程序如下:
void ADInit()
{
    /////////VSOLAR_SNS-AD4
    TRISC |= 0X01;
    ANSEL &= ~0X10;

    //////////I_SNS-AD5
    TRISC |= 0X02;
    ANSEL &= ~0X20;

    ////////VBAT_SNS-AD6
    TRISC |= 0X04;
    ANSEL &= ~0X40;

    ADCON1 = 0X08;
    ADCON2 = 0X82;
    ADCON0 |= 0X01;
    REFCON0 = 0XB0;
    REFCON1 &= ~0X80;

    ADCON0 &= ~0X3C;
    ADCON0 |= 0X10;
    ADCON0 &= ~0X02;
    while((REFCON0 & 0X40) == 0X00);

}
AD检测程序如下:
uint ADData = 0;
    ADCON0 &= ~0X3C;//VSOLAR_SNS
    ADCON0 |= 0X10;
    ADCON0 |= 0X02;
    while(ADCON0 & 0X02);
    ADData = (((uint)ADRESH << 8) + ADRESL);
    SolarVol = (ADData * 20);//乘以20为每个计数值为4个mV,并且电路分压为5

   
    ADCON0 &= ~0X3C;//I_SNS
    ADCON0 |= 0X14;
    ADCON0 |= 0X02;
    while(ADCON0 & 0X02);
    ADData = (((uint)ADRESH << 8) + ADRESL);
    OutI = (ADData * 11);

    ADCON0 &= ~0X3C;//VBAT_SNS
    ADCON0 |= 0X18;
    ADCON0 |= 0X02;
    while(ADCON0 & 0X02);
    ADData = (((uint)ADRESH << 8) + ADRESL);
    BatVol = (ADData * 12);
 楼主| 禹雨小鱼 发表于 2015-8-11 19:47 | 显示全部楼层
怎么没有人回答啊?求救急啊!!
liu0000feng 发表于 2015-8-14 17:27 | 显示全部楼层
看看引脚弱上拉初始化了吗!
兰天白云 发表于 2015-8-15 17:33 | 显示全部楼层
兄弟,注释都没有,谁会帮你看呢
 楼主| 禹雨小鱼 发表于 2015-8-25 16:33 来自手机 | 显示全部楼层
解决了,使用了外部参考电压,并且每次检测AD之前都将AD初始化参数配置一次
您需要登录后才可以回帖 登录 | 注册

本版积分规则

28

主题

76

帖子

1

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