Lines 3 and 4 show up as lines 1 and 2

Sorry if this has been answered before or if I missed something in the documentation but I have been searching high and low across a few different matrix libraries without any luck at solving this issue that appears on my panel.

I am using an ESP32 with a 64x32 1/16 panel that has ICN3078BP chips on it and I am getting weird results

Rows 1 and 2 are fine.
Rows 3 and 4 appear in rows 1 and 2 respectively(column positions are correct)
Rows 5 and 6 are fine
… So on so forth all the way down the panel with every second set of lines mapped to the two rows above it.

Im using the following settings:
const uint16_t kMatrixWidth = 64;
const uint16_t kMatrixHeight = 32;
const uint8_t kPanelType = SM_PANELTYPE_HUB75_32ROW_MOD16SCAN; (I have tried pretty much all the other ones without any luck)
const uint8_t kRefreshDepth = 36;
const uint8_t kDmaBufferRows = 4;
const uint32_t kMatrixOptions = (SM_HUB75_OPTIONS_NONE);

There is no pin out silk screen on the panel but I believe its and ABC panel as those pins are not grounded and I dont think its an issue with the address lines because its still registering the pixels just not in the correct locations.

I also dont think the answer is to use the multi row address mapping as its a problem with pixel location across two address lines.

I dont have too much experience with this stuff in general so I really appreciate all/any help. Thank you.

EDIT: A bit more information that I did not have time to include last night.

  • When using the “MultiRowRefreshMapping” sketch with the settings noted above it will only show pixels light up in any position if i set the width and height to 64x32 and with those settings the pixels light up just as described above with rows 3 and 4 showing up in rows 1 and 2.

  • if i fill the screen red only every other line will light up but the rows in-between will sometimes slowly flicker on for a bit. This is why I originally thought I had a power supply issue so I picked up a 36watt power supply yesterday but that did not fix the issue

  • As noted I tired several other libraries mainly the mrfaptastics I2S DMA library and Adafruits RGB matrix library and with certain setting on both I can get the exact same results noted above. Actually with the “PatternPlasma” example from mrfaptastic library on occasion the missing rows will flicker on similar to what I noted in bullet 2 above and it seams to occur when pretty much all of the pixels are red. This is what led me to try filing the screen red.

I am currently using a sparkfun ESP32 thing but have an ESP32 dev board showing up this week if that makes any difference. I am open to switching to a teensy for my project as its early enough that I have not written too much code so it would be pretty simple to ported over if I have to. Having said that I have never worked with a teensy before and I already know my way around the ESP32 functions and would prefer to stick with that if possible.

Sorry if this is too much information I just though it would be better to err on too much then too little.

EDIT 2: Here is a video of MultiRowRefreshMapping with the settings noted above. Again I am using width and height of 64x32

For a 1/16 panel you need four address lines, so if D is grounded, then you likely don’t have a 1/16 panel.

If it is a 1/16 panel, you might have a issue with the D line. Can you set the D line high externally (not using the ESP32) and see how that changes things? Maybe through a resistor so you don’t short 5V and GND

Are you level shifting the 3.3V ESP32 outputs to 5V?

I can’t open the video link, it’s broken.

For a 1/16 panel you need four address lines, so if D is grounded, then you likely don’t have a 1/16 panel.

I guess this is where the usual china product weirdness comes in lol. The ad for the panel I purched clearly states it a 1/16 panel and when I message the Vender while it was still in transit for any additional product data they said again it was a 1/16 panel but when I asked for the chip they said it was “ICN 2078 1/8”. When they panel arried the chips are in fact ICN 2078BP and the board silk screen says “64x32-…-16S”. I also asked the vendor for a pin out and they sent me a picture of a generic HUB75 ABC pin out with D being ground.

I will double check again tonight if PINs D and or E are grounded and report back.

Assuming it is infact a 1/8 panel ABC. is it possible to configure your library to work with this panel and an ESP32 or teensy?

So far from the code and documentation I have looked at in several different libraries I like yours the most and really dont want to go the non DMA route with pxMatrix

If it is a 1/16 panel, you might have a issue with the D line. Can you set the D line high externally (not using the ESP32) and see how that changes things? Maybe through a resistor so you don’t short 5V and GND

I will try this tonight assumeing D is not grounded as per above. I am assuming a 10k resistor should do it? Again sorry I am not very experienced with electronics.

Are you level shifting the 3.3V ESP32 outputs to 5V?

Currently no, I was hoping to get it working wired directly to the ESP32 so I can move to writing the bulk of project code while I finalize the wiring schematic simultaneously. The plan however was to use level sifters(I was thinking 74HCT245) in the final design.

I can’t open the video link, it’s broken.

That is weird. It works for me and and it works on my phone as well. Can you try again and if it doesn’t work I will try another upload site.

In either case its not much to really look at. The pixel move across the screen just as I described.
The red pixel goes from 0,0 to 63,0 then from 0,1 to 63,1 then the yellow pixel does the same from 0,0 to 63,0 then from 0,1 to 63,1 then the red pixel starts again at 0,4 to 63,0…

The video worked when I used a VPN (I’m in the UK if that’s relevant). I don’t understand why you’re seeing the red pixel show up on more than 64 pixels with the settings you used, but I don’t have time to think about it right now.

Can you try the MultiRowRefreshMapping sketch again with these settings, and share a video so we can see if it’s a MOD8 panel? If you see all the pixels on the panel lit up one at a time with this setting (feel free to lower the delay to speed it up), then you likely have a MOD8 panel.


const uint16_t kMatrixWidth = 128;        // must be multiple of 8
const uint16_t kMatrixHeight = 16;
const uint8_t kPanelType = SM_PANELTYPE_HUB75_16ROW_MOD8SCAN; // Use this to reverse engineer mapping for a MOD8 panel

Yes, follow the instructions in the MultiRowRefreshMapping sketch. If you post your mapping here I’ll try to add it to the library so it’s available in future releases

A 10k resistor should be enough, but you can always check the voltage on the panel side to see what it’s actually getting after the resistor

I watched the video again and it seems like something is wrong with your B address line, I’d look into that before doing much else. It looks like it’s stuck on ground instead of toggling like it should.

I did not have too much time to test/work on it tonight but I have a feeling your right about their being something wrong with my B address line.

When I unplug the B pin nothing happens/changes. When I unplug A and C all the pixels jump up to lines above in a pattern that would make me think that pin B not registering is causing the results I am seeing.

Things I had time to try:

  1. I double checked all the wiring on all pins and everything was correct
  2. I tried several different pins for the B address line in case there was something wrong with the pin I was using without any luck.
  3. I tried to pull up the B line externally through a 10k resistor to 5v and the panel just goes black so I disconnected the pull up right away and then after a few seconds it comes back on. I tired it three times with the same results.

I should have more time to work on it tomorrow night. Any suggestions on what I should try?

I might be able to swing by a store on my way home and pick up a level shifter maybe for some reason address line B needs 5v even tho none of the other pins seam to need it.

To clear up a minor item from earlier I checked and pin D is not grounded. Pin E does go to ground so I think it is a 1/16 ABCD panel.

I am currently at work so cannot test anything but was thinking about it…

Assuming it is an 1/16 ABCD which by all indications it appears to be it would mean that lines A and C and fine but both lines B and D are not registering correctly and if this is the case shouldnt the pixels for lines D not register in line A and not line C like I am seeing.

To provide some more explanation for exactly what I am seeing below is a photo of what is displayed if I run the following code

rgb24 colour24(255, 255, 255);

for (int i=0 ; i < kMatrixHeight; i++) {
delay(10 * 1000);

As you can see the pixels from lines 3 and 4 appear on lines 1 and 2. Pixels from lines 7 and 8 appear on lines 5, 6 ans so on all the way down the screen

I have drawn in little arrows indicating what pixels should be moved to where.

Again I thank you so much not only for you help on this issue but all the work in have put into the library over the years :smiley:

So my local electronics store did not have any 3v3 to 5v level sifters in stock so I had to order some online and it took a while to ship.

They arrived last night and i wired them up and glad to report that everything appears to be working now.

Again thank you all for your help.