参考电压源是采用外部VREF管脚的电压,转换周期26uS。当所检测的电压为0时,AD转换结果居然在31和30即0x1f和0x1e之间跳动, 当检测的电压为1V时这个偏差大概为25,2V左右时,偏差大概为20。百思不得其解,AVR的AD转换不应该会存在如此之大的偏差呀,我用Atmega16L也试过了,也是存在同样的问题。郁闷呀,这个问题花了我几天的时间都还没解决,请各位大侠不吝赐教呀~~~~~~~~~~~ 以下是我的程序 void adc_init(void) { ADCSR = 0x00; //disable adc ADMUX = 0x00; //select adc input 0 ACSR = 0x80; ADCSR = 0xA3; } unsigned int ReadADC( unsigned char channel) { unsigned int i = 0 ; channel &= 0x0f ; CLI(); ADMUX &= 0XF8 ; ADMUX |= channel; ADCSR |= 0x40; while (!(ADCSR & 0x10)); ADCSR |= 0x10; i = ADCL; i += (unsigned int)ADCH << 8; SEI(); return i; }
|