driving an RGB LED matrix

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 8x8 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..

connecting lots of things

Quite some time ago I built an LED matrix to use with a Maxim 7219 display driver.  The project was just for fun and a good excuse to do some learning.  I dusted it off the other day and decided to hook it up to the internet because everything is better when it's hooked up to the internet. 

The result is what can only be described as a very round-about way of getting some LEDs to light up.  The signal path goes like this:

  1. web form is loaded from a public web server
  2. message is sent via ajax to a php script on the web server
  3. php script connects to a processing sketch
  4. processing sends the message via serial connection to the arduino
  5. arduino takes the message apart and sends a lot of bytes to the MAX7219

On a side note, I've learned that if you accept incoming connections from the internet, you will get a lot of unexpected traffic. As a result  I have to filter for the IP of my web server or I get lots of strange garbled messages from what I can only assume are clandestine hacking groups who are trying to get my top secret documents.