реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> STM32L0: ADC multy-channel без DMA, возможно?
k000858
сообщение Apr 1 2016, 10:26
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 319
Регистрация: 31-01-12
Пользователь №: 69 978



Ктонибудь реализовывал такое? как это сделать?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 1 2016, 10:42
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(k000858 @ Apr 1 2016, 12:26) *
Как это сделать?
1) настроить АЦП на однократное преобразование, после окончания забрать результат, запустить преобразование на следующем канале.
2) Запустить АЦП в циклическом режиме и успевать забирать из DR данные до окончания следующего преобразования.



--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
k000858
сообщение Apr 1 2016, 10:48
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 319
Регистрация: 31-01-12
Пользователь №: 69 978



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

при старте преобразования канал не указывается
я инициализировал 2 канала в ацп, по идее теперь поочередной должен забирать результат. но результат всегда с одного канала. заморочка какая то
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 1 2016, 11:37
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



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


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
KnightIgor
сообщение Apr 1 2016, 12:33
Сообщение #5


Знающий
****

Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725



Цитата(k000858 @ Apr 1 2016, 11:48) *
при старте преобразования канал не указывается
я инициализировал 2 канала в ацп, по идее теперь поочередной должен забирать результат. но результат всегда с одного канала. заморочка какая то

Оставьте изначально порочный путь. Как только речь идет о многоканальном преобразовании в более-менее автоматическом режиме (то есть, не поканальная работа с перенастройкой всего вручную каждый раз), есть большой риск потери данных и/или нарушение последовательности выборки при работе по прерываниям и без DMA. Риски возрастают по мере развития системы и работы других прерываний. В документации так прямо и написано, при многоканальности ADC настоятельно и почти исключительно рекомендуется DMA. Я больше скажу, что и при DMA есть риск сдвига последовательности: такие сбои в системе с близкосидящим GSM-модемом я наблюдал лично! Поборол просто тем, что отказался от полного автоматизма работы связки ADC-DMA, когда ADC и DMA программируются в циклический режим, а запускал группу преобразований в прерывании от DMA с обязательной переустановкой счетчиков и указателей DMA и перестартом ADC.
Go to the top of the page
 
+Quote Post
Aleksandr Barano...
сообщение Apr 1 2016, 13:12
Сообщение #6


Частый гость
**

Группа: Участник
Сообщений: 169
Регистрация: 31-08-05
Из: New York
Пользователь №: 8 118



А injected mode в этом процессоре есть?


--------------------
ASB
Go to the top of the page
 
+Quote Post
k000858
сообщение Apr 4 2016, 05:29
Сообщение #7


Местный
***

Группа: Участник
Сообщений: 319
Регистрация: 31-01-12
Пользователь №: 69 978



все работает.
просто между доставаниями результата оцифровки не должна быть большая пауза.
библиотеки тут совершенно непричем. тааковы особенности ацп в контроллере.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Apr 4 2016, 06:07
Сообщение #8


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Все должно работать и с большой паузой, и с маленькой, и совсем без паузы. Там же есть режим одиночного преобразования в последовательности? Запустили очередное преобразование, дождались окончания, прочитали...
Go to the top of the page
 
+Quote Post
k000858
сообщение Apr 4 2016, 09:03
Сообщение #9


Местный
***

Группа: Участник
Сообщений: 319
Регистрация: 31-01-12
Пользователь №: 69 978



Цитата(ViKo @ Apr 4 2016, 10:07) *
Все должно работать и с большой паузой, и с маленькой, и совсем без паузы. Там же есть режим одиночного преобразования в последовательности? Запустили очередное преобразование, дождались окончания, прочитали...

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

Код
ContinuousConvMode            = DISABLE;
DiscontinuousConvMode        = ENABLE;


направление каналов задается
Код
ScanConvMode                = ADC_SCAN_DIRECTION_BACKWARD;
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 01:09
Рейтинг@Mail.ru


Страница сгенерированна за 0.01407 секунд с 7
ELECTRONIX ©2004-2016