Обсуждаем мат. алгоритмы работы с RGB панелями

Предлагаю здесь обсуждать алгоритмы обработки цветов, преобразований координат и прочее связанное с выводом на HUB75 RGB панели

Материалы по теме
LED dimming using Binary Code Modulation


Библиотеки для работы с RGB панелями:

Библиотекаплатформапримечание
DMD_STM32STM, RP2040автор на форуме @bort707
ESP32-HUB75-MatrixPanel-DMAESP32контрибьютор на форуме @vortigont

Проекты на форуме с поддержкой HUB75 панелей
WiFi лампа/гирлянда/информер ws2812/HUB75
пиксель-арт из вышивки
 

Комментарии

vortigont

★★★★★★✩
24 Апр 2020
1,022
542
Saint-Petersburg, Russia
Предлагаю здесь обсуждать алгоритмы обработки цветов, преобразований координат и прочее связанное с выводом на HUB75 RGB панели

Материалы по теме
LED dimming using Binary Code Modulation


Библиотеки для работы с RGB панелями:

Библиотекаплатформапримечание
DMD_STM32STM, RP2040автор на форуме @bort707
ESP32-HUB75-MatrixPanel-DMAESP32контрибьютор на форуме @vortigont

Проекты на форуме с поддержкой HUB75 панелей
WiFi лампа/гирлянда/информер ws2812/HUB75
пиксель-арт из вышивки
 
  • Лойс +1
Реакции: Divin

bort707

★★★★★★✩
21 Сен 2020
3,064
912
Сборка RP2040-Connect из отдельных плат RP2040 И ESP32

Общая идея вот отсюда Stm32-wifinina-with-esp32-wifi-co-processor

1. Устанавливаем библиотеку Adafruit/WiFiNINA

2. Прошиваем ЕСП32 прошивкой Adafruit/nina-fw (инструкцию по прошивке см в проекте STM32 + ESP32 по ссылке выше)

3. Подключение
C++:
RP2040                 ESP32

  16                    GPIO23
  18                    GPIO18
  19                    GPIO14
  26                    GPIO5
  27                    GPIO33
  28                      EN
4. Открываем пример ScanNetworks.ino к библиотеке WIFININA. Там в начале идет настройка пинов для разных плат, но подходящих нам нет:

C++:
// Configure the pins used for the ESP32 connection
#if defined(ADAFRUIT_FEATHER_M4_EXPRESS) || \
  defined(ADAFRUIT_FEATHER_M0) || \
  defined(ADAFRUIT_FEATHER_M0_EXPRESS) || \
  defined(ARDUINO_AVR_FEATHER32U4) || \
  defined(ARDUINO_NRF52840_FEATHER) || \
  defined(ADAFRUIT_ITSYBITSY_M0) || \
  defined(ADAFRUIT_ITSYBITSY_M4_EXPRESS) || \
  defined(ARDUINO_AVR_ITSYBITSY32U4_3V) || \
  defined(ARDUINO_NRF52_ITSYBITSY)
  // Configure the pins used for the ESP32 connection
  #define SPIWIFI       SPI  // The SPI port
  #define SPIWIFI_SS    13   // Chip select pin
  #define ESP32_RESETN  12   // Reset pin
  #define SPIWIFI_ACK   11   // a.k.a BUSY or READY pin
  #define ESP32_GPIO0   -1
#elif defined(ARDUINO_AVR_FEATHER328P)
  #define SPIWIFI       SPI  // The SPI port
  #define SPIWIFI_SS     4   // Chip select pin
  #define ESP32_RESETN   3   // Reset pin
  #define SPIWIFI_ACK    2   // a.k.a BUSY or READY pin
  #define ESP32_GPIO0   -1
#elif defined(TEENSYDUINO)
  #define SPIWIFI       SPI  // The SPI port
  #define SPIWIFI_SS     5   // Chip select pin
  #define ESP32_RESETN   6   // Reset pin
  #define SPIWIFI_ACK    9   // a.k.a BUSY or READY pin
  #define ESP32_GPIO0   -1
#elif defined(ARDUINO_NRF52832_FEATHER )
  #define SPIWIFI       SPI  // The SPI port
  #define SPIWIFI_SS    16   // Chip select pin
  #define ESP32_RESETN  15   // Reset pin
  #define SPIWIFI_ACK    7   // a.k.a BUSY or READY pin
  #define ESP32_GPIO0   -1
