Mapping Assistance 32x16 P10

Hi Louis,
I have to manage a 190 cm X 90 cm Panel so 6x6 panels
with Z shape I have more long ribbon câbles than with C shape.
I will experiment Raspberry Pi 4 with 3 chains (horizontal or vertical) that will solve the issue.
Best regards
Eric

Hi Eric does the adjustment for that display work for you? Can you share your edit? I have two of these displays and I want to use them as an outdoor thermometer. Thanks for the info.

Hi renda71.
Yes it works
My patch is a patch !
I modify original code using #define

first in file MatrixEsp32Hub75Calc_Impl.h line 627

#define ERIC_H45_PATCH 1
#if (ERIC_H45_PATCH == 1)
#pragma message "ERIC_H45_PATCH == 1"
					if (gpioRowAddress ==-1){
						v|= ( (BIT_A) | ( BIT_B) | ( BIT_C) | ( BIT_D) | ( BIT_E) );
					}
					else {
						switch (gpioRowAddress % 4){
							case 0 : v|= ( (!BIT_A) | ( BIT_B) | ( BIT_C) | ( BIT_D)); break;	
							case 1 : v|= ( ( BIT_A) | (!BIT_B) | ( BIT_C) | ( BIT_D)); break;
							case 2 : v|= ( ( BIT_A) | ( BIT_B) | (!BIT_C) | ( BIT_D)); break;
							case 3 : v|= ( ( BIT_A) | ( BIT_B) | ( BIT_C) | (!BIT_D)); break;
						}
					}
//		Serial.print("PATCH: gpioRowAddress=");Serial.print(gpioRowAddress);Serial.print(" / ");Serial.print(gpioRowAddress,BIN);Serial.print("  V= ");Serial.println(v,BIN); 
#else                    
					if (gpioRowAddress & 0x01) v|=BIT_A;
                    if (gpioRowAddress & 0x02) v|=BIT_B;
                    if (gpioRowAddress & 0x04) v|=BIT_C;
                    if (gpioRowAddress & 0x08) v|=BIT_D;
                    if (gpioRowAddress & 0x10) v|=BIT_E;
#endif

then line 946 :slight_smile:

#if (ERIC_H45_PATCH == 1)
#pragma message "ERIC_H45_PATCH == 1"
					if (gpioRowAddress ==-1){
						v|= ( (BIT_A) | ( BIT_B) | ( BIT_C) | ( BIT_D) | ( BIT_E) );
					}
					else {
						switch (gpioRowAddress % 4){
							case 0 : v|= ( (!BIT_A) | ( BIT_B) | ( BIT_C) | ( BIT_D)); break;	
							case 1 : v|= ( ( BIT_A) | (!BIT_B) | ( BIT_C) | ( BIT_D)); break;
							case 2 : v|= ( ( BIT_A) | ( BIT_B) | (!BIT_C) | ( BIT_D)); break;
							case 3 : v|= ( ( BIT_A) | ( BIT_B) | ( BIT_C) | (!BIT_D)); break;
						}
					}
//		Serial.print("PATCH: gpioRowAddress=");Serial.print(gpioRowAddress);Serial.print(" / ");Serial.print(gpioRowAddress,BIN);Serial.print("  V= ");Serial.println(v,BIN); 
#else                    
					if (gpioRowAddress & 0x01) v|=BIT_A;
                    if (gpioRowAddress & 0x02) v|=BIT_B;
                    if (gpioRowAddress & 0x04) v|=BIT_C;
                    if (gpioRowAddress & 0x08) v|=BIT_D;
                    if (gpioRowAddress & 0x10) v|=BIT_E;
#endif

That’s all for this file.

Now maping:
in MatrixCommonHub75.h
I define a new variant of SM_PANELTYPE_HUB75_16ROW_32COL_MOD4SCAN_V3 :, SMARTMATRIX_HUB75_16ROW_32COL_MOD4SCAN_V3:

#define SM_PANELTYPE_HUB75_16ROW_32COL_MOD4SCAN_V4  13

 #define SMARTMATRIX_HUB75_16ROW_32COL_MOD4SCAN_V4   SM_PANELTYPE_HUB75_16ROW_32COL_MOD4SCAN_V4

and duplicate it in all the file.

