RGB LED Matrices With The STM32 and DMA

A few years ago, [Frans-Willem] bought a few RGB LED panels. Ten 32×16 panels is a lot of LEDs, and to drive all of these panels requires some sufficiently powerful hardware. He tried working with an FPGA development board, but that didn’t have enough memory for 24-bit color. The microcontroller du jour – a TI Stellaris – couldn’t get more than 16 bits of color without flickering. With a bunch of LEDs but no way to drive them, [Frans-Willem] put the panels in a box somewhere, waiting for the day they could be used to their fullest capacity.

This day came when [Frans-Willem] was introduced to the STM32 series of chips with the F1 Discovery board. While looking for some electronic playthings to use with this board, he stumbled upon the LED panels and gave them one more try. The results are spectacular, with 33 bits of color, with animations streamed over a router over WiFi.

The panels in question are HUB75 LED panels. In the 32×8 panels, there are six data pins – two each for each color – four row select pins, and three control pins. The row select pins select which row of pixels is active at any one time. Cycle through them fast enough, and it will seem like they’re all on at once. The control pins work pretty much like the control pins of a shift register, with the data pins filling in the obvious role.

The code that actually drives the LEDs all happens on an STM32F4 with the help of DMA and FSMC, or the Flexible Static Memory Controller found on the chip. This peripheral takes care of the control lines found in memory, so when you toggle the write strobe the chip will dump whatever is on the data lines to a specific address in memory. It’s a great way to take care of generating a clock signal.

For sending pixels to this display driver, [Frans-Willem] is using the ever-popular TP-Link WR703N. He had originally planned to send all the pixel data over the USB port, but there was too much overhead, a USB 1.1 isn’t fast enough. That was fixed by using the UART on the router with a new driver and a recompiled version of OpenWRT.

All the software to replicate this project is available on Github, and there’s a great video showing what the completed project can do. You can check that out below.

Continue reading “RGB LED Matrices With The STM32 and DMA”

BeagleBone Black and FPGA Driven LED Wall

LED Wall


This is 6,144 RGB LEDs being controlled by a BeagleBone Black and a FPGA. This gives the display 12 bit color and a refresh rate of 200 Hz. [Glen]’s 6 panel LED wall uses the BeagleBone Black to generate the image, and the LogiBone FPGA board for high speed IO.

[Glen] started off with a single 32 x 32 RGB LED panel, and wrote a detailed tutorial on how that build works. The LED panels used for this project have built in drivers, but they cannot do PWM. To control color, the entire panel must be updated at high speed.

The BeagleBone’s IO isn’t fast enough for this, so a Xilinx Spartan 6 LX9 FPGA takes care of the high speed signaling. The image is loaded into the FPGA’s Block RAM by the BeagleBone, and the FPGA takes care of the rest. The LogiBone maps the FPGA’s address space into the CPU’s address space, which allows for high speed transfers.

If you want to drive this many LEDs, you’ll need to look beyond the Arduino. [Glen]’s work provides a great starting point, and all of the source is available on Github.

[Thanks to Jonathan for the tip]

Hackday Links: March 10, 2012

We’re throwing money at our monitor and nothing’s happening!

Sometimes we get hacks sent into our tip line that are outrageously awesome, but apart from a YouTube video we’ve got nothing else to write about. So begins the story of the flying Back to the Future DeLorean quadrocopter. Sadly, the story ends with the video as well. (If you’ve got any info, send it in!)

Fine, we’ll throw in another cool car

Mercedes covered a car with LEDs and made the James Bond’s invisible car from Die Another DayThe Mercedes video cost tens of thousands of dollars to produce, so of course there’s camera trickery; we’re just wondering how much credit Adobe After Effects gets for this build.

Microsoft touchscreen demo might be impossible

Yes, Microsoft does care about user experience. Just take a look at this video from their applied sciences group. They did user testing with touchscreens that updated every 1 millisecond, compared to the ~100ms our phones and tablets usually update. Of course the result was a better UX, but now we’re wondering how they built a touch screen that updates every millisecond? That’s a refresh rate of 1 kHz, and we’ve got no clue how they bodged that one together. We’re probably dealing with a Microsoft Surface projector/IR camera thing here, but that doesn’t answer any questions.

Edit: [Philip Rowney] sent in a tip that it could be this TI touch screen controller that can sample above 1 kHz. The only problem is this chip uses a resistive touch screen, instead of a multitouch-enabled capacitive screen. At least that solves one problem.

And now for something that can measure 1 kHz

[Paleotechnologist] posted an excellent guide to the care and feeding of an oscilloscope. Most of our readers probably already know the ins and outs of their awesome Techtronix and HP units, but that doesn’t mean the younglings won’t have to learn sooner or later.

Good idea, except the part about saving it for spring

In a moment of serendipity, [Valentin] figured out how to use touchscreens with wool gloves. The answer: rub thermal grease into the tip of the index finger. It works, and doesn’t look to be too much of a mess. We’ll remember this for next winter.

The last one didn’t have a picture, so here’s this

[Darrell] used a little bit of LaTeX and Ruby to make colored labels for his resistor collection. We’re struck with the idea of using test tubes to organize resistors. It’s cool and makes everything look all sciencey and stuff.