Menu

Tree [ba0d02] main /
 History

HTTPS access


File Date Author Commit
 2_PatternPlasma 2023-05-31 LAutour LAutour [60c9c1] Update 2_PatternPlasma.ino
 ESP32-HUB75-MatrixPanel-DMA-config.cpp 2023-05-31 LAutour LAutour [b1d07f] Update ESP32-HUB75-MatrixPanel-DMA-config.cpp
 ESP32-HUB75-MatrixPanel-DMA-config.h 2023-06-10 Westworld Westworld [7dbd3c] allow serial debug disable
 ESP32-HUB75-MatrixPanel-DMA-draw.cpp 2022-11-07 LAutour LAutour [ab6cb1] Add files via upload
 ESP32-HUB75-MatrixPanel-DMA-icn2053.cpp 2023-06-10 Westworld Westworld [7dbd3c] allow serial debug disable
 ESP32-HUB75-MatrixPanel-DMA-icn2053.h 2022-11-07 LAutour LAutour [ab6cb1] Add files via upload
 ESP32-HUB75-MatrixPanel-DMA-leddrivers.cpp 2023-06-26 LAutour LAutour [ba0d02] Update ESP32-HUB75-MatrixPanel-DMA-leddrivers.cpp
 ESP32-HUB75-MatrixPanel-DMA-leddrivers.h 2023-06-02 LAutour LAutour [653148] Update ESP32-HUB75-MatrixPanel-DMA-leddrivers.h
 ESP32-HUB75-MatrixPanel-DMA-lowdraw.cpp 2022-11-07 LAutour LAutour [ab6cb1] Add files via upload
 ESP32-HUB75-MatrixPanel-DMA-types.h 2023-05-31 LAutour LAutour [da1fa3] Update ESP32-HUB75-MatrixPanel-DMA-types.h
 ESP32-HUB75-MatrixPanel-DMA.h 2022-11-07 LAutour LAutour [ab6cb1] Add files via upload
 README.md 2022-11-07 LAutour LAutour [2619e6] Update README.md
 color-convert.cpp 2022-11-07 LAutour LAutour [ab6cb1] Add files via upload
 color_convert.h 2022-11-07 LAutour LAutour [ab6cb1] Add files via upload
 esp32_i2s_parallel_v2.cpp 2022-11-07 LAutour LAutour [ab6cb1] Add files via upload
 esp32_i2s_parallel_v2.h 2022-11-07 LAutour LAutour [ab6cb1] Add files via upload
 library.json 2023-06-10 Westworld Westworld [7dbd3c] allow serial debug disable
 Диаграмма-префикс.jpg unknown
 Диаграмма-строка.jpg unknown
 Диаграмма.jpg unknown

Read Me

ESP32-HUB75-MatrixPanel-DMA-ICN2053

Полностью переделанная библиотека на ESP32-HUB75-MatrixPanel-I2S-DMA (взят принцип) под ICN2053 (FM6353), и в отличии от ICN2053_ESP32_LedWall (взято число тактов OE для переключения строк) не потребляет все ресурсы ядра на прямой вывод в порты GPIO. Все параметры регистров конфигурации ICN2053 выдраны из программы LEDVISION для HUB75 контроллера.

Пока поддерживаются только драйверы ICN2053 и аналоги: FM6353.

Принцип работы библиотеки:
ICN2053 требует по 16 бит на каждый пиксел. С учетом что на каждые 2 бита пикселя требуется 1 слово (2 байта) DMA буфера - памяти в ESP32, если использовать полностью метод из ESP32-HUB75-MatrixPanel-I2S-DMA, то одна панель съест почти всю DMA память. Поэтому для изображения создается отдельный простой видео-буфер с нужной битностью (без необходимости поддержки DMA), а для DMA вывода выделяется буфер всего на несколько строк (1, 2 или 4). Готовность DMA канала для подготовки новых строк производится по DMA прерыванию.
Так как драйвер ICN2053 уже сам по себе содержит двойной буфер строк для двух кадров, а заполнение драйвера ведется в теневой буфер, то задержки с выводом влияют только на частоту смены кадров.
Переключение буферов в ICN2053 буферов произовится DMA посылкой буфера префикса, содержащего команды и значений управляющих регистров для ICN2053 (регистры последовательно чередуются с каждой новый отправкой префикса).
Каждая отправка DMA строк или префикса заканчевается зацикленной отправкой буфера суффикса, содержащего простой перебор адресов строк матрицы и наборов импульсов OE для переключения памяти строк в ICN2053. Начало перебора строк также содержится в буферах строк и префикса, поэтому их переход в суффикс происходит по смещению в последнем, чтобы перебор строк был непрерывным.
Примечание: префикс и суффикс - потому-что подобным образом шли управляющие пакеты данных (в начале кадра и в конце ) у контроллера HUB75, но по факту в библиотеке prefix будет идти обычно после строк.
Отправка буферов через DMA производится через наборы DMA дескрипторов. Для префикса и строк используется по одному DMA набору на буфер, буфер суффикса имеет два набора DMA дескрипторов, так как с окончания одного набора будет производится переход на вывод строк\префикса, а другой закольцовывается как конечный(и так попеременно).

Для уменьшения задержек вывода кадров (каждое заполнение DMA буфера строк из видео буфера занимает несколько милисекунд) опционально предусмотрены возможности:
1. двойной видеобуфер - работает стандартно, рисуем в одном буфере, выводим другой
2. двойной буфер DMA строк (следующая готовится не дожидаясь вывода предыдущей) - немного сокращает задержки на выводах суффикса, зависит от скорости отрисовки нового кадра, размера буфера DMA строк (2,4 строки), частоты шины DMA, и в каком месте суффикса заканчивается вывод строк.

Другие особенности:
- так как драйвера ICN2053 имеют встроенную память, вывод изображения на матрицу всегдла производится как при двойной видео-буферизации с вызовом функции отправки\смены кадра.
- Рабочая скорость DMA не более 13 МГц. Болше начинабтся проблемы с DMA или его прерываниями (по логическому анализатору исчезает часть данных в пакетах на HUB-75).
- Так скорость перебора строк зависит только от числа строк в одной панели и частоты DMA, то уже на 5Мгц DMA скорость обновления изображения около 1кГц
- Предельная скорость смены кадров для четырех панелей 64x32 около 30Гц, плазма демо с двойной буферизацией дает 20Гц
- Библиотека теоретически поддерживает разную битность видеобуфера, но оставлена реализация только 16 бит, как оптимальная для adafruit_gfx, другие битности можно реализовать через свои буфера, функции отрисовки прямоугольника и передачи цвета пикселов в подготовку DMA строки.
Примечание: так как подготовка DMA строки производится в обработке прерывания, то есть огранчения на ее длительность (увеличение размера буфера DMA строк увеличивает длительность обработка прерывания)
- Поддержка драйверов без встроеной памяти лишь предусмотрена, но не реализована (простой копипакст из ESP32-HUB75-MatrixPanel-I2S-DMA не пройдет)
- Отрисовка для виртуальной матрицы(ESP32-VirtualMatrixPanel-I2S-DMA) встроена в MatrixPanel_DMA, и используется автоматически
- параметры матрицы либо задаются константами в ESP32-HUB75-MatrixPanel-DMA-config.h, либо через передачу своей стркутуры hub75_cfg_t
- параметры драйверов можно просмотреть и некоторые изменить в ESP32-HUB75-MatrixPanel-DMA-leddrivers.h
- для отрисовки добавленые режимы зеркалирования по осям и повороты на все углы кратные 90 градусам.

P.S.
С наворотами C++ не дружу, код по возможности в Паскаль-стиле, оптимизации компиляторов под микроконтроллеры не доверяю - поэтому многие базовые вещи ESP32-HUB75-MatrixPanel-I2S-DMA реализованы по другому.

Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.