打印
[PIC®/AVR®/dsPIC®产品]

PIC18F的AD问题

[复制链接]
1622|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
禹雨小鱼|  楼主 | 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 | 只看该作者
兄弟,注释都没有,谁会帮你看呢

使用特权

评论回复
5
禹雨小鱼|  楼主 | 2015-8-25 16:33 | 只看该作者
解决了,使用了外部参考电压,并且每次检测AD之前都将AD初始化参数配置一次

使用特权

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

本版积分规则

28

主题

76

帖子

1

粉丝