Pixel „doubling” on first columns of 64x32 HUB75 /16 scan matrix

I have been testing some panels that I have with this library. I have used them previously in the following configuration:

  • with ESP32/ESP8266 and the PxMatrix library, they do work and display as instructed but the output is usually noisy and the colors do not match - see my issue here https://github.com/2dom/PxMatrix/issues/258
  • with an Arduino Mega 2560 and the „old” Adafruit RGB matrix panel library that they use for their tutorials - https://github.com/adafruit/RGB-matrix-Panel With this they work fine using the default settings, but both the library and the MCU’s it runs on cannot support chaining (because of not actually being able to fit a larger matrix in memory)

Using an ESP32 hooked up directly with the forum wiring to the panel and configured as SM_PANELTYPE_HUB75_32ROW_MOD16SCAN, I can display stuff on the panel, but the matrix seems to „start” in memory before my actual hardware panel so the characters are „widened” on the first 1/3 of the panel horizontally. Here is what I am talking about:

Here is how it looks:

Here is a video of the MultiRowRefreshMapping (I did not film it for the whole panel because it just repeats on a row-by-row basis, but the result is the same for each):

Any ideas on what I could’ve done wrong or what should I change to get it to display properly?


I’d start by putting level shifting buffers between the ESP32 and the panel to drive it with 5V instead of 3.3V. You might also try lowering the clock rate. I can’t remember offhand how to do this, but search the forum and hopefully you’ll find something

I can confirm that this is related to the voltage of the GPIO lines… I have tried using a pair of level shifters I had on hand, with a setup looking like this:

And for some reason nothing was displaying anymore on my panel, even though I tested the functionality of the shifters (VCC A to 3V3 pin, VCC B to 5V pin, A pins to ESP and B pins to panel, common ground) with a simple GPIO sketch setting pins low and high and measuring with a voltmeter, and indeed 5V was being output (or not) at the expected times.

Anyway, maybe the shifters are too slow to drive the panel or whatever. I have gotten everything to kinda work by lowering the power supply voltage to 3.8-4V. Of course the LEDs are dimmer, but now they are perfectly controllable. I have also tested with multiple libraries and methods of driving these and it’s the same result.

This being said, do you know any good / known working level shifters with enough channels? I cannot currently go for a ready-made adapter board because I have different varieties of the ESP32 on hand and their pin distances and orders to not match. So I will have to do some kind of PCB with level shifters in which I plug the ESP pins with jumpers and from there to the panel via the connector. At least for testing/validation purposes.

Thanks for your help!

I use the 74AHCT245 which is available in a DIP package and you could breadboard the circuit if you want.

Marc Merlin has used some of Jason Coon’s breakouts meant for driving 16 channels of addressable LEDs, there’s pinouts in MatrixHardware_ESP32_V0.h already.

Sorry that I missed that, see details: http://marc.merlins.org/perso/arduino/post_2019-04-01_SmartMatrix_-SmartMatrix-Shield-v4-for-Teensy_-ESP32-shield-with-level-shifter_-and-SmartMatrix_GFX.html#ESP32