P5(1921)64x32-8S

Hi, I am very new here , I am just working on a small project with esp32-S3 no PSRAM module, I have to display few words on HUB75-RGB panel on 128x32(64X32 two ), what I got from market consist of these two ICs ICN2037B and HX6061S, I tried all over did not find any details or Datasheets of these ICs nor found help in this forum, during panel scan complete panel light up, but when I try to access any row column or print any word on it, it shows just garbage broken text, and shows further split in half 32x32 , but if I connect a 32X16 panel with it this panel shoes exactly what I expect (but in it own pixels limit). can you please guide me I can share further details if required

#include <ESP32-HUB75-MatrixPanel-I2S-DMA.h>

/* PINS */

#define R1_PIN 17

#define G1_PIN 18

#define B1_PIN 21

#define R2_PIN 14

#define G2_PIN 13

#define B2_PIN 12

#define A_PIN 5

#define B_PIN 6

#define C_PIN 4

#define D_PIN -1

#define E_PIN -1

#define LAT_PIN 16

#define OE_PIN 15

#define CLK_PIN 8

#define PANELS 2

#define WIDTH 128

#define HEIGHT 32

MatrixPanel_I2S_DMA *dma_display;

const uint8_t rowMap[32] = {

16,17,18,19,20,21,22,23,

0, 1, 2, 3, 4, 5, 6, 7,

24,25,26,27,28,29,30,31,

8, 9,10,11,12,13,14,15

};

inline void drawMappedPixel(int x, int y, uint16_t c)

{

dma_display->drawPixel(x, rowMap[y], c);

}

void setup()

{

HUB75_I2S_CFG::i2s_pins pins = {

R1_PIN, G1_PIN, B1_PIN,

R2_PIN, G2_PIN, B2_PIN,

A_PIN, B_PIN, C_PIN,

D_PIN, E_PIN,

LAT_PIN, OE_PIN, CLK_PIN

};

HUB75_I2S_CFG cfg(64, 32, PANELS, pins);

cfg.i2sspeed = HUB75_I2S_CFG::HZ_10M;

dma_display = new MatrixPanel_I2S_DMA(cfg);

dma_display->begin();

dma_display->setBrightness8(60);

}

void loop()

{

dma_display->clearScreen();

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

dma_display->drawPixel(5, rowMap[y], dma_display->color565(255,255,255));

delay(200);

}}

First of all, could you show a clear picture of the panel rear side?

Next, where did you get this code? Why didn’t you start with the library examples?

And why did you decide to ask this question on a forum that pertains to a different library? If you had asked this question in the ESP32-HUB75-MatrixPanel-I2S-DMA repository, you would have had a better chance of getting an answer.

Thanks for your reply, I was working on 32X16 board and achieved all targets but then we think to switch to this panel for better visibility,I just tried few examples from forums and from libraries too, only panel scan works, i got many help from this forum so I decided to get help from here, panel pic is attached , it on 02, 45,89… rows on and skip rest of rows, even I tried to on manually like C++ , I was unable to light up consecutive rows,except full scan,(sorry for my bad English)

please show a whole panel image

1.whole panel pic
2.display against code I wrote in problem statement

Display against code, this panel have only three address lines ABC, D pin is not working or have any impact on addressing I checked in detail.

Thanks for the photo, but its quite blurry image…
Please take a photo of this area clear enough to read a text on the white sticker:

I addition, could you try to read a model on one of the selected chips:

As told you before it is HX6016SP

1 Like

Well, finally, something informative :slight_smile:
The label on the sticker put everything in its place. The bottom line means your panel has a ICN2037 driver and a 6016 multiplexer, as you already noted. But most importantly, there’s a note indicating the multiplexer is of the so-called 138 type, which is very useful, since the internet and AI know nothing about the HX6016 chip.
You need to run the Pixel_Mapping_Test example from the ESP32-HUB75-MatrixPanel-I2S-DMA library using a single panel. Important: don’t change anything in the code except the lines about the panel size:

#define PANEL_RES_X 32 
#define PANEL_RES_Y 16

Run the example and post a video of it running.

sorry, its not allowing me to upload a video here, please guide, I uploaded that SS from Video

I used second cord option and display this

You could upload the video to Youtube and put the link here

What is the “second cord option” ? I dont understand

(ok let me try to upload video there)
example said if your panel displaying right to left than use second coordinate option, to start mapping from left to right, I did it but its turned all panel blinking white

Is not for you.
I asked you don’t change anything in the code.

video

https://youtube.com/shorts/Xd3Hh86DzpQ?feature=share,

but I have one doubt, I didnot map pins as per example code,

IDK what’s this means..
Please show your code

#include “ESP32-VirtualMatrixPanel-I2S-DMA.h”

// Define custom class derived from VirtualMatrixPanel
class CustomPxBasePanel : public VirtualMatrixPanel
{
public:
using VirtualMatrixPanel::VirtualMatrixPanel; // inherit VirtualMatrixPanel’s constructor(s)

protected:

VirtualCoords getCoords(int16_t x, int16_t y);  // custom getCoords() method for specific pixel mapping

};

// custom getCoords() method for specific pixel mapping
inline VirtualCoords CustomPxBasePanel ::getCoords(int16_t x, int16_t y) {

coords = VirtualMatrixPanel::getCoords(x, y); // call base class method to update coords for chaining approach

if ( coords.x == -1 || coords.y == -1 ) { // Co-ordinates go from 0 to X-1 remember! width() and height() are out of range!
return coords;
}

uint8_t pxbase = panelResX; // pixel base
// mapper for panels with 32 pixs height (64x32 or 32x32)
if (panelResY == 32)
{
if ((coords.y & 8) == 0)
{
coords.x += ((coords.x / pxbase) + 1) * pxbase; // 1st, 3rd ‘block’ of 8 rows of pixels
}
else
{
coords.x += (coords.x / pxbase) * pxbase; // 2nd, 4th ‘block’ of 8 rows of pixels
}
coords.y = (coords.y >> 4) * 8 + (coords.y & 0b00000111);
}

// mapper for panels with 16 pixs height (32x16 1/4)
else if (panelResY == 16)
{
if ((coords.y & 4) == 0)
{
// 1. Normal line, from left to right
coords.x += ((coords.x / pxbase) + 1) * pxbase; // 1st, 3rd ‘block’ of 4 rows of pixels
//2. in case the line filled from right to left, use this (and comment 1st)
//coords.x = ((coords.x / pxbase) + 1) * 2 * pxbase - (coords.x % pxbase) - 1;
}
else
{
coords.x += (coords.x / pxbase) * pxbase; // 2nd, 4th ‘block’ of 4 rows of pixels
}
coords.y = (coords.y >> 3) * 4 + (coords.y & 0b00000011);
}
return coords;
}

// Panel configuration
#define PANEL_RES_X 64 // Number of pixels wide of each INDIVIDUAL panel module.
#define PANEL_RES_Y 32 // Number of pixels tall of each INDIVIDUAL panel module.

// Use a single panel for tests
#define NUM_ROWS 1 // Number of rows of chained INDIVIDUAL PANELS
#define NUM_COLS 1 // Number of INDIVIDUAL PANELS per ROW

// Chain settings, do not cnahge
#define SERPENT true
#define TOPDOWN false
#define VIRTUAL_MATRIX_CHAIN_TYPE CHAIN_BOTTOM_RIGHT_UP

// placeholder for the matrix object
MatrixPanel_I2S_DMA *dma_display = nullptr;

// placeholder for the virtual display object
CustomPxBasePanel *FourScanPanel = nullptr;

/******************************************************************************
Setup!
******************************************************************************/
void setup()
{
HUB75_I2S_CFG mxconfig(
PANEL_RES_X * 2, // DO NOT CHANGE THIS
PANEL_RES_Y / 2, // DO NOT CHANGE THIS
NUM_ROWS * NUM_COLS // DO NOT CHANGE THIS
//,_pins // Uncomment to enable custom pins
);

mxconfig.clkphase = false; // Change this if you see pixels showing up shifted wrongly by one column the left or right.

// OK, now we can create our matrix object
dma_display = new MatrixPanel_I2S_DMA(mxconfig);

// let’s adjust default brightness to about 75%
dma_display->setBrightness8(40); // range is 0-255, 0 - 0%, 255 - 100%

// Allocate memory and start DMA display
if ( not dma_display->begin() )
Serial.println(“****** !KABOOM! I2S memory allocation failed ***********”);

dma_display->clearScreen();
delay(500);

// create FourScanPanellay object based on our newly created dma_display object
FourScanPanel = new CustomPxBasePanel ((*dma_display), NUM_ROWS, NUM_COLS, PANEL_RES_X, PANEL_RES_Y, VIRTUAL_MATRIX_CHAIN_TYPE);

}

void loop() {
for (int i = 0; i < FourScanPanel->height(); i++)
{
for (int j = 0; j < FourScanPanel->width(); j++)
{
FourScanPanel->drawPixel(j, i, FourScanPanel->color565(255, 0, 0));
delay(30);
}
}
delay(2000);
dma_display->clearScreen();
} // end loop

Thanks, the code looks correct.
What is the issue with pins? Why didn’t you can to connect it as in the example?

yeah I updated my hardware pins as per library, I run code again and got this result, i got 11Hrs restriction for being a new user, so I replied late