in MatrixPanelMaps.cpp the new mapping:

const PanelMappingEntry panelMap32x16Mod4V4[] =
{
    {0, 7, -8},
    {0, 23, -8},
    {0, 39, -8},
    {0, 55, -8},
	{4, 8,   8},
    {4, 24,  8},
    {4, 40,  8},
    {4, 56,  8}, 
    {0, 0, 0}   // last entry is all zeros
};

and at the end of the file in the switch (paneltype) add :slight_smile:

    case SMARTMATRIX_HUB75_16ROW_32COL_MOD4SCAN_V4:
        return panelMap32x16Mod4V4;

it will be nice to replace #define with a runtime option of course.

hope this help.

Best regards
Eric

I have 30 of this kind of matrix.

So this patch do the job for the moment.

Thank you for your help. I’ll let you know when I try your edit. Now I’m making a pcb board with ESP32 (no dev kit) - 74HCT245 - HUB75 and also on HUB12.
When I have it, I’ll make it available here. Regards Rene

bump.

Has anyone come up with any other support for this board? It’s my own fault, but I purchased 4 of these to play with, and have the same difficulties.

Thanks,

Rick

There’s four mappings for P10 32x16 panels already, have you tried all of them yet?

Yes, Louis, I have tried the 4 mappings. Just looking to see if there was an easy fix available. I am seeing the exact same thing the original poster saw when I play around with MODE_MAP_REVERSE_ENGINEERING.

I found these panels on Amazon and I had good luck with Azerone 64x32 Indoor panels previously.

As @Eric.H45 was nice enough to supply a patch, I applied it to SmartMatrix Library and pushed it to GitHub. One minor change, I changed the #if #else from the preprocessor to a normal if() else statement as I know it will be just as efficient. You can now apply the patch just by using SMARTMATRIX_HUB75_16ROW_32COL_MOD4SCAN_V4

I didn’t make a release, so you’ll need to download the latest version of the library from GitHub

Please give it a try and let me know if it’s working! (Note the patch is for ESP32 only, so I hope you’re using ESP32)

Sorry, I am using a Teensy 4. Thank you for the suggestion though! Anything else?

@dayta88 @Eric.H45 @RickP @renda71 Can any of you recommend a source for these panels so I can get a sample to test? (I’m in the UK)

It seems simple enough to add support for this type of panel to all platforms, but I’d prefer to be able to test it myself.

I just added a patch I hope will work for the Teensy 4, can you please give it a try?

Hi Louis, I will try your patch hopefully later tonight. Here is a link on Amazon.com where I purchased the panel. Let me know if the link doesn’t work for you.

Hi Louis, I’ve downloaded the latest code, which was updated on 7-20, and I assume that I should use
const uint8_t kPanelType = SM_PANELTYPE_HUB75_16ROW_32COL_MOD4SCAN_V4;
but this results in errors (as I’m using a Teensy 4).

I have tried numerous combinations of kMatrixWidth, kMatrixHeight, and kPanelType… all to no avail. Either there’s no output on the matrix, or there is a pause at the beginning, then it starts the red 4 pixel tall routine that the original poster.

I’d be more than happy to send you my panel, if you’d like. I have more, by mistake, on order.

Rick

but this results in errors (as I’m using a Teensy 4).

Do you mean compilation errors, or it just doesn’t display properly?

Thanks for the offer, I’ll message you about the sample panel directly

Hi all, thanks to this thread, just bought 32x16 P10 outdoor unit panels recently and have a mapping problem same as what is discussed here but mine is 2scan. I just run the sketch MultiRowRefreshMapping but 2 red pixels instead of 1, then i try to use this patch by Eric and it fit for my panel. For reference my panel driven by CHIPONE ICN2037BP and the matrix panel map is this:
{0, 31, -8},
{0, 63, -8},
{0, 95, -8},
{0, 127, -8},
{2, 16, 8},
{2, 48, 8},
{2, 80, 8},
{2, 112, 8},
{4, 15, -8},
{4, 47, -8},
{4, 79, -8},
{4, 111, -8},
{6, 0, 8},
{6, 32, 8},
{6, 64, 8},
{6, 96, 8},
{0, 0, 0}

Just share my finding to whoever facing same problem.