• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Считывание композитного видео(аналогового сигнала) в цифровой(буфер для хранения видео-кадра) через АЦП

srakatan

New member
Я пытаюсь реализовать считывание композитного видео на плату ESP32-wroom через АЦП. Пока что я понимаю только что на пин поступает какое-то значение от 0 до 4096. подскажите, пожалуйста, как или с помощью чего можно дальше обрабатывать эти значения. Я искал что-то наподобии обработчика SVBC-сигнала но так ничего полезного и не нашел.
 

srakatan

New member
Камера выдает значение в аналоговом формате (пока что разрешение 1280х720, что буду переделывать на более меньшее). Как я понимаю АЦП в ESP32 сможет обработать в лучшем случае до 15 кадров с видеопотока. Я пока что пытаюсь прочитать 1 кадр из аналогового значения в цифровое, ничего кроме прямого считывания значения с канала и записи в массив (типа short) я не придумал, но это не особо правильно как я думаю. Подскажите, пожалуйста, если знаете как или с помощью чего обрабатывать входящий аналоговый сигнал в буффер кадра.
 

pvvx

Активный участник сообщества
Документация ESP32:
1734131959510.png
Реальная Максимальная частота дискретизации с АЦП в режиме DMA у ESP32

15 кадров * 1280 точек * 720 линий -> без учета видео синхронизации требуется ADC от 13824000 sps минимум. Т.е. для кривенькой оцифровки нужен ADC от 20 Msps

5 кадров * 320 точек * 240 линий -> без учета видео синхронизации требуется ADC от 384000 sps минимум. Т.е. для кривенькой оцифровки нужен ADC от 0.5 Msps
 

pvvx

Активный участник сообщества
Один кадр от ADC при разрешении 320x240 8 бит составит 100 Кбайт. При 5 кадрах в секунду поток для обработки будет уже 0.5 Мбайт.
Куда вы их запихнете, когда их будет разгребать CPU, куда вы этот поток сольете из чипа?
Даже если поставить внешний ADC - ничего хорошего на ESP32 не выйдет - не успеет обработать.
 

srakatan

New member
Ознакомьтесь как это выходит на более производительном MCU с нормальным линейным и малошумным ADC (в отличии от дурного ADC в ESP32) : https://habr.com/ru/articles/245511/
А если в памяти хранить лишь 1 кадр который и будет обрабатываться и просто замещаться по окончанию работы с ним, что-то может выйти?
 

pvvx

Активный участник сообщества
Если нужен мутный и очень шумный кадр с низким разрешением - это сделать на ESP32 возможно.
Качество оцифровки будет менее 5 бит - остальное = шум. Плюс джиттер и сдвиг горизонтальных линий, если не лепить специальной схемы выборки синхроимпульсов...
При этом писать обработку придется на ассемблере или на чистом СИ. И никаких WiFi во время оцифровки.
 

pvvx

Активный участник сообщества
И зачем мучаться, если существуют дешевые модули сетевых видеорегистраторов?
Пример:
https://aliexpress.ru/item/1005005890841490.html 4 входа 6 форматов: XVI/AHD/TVI/CVI/CVBS/IP.
Можно найти и дешевле... Но даже эта сумма будет меньше, чем мучения с ESP32.
 

srakatan

New member
Если нужен мутный и очень шумный кадр с низким разрешением - это сделать на ESP32 возможно.
Качество оцифровки будет менее 5 бит - остальное = шум. Плюс джиттер и сдвиг горизонтальных линий, если не лепить специальной схемы выборки синхроимпульсов...
При этом писать обработку придется на ассемблере или на чистом СИ. И никаких WiFi во время оцифровки.
А если бы я все-таки попробовал этот способ, то как можно было бы интерпретировать входящий аналоговый сигнал. Я не могу ничего придумать кроме заполнения буфера [320x240] в цикле с помощью analogRead(). Есть ли способ делать это проще?
 

srakatan

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

pvvx

Активный участник сообщества
Берете https://www.espressif.com/sites/default/files/documentation/esp32_technical_reference_manual_en.pdf . Изучаете всё, и подробнее секцию "29 On-Chip Sensors and Analog Signal Processing".
Одновременно изучаете как работает процессор Xtensa® Instruction Set Architecture (ISA) и специфику архитектуры ESP32.
Далее на CИ, но лучше с включением asm, пишите непрерывный прием c ADC.
Отлаживаете. Затем интегрируете полученный код в ESP-IDF с остальными, нужными вам функциями.

Ардуино в этом деле никак вам не поможет. Оно создано для создания примеров мигания светодиодом в кружке дошкольников.
Входящие в ESP-IDF функции работы с ADC так же не позволяют использовать ADC и CPU/DMA по максимуму.
 

pvvx

Активный участник сообщества
Можно зайти и с другой стороны - изучить функции работы с ADC в ESP-IDF и оптимизировать с адаптацией под вашу задачу.
Для этого вам будет необходимо изучить весь ESP-IDF и его внутренние тонкости.
Тут уж как вам нравится - ковыряться в чужом или слепить своё. Обычно изучать чужое дольше и знаний дает меньше, плюс интегрирует в вашу голову неправильные чужие подходы сделанные по причине не компетенции и/или по принципу и "так сойдет". И тогда, в оcновном, вам придется бороться с этой всей фигней в ESP-IDF, а не просто написать правильно.
 

nikolz

Well-known member
Я хочу научиться именно обрабатывать сигнал такого рода в буффер, который бы содержал кадр некоего видеопотока, и впоследствии выводился на экран аналогового тв-выхода, но не могу найти способов как это можно сделать. Везде где я искал говорят, что это возможно сделать, но не понятно как...
Начните с изучения формата кадра. Научится его обрабатывать проще на ПК написав прогу для работы с Web камерой. Когда все будет понятно, напишите прогу для ESP32 или другого микроконтроллера
 
Сверху Снизу