• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе 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 или другого микроконтроллера
 
Сверху Снизу