Купил новых контроллеров (Mega168v) и что-то никак с процессом аналого-цифрового преобразования у них (ну или у меня)
вот код инициализации и прерывания:
void adc_init(void)
{
ADCSRA = 0x00;
ADMUX = (1<<REFS0)|(1<<MUX3)|(1<<MUX2)|(1<<MUX1);
ACSR = 0x80;
ADCSRB = 0x00;
ADCSRA = (1<<ADEN)|(1<<ADSC)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS0);
}
#pragma interrupt_handler adc_isr:22
void adc_isr(void)
{
//conversion complete, read value (int) using...
value_ADC=ADCL;
value_ADC|=(int)ADCH << 8;
}
где-то там в глубинах моих практически гениальных изящно-ветвистых алгоритмов, когда мне необходимо узнать напряжение на акумчике, делаю так:
…
adc_init();
ADCSRA |= (1<<ADSC);
DelayMs(1);
f_bat=(1.1*1024/value_ADC);
…
как бы своми глазами видел, как все замечательно работало ИМЕННО с этим кодом, а вот с новыми мегами никак:(
В качестве опоры пользуется AVCC, а на вход «заводится» внутренний источник опорного напряжения.
ГДЕ МИМО? ЧТО НЕ ТАК? :)