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-10 02:35
result=(ADRESH<<8)|ADRESL;
这个语句比较简洁 我会多考虑这方面的语句简化 谢谢各位
gaolf_2000
2楼-- · 2020-02-10 05:41
应该是没有配置好转换时钟,TAD选大一些

一周热门 更多>