… sub-panel. Couldn’t resist the mild click-bait there 🙂 As you can see in the video above; no, not a full-on jumbotron, but just a single 32×32 panel designed for digital billboards. I’ve had one sitting in my parts drawer for nearly a year… But yesterday, the awesome 1-Pixel PacMan post on HackADay gave me enough of a push to finally pull it out and get hacking.
These things are seriously awesome. 1024 tiny RGB pixels packed into a roughly 8″x8″ square panel. The problem, however, is that, unlike the LED strips supported by the AllPixel, these panels have basically zero logic built in. Instead of one long string of LEDs, they are actually built in a true matrix that must be manually multiplexed by the controlling device. There’s not even any memory on the display, so you have to keep multiplexing… forever.
Fortunately, as is always the case in the world of open source, a bunch of smart people have already built cool things to help out! Enter the SmartMatrix Teensy Shield! Which was also in my parts drawer for the last year 😛 SmartMatrix is a library for the Teensy 3.x which is an awesome little ARM development board with a ton of power in a tiny package. The library uses some really fancy DMA techniques to multiplex one of these panels at high frame-rates with almost negligible CPU overhead. While you could wire up a Teensy directly to the display panel, the shield greatly simplifies the process.
To further simplify things, the awesome guys at FastLED built in support for the SmartMatrix library a while back. Since the AllPixel firmware uses FastLED under the hood, there was only one thing to do… port the firmware to the Teensy 3.1 using the SmartMatrix extension so that it could work with BiblioPixel of course!
The port wasn’t too bad as it mostly required removing a ton of things like all the normal LED strip support. Technically I could have left all of that in, but since these panels are a fixed size it seemed to make more sense to produce a bespoke version of the firmware for this one application. Once that was done, it pretty much works just like the regular AllPixel except for being a fixed pixel count.
For code, instructions, and more technical details, be sure to check out the SmartMatrix branch of the AllPixel GitHub repo.