Инициализирую вот так:
Код
ADCSRA =
_BV(ADEN) // Разрешить работу АЦП
| _BV(ADIE) // Разрешить прерывания
| _BV(ADSC) // Запустить преобразование (первое, дальше автоматом)
| _BV(ADATE) // Непрерывные последовательные преобразования, одно за другим.
| _BV(ADPS2) | _BV(ADPS1) | _BV(ADPS0); // Делитель частоты на 128
ADMUX =
_BV(REFS0) // Опорное напряжение AVCC 5V
| _BV(ADLAR) // Выравнивание по левому краю
| 5; // Сигнал на вход идет с пятого канала АЦП
ISR(ADC_vect){//-------------------------------------------------------------------------------------
u16 q = ADCW;
// ADCSRA &=~_BV(ADIE);
}
_BV(ADEN) // Разрешить работу АЦП
| _BV(ADIE) // Разрешить прерывания
| _BV(ADSC) // Запустить преобразование (первое, дальше автоматом)
| _BV(ADATE) // Непрерывные последовательные преобразования, одно за другим.
| _BV(ADPS2) | _BV(ADPS1) | _BV(ADPS0); // Делитель частоты на 128
ADMUX =
_BV(REFS0) // Опорное напряжение AVCC 5V
| _BV(ADLAR) // Выравнивание по левому краю
| 5; // Сигнал на вход идет с пятого канала АЦП
ISR(ADC_vect){//-------------------------------------------------------------------------------------
u16 q = ADCW;
// ADCSRA &=~_BV(ADIE);
}
Судя по поведению, при попадании в прерывание - выхода от туда нет.
Если в инициализации закоментировать разрешение прерывания АЦП или в обработчике его запретить, то остальной софт функционирует
В чем косяк?