I tried the code example.
and a code with dmd_rgb it works for panel containing DP3153S+RUL5158D but not DP3153S+DP32020A-B
The DP32020A is NOT a standard 595 shift register mux. It’s a serial decoder with its own unique protocol. It has three control pins: DIN, DCK, and RCK — not a simple shift register clock/data/latch like a 74HC595. The library’s DMD_MUX_TYPE_SHIFTREG is designed for standard 595-type chips, not this special serial decoder protocol.
#include “DMD_RGB.h”
#include “st_fonts/UkrRusArial14.h”
#define DISPLAYS_ACROSS 1
#define DISPLAYS_DOWN 1
#define ENABLE_DUAL_BUFFER false
// RP2040 pins
// For SHIFTREG mux, still define A, B, C consecutively
#define DMD_PIN_A 6
#define DMD_PIN_B 7
#define DMD_PIN_C 8
uint8_t mux_list = { DMD_PIN_A, DMD_PIN_B, DMD_PIN_C };
#define DMD_PIN_nOE 22
#define DMD_PIN_SCLK 11
// CLK, R0, G0, B0, R1, G1, B1
uint8_t custom_rgbpins = { 10, 0, 1, 2, 3, 4, 5 };
// Standard DMD_RGB class (LS3515S is a standard driver, not SPWM)
DMD_RGB <RGB32x16plainS8, COLOR_4BITS> dmd(
mux_list, DMD_PIN_nOE, DMD_PIN_SCLK, custom_rgbpins,
DISPLAYS_ACROSS, 2,
ENABLE_DUAL_BUFFER);
DMD_Standard_Font UkrRusArial_F(UkrRusArial_14);
void setup() {
dmd.init();
// DP32020 is a 595-type shift register mux - THIS IS THE KEY LINE
dmd.configure_multiplexer(DMD_MUX_TYPE_SHIFTREG);
dmd.setBrightness(200);
}
void loop() {
// Solid color test
dmd.fillScreen(dmd.Color888(255, 0, 0));
dmd.swapBuffers(true);
delay(1000);
dmd.fillScreen(dmd.Color888(0, 255, 0));
dmd.swapBuffers(true);
delay(1000);
dmd.fillScreen(dmd.Color888(0, 0, 255));
dmd.swapBuffers(true);
delay(1000);
dmd.clearScreen(true);
dmd.selectFont(&UkrRusArial_F, 3);
dmd.setTextColor(dmd.Color888(255, 255, 255), 0);
dmd.drawMarqueeX("HELLO!", -1 * dmd.stringWidth("HELLO!"), 0);
for (int i = 0; i < 300; i++) {
dmd.stepMarquee(-1, 0);
dmd.swapBuffers(true);
delay(40);
}
}
Please correct me if I am wrong.