DMD_STM32 - библиотека DMD матриц для СТМ32 и RP2040

Сейчас попробую
А здесь менять надо, а то ошибку выдаёт

 template<int COL_DEPTH>
class DMD_RGB RGB80x40_S10_sh0, COL_DEPTH> : public DMD_RGB_BASE2<COL_DEPTH>
{

нет, ни в коем случае

А здесь что писать

class DMD_RGB RGB80x40_S10_sh0, COL_DEPTH> : public DMD_RGB_BASE2<COL_DEPTH>

А то я уже старое стёр
Если пишу

class DMD_RGB <RGB80x40_S10_sh, COL_DEPTH> : public DMD_RGB_BASE2<COL_DEPTH>

Ощибка
‘RGB80x40_S10_sh’ was not declared in this scope

ничего.
Смотрите - если ориентироватся по коду из #544 - все строчки начиная с 3 по 25 можете просто удалить.

0
https://disk.yandex.ru/d/Daerw7yMxFksLg?uid=218290814
1
https://disk.yandex.ru/d/xNyeYxsli9XfmA?uid=218290814
2
https://disk.yandex.ru/d/nSfBTLjqzDSWpg?uid=218290814

попробуйте вот это

#define RGB80x40_S10_sh      3,80,40,10,62

 template<int COL_DEPTH>
class DMD_RGB <RGB80x40_S10_sh, COL_DEPTH> : public DMD_RGB_BASE2<COL_DEPTH>
{
public:
  DMD_RGB(uint8_t* mux_list, byte _pin_nOE, byte _pin_SCLK, uint8_t* pinlist,
    byte panelsWide, byte panelsHigh, bool d_buf = false) :
    DMD_RGB_BASE2<COL_DEPTH>(3, mux_list, _pin_nOE, _pin_SCLK, pinlist,
      panelsWide, panelsHigh, false, COL_DEPTH, 10, 80, 40)
  {}

protected:

  uint16_t get_base_addr(int16_t &x, int16_t &y) override {
    this->transform_XY(x, y);
    uint8_t pol_y = y % this->pol_displ;
    x += (y / this->DMD_PIXELS_DOWN) * this->WIDTH;
   uint16_t base_addr = (pol_y / this->multiplex) * this->x_len +
			(x / 4) * this->multiplex * 4 +
			(pol_y % this->multiplex) * 4 + x % 4;
    return base_addr;
  }
};


DMD_RGB_SHIFTREG_ABC <RGB80x40_S10_sh, COLOR_4BITS_Packed> dmd(mux_list, DMD_PIN_nOE, DMD_PIN_SCLK, custom_rgbpins, DISPLAYS_ACROSS, DISPLAYS_DOWN, ENABLE_DUAL_BUFFER);

https://disk.yandex.ru/d/fqA9bd41hbQ6Og?uid=218290814

Вадим, лучше заполнение, по этому видео ничего не понятно, кроме факта того, что не работает.

https://disk.yandex.ru/d/iPbU_OGNqmVK6g?uid=218290814

Отлично, приближаемся к развязке
Функцию base_addr в предыдущем коде замените вот на эту:

  uint16_t get_base_addr(int16_t &x, int16_t &y) override {
    this->transform_XY(x, y);
    uint8_t pol_y = y % this->pol_displ;
    x += (y / this->DMD_PIXELS_DOWN) * this->WIDTH;
   
   uint16_t base_addr = (pol_y % this->nRows) * this->x_len +
           (x / 4) * this->multiplex * 4 +
           (pol_y / this->nRows) * 4 + x % 4;
    return base_addr;
  }

Видео писать не буду , заполняется построчно с верху вниз
Но тестовый скетч всё равно идёт некорректно…

Или видео тестового скетча записать ??

https://disk.yandex.ru/d/EwCO7UgQEmR1AQ?uid=218290814

Начиная с 15й секунды и почти до конца текст показывается верно, есть только много шумов и наводок. Из этого следует что преобразование координат правильное.

Что касается наводок и того, что картинка “рассыпается” - это почти наверняка проблемы контактов. Из-за высоких частот подключение матрицы очень чувствительно к надежности соединений. Не используйте дюпонтовские перемычки - с ними невозможно добится качественного контакта. Используйте мнопиновые разъемы с плотной посадкой и пайку.

(добавка) Некоторые матрицы не воспринимают логический сигнал уровня 3.3в. Для таких нужен конвертер уровней на все 14 линий разъема HUB75

Хорошо. спасибо.
У меня действительно от Blue Pill дюпонтовские перемычки длинные, а после них ещё шлейф сантиметров 30…

К празднику :slight_smile:
Добавил новый пример - многоцветные строчки и бегущая строка.

examples/STM32F4_RP2040/dmd_multicolor_text.ino

1 лайк

Всем доброго дня!

У меня совсем появилась совсем непонятная панель. Испробовал все шаблоны, но без результата :frowning:
Qiangli Q3 PRO, 104x52, 13 по данным на сайте вроде такие параметры.
Подключения все вроде правильные.
Шаблоны от RGB64x32_S8_Eu057 и RGB104x52_S13_Craftish вроде немного подходят, но все равно не работают.
Использую BluePill STM32F103C8.
Ножки подлючал как на примерах.
Некоторые ножки указанные на шелкографии идут к земле (DI, D).
Думаю плата использует только A,B,C.




Буду рад любой помощи.

Драйвер SM16389 - это драйвер с памятью, работает совсем на иных принципах, нежели традиционные панели. Запустить его удаленно шансов нет.
Если у вас таких панелей много, то можно попробовать воткнуть панель в китайский лед-контроллер и посмотреть обмен данными логик-анализатором. Но это дело не быстрое и, как уже сказал. из-за одной панели смысла не имеет.

На всякий случая посмотрите обозначение микросхем, что я обвел синим и красным

SM16389SC и
SM5368PF

ну значит наклейка на матрице не врет.
Шансов мало, но все попробуйте вот так - возьмите пример
dmd_rgb_pattern_test.ino

и строчку инициализации класса матрицы в примере поменяйте вот на эти две:

#define RGB104x52_S13_kroxus	 3,104,52,13,1
DMD_RGB_SHIFTREG_ABC <RGB104x52_S13_kroxus, COLOR_4BITS_Packed> dmd(mux_list, DMD_PIN_nOE, DMD_PIN_SCLK, custom_rgbpins, DISPLAYS_ACROSS, DISPLAYS_DOWN, ENABLE_DUAL_BUFFER);

Если что-то заработает - на матрице один за другим должны загораться пиксели. Снимите этот процесс на видео - достаточно 5-6 строчек - и выложите сюда.

PS пины подключения в примере не забудьте поправить на те что у вас в схеме)

Тишина :frowning: