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.

@board707 did you point your library to using this discourse for support questions?
If so, I’m not against it, but we need to know that and we need to update some things accordingly.

If not, I’m going to tell people to use the proper support channel which you can give, so that people don’t get confused

No, I didn’t.
However, given that this resource is one of the few active ones specifically related to hub75 panels, it’s not surprising that people post here. In general, many problems with working with matrices are common to all libraries, so I believe that topics related to my library or, for example, the @mrcodetastic ESP32-HUB75-MatrixPanel-DMA library are not off-topic for this resource.
Of course, this is your resource, and you have the right to set your own rules.

@marcmerlin
Mark, I try to play fair and therefore don’t try to advertise my library on your resource unless a user directly asks about it. The only exception is a link to my driver table, which you yourself called useful and even included in your Readmi.
Previously, I wrote to people who came here with questions about other projects that this forum was only for the HZeller library. But then it occurred to me that there isn’t much information on this topic online, and it probably wouldn’t be a mistake if this forum became useful for everyone who works with such panels.

your answer makes sense and as long as you don’t mind being there helping people with your lib, that’s fine with me. Your help and expertise have been invaluable.

For the ESP32 one, it has its own support group inside github on the project github and its author isn’t here to see messages, so we should point people back to the correct location if they come here.

BTW, I forgot to mention: I have 0 issues if you advertise your lib here.

You offer support on different hardware, if people are happy with that hardware which is realtime while rpi with linux, is not, I think it’s a great option for them.

Same thing with the ESP32 lib from mrfraptastic, if it does the job for folks (single channel obviously), then that’s also great. I use it for small displays where single channel and low mem is not an issue.

So by all means, carry on :slight_smile: