Код
volatile unsigned int codeADC = 0;
ISR(ADC_vect)
{
TIFR0 = 1;
codeADC = (ADCH<<8) | ADCL;
}
После старта програмы на входе 0. Отображаю на ЖК экране - 0. Потом подаю (через делитель) +5В.... На экране 0 В. Начал дебажить, точку останова на выход из обработчика прерывания АЦП. На экране "+5В". Дальше работаю в пошаговом режиме - результат на экране соответствует тому, что подано на вход. Меняю вход - меняется экран. Снимаю брейкпоины запускаю непрерывно - на экране значение не меняется, показывает последнее значение из под дебага. тупо жму паузу .... останавливаюсь где-то в дебрях программы.... запускаю (продолжить) .... значение 1 раз обновится на то, что было в паузе и опять не меняется. ISR(ADC_vect)
{
TIFR0 = 1;
codeADC = (ADCH<<8) | ADCL;
}
Я уже пробовал запуск ацп и от таймера, и программно битом ADSC - результат один: в пошаговом режиме результат АЦП обновляется, в непрерывном - нет.
В чем может быть проблема?
ps может в прерывание ISR(ADC_vect) не попадаю? переписал обработчик на заглушку
Код
ISR(ADC_vect)
{
TIFR0 = 1;
static unsigned int a = 0;
codeADC = a++;
}
{
TIFR0 = 1;
static unsigned int a = 0;
codeADC = a++;
}
запустил без остановки, в результате значения на экране обновляются, т.е. в прерывание попадаю, вывод на экран работает нормально.