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

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

Но когда загрузил пример из stm32f1 dmd_rgb работает некорректно

#define RGB80x40s10_sh     44      // 80x40 1/10 Shift
template<int COL_DEPTH>
class DMD_RGB_SHIFTREG_ABC<RGB80x40s10_sh, COL_DEPTH> : public DMD_RGB_BASE2<COL_DEPTH>
{
public:
  DMD_RGB_SHIFTREG_ABC(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:
 void set_mux(uint8_t curr_row) override {
        byte pin_DMD_A = this->mux_pins[0];
        byte pin_DMD_B = this->mux_pins[1];
        byte pin_DMD_C = this->mux_pins[2];
        // Just shift the row mux by one for incremental access
        digitalWrite(pin_DMD_B, HIGH);
        digitalWrite(pin_DMD_C, (curr_row == 0)); // Shift out 1 for line 0, 0 otherwise
        digitalWrite(pin_DMD_A, HIGH); // Clock out this bit
        digitalWrite(pin_DMD_A, LOW);
        digitalWrite(pin_DMD_B, LOW);
    }

  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 / this->DMD_PIXELS_ACROSS) * this->multiplex * this->DMD_PIXELS_ACROSS +
        (pol_y / this->nRows) * this->DMD_PIXELS_ACROSS + x % this->DMD_PIXELS_ACROSS;
    return base_addr;
  }
};

https://youtube.com/shorts/A9iFsOLXSl4?feature=share

Судя по вот этой строке вы используете какую-то старую версию. Какую?

Можно Вас попросить указать номер сообщения в ветке, где мы обсуждали вашу панель

Начало вроде там # 63

Вы не ответили, какую версию Вы библиотеки используете. В январе, когда мы с Вами начинали, актуальной была версия 0.9.5, сейчас уже 1.1.0
Версии 0.х.х и 1.х.х использует разный формат описания матриц. С вашими дефайнами когд даже компилироватся не должен.

Доброго дня .
Скачал последнюю версию с гитхаб DMD_STM32-dev-V2
Ругается на строку


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

wrong number of template arguments (2, should be 6)

Задайте дефайн для матрицы так:

#define RGB80x40_S10_sh 4,80,40,10,0

====исправление=====

Сорри, как-то упустил что у вас управление шифт-регистром. Тогда правильная строчка такая

#define RGB80x40_S10_sh     	3,80,40,10,0
template<int COL_DEPTH>
class DMD_RGB_SHIFTREG_ABC<RGB80x40_S10_sh, COL_DEPTH> : public DMD_RGB_BASE2<COL_DEPTH>
{
public:
  DMD_RGB_SHIFTREG_ABC(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:
 void set_mux(uint8_t curr_row) override {
        byte pin_DMD_A = this->mux_pins[0];
        byte pin_DMD_B = this->mux_pins[1];
        byte pin_DMD_C = this->mux_pins[2];
        // Just shift the row mux by one for incremental access
        digitalWrite(pin_DMD_B, HIGH);
        digitalWrite(pin_DMD_C, (curr_row == 0)); // Shift out 1 for line 0, 0 otherwise
        digitalWrite(pin_DMD_A, HIGH); // Clock out this bit
        digitalWrite(pin_DMD_A, LOW);
        digitalWrite(pin_DMD_B, LOW);
    }

  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 / this->DMD_PIXELS_ACROSS) * this->multiplex * this->DMD_PIXELS_ACROSS +
        (pol_y / this->nRows) * this->DMD_PIXELS_ACROSS + x % this->DMD_PIXELS_ACROSS;
    return base_addr;
  }
};

‘uint16 DMD_RGB_SHIFTREG_ABC<3, 80, 40, 10, 0, COL_DEPTH>::get_base_addr(int16, int16) [with int COL_DEPTH = 3; uint16 = short unsigned int; int16 = short int]’ marked ‘override’, but does not override

ошибка в стоке

uint16_t get_base_addr(int16_t x, int16_t y) override {
#define RGB80x40_S10_sh      3,80,40,10,61

 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->nRows) * this->x_len +
      (x / this->DMD_PIXELS_ACROSS) * this->multiplex * this->DMD_PIXELS_ACROSS +
        (pol_y / this->nRows) * this->DMD_PIXELS_ACROSS + x % this->DMD_PIXELS_ACROSS;
    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/1usEMZ_WHmk_YA?uid=218290814

тогда самое разумное - проверить заполнение. Потому что если заполнение ОК, то и текст должен работать.
Запустите заполнение и покажите как оно выглядит на видео. Код инициализации матрицы оставьте самый последний - тот что в #544

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

Затем также правая верхняя, затем левая нижняя , затем правая нижняя четверь

А весной как заполнялось - нормально, строка за строкой до конца?
матрица точно та же?

Пролистал ветку - последние Ваши сообщения #168 -169, где Вы отказались дальше настраивать панель, написав что уже все написали в СТМ32-Кубе

Если будем настраивать, тогда мне понадобится, чтобы вы сняли несколько тестов

Для начала поменяйте дефайн на

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

и снимите видео

(остальной код не трогайте)

Поменял, также по четвертям…

мне нужно видео

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

Спасибо. Видео (и предыдущее тоже) не удаляйте пока.
Мне нужно время.
Если получится, сделаю к вечеру, если нет - тогда в понедельник, у меня “инструменты” на работе.

@vadim_kkkk прошу прощения за задердку, что-то у меня не получается разобратся в Вашей панели.
Можно попросить еще потестировать?

Добавьте в начало кода такие строчки

#define RGB80x40_S10_sh0      3,80,40,10,0
#define RGB80x40_S10_sh1      3,80,40,10,1
#define RGB80x40_S10_sh2      3,80,40,10,2

и запишите видео тестов, подставляя эти дефайны в вызов класса DMD_RGB_SHIFTREG_ABC :

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