stm32+AD9238. High-speed ADC. Каналы А и Б. Настройка DMA
-
mont-oriol
- Мучитель микросхем
- Сообщения: 437
- Зарегистрирован: Пн май 27, 2019 07:18:28
- Откуда: ВВХ-ск
Re: stm32+AD9238. High-speed ADC. Каналы А и Б. Настройка DM
dimaib, Предлагаю вам показать скриншоты с осциллографа с сигналами:
1. ADC_CLKSAC и DCMI_PIXCLK одновременно.
2. Не меняя настроек, DCMI_D11 и DCMI_PIXCLK одновременно.
Предварительно на аналоговые входы АЦП нужно подать напряжения близкие к минимально возможному (например, канал A), и максимально возможному (канал B). Тогда по состоянию DCMI_D11 мы будем видеть переключение выходов АЦП между каналами A и B.
1. ADC_CLKSAC и DCMI_PIXCLK одновременно.
2. Не меняя настроек, DCMI_D11 и DCMI_PIXCLK одновременно.
Предварительно на аналоговые входы АЦП нужно подать напряжения близкие к минимально возможному (например, канал A), и максимально возможному (канал B). Тогда по состоянию DCMI_D11 мы будем видеть переключение выходов АЦП между каналами A и B.
Re: stm32+AD9238. High-speed ADC. Каналы А и Б. Настройка DM
mont-oriol
Да, хорошая идея) Вот:

