|
Опрашиваю АЦП через 50 мс по таймеру, результат сдвинут влево:
ADCMUX = 0b00100000;
SETBIT(ADCSR, ADEN);
SETBIT(ADCSR, ADSC);
while (!ADC_complet)
ADC_complet = 0;
if (ADCH > 128)
{
SETBIT(PORTA, PA6);
}
else
{
CLEARBIT(PORTA, PA6);
}
ADC_complet = 1 устанавливается в преывании АЦП.
Все замечательно работает, резистор крутим - светодиод моргает.
Включаем другой канал ADCMUX = 0b00101000, PA5. Здесь тоже все нормально,
моргает другой светодиод.
Но!!!!
Как только начинаем читать не через 50 мс, а непрерывно в цикле - вообще ничего не работает, не читается ни первый, ни второй канал.
Другая ситуация. Читаем последовательно два канала:
ADCMUX = 0b00100000;
SETBIT(ADCSR, ADEN);
SETBIT(ADCSR, ADSC);
while (!ADC_complet)
ADC_complet = 0;
if (ADCH > 128)
{
SETBIT(PORTA, PA6);
}
else
{
CLEARBIT(PORTA, PA6);
}
ADCMUX = 0b00101000;
SETBIT(ADCSR, ADEN);
SETBIT(ADCSR, ADSC);
while (!ADC_complet)
ADC_complet = 0;
if (ADCH > 128)
{
SETBIT(PORTA, PA5);
}
else
{
CLEARBIT(PORTA, PA5);
}
Первый канал вообще не читается, от второго моргают оба светодиода. Если опрашивать каналы через 50 мс, то начинается какое то перекрестное взаимодействие.
Короче, полный дурдом. Если кто сталкивался, помогите!!!! Перерыл весь даташит, аппликухи - вроде бы все правильно делаю. Но не получается!!
E-mail: info@telesys.ru