Qiangli 32x32 P6 panel with DP3153S +DP32020A-B - no output on RP2040

Panel specifications:

  • Size: 32x32 pixels (P10 indoor module)

  • Driver ICs: DP3153S(LED driver) + DP32020A-B (row decoder)

  • Address lines: A, B, C connected; D pin present but grounded on panel

  • HUB75 interface (standard 16-pin connector)

  • Photo of back: [attach your photo]

Please show a clear photo of the entire panel (rear side) and enlarge this label that I could to read the text:

Please find attached.

If I see correctly, the label informs us that the driver chip is DP3153 rather than DP5135.
I know nothing about that driver.

Perhaps it is just a typo. What are the indexes on the chips itself?

I apologise; it is a typo from my end. It is DP3153S.
lipuxin.com/_120250225/1820068744.pdf
Here is the IC detail. Would really appreciate if you could help me out with this. as none of the P6 panels in India have had the compatible chips like before.

According the chip specification it seems to be very similar to DP3264 driver,There’s support for dp3264 in the library, although the settings may vary. Try running the library SPWM example for the 3264 chip on your panel.

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.

Ok.
Several users have already successfully used DMD_MUX_TYPE_SHIFTREG for DP32020 line switcher panels. But if you find it inappropriate, you’re completely free to write your own code for this multiplexer. The datasheet for DP32020 is freely available.
I’ll gladly accept PR for library corrections.

As about your code, despite my advice you used a standard DMD_RGB class:

However, your panel uses DP3153, not LS3515. You yourself sent me a link to the description of DP3153 driver, which indicates it’s SPWM. However, as with the multiplex, you can try your own approach.
The library didn’t promise support for the DP3153 driver, so it’s not surprising that your panel doesn’t work.

Noted. I apologise; I did not write clearly. I went with your advice, but the panels did not work. I tried another code that i pasted to see if the original panels were working or not.
Thank you for letting me know. I will work on it and update you with the results. :slight_smile:

Please show the code you tried to run “on my advice”

#include <DMD_RGB.h>

#include “DMD_Panel_Templates.h”

#define MY_PANEL 3,32,32,8,102,16,PATTERN_LPS

#define DMD_PIN_A 6

#define DMD_PIN_B 7

#define DMD_PIN_C 8

#define DMD_PIN_nOE 22

#define DMD_PIN_SCLK 11

uint8_t mux_list[] = { DMD_PIN_A, DMD_PIN_B, DMD_PIN_C };

uint8_t custom_rgbpins[] = { 10, 0, 1, 2, 3, 4, 5 };

#define PANELS_WIDE 1

#define PANELS_HIGH 1

#define COLOR_DEPTH 4

DMD_RGB<MY_PANEL, COLOR_DEPTH> dmd(

mux_list, DMD_PIN_nOE, DMD_PIN_SCLK,

custom_rgbpins, PANELS_WIDE, PANELS_HIGH

);

#include “hardware/timer.h”

struct repeating_timer dmd_timer;

bool dmd_isr(struct repeating_timer* t) {

dmd.scan_dmd();

return true;

}

void setup() {

Serial.begin(115200);

dmd.init();

dmd.configure_multiplexer(DMD_MUX_TYPE_SHIFTREG); 

dmd.clearScreen(true);

add_repeating_timer_ms(-2, dmd_isr, NULL, &dmd_timer);



// Test: solid red

for (int y = 0; y < 32; y++)

    for (int x = 0; x < 32; x++)

        dmd.drawPixel(x, y, dmd.Color888(255, 0, 0));

}

void loop() {}

Please find above my code.

I meant that you try to run a code for SPWM driver.
There’s no point in trying to run your panels with DMD_RGB class; they won’t work.
It seems you haven’t read what I’m writing at all.

It looks like I can’t help you.