Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: STM32L0: ADC multy-channel без DMA
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
k000858
Ктонибудь реализовывал такое? как это сделать?
Сергей Борщ
Цитата(k000858 @ Apr 1 2016, 12:26) *
Как это сделать?
1) настроить АЦП на однократное преобразование, после окончания забрать результат, запустить преобразование на следующем канале.
2) Запустить АЦП в циклическом режиме и успевать забирать из DR данные до окончания следующего преобразования.

k000858
Цитата(Сергей Борщ @ Apr 1 2016, 14:42) *
1) настроить АЦП на однократное преобразование, после окончания забрать результат, запустить преобразование на следующем канале.

при старте преобразования канал не указывается
я инициализировал 2 канала в ацп, по идее теперь поочередной должен забирать результат. но результат всегда с одного канала. заморочка какая то
Сергей Борщ
Цитата(k000858 @ Apr 1 2016, 12:48) *
при старте преобразования канал не указывается
Жалуйтесь авторам ваших "библиотек". Мне же никто не мешает настроить АЦП на преобразование только одного нужного мне канала и после окончания преобразования перенастроить на использование только одного следующего канала.
KnightIgor
Цитата(k000858 @ Apr 1 2016, 11:48) *
при старте преобразования канал не указывается
я инициализировал 2 канала в ацп, по идее теперь поочередной должен забирать результат. но результат всегда с одного канала. заморочка какая то

Оставьте изначально порочный путь. Как только речь идет о многоканальном преобразовании в более-менее автоматическом режиме (то есть, не поканальная работа с перенастройкой всего вручную каждый раз), есть большой риск потери данных и/или нарушение последовательности выборки при работе по прерываниям и без DMA. Риски возрастают по мере развития системы и работы других прерываний. В документации так прямо и написано, при многоканальности ADC настоятельно и почти исключительно рекомендуется DMA. Я больше скажу, что и при DMA есть риск сдвига последовательности: такие сбои в системе с близкосидящим GSM-модемом я наблюдал лично! Поборол просто тем, что отказался от полного автоматизма работы связки ADC-DMA, когда ADC и DMA программируются в циклический режим, а запускал группу преобразований в прерывании от DMA с обязательной переустановкой счетчиков и указателей DMA и перестартом ADC.
Aleksandr Baranov
А injected mode в этом процессоре есть?
k000858
все работает.
просто между доставаниями результата оцифровки не должна быть большая пауза.
библиотеки тут совершенно непричем. тааковы особенности ацп в контроллере.
ViKo
Все должно работать и с большой паузой, и с маленькой, и совсем без паузы. Там же есть режим одиночного преобразования в последовательности? Запустили очередное преобразование, дождались окончания, прочитали...
k000858
Цитата(ViKo @ Apr 4 2016, 10:07) *
Все должно работать и с большой паузой, и с маленькой, и совсем без паузы. Там же есть режим одиночного преобразования в последовательности? Запустили очередное преобразование, дождались окончания, прочитали...

вы правы.
такой режим задается так:

Код
ContinuousConvMode            = DISABLE;
DiscontinuousConvMode        = ENABLE;


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