我选用的是单通道输入模式,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; } |