[Update] How to drive 8192 RGB LEDs (each 24Bit RGB brightness) with one STM32 Microcontroller (without much CPU load)

First of all I suggest to read my post about the 4096 RGB LEDs solution (link: http://esdblog.org/how-to-drive-4096-rgb-leds-each-24bit-rgb-brightness-with-one-stm32-microcontroller-without-much-cpu-load/ ).
I noticed some time a strange behaviour of the 4096 RGB LED solution (the first row blinks sometimes). Therefore I did some tests and debugging. It has something to do with the timer and getting the data to the GPIO. It seems to be that the speed of getting the data from the RAM to the GPIO (while the timer drives the DMA) is too fast and reducing it decreased the blinking row effect.
At this stage I was only able to drive 4 LED modules in series, but I wanted more. So i got another DMA transfer working to drive another GPIO with pixel data to create more outputs for the HUB LED module interfaces. Because I am using the same timer as for the main GPIO, I can use the row select (A,B,C,D), clock, latch and output enable lines. Moreover I used 2 free GPIOs at the main GPIO peripheral to count up to 4 HUB LED module interfaces.
The real updated firmware has now 4 HUB75/HUB08 outputs. When compiling for HUB75 (each LED matrix module with 32 pixel width and 16 pixel height) it is possible to connect 4 modules in series at 8 Bit color brightness (each color of one pixel) without flickering noticed.
Conclusion: Reducing the GPIO speed decreased the capability of one output to drive many LED modules BUT with using more GPIO outputs I was able to create more HUB outputs and therefore I can drive more LED modules without any flickering effects.
Here is the new connection definition:
alt

Here is the updated firmware (also a proof of concept):
main.c: http://pastebin.com/kY981dFG

comments powered by Disqus