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

ADC采样问题

[复制链接]
2482|22
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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配置

使用特权

评论回复
5
kangzj| | 2021-10-13 21:38 | 只看该作者
你要等到ADC转换结束才能取结果。所以,正确的顺序是,切换通道,开始转换,等待完成,取结果。

使用特权

评论回复
6
zwll|  楼主 | 2021-10-13 21:39 | 只看该作者
哪儿啊?我怎么没有找到。。。

使用特权

评论回复
7
jiajs| | 2021-10-13 21:42 | 只看该作者
例如,
GO_nDONE = 1;
while(GO_nDONE) ;
adc_value_ave = ADRESH;
可以如上死等,也可以先去做别的,回头来查询GO_nDONE == 0,再取结果。

使用特权

评论回复
8
bqyj| | 2021-10-13 21:44 | 只看该作者
把ADFM设错了

使用特权

评论回复
9
chenho| | 2021-10-13 21:46 | 只看该作者
ADFM = 1;                ///  high byte high 6 bits is not use

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

使用特权

评论回复
10
zwll|  楼主 | 2021-10-13 21:48 | 只看该作者
发现另外一个问题了。只要电池大于3.3V,ADRESH都是大于250.这样我就没法在3.3V以上再分电压等级了

使用特权

评论回复
11
chuxh| | 2021-10-13 21:50 | 只看该作者
你有什么打算呢?或者你想知道什么?

使用特权

评论回复
12
zwll|  楼主 | 2021-10-13 21:52 | 只看该作者
同样的板子,别人的程序可以,真是好奇怪啊。

使用特权

评论回复
13
zwll|  楼主 | 2021-10-13 21:54 | 只看该作者
我用的参考电压是VDD,ADC直接接电池的。

使用特权

评论回复
14
zhaoxqi| | 2021-10-13 21:56 | 只看该作者
vdd是多少呢?

使用特权

评论回复
15
zwll|  楼主 | 2021-10-13 21:58 | 只看该作者
我们的VDD是会变化的,随外接电源的变化而变化。

使用特权

评论回复
16
zwll|  楼主 | 2021-10-13 22:02 | 只看该作者
我想请教一下我是用VDD做参考电压的,如果VDD会变化是不是测ADC就不准了啊?

使用特权

评论回复
17
stly| | 2021-10-13 22:05 | 只看该作者
如果你的信号和VDD同步正比波动,那就无所谓。

使用特权

评论回复
18
chuxh| | 2021-10-13 22:07 | 只看该作者
例如VDD通过两个电阻分压,想测量其中一个电阻上的压降,此时使用VDD做VREF就非常好。

使用特权

评论回复
19
dengdc| | 2021-10-13 22:09 | 只看该作者
反之则应该设计独立的参考电压源。

使用特权

评论回复
20
renyaq| | 2021-10-13 22:11 | 只看该作者
VDD上尽量要‘干净’,如果使用开关电源生成的VDD,最好是将电压略微调高一些

使用特权

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

本版积分规则

885

主题

11314

帖子

5

粉丝