АЦП на atmega328p нужна помощь в освоении

Обсуждаем контроллеры компании Atmel.
Ответить
Встал на лапы
Аватара пользователя
Сообщения: 147
Зарегистрирован: Вс мар 09, 2014 09:13:00

Сообщение DenChik87 »

Салам всем котам 8) Хочу сделать чтобы ацп atmega328p работал в режиме фриран. А конкретнее, чтобы мониторил измениения входа ADC, уходил в прерывание ADC, а отуда передавал значения ADC по UART. Для этого написал прикрепленный ниже код. Данный код проверял в протеусе. По UART в терминал он мне передает верные значения входа ADC, но только один раз. Не понимаю почему. Ведь в настройках бит ADATE=1. Почему прерывание вызывается только один раз?
Вложения
adc.png
(28.12 КБ) 802 скачивания
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

АЦП с данным МК не применял. Но вот эта фраза из ДШ из описания регистра ADCSRB походу означает что АЦП надо запускать каждый раз ручками
Switching to Free Running mode (ADTS[2:0]=0) will not cause a trigger event, even if the ADC Interrupt Flag is set.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Реклама
Встал на лапы
Аватара пользователя
Сообщения: 147
Зарегистрирован: Вс мар 09, 2014 09:13:00

Сообщение DenChik87 »

Switching to Free Running mode (ADTS[2:0]=0) will not cause a trigger event, even if the ADC Interrupt Flag is set.
Так в этом же абзаце ДШ сказано, так будет если в ADTE очищен, т.е. ADTE=0:
If ADATE is cleared, the ADTS[2:0] settings will have no effect
А у меня ADTE=1, а тогда :
If ADATE in ADCSRA is written to one, the value of these bits selects which source will trigger an ADC
conversion.
, режим ADC определяется так:
ADTS[2:0] Trigger Source
000 Free Running mode
001 Analog Comparator
010 External Interrupt Request 0
011 Timer/Counter0 Compare Match A
100 Timer/Counter0 Overflow
101 Timer/Counter1 Compare Match B
110 Timer/Counter1 Overflow
111 Timer/Counter1 Capture Event
А так как я не изменял значения битов ADTS[2:0], то в них нули, а это как раз и есть режим Free Running mode
Может откликнится тот, кто делал уже такое, подскажите в чем может быть косяк
Друг Кота
Аватара пользователя
Сообщения: 6323
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Сообщение Jack_A »

<deleted>
Изображение
Реклама
Эиком - электронные компоненты и радиодетали
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Сообщение Dimon456 »

В прерывании ISR (ADC_vect) после последнего transmit поставьте ADCSRA|=(1<<ADSC).
Реклама
Встал на лапы
Аватара пользователя
Сообщения: 147
Зарегистрирован: Вс мар 09, 2014 09:13:00

Сообщение DenChik87 »

Огромное кошачье МЯ, и чедовеческое спасибо за ответы, особенно Dimon456 :beer: Теперь все как нодо работает :music:
Реклама
Ответить

Вернуться в «AVR»