打印
[AVR单片机]

为什么Mega8L/16L的AD转换偏置误差会如此之大??

[复制链接]
2302|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sanxingyu|  楼主 | 2007-1-4 21:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我选用的是单通道输入模式,AD转换周期为208uS,固定对通道0进行采样。奇怪的是,输入电压为0,当参考电压选择内部或者外加的2.56V时,采样值在0x1f和0x1e之间波动,当参考电压选择AVCC 5.0V时,采样值在0x0f、0x0e和0x10之间波动。也就是说,相当于单片机内部叠加了一个约70mv (2.56 * 31/1023)的偏置电压。而且这个偏置电压会随着输入电压的增大而减少,0v时大概为70mv,2V时大概为50mv。
这个现象同时在Atmega8L和Atmega16L上出现。想了、试了很久都没解决,有点怀疑是我买的单片机本身有问题。我是采用查询方式读取AD转换结果的,以下是我的程序,请各位大侠帮忙侃侃呀~~~ 

void adc_init(void)
{
 ADCSR = 0x00;  
 ADMUX = 0x40; 
 ACSR  = 0x80;
 ADCSR = 0x86;
}
unsigned int ReadADC( void )
{
    unsigned char i = 0 ;
    CLI();     
    ADMUX &= 0XF8 ;    
    ADCSR |= 0x40;                      
    while (!(ADCSR & 0x10));             
    for ( i = 200 ;i > 0 ; i-- );
    ADCSR |= 0x10;           
//  i = ADCL;  
//  i += (unsigned int)ADCH << 8; 
    SEI();  
    return ADC;
}

相关帖子

沙发
sanxingyu|  楼主 | 2007-1-4 22:31 | 只看该作者

呵呵,终于找到原因了

问题在于用做AD转换通道的IO要禁用内部上拉电阻,否则就会出现上述问题!!! 另外,也要特别注意的是AD转换时钟不能太高,一般在50KHz~200KHz之间,否则AD转换结果会一直跳动,且不精确。

使用特权

评论回复
板凳
sharks| | 2007-1-9 00:17 | 只看该作者

AVCC本来就是个很不稳定的源

  拿AVCC来当基准,当然会跳!

使用特权

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

本版积分规则

2

主题

4

帖子

1

粉丝