WLED icon indicating copy to clipboard operation
WLED copied to clipboard

Support for HUB75 64x64 16S

Open Milka7878 opened this issue 3 months ago • 7 comments

Hello.

I've already converted several matrix LED modules (HUB75) from AliExpress to WLED.

Now I have one where addressing isn't yet supported.

My module is 64x64 16S. This means four lines are transmitted with a single latch. There's no E input.

For example, the shift registers for lines 1 and 17 are all cascaded. So, the information for 128 LEDs needs to be transmitted through the input line in a single latch.

Unfortunately, I can't compile it myself, so I'm asking if someone could implement this?

Regards, Milka

Milka7878 avatar Nov 29 '25 10:11 Milka7878

Oh shute. I wanted to post this on the MM fork. Please delete this...

Milka7878 avatar Nov 29 '25 10:11 Milka7878

@Milka7878 it's ok, same developers here and in MM 😀 Actually your "16S" in called "4-Scan" by the driver, and it's already supported. In Wled-MM you should select "outdoor 64x64", which enables the 4-scan mode. In main WLED there is a similar option for "quad-scan".

You an find more information in the knowledge base for HUB75.

softhack007 avatar Nov 29 '25 12:11 softhack007

If it still does not work, you might need a different shift register driver. The default for 4-scan is FM6124 - we are working on making the shift register driver user-selectable, so you can use any chip that's supported by the hardware driver from MrCodetastic.

https://github.com/MoonModules/WLED-MM/blob/6ae4507531213076c04e49f8f6d0074e3630a48f/wled00/bus_manager.cpp#L684-L698

softhack007 avatar Nov 29 '25 12:11 softhack007

There's no E input.

not sure what happens without an "E"- pin 🤔. It might work with 4-scan mode.

If not working, then you have two options to try:

  • Configure the panel as two chained 64x32 (or maybe 32x64, not sure atm) - this could work if the panel is internally wired as a chain of 2.
  • if nothing works, please go to the github of Mrcodetastic, and ask if support for your panel type can be added to the driver.

softhack007 avatar Nov 29 '25 13:11 softhack007

When I set WLED to "64x64 (Outdoor 16S)", I get the following pattern: The entire background should be blue, and a green pixel should run from LED 1 to LED 4096. https://youtu.be/fFb94nJd9Eg

When I set the output to "64x64", I get the following pattern: https://youtu.be/e5CQk75SUfA

I don`t know what to try next.

Milka7878 avatar Dec 01 '25 14:12 Milka7878

@Milka7878 allow me to quote myself:

  • Configure the panel as two chained 64x32 - this could work if the panel is internally wired as a chain of 2.
  • try the above -> use "64x32" or "64x32 (Outdoor 8S)", use "Chain Length:2"
  • combine with "Inverted clock phase" checked, or unchecked
  • combine with "Single-cycle latch blanking" checked, or unchecked

If it still does not work, sorry I can't help much more, and you might need to wait until the "shift register driver" option is implemented. There are simply too many very different HUB75 panels on the market, I cannot test them all.

  • if nothing works, please go to the github of Mrcodetastic, and ask if support for your panel type can be added to the driver.

softhack007 avatar Dec 01 '25 20:12 softhack007

Also read https://github.com/mrcodetastic/ESP32-HUB75-MatrixPanel-DMA/issues/204

netmindz avatar Dec 02 '25 08:12 netmindz

I finally got PlatformIO working and started looking for a solution. It works on my panel if I insert the following to line 387 of the file ESP32-VirtualMatrixPanel-I2S-DMA.h:

if ((coords.y & 8) != ((coords.y & 16) >> 1))
     coords.y = (coords.y & 0b11000) ^ 0b11000 + (coords.y & 0b11100111);

So the comlpete section looks like this:

switch (panel_scan_rate) {
        case FOUR_SCAN_64PX_HIGH:
            // https://github.com/mrfaptastic/ESP32-HUB75-MatrixPanel-DMA/issues/345#issuecomment-1510401192
            if ((virt_y & 8) != ((virt_y & 16) >> 1))
                virt_y = (virt_y & 0b11000) ^ 0b11000 + (virt_y & 0b11100111);

            if ((coords.y & 8) != ((coords.y & 16) >> 1))
                coords.y = (coords.y & 0b11000) ^ 0b11000 + (coords.y & 0b11100111);

            // no break, rest of code is the same for 64 and 32px high screens

Milka7878 avatar Dec 17 '25 16:12 Milka7878

@Milka7878 thanks for letting us know 👍

do you know if this fix is specific to your panel, or maybe a generic error in FOUR_SCAN_64PX_HIGH ?

If you think it's a generic error in the driver, you might want to create a PR for the driver from mrcodetastic, so your fix will be used in WLED once we move to the newest driver.

softhack007 avatar Dec 17 '25 21:12 softhack007

Can you also confirm @Milka7878 if this works when you have multiple panels in a chain or only single panel

netmindz avatar Dec 18 '25 08:12 netmindz