PIC16F877A AD转换 通道互相影响问题

2020-02-09 11:38发布

我用ADC功能时 使用了两个ad通道分别转换热敏电阻的模拟信号 (AN0,AN1) 在显示的过程中发现,随着AN0数据的变化,AN1数据也在改变。而实际上AN1采集温度的环境是没有变化,理论上转换出来的数据是没有很大浮动的。 另外我做了另外几个测试
1 AN0通道温度环境不变情况下,改变AN1温度环境,AN0不受影响
2 不使用AN1通道转换,用AN3代替AN1,做以上的实验,改变AN0采集的温度环境,随着AN0数据变化,AN3数据也在改变。
3 不使用AN0通道转换,用AN3代替AN0,做以上的实验,通道之间没有影响

以下是我ADC的配置程序
void init_a2d(void){
        ADCON0=0x80;        // select Fosc/32
        ADCON1=0x84;        // select right justify result. A/D port configuration 1
        ADON=1;                // turn on the A2D conversion module
}

unsigned int read_a2d(unsigned char channel){
    unsigned int result;
        channel&=0x07;        // truncate channel to 3 bits
    NOP();
    NOP();
        ADCON0&=0xC5;        // clear current channel select
    NOP();
    NOP();
        ADCON0|=(channel<<3);        // apply the new channel select
    NOP();
    NOP();
    NOP();
    NOP();
        ADGO=1;        // initiate conversion on the selected channel
        while(ADGO)continue;
    NOP();
    NOP();
    result = ADRESH;
    result <<= 8;
    result |= ADRESL;
        return(result);        // return 8 MSB of the result
}

我用了32时钟分频 右对齐数字值,通道转换用了几个空操作来缓冲,转换用了查询标志位的方式

请教各位,ADC通道 AN0是否会影响其他通道的转换。是不是跟程序的配置有关。谢谢
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
822690a
1楼-- · 2020-02-09 12:21
问题解决了,通道转换用了几个空操作来缓冲 可能转换时间不够导致了互相影响。用多几个微妙级的延时可以解决
snail0204
2楼-- · 2020-02-09 16:14
采用一个定时器定时触发采样,转换通道比较好
822690a
3楼-- · 2020-02-09 18:14
定时器触发通道转换 一般需要时间是多少呢
z_hwei
4楼-- · 2020-02-09 23:45
 精彩回答 2  元偷偷看……
bigZ
5楼-- · 2020-02-09 23:49
result = ADRESH;
    result <<= 8;
    result |= ADRESL;

这样的语句比较让人心疼
xnliuxiwen
6楼-- · 2020-02-10 00:39
result = ADRESH;  
    result <<= 8;  
    result |= ADRESL;


result=(ADRESH<<8)|ADRESL;

说不定编译器优化了.结果都一样.第一种写法保险点不是好事?

一周热门 更多>