[PIC®/AVR®/dsPIC®产品] PIC18F66K80 AD采样问题

[复制链接]
2737|6
 楼主| liuyanlbg 发表于 2017-4-8 14:17 | 显示全部楼层 |阅读模式
初次使用PIC18F66K80这款单片机,写入一个AD采样程序。输入电压范围为2.5~5V时,亮灯LED灯。输入电压范围在0~2.5V时关闭LED灯。但测试发现,只有输入电压在0.5~0.7V时LED灯才关闭,0~0.5V及0.7V~5V时LED灯均被点亮。(0~0.5V时AD采样结果竟为负数)。单片机晶振为16M,采用4倍频。请高手指点。程序如下:
void AD_Init()
{
     TRISAbits.TRISA0  =  1;       //RA0为输入
     ANCON0  =  0X01;             //RA0为模拟引脚
     ANCON1  =  0X00;
     ADCON1  =  0X00;            //参考电压选择AVDD和AVSS,模拟反向通道选择AVSS
     ADCON2  =  0XB4;           //数据右对齐,AD采集时间为16TAD,AD转换时钟选择为FOSC/4
     ADCON0  =  0X01;           //开启AD转换
     delay(1000);
}
unsigned int AD_GetValue()
{
     unsigned int AD_date;
     AD_Init();
     ADCON0bits.GO_DONE  =  1;                                   //AD转换
     while(ADCON0bits.GO_DONE);
     AD_date  =  (((ADRESH&0X0F)<<8)|ADRESL);
     if(AD_date >= 0X03FF)
        bLED_LOOP = 0;              //LED灯点亮
     else
        bLED_LOOP = 1;
     return AD_date;
}
狼烟客 发表于 2017-4-13 20:30 | 显示全部楼层
AD_date  =  (((ADRESH&0X0F)<<8)|ADRESL);
这句是不是该改成这样?
AD_date  = (((uint16_t)(ADRESH&0x0F)<< << 8) | ADRESL);
e_hailang 发表于 2017-4-14 12:17 | 显示全部楼层
AD转换时钟选择为FOSC/4换成AD转换时钟选择为FOSC/16试一试吧

评论

还真是这个转换时钟的问题,设置成FOSC/16也不行,要设置成FOSC/64才可以。另外,那个2.5V的中间值应该是0X07FF,写错了。  发表于 2017-4-17 16:50
basker123 发表于 2017-4-14 18:26 | 显示全部楼层
设置参考源修改下!内部电压你不能确定大小是多少!采集出来的值肯定不准确!
石婷婷 发表于 2017-6-20 11:32 | 显示全部楼层
你好,请问解决了吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则

37

主题

59

帖子

0

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