Надеюсь, достаточно информативно)
Добавлено after 11 minutes 37 seconds:
Re: stm32+AD9238. High-speed ADC. Каналы А и Б. Настройка DMA
Задержка появления данных на шине от сигнала CLK, порядка 5-7nS. Наростание и стабилизация сигналов на линиях примерно 25nS.
Если требуется, смещение ADC_CLKSAC относительо DCMI_PIXCLK можно убрать или изменить
Да, хорошая идея) Вот:
Надеюсь, достаточно информативно)
Добавлено 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
так судя по картинкам, смещать никуда и не надо, даже для обоих фронтов запасы есть.
остается научить DCMI правильно работать.
жесть, кто придумал так порты конфигурить ...
заблудился, что Вы подаете на PA3?
на HSYNC и VSYNC должен быть неактивный уровень, 0 или 1 зависит от VSPOL и HSPOL в DCMI_CR
остается научить DCMI правильно работать.
жесть, кто придумал так порты конфигурить ...
заблудился, что Вы подаете на PA3?
на HSYNC и VSYNC должен быть неактивный уровень, 0 или 1 зависит от VSPOL и HSPOL в DCMI_CR
-
mont-oriol
- Мучитель микросхем
- Сообщения: 437
- Зарегистрирован: Пн май 27, 2019 07:18:28
- Откуда: ВВХ-ск
Re: stm32+AD9238. High-speed ADC. Каналы А и Б. Настройка DM
dimaib, На скринах мы видим
а) Каналы АЦП чередуются.
б) В окрестностях фронтов DCMI_PIXCLK шина данных стабильна.
Проблемы в аппаратной части нет.
Есть только вопрос. Вот заполнился буфер в микроконтроллере данными с АЦП. Каналы чередуются. Как узнать, канал A или B первый в буфере? Если сохранять только 12 бит на канал, то - никак. Чтобы каналы надёжно идентифицировать, нужно параллельно с D0-D11 сохранять ещё один бит - признак канала. Это сигнал ADC_CLKSAC.
а) Каналы АЦП чередуются.
б) В окрестностях фронтов DCMI_PIXCLK шина данных стабильна.
Проблемы в аппаратной части нет.
Есть только вопрос. Вот заполнился буфер в микроконтроллере данными с АЦП. Каналы чередуются. Как узнать, канал A или B первый в буфере? Если сохранять только 12 бит на канал, то - никак. Чтобы каналы надёжно идентифицировать, нужно параллельно с D0-D11 сохранять ещё один бит - признак канала. Это сигнал ADC_CLKSAC.
Re: stm32+AD9238. High-speed ADC. Каналы А и Б. Настройка DM
mont-oriol, классно, я не додумался!
то есть вы предлагаете настроить DCMI на 14 бит (D0..D13) и 14й бит объединить с тактированием АЦП?
Но к сожалению в этом то и проблема, что буффер заполняется случайным образом. Данные не чередуются по чётным и не чётным номерам массива. Бывает, что по 20 элементов подряд, заполнено каналом А, потом 100 элементов с канала Б, остальное заполняется А. Бывает что весь массив заполнен только одним каналом А или Б. Это совершенно случайная последовательность.
то есть вы предлагаете настроить DCMI на 14 бит (D0..D13) и 14й бит объединить с тактированием АЦП?
Но к сожалению в этом то и проблема, что буффер заполняется случайным образом. Данные не чередуются по чётным и не чётным номерам массива. Бывает, что по 20 элементов подряд, заполнено каналом А, потом 100 элементов с канала Б, остальное заполняется А. Бывает что весь массив заполнен только одним каналом А или Б. Это совершенно случайная последовательность.
Re: stm32+AD9238. High-speed ADC. Каналы А и Б. Настройка DM
если я правильно понял исп. DCMI для этого дела:
синхронизация аппаратная,
нужен режим JPEG,
сигн.DCMI_HSYNC - в неактивный уровень (или разрешение данных),
сигн.DCMI_VSYNC - для запуска захвата, если DMA не успеет забрать данные, эту линию придется передернуть, или можно их объединить - функционирование то же.
задача DMA перебрасывать данные между буферами (DCMI->RAM), прилетит IT_OVR надо перезапустить заливку "кадра" (DCMI_VSYNC).
а за ногу PA3 так и не ответили
синхронизация аппаратная,
нужен режим JPEG,
сигн.DCMI_HSYNC - в неактивный уровень (или разрешение данных),
сигн.DCMI_VSYNC - для запуска захвата, если DMA не успеет забрать данные, эту линию придется передернуть, или можно их объединить - функционирование то же.
задача DMA перебрасывать данные между буферами (DCMI->RAM), прилетит IT_OVR надо перезапустить заливку "кадра" (DCMI_VSYNC).
а за ногу PA3 так и не ответили
Re: stm32+AD9238. High-speed ADC. Каналы А и Б. Настройка DM
a797945, Да, извините
PA3, настроен как output, и перд запуском приёма DCMI устанавливается в 0. По завершении приёма PA3, устанавливается обратно в 1.
То есть этот пин связан с HSYNC и VSYNC и управляет ими.
Я немного не понимаю, как работают HSYNC и VSYNC, просто понимаю, что вначале приёма следует опустить их, а вконце поднять) Это так же видно из скриншота, который вы прислали ранее.
Как они влияют на алгоритм приёма и передачи, тоже не понятно)
с jpeg пытаюсь разобраться, по этой статье. https://habr.com/ru/articles/482506/, но не понимаю, как это может помочь
PA3, настроен как output, и перд запуском приёма DCMI устанавливается в 0. По завершении приёма PA3, устанавливается обратно в 1.
То есть этот пин связан с HSYNC и VSYNC и управляет ими.
Я немного не понимаю, как работают HSYNC и VSYNC, просто понимаю, что вначале приёма следует опустить их, а вконце поднять) Это так же видно из скриншота, который вы прислали ранее.
Как они влияют на алгоритм приёма и передачи, тоже не понятно)
с jpeg пытаюсь разобраться, по этой статье. https://habr.com/ru/articles/482506/, но не понимаю, как это может помочь
Re: stm32+AD9238. High-speed ADC. Каналы А и Б. Настройка DM
а RM на свой МК открывали?
в видео режимах импульсы синхр. нужны чтоб раскладывать приходящую инфу по строкам и по кадрам, в режиме jpeg этой раскладки нет, но нужен спад по VSYNC для начала захвата "кадра", если dma не успеет выбрать буфер, захват прекратится до следующего VSYNC.
это из RM, как оно в живую не знаю.
Вы отладку можете смотреть? поставить точку останова и посмотреть содержимое регистров?
или глазами перепроверять код - что он все содержит, о чем сказано на словах. тогда нужен весь код с заголовочными файлами. правда у меня и куб не установлен, поэтому быстро разгребсти его портянки не смогу.
в видео режимах импульсы синхр. нужны чтоб раскладывать приходящую инфу по строкам и по кадрам, в режиме jpeg этой раскладки нет, но нужен спад по VSYNC для начала захвата "кадра", если dma не успеет выбрать буфер, захват прекратится до следующего VSYNC.
это из RM, как оно в живую не знаю.
Вы отладку можете смотреть? поставить точку останова и посмотреть содержимое регистров?
или глазами перепроверять код - что он все содержит, о чем сказано на словах. тогда нужен весь код с заголовочными файлами. правда у меня и куб не установлен, поэтому быстро разгребсти его портянки не смогу.
Re: stm32+AD9238. High-speed ADC. Каналы А и Б. Настройка DM
Я постараюсь все это сделать, но только уже в понедельник, сейчас нет доступа к проекту. Если будет не удачно, то попрошу помощи у вас
Re: stm32+AD9238. High-speed ADC. Каналы А и Б. Настройка DM
полагаю "вас" во множественном числе 
я не спец, да и в рабочее время доступа к компам и интернету не имею - совсем в другой области работаю
я не спец, да и в рабочее время доступа к компам и интернету не имею - совсем в другой области работаю
Re: stm32+AD9238. High-speed ADC. Каналы А и Б. Настройка DM
Добрый день, товарищи!
Извините, что так нагло пропал, являясь автором этой темы.
Пришлось убрать этот проект на дальнюю полку заняться другими делами. Но теперь пришлось вернуться обратно и продолжить размышления.
И не зря говорят, что если, что то не получается, надо сменить задачу, и потом вернуться к проблеме позже. Так и получилось. Переосмыслив, всё что было предложено и сделано ранее и заново поэкспериментировав пришёл к выводу и попал в точку....
Ранее, я предполагал, что требуется тактовый сигнал, который тактирует внешнее АЦП, увеличить в два раза, в соотношении с тактовым сигналом, который переключает каналы АЦП. И использовал для этого два отдельных таймера, предварительно синхронизировав их. И это не помогло, данные всё равно приходили не предсказуемо и складывались в массив рандомно.
Оказалось, что смена канала происходит по нарастанию сигнала, а не по нарастанию и спаду, как думал раньше. Для второго случая было бы достаточно увеличить частоту на 2. Но для первого случая, требуется увеличить частоту на 4. И вуаля
всё заработало. Данные кладутся в массив, аккуратно по очереди, в чётные данные с одного канала, в нечётные данные с другого канала.
Я надеюсь, что эта информация может кому то пригодиться. На данный момент в интернете не могу найти примеров с мультиплексированием каналов на этой микросхеме.
Спасибо всем, кто помогал!
Извините, что так нагло пропал, являясь автором этой темы.
Пришлось убрать этот проект на дальнюю полку заняться другими делами. Но теперь пришлось вернуться обратно и продолжить размышления.
И не зря говорят, что если, что то не получается, надо сменить задачу, и потом вернуться к проблеме позже. Так и получилось. Переосмыслив, всё что было предложено и сделано ранее и заново поэкспериментировав пришёл к выводу и попал в точку....
Ранее, я предполагал, что требуется тактовый сигнал, который тактирует внешнее АЦП, увеличить в два раза, в соотношении с тактовым сигналом, который переключает каналы АЦП. И использовал для этого два отдельных таймера, предварительно синхронизировав их. И это не помогло, данные всё равно приходили не предсказуемо и складывались в массив рандомно.
Оказалось, что смена канала происходит по нарастанию сигнала, а не по нарастанию и спаду, как думал раньше. Для второго случая было бы достаточно увеличить частоту на 2. Но для первого случая, требуется увеличить частоту на 4. И вуаля
Я надеюсь, что эта информация может кому то пригодиться. На данный момент в интернете не могу найти примеров с мультиплексированием каналов на этой микросхеме.
Спасибо всем, кто помогал!