И снова Здравствуйте.
Теперь вопрос по Вашей библиотеке, последний раз мы добились что на моей матрице заполнялись последовательно четыре области экрана.
Но когда загрузил пример из 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;
}
};
Вы не ответили, какую версию Вы библиотеки используете. В январе, когда мы с Вами начинали, актуальной была версия 0.9.5, сейчас уже 1.1.0
Версии 0.х.х и 1.х.х использует разный формат описания матриц. С вашими дефайнами когд даже компилироватся не должен.
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
тогда самое разумное - проверить заполнение. Потому что если заполнение ОК, то и текст должен работать.
Запустите заполнение и покажите как оно выглядит на видео. Код инициализации матрицы оставьте самый последний - тот что в #544
Спасибо. Видео (и предыдущее тоже) не удаляйте пока.
Мне нужно время.
Если получится, сделаю к вечеру, если нет - тогда в понедельник, у меня “инструменты” на работе.