Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

Re: stm32+AD9238. High-speed ADC. Каналы А и Б. Настройка DM

Сб авг 05, 2023 00:47:17

dimaib, Предлагаю вам показать скриншоты с осциллографа с сигналами:
1. ADC_CLKSAC и DCMI_PIXCLK одновременно.
2. Не меняя настроек, DCMI_D11 и DCMI_PIXCLK одновременно.
Предварительно на аналоговые входы АЦП нужно подать напряжения близкие к минимально возможному (например, канал A), и максимально возможному (канал B). Тогда по состоянию DCMI_D11 мы будем видеть переключение выходов АЦП между каналами A и B.

Re: stm32+AD9238. High-speed ADC. Каналы А и Б. Настройка DM

Сб авг 05, 2023 02:16:31

mont-oriol
Да, хорошая идея) Вот:
Изображение Изображение
Надеюсь, достаточно информативно)

Добавлено after 11 minutes 37 seconds:
Re: stm32+AD9238. High-speed ADC. Каналы А и Б. Настройка DMA
Задержка появления данных на шине от сигнала CLK, порядка 5-7nS. Наростание и стабилизация сигналов на линиях примерно 25nS.

Если требуется, смещение ADC_CLKSAC относительо DCMI_PIXCLK можно убрать или изменить

Re: stm32+AD9238. High-speed ADC. Каналы А и Б. Настройка DM

Сб авг 05, 2023 08:22:19

так судя по картинкам, смещать никуда и не надо, даже для обоих фронтов запасы есть.

остается научить DCMI правильно работать.
жесть, кто придумал так порты конфигурить ...
заблудился, что Вы подаете на PA3?
на HSYNC и VSYNC должен быть неактивный уровень, 0 или 1 зависит от VSPOL и HSPOL в DCMI_CR

Re: stm32+AD9238. High-speed ADC. Каналы А и Б. Настройка DM

Сб авг 05, 2023 10:45:21

dimaib, На скринах мы видим
а) Каналы АЦП чередуются.
б) В окрестностях фронтов DCMI_PIXCLK шина данных стабильна.
Проблемы в аппаратной части нет.
Есть только вопрос. Вот заполнился буфер в микроконтроллере данными с АЦП. Каналы чередуются. Как узнать, канал A или B первый в буфере? Если сохранять только 12 бит на канал, то - никак. Чтобы каналы надёжно идентифицировать, нужно параллельно с D0-D11 сохранять ещё один бит - признак канала. Это сигнал ADC_CLKSAC.

Re: stm32+AD9238. High-speed ADC. Каналы А и Б. Настройка DM

Сб авг 05, 2023 12:39:11

mont-oriol, классно, я не додумался!
то есть вы предлагаете настроить DCMI на 14 бит (D0..D13) и 14й бит объединить с тактированием АЦП?
Но к сожалению в этом то и проблема, что буффер заполняется случайным образом. Данные не чередуются по чётным и не чётным номерам массива. Бывает, что по 20 элементов подряд, заполнено каналом А, потом 100 элементов с канала Б, остальное заполняется А. Бывает что весь массив заполнен только одним каналом А или Б. Это совершенно случайная последовательность.

Re: stm32+AD9238. High-speed ADC. Каналы А и Б. Настройка DM

Сб авг 05, 2023 15:30:15

если я правильно понял исп. DCMI для этого дела:
синхронизация аппаратная,
нужен режим JPEG,
сигн.DCMI_HSYNC - в неактивный уровень (или разрешение данных),
сигн.DCMI_VSYNC - для запуска захвата, если DMA не успеет забрать данные, эту линию придется передернуть, или можно их объединить - функционирование то же.
задача DMA перебрасывать данные между буферами (DCMI->RAM), прилетит IT_OVR надо перезапустить заливку "кадра" (DCMI_VSYNC).

а за ногу PA3 так и не ответили ;)

Re: stm32+AD9238. High-speed ADC. Каналы А и Б. Настройка DM

Вс авг 06, 2023 00:28:03

a797945, Да, извините :)
PA3, настроен как output, и перд запуском приёма DCMI устанавливается в 0. По завершении приёма PA3, устанавливается обратно в 1.
То есть этот пин связан с HSYNC и VSYNC и управляет ими.

Я немного не понимаю, как работают HSYNC и VSYNC, просто понимаю, что вначале приёма следует опустить их, а вконце поднять) Это так же видно из скриншота, который вы прислали ранее.
Как они влияют на алгоритм приёма и передачи, тоже не понятно)
с jpeg пытаюсь разобраться, по этой статье. https://habr.com/ru/articles/482506/, но не понимаю, как это может помочь

Re: stm32+AD9238. High-speed ADC. Каналы А и Б. Настройка DM

Вс авг 06, 2023 08:21:56

а RM на свой МК открывали?
в видео режимах импульсы синхр. нужны чтоб раскладывать приходящую инфу по строкам и по кадрам, в режиме jpeg этой раскладки нет, но нужен спад по VSYNC для начала захвата "кадра", если dma не успеет выбрать буфер, захват прекратится до следующего VSYNC.
это из RM, как оно в живую не знаю.

Вы отладку можете смотреть? поставить точку останова и посмотреть содержимое регистров?
или глазами перепроверять код - что он все содержит, о чем сказано на словах. тогда нужен весь код с заголовочными файлами. правда у меня и куб не установлен, поэтому быстро разгребсти его портянки не смогу.

Re: stm32+AD9238. High-speed ADC. Каналы А и Б. Настройка DM

Вс авг 06, 2023 11:52:46

Я постараюсь все это сделать, но только уже в понедельник, сейчас нет доступа к проекту. Если будет не удачно, то попрошу помощи у вас

Re: stm32+AD9238. High-speed ADC. Каналы А и Б. Настройка DM

Вс авг 06, 2023 13:45:53

полагаю "вас" во множественном числе :)
я не спец, да и в рабочее время доступа к компам и интернету не имею - совсем в другой области работаю

Re: stm32+AD9238. High-speed ADC. Каналы А и Б. Настройка DM

Вс дек 24, 2023 01:16:59

Добрый день, товарищи!
Извините, что так нагло пропал, являясь автором этой темы.
Пришлось убрать этот проект на дальнюю полку заняться другими делами. Но теперь пришлось вернуться обратно и продолжить размышления.
И не зря говорят, что если, что то не получается, надо сменить задачу, и потом вернуться к проблеме позже. Так и получилось. Переосмыслив, всё что было предложено и сделано ранее и заново поэкспериментировав пришёл к выводу и попал в точку.... :kill:
Ранее, я предполагал, что требуется тактовый сигнал, который тактирует внешнее АЦП, увеличить в два раза, в соотношении с тактовым сигналом, который переключает каналы АЦП. И использовал для этого два отдельных таймера, предварительно синхронизировав их. И это не помогло, данные всё равно приходили не предсказуемо и складывались в массив рандомно.
Оказалось, что смена канала происходит по нарастанию сигнала, а не по нарастанию и спаду, как думал раньше. Для второго случая было бы достаточно увеличить частоту на 2. Но для первого случая, требуется увеличить частоту на 4. И вуаля :shock: всё заработало. Данные кладутся в массив, аккуратно по очереди, в чётные данные с одного канала, в нечётные данные с другого канала.
Я надеюсь, что эта информация может кому то пригодиться. На данный момент в интернете не могу найти примеров с мультиплексированием каналов на этой микросхеме.
Спасибо всем, кто помогал! :)
Ответить