#elif !defined(SPIWIFI_SS)   // if the wifi definition isnt in the board variant
  // Don't change the names of these #define's! they match the variant ones
  #define SPIWIFI       SPI
  #define SPIWIFI_SS    10   // Chip select pin
  #define SPIWIFI_ACK    7   // a.k.a BUSY or READY pin
  #define ESP32_RESETN   5   // Reset pin
  #define ESP32_GPIO0   -1   // Not connected
#endif

Все это надо стереть или закомментировать и вставить вместо вот это:
C++:
#define SPIWIFI       SPI
#define SPIWIFI_SS    26   // Chip select pin
#define SPIWIFI_ACK   27   // a.k.a BUSY or READY pin
#define ESP32_RESETN   28   // Reset pin
#define ESP32_GPIO0   -1   // Not connected
Все, можно пробовать.
Питание ЕСП32 должно быть отдельным, RP2040 не тянет


Добавка
Сейчас вместо либы WIFININA появилась новая WIFININA-generic с поддержкой RP2040. Но в ней, по-моему, пины все равно нужно править.
 

vortigont

★★★★★★✩
24 Апр 2020
1,022
542
Saint-Petersburg, Russia
На RP2040 легко делается два параллельных выхода, чего ЕСП32 не может никак.
Вообще может, просто еще никто не реализовал. У меня были идеи как. i2s в есп32 поддерживает 8/16/24/32 бит. Т.е. можно выводить хоть 4 канала параллельно, лишь бы памяти и ног хватало. Даже в текущей 16 битной реализации можно сделать 2х канальный вывод если некритичные сигналы типа ОЕ, ЛАТ и адреса дергать по прерываниям (а не из ДМА), а освободившиеся ноги использовать для 2го канала цветов. Либу фаптастика если по-уму переписать она будет на порядок фичастее.
Но это не отменяет достоинство ПИО машины в РПшке.
 

bort707

★★★★★★✩
21 Сен 2020
3,064
912
@vortigont
В продолжение дискуссии хотел бы затронуть новые типы чипов для ХАБ панелей - те что со встроенной памятью, например ICN2053 или FM6353. Мне кажется эти драйвера - потенциальный прорыв именно для библиотек на основе микроконтроллеров, типа либы фаптастика или моей.
Ведь там достаточно один раз загрузить картинку и дальше драйвер рефрешит ее по битовым слоям и рядам сам, выдавая вплоть до 14-16 бит на цвет с частотами обновления несколько тыс герц. Таким образом снимается ограничение на пропускной канал матрицы и размер собираемого экрана определяется только доступной память контроллера.
Жаль только что производители секретят даташиты и добывать информацию приходится по крупицам. Но таких панелей все больше на рынке и уже появляются примеры кода для работы с такими драйверами. На гитхабе фаптастика есть дискуссия по этой теме.
 
  • Лойс +1
Реакции: vortigont

vortigont

★★★★★★✩
24 Апр 2020
1,022
542
Saint-Petersburg, Russia
да, занят был на той неделе совсем, потерял мысли.
Про новые типы чипов для этих панелей я слышал краем уха что появились буферизованные варианты. Оно было ожидаемо ибо из самого интерфейса уже выжали всё что могли. Было бы интересно посмотреть на это конечно, но ситуация со скрытием спецификаций рассраивает. Это не взлетит.
Я еще помню как возился с недокументированными 6124 (или как их там), у них уже тогда была аппаратная регулировака яркости токовым драйвером.
Я даже отреверсил 2/3 битов для её управления, но, блин, это жрёт столько личного времени с сомнительным результатом что второй раз я за это точно не возмусь. Не знаю довели ли её до ума в итоге хоть кто-нибудь или нет. А уже прошло года 3 наверное.
 

Брякомякс

★✩✩✩✩✩✩
14 Янв 2023
95
20
К слову говоря, про загрузку данных для буфера «по сетке». Для примера.
в тасмоте ограничение для функции webclient такое
  • Maximum response size is 32KB, requests are dropped if larger
и это при том, что это через Berry и виртуальную машину с байткодом.
но поддержки для hub75 там нету, только адресные сд.