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

PIC16F1507 ADC采样问题

[复制链接]
1107|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
钓鱼大师|  楼主 | 2019-1-2 10:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用VDD做参考电压,18脚实际测量是3.9V,但是我在程序中测到的ADRESH 的数值是5.
初始化代码如下:
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的数,感觉严重不对。
请高手帮忙看看代码哪里有问题?
沙发
钓鱼大师|  楼主 | 2019-1-2 11:32 | 只看该作者
bellstudio 发表于 2019-1-2 10:55
你要等到ADC转换结束才能取结果。所以,正确的顺序是,切换通道,开始转换,等待完成,取结果。
例如,
GO_ ...

哦,我发现问题了,是我把ADFM设错了。

使用特权

评论回复
板凳
gyxlzc| | 2019-1-2 11:37 | 只看该作者
本帖最后由 gyxlzc 于 2019-1-2 11:39 编辑

ADFM = 1;                ///  high byte high 6 bits is not use

采样结果设为右边对齐了,ADRESH 寄存器的高6位没存储结果。

使用特权

评论回复
地板
钓鱼大师|  楼主 | 2019-1-2 11:53 | 只看该作者
gyxlzc 发表于 2019-1-2 11:37
ADFM = 1;                ///  high byte high 6 bits is not use

采样结果设为右边对齐了,ADRESH 寄存 ...

嗯嗯。是的。
不过我发现另外一个问题了。只要电池大于3.3V,ADRESH都是大于250.这样我就没法在3.3V以上再分电压等级了。但是同样的板子,别人的程序可以,真是好奇怪啊。我用的参考电压是VDD,ADC直接接电池的。

使用特权

评论回复
5
淘猫汤姆| | 2019-1-2 14:37 | 只看该作者
vdd是多少呢?5v吗?

使用特权

评论回复
6
钓鱼大师|  楼主 | 2019-1-2 14:42 | 只看该作者
淘猫汤姆 发表于 2019-1-2 14:37
vdd是多少呢?5v吗?

我们的VDD是会变化的,随外接电源的变化而变化。

使用特权

评论回复
7
钓鱼大师|  楼主 | 2019-1-2 14:43 | 只看该作者
淘猫汤姆 发表于 2019-1-2 14:37
vdd是多少呢?5v吗?

我想请教一下我是用VDD做参考电压的,如果VDD会变化是不是测ADC就不准了啊?

使用特权

评论回复
8
yewuyi| | 2019-1-2 17:54 | 只看该作者
钓鱼大师 发表于 2019-1-2 14:43
我想请教一下我是用VDD做参考电压的,如果VDD会变化是不是测ADC就不准了啊? ...

如果你的信号和VDD同步正比波动,那就无所谓。例如VDD通过两个电阻分压,想测量其中一个电阻上的压降,此时使用VDD做VREF就非常好。反之则应该设计独立的参考电压源。

另外,VDD上尽量要‘干净’,如果使用开关电源生成的VDD,最好是将电压略微调高一些,然后用一个LDO做一个降压,这样最终的测量效果会更好一些。

使用特权

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

本版积分规则

29

主题

170

帖子

0

粉丝