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

[复制链接]
 楼主| zwll 发表于 2021-10-12 23:55 | 显示全部楼层 |阅读模式
本帖最后由 pzsh 于 2021-10-13 20:57 编辑

PIC16F1507 ,使用VDD做参考电压,18脚实际测量是3.9V,但是我在程序中测到的ADRESH 的数值是5.
zhenykun 发表于 2021-10-12 23:57 | 显示全部楼层
楼主程序可以公开吗?贴程序看下吧,这么说看不出什么原因
 楼主| zwll 发表于 2021-10-12 23:58 | 显示全部楼层
初始化代码如下:
void adc_init(void)
{
        CHS4 = 0;
        CHS3 = 0;
        CHS2 = 0;
        CHS1 = 0;
          CHS0 = 1;                //select AN1
        ANSA1 = 1;                //select AN1         
        ADON = 1;                //enable ADC
    GO_nDONE = 1;        
        ADFM = 1;                ///  high byte high 6 bits is not use
        ADCS2 = 0;      ///  
        ADCS1 = 1;      ///
        ADCS0 = 1;      ///  ADC CLK SELECT INNER RC
        TRIGSEL3 = 0;
        TRIGSEL2 = 0;
        TRIGSEL1 = 0;
        TRIGSEL0 = 0;        
}

在主程序中,检测代码如下:
void main(void)
{
        init();

        while(1)
        {
                if(GO_nDONE == 0)
                {
                    GO_nDONE = 1;
        
                        adc_value_ave = ADRESH;
               
                }
             .
             .
             .
调试发现 adc_value_ave 的值是小于5的数,感觉严重不对。
请高手帮忙看看代码哪里有问题?
pzsh 发表于 2021-10-13 20:57 | 显示全部楼层
不知道这个可不可以使用MCC配置
kangzj 发表于 2021-10-13 21:38 | 显示全部楼层
你要等到ADC转换结束才能取结果。所以,正确的顺序是,切换通道,开始转换,等待完成,取结果。
 楼主| zwll 发表于 2021-10-13 21:39 | 显示全部楼层
哪儿啊?我怎么没有找到。。。
jiajs 发表于 2021-10-13 21:42 | 显示全部楼层
例如,
GO_nDONE = 1;
while(GO_nDONE) ;
adc_value_ave = ADRESH;
可以如上死等,也可以先去做别的,回头来查询GO_nDONE == 0,再取结果。
bqyj 发表于 2021-10-13 21:44 | 显示全部楼层
把ADFM设错了
chenho 发表于 2021-10-13 21:46 | 显示全部楼层
ADFM = 1;                ///  high byte high 6 bits is not use

采样结果设为右边对齐了,ADRESH 寄存器的高6位没存储结果。
 楼主| zwll 发表于 2021-10-13 21:48 | 显示全部楼层
发现另外一个问题了。只要电池大于3.3V,ADRESH都是大于250.这样我就没法在3.3V以上再分电压等级了
chuxh 发表于 2021-10-13 21:50 | 显示全部楼层
你有什么打算呢?或者你想知道什么?
 楼主| zwll 发表于 2021-10-13 21:52 | 显示全部楼层
同样的板子,别人的程序可以,真是好奇怪啊。
 楼主| zwll 发表于 2021-10-13 21:54 | 显示全部楼层
我用的参考电压是VDD,ADC直接接电池的。
zhaoxqi 发表于 2021-10-13 21:56 | 显示全部楼层
vdd是多少呢?
 楼主| zwll 发表于 2021-10-13 21:58 | 显示全部楼层
我们的VDD是会变化的,随外接电源的变化而变化。
 楼主| zwll 发表于 2021-10-13 22:02 | 显示全部楼层
我想请教一下我是用VDD做参考电压的,如果VDD会变化是不是测ADC就不准了啊?
stly 发表于 2021-10-13 22:05 | 显示全部楼层
如果你的信号和VDD同步正比波动,那就无所谓。
chuxh 发表于 2021-10-13 22:07 | 显示全部楼层
例如VDD通过两个电阻分压,想测量其中一个电阻上的压降,此时使用VDD做VREF就非常好。
dengdc 发表于 2021-10-13 22:09 | 显示全部楼层
反之则应该设计独立的参考电压源。
renyaq 发表于 2021-10-13 22:11 | 显示全部楼层
VDD上尽量要‘干净’,如果使用开关电源生成的VDD,最好是将电压略微调高一些
您需要登录后才可以回帖 登录 | 注册

本版积分规则

885

主题

11314

帖子

5

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