Support for HUB75 64x64 16S
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
Oh shute. I wanted to post this on the MM fork. Please delete this...
@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.
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
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.
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 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.
Also read https://github.com/mrcodetastic/ESP32-HUB75-MatrixPanel-DMA/issues/204
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 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.
Can you also confirm @Milka7878 if this works when you have multiple panels in a chain or only single panel