For quite some time I’ve been interested in getting a good RGB matrix circuit figured out. I’ve used the max7219 to do a one-bit 8×8 matrix, but the idea of being able to drive full color video is an intriguing challenge. After a freelance job inquiry came in regarding RGB LEDs driven by an Arduino, I figured it was about time to get that all figured out.
So far, I’ve built one circuit using a cascade of shift registers. Three of the 8-bit registers handle each color, and one handles the common anode to do row-scanning. An Arduino is driving the circuit by way of a hardware timer, and is continuously strobing the entire set of shift registers, turning individual colors on and off to create manual pulse width modulation.
It’s working pretty well, the flicker that you see in the video isn’t visible to the human eye. However, due to the relatively low clock speed of the Arduino, only ~28 steps of brightness are possible which creates a fairly limited color space. There’s also not much head-room left on the Arduino for communication and display logic.
This circuit would be handy for a simple ambient display of some kind but I’m going to start over and try using some TLC5940′s instead. They interface via SPI and send out PWM on 10 pins with a resolution of 1024 steps which blows my current PWM resolution out of the water. Plus, the SPI interface shouldn’t be as taxing on the Arduino so I’m hopeful I can get it set up to receive and decode video at nice frame rates.
I’ll post more once I have something working on my breadboard..