спасибо
Уже близко ![]()
Подумаю, напишу
Добавьте в начало скетча сразу после строки
#include "DMD_RGB.h"
такой кусок:
#define RGB64x32_S8_Eu057 3,64,32,8,58 // 64x32 1/8 Eugene057
template<int COL_DEPTH>
class DMD_RGB<RGB64x32_S8_Eu057, 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>(MUX_CNT, mux_list, _pin_nOE, _pin_SCLK, pinlist,
panelsWide, panelsHigh, d_buf, COL_DEPTH, SCAN, P_Width, P_Height)
{
this->fast_Hbyte = false;
this->use_shift = false;
}
// Fast text shift is disabled for complex patterns, so we don't need the method
void disableFastTextShift(bool shift) override {}
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 / 16) * this->multiplex * 16;
if (pol_y / this->nRows) base_addr += x % 16;
else base_addr += (16 + x % 16);
return base_addr;
}
};
Ошибка компиляции:
Compilation error: ‘MUX_CNT’ was not declared in this scope
#define RGB64x32_S8_Eu057 3,64,32,8,58 // 64x32 1/8 Eugene057
template<int COL_DEPTH>
class DMD_RGB<RGB64x32_S8_Eu057, 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, d_buf, COL_DEPTH, 8, 64, 32)
{
this->fast_Hbyte = false;
this->use_shift = false;
}
// Fast text shift is disabled for complex patterns, so we don't need the method
void disableFastTextShift(bool shift) override {}
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 / 16) * this->multiplex * 16;
if (pol_y / this->nRows) base_addr += x % 16;
else base_addr += (16 + x % 16);
return base_addr;
}
};
Результат
https://youtu.be/BjdQDKj6AzA
строчку 23 моего предыдущего сообщения замените на это:
uint16_t base_addr = (pol_y % this->nRows) * this->x_len + (x / 16) * this->multiplex * 16;
Что получилось:
https://youtu.be/Dats9-Rlpj8
Ну значит не прокатило. Завтра еще попробую. Предлагаю в почту перейти.
Здравствуйте товарищи форумчане! Не могу запустить две матрицы.
P4-2121-64X32-16S-HL1, P4D-1921-320X160-10S, обе собранны на ICN2037.
Контроллер STM32F103C8T6, программирую и на serial PORT и на ST-LINK.
Без успехов. Вот кусок кода
#include "DMD_RGB.h"
// Fonts includes
#include "st_fonts/UkrRusArial14.h"
#pragma GCC diagnostic ignored "-Wnarrowing"
#pragma GCC diagnostic ignored "-Woverflow"
#include "gfx_fonts/GlametrixLight12pt7b.h"
#include "gfx_fonts/GlametrixBold12pt7b.h"
#pragma GCC diagnostic warning "-Wnarrowing"
#pragma GCC diagnostic warning "-Woverflow"
//Number of panels in x and y axis
#define DISPLAYS_ACROSS 1
#define DISPLAYS_DOWN 1
// Enable of output buffering
// if true, changes only outputs to matrix after
// swapBuffers(true) command
// If dual buffer not enabled, all output draw at matrix directly
// and swapBuffers(true) cimmand do nothing
#define ENABLE_DUAL_BUFFER false
// ==== DMD_RGB pins ====
// mux pins - A, B, C... all mux pins must be selected from same port!
#define DMD_PIN_A PB6
#define DMD_PIN_B PB5
#define DMD_PIN_C PB11
#define DMD_PIN_D PB10
#define DMD_PIN_E PB8
// put all mux pins at list
uint8_t mux_list[] = { DMD_PIN_A , DMD_PIN_B , DMD_PIN_C , DMD_PIN_D , DMD_PIN_E };
// pin OE must be one of PB0 PB1 PA6 PA7
#define DMD_PIN_nOE PB0
#define DMD_PIN_SCLK PB7
// Pins for R0, G0, B0, R1, G1, B1 channels and for clock.
// By default the library uses RGB color order.
// If you need to change this - reorder the R0, G0, B0, R1, G1, B1 pins.
// All this pins also must be selected from same port!
uint8_t custom_rgbpins[] = { PA15, PA0,PA1,PA2,PA3,PA4,PA5 }; // CLK, R0, G0, B0, R1, G1, B1
// Fire up the DMD object as dmd<MATRIX_TYPE, COLOR_DEPTH>
// We use 64x32 matrix with 16 scans and 4bit color:
DMD_RGB <RGB80x40_S10_LNikon, COLOR_4BITS> dmd(mux_list, DMD_PIN_nOE, DMD_PIN_SCLK, custom_rgbpins, DISPLAYS_ACROSS, DISPLAYS_DOWN, ENABLE_DUAL_BUFFER);
// other options are:
// <RGB32x16plainS8> - 32x16 matrix with 8scans
// <RGB80x40plainS20> - 80x40 matrix with 20scans
// <RGB64x64plainS32> - 64x64 matrix with 32scans
// Color depth - <COLOR_4BITS_Packed>, <COLOR_4BITS> or <COLOR_1BITS>
Здравствуйте.
На любой панели как минимум два разных типа чипов на задней стороне. Чтобы уверенно работать с матрицей, необходимо знать какие еще микросхемы на каждой матрице, кроме icn2037.
Уточните характеристики панелей - первая 64х32 s16, вторая 40х20 s10?-если да, тут проблем быть не должно
Здравствуйте. У меня примерно такая же ситуация с заполнением матрицы. Матрица 64*32 сканирование 1/8. Я также при запуске на Bluepill stm32f103c8t6 получаю только бегущие 5-8 строку и 13-16 строку. Потом через некоторое время начинает бежать нижняя половина по такому же принципу. Потом это какое-то время стоит, убегает все вместе и начинается заново. Прибегает верхняя половина (5-8 строка и 13-16 строка) стоит какое-то время и убегают вместе.
/*--------------------------------------------------------------------------------------
Demo for RGB panels
DMD_STM32a example code for STM32F103xxx board
Pattern test for 32x16 1/2 1/4 RGB panels
------------------------------------------------------------------------------------- */
#include "DMD_RGB.h"
#define RGB64x32_S8_Eu057 3,64,32,8,58 // 64x32 1/8 Eugene057
template<int COL_DEPTH>
class DMD_RGB<RGB64x32_S8_Eu057, 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, d_buf, COL_DEPTH, 8, 64, 32)
{
this->fast_Hbyte = false;
this->use_shift = false;
}
// Fast text shift is disabled for complex patterns, so we don't need the method
void disableFastTextShift(bool shift) override {}
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 / 16) * this->multiplex * 16;
if (pol_y / this->nRows) base_addr += x % 16;
else base_addr += (16 + x % 16);
return base_addr;
}
};
//Number of panels in x and y axis
#define DISPLAYS_ACROSS 1
#define DISPLAYS_DOWN 1
// Output buffering - false
#define ENABLE_DUAL_BUFFER false
// ==== DMD_RGB pins ====
// mux pins - A, B, C... all mux pins must be selected from same port!
#define DMD_PIN_A PB6
#define DMD_PIN_B PB5
#define DMD_PIN_C PB4
#define DMD_PIN_D PB3
#define DMD_PIN_E PB8
// put all mux pins at list
uint8_t mux_list[] = { DMD_PIN_A , DMD_PIN_B , DMD_PIN_C , DMD_PIN_D , DMD_PIN_E };
// pin OE must be one of PB0 PB1 PA6 PA7
#define DMD_PIN_nOE PB0
#define DMD_PIN_SCLK PB7
// Pins for R0, G0, B0, R1, G1, B1 channels and for clock.
// By default the library uses RGB color order.
// If you need to change this - reorder the R0, G0, B0, R1, G1, B1 pins.
// All this pins also must be selected from same port!
uint8_t custom_rgbpins[] = { PA15, PA0,PA1,PA2,PA3,PA4,PA5 }; // CLK, R0, G0, B0, R1, G1, B1
// Fire up the DMD object as dmd<MATRIX_TYPE, COLOR_DEPTH>
// For pattern testing use one of matrix below:
// RGB32x16plainS4 - 32x16 1/4 Binary mux
// RGB32x16plainS4_DIRECT - 32x16 1/4 DIRECT mux
// RGB32x16plainS2_DIRECT - 32x16 1/2 Binary mux
DMD_RGB <RGB64x32_S8_Eu057 , COLOR_4BITS> dmd(mux_list, DMD_PIN_nOE, DMD_PIN_SCLK, custom_rgbpins, DISPLAYS_ACROSS, DISPLAYS_DOWN, ENABLE_DUAL_BUFFER);
uint16_t bg = 0; // background - black
uint16_t fg = 0; // foreground
void setup(void)
{
dmd.init();
fg = dmd.Color888(0, 255, 0);
dmd.setBrightness(10);
}
void loop(void) {
// fill the matrix with points row by row
for (int i = 0; i < dmd.height(); i++) {
for (int j = 0; j < dmd.width(); j++) {
dmd.drawPixel(j,i, fg);
delay(30);
}
}
// clear the screen
dmd.fillScreen(bg);
}
вот эту строку менял на все возможные варианты какие только были в файле DMD_panel_Templates.h и включая RGB64x32_S8_pt1 и RGB64x32_S8_pt2
Здравствуйте
Стандартная просьба - пожалуйста изучите обратную сторону панели и выпишите обозначения всех микросхем, которые там установлены. Их должно быть как минимум два вида разных, чаще 3 или 4.
Так же хорошее четкое фото оборота матрицы тоже может пригодится.
первый чип который мне удалось разглядеть это sm16208sj остальные покрыты лаком, пока не могу разглядеть маркировку
это хорошая новость, основной драйвер на панели стандартный. Но нужно еще найти чип мультиплексора, чтобы понимать, как работать с матрицей.
Ок, это стандратный “3-to-8” мультиплексор.
С таким набором панель должна запускаться без проблем.
Запишите, пожалуйста, видео заполнения матрицы с использованием шаблонов
#define RGB64x32_S8_pt1 3,64,32,8,1 // 64x32 1/8 pt1
и
#define RGB64x32_S8_pt2 3,64,32,8,2 // 64x32 1/8 pt2


