Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Измерение браслетов и батарейки
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
IDE
Подскажите как можно не останавливая АЦП, переключить канал? Каналов всего два, но их нужно по очереди опрашивать. Переключаю в прерываниии - не работает!
domowoj
Канал можно переключить во время текущего преобразования,
смена канала произойдет после окончания преобразования.
При использовании диф. каналов сложнее - читайте даташит
или Евстифеева.
defunct
Цитата(IDE @ May 3 2008, 18:52) *
Переключаю в прерываниии - не работает!

Пропускайте по одному преобразованию
Я делаю так:

CODE

#pragma vector=ADC_vect
__interrupt void AdcISRHandler(void)
{
U16 Val = ADC;
if (adcContext.DummyCycle)
{ // restart current channel
adcBeginConversion( adc_GetMuxValue( adcContext.CurrentChan ) );
adcContext.DummyCycle = FALSE;
}
else
{
U8 currChan = adcContext.CurrentChan;

adcContext.CurrentChan += 1;
if (adcContext.CurrentChan > MUX_LAST_INDEX)
{
adcContext.lock = 0;
adcContext.CurrentChan = 0;
}
else
{
adcBeginConversion( adc_GetMuxValue( adcContext.CurrentChan ) );
adcContext.DummyCycle = TRUE; // <-- чтобы игнорировать результат
}


// handle current conversion result
adcUpdateStatistics( currChan, Val );

}
}
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.