1) Если питание на МК подавать через диод Шоттки (падение напряжения 0.3 В), то АЦП выдает мне напряжение на входах с большой погрешностью. Например, напряжение аккумулятора 3.71В, а он показывает 4.56. Напряжение питание 5, а он выдает 5.08. Хотя без этого диода (питание напрямую) АЦП работает с точностью до десятой! Почему так происходит?
2) Обнаружил, что можно узнавать напряжение не только на входах ADC, но ещё и на входе опорного источника напряжения (т.е. на AVCC и AREF), по сути можно только при помощи ноги AVCC с подведенным питанием 5В, узнать, что туда подведено 5В. Но когда я подвожу на VCC и AVCC питание в 3.7 В (резервное питание). То метод проб и ошибок показал, что питание на AVCC по прежнему 5В!!! Как такое возможно?
AVCC я подключал как указано в даташите на Atmega8 - на питание дроссель в 100мкГн, на землю конденсатор в 100мкФ(вроде бы, но это сейчас не важно).
Объясните, пожалуйста мне что происходит в этих двух случаях...и кстати вот как я читаю напряжение на AVCC:
unsigned int read_power()
{
ADMUX=(ADC_VREF_TYPE & 0xff);
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}
Для сравнения, как читает CVAVR напругу на портах
// Read the AD conversion result
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}
Может быть я не правильно читаю напряжение на AVCC?.


