LED Array and Sign Howto?
March 25, 2006 10:34 PM   Subscribe

How do I make an computer-controlled (and PIC-controlled) LED matrix?

I've been looking for some hints on how to start making a parallel port-controlled LED matrix with the possibility of moving on to using a PIC and some flash memory to make a standalone sign. Can any MeFites out there help push me in the right direction?

I've pretty much exhausted the usual search methods and have come up with a few decent websites, but they're either in German (http://www.jalcds.de/blinkenleds/), already completed without much of a description on how to do it (http://www.armory.com/~spcecdt/electronics/LED_matrix/) or really old.

What I'm aiming for here is two things: 1) a nifty 16x16 or 32x32 (or something) array of LEDs that I can hang on my dorm wall and control from my computer so that I'm cool and 2) to eventually create a self-contained/programmable LED sign similar to this (http://www.betabrite.com/Media/collage.jpg).

Maxim makes some nifty 5x7 LED array controllers, but interfacing them is just barely out of my electronics experience.

For bonus brownie points, it'd be cool to be able to do RGB color, too.
posted by yellowbkpk to Computers & Internet (8 answers total) 1 user marked this as a favorite
 
The MIT dance floor is pretty darn close (although too big and too complex) to what I'd like, too: http://web.mit.edu/storborg/ddf/
posted by yellowbkpk at 10:37 PM on March 25, 2006


I think this might be of interest. I'm no expert but it seems to relate to what you're talking about

Tiletoy website
Tiletoy Blog
posted by Glum at 10:53 PM on March 25, 2006


There was a related question about a month ago: How can I drive a LED as a light-emitter and a photo-diode simultaneously?
posted by Chuckles at 2:33 AM on March 26, 2006


See also. Because ain't nothing cooler than Pac-Man chasing a ghost on a bike.
posted by disillusioned at 3:26 AM on March 26, 2006


What you need to do is learn how to drive an LED matrix. Get the datasheet for that 5x7 array because it's exactly the same algorithm to drive that as the larger displays; the larger ones just need more bits.

How it works is this. You have a rectangular array of LEDs, connected by rows and columns of wires. The rows will connect to (say) the anode of each and the column to the cathode; I will assume this polarity for the rest of the explanation. You can therefore light any single LED by passing current between a single row and single column wire. You'll need to get the datasheet for the array to know which polarity the connections are and what the current limits for each element are.

You want to be able to display an arbitrary bitmap on there, not a single dot. To do that, you must scan. That means you connect (temporarily, under control of your PIC) a column to ground. You attach the row pins to a separate data port on your PIC, probably via some transistors to supply enough current and some current limiting resistors so it all behaves nicely. The value on the port will appear as a vertical pattern of dots at the column you have activated. You repeat this at high frequency so that the whole display is refreshed at no less than 50Hz, preferably 100Hz. Each column you activate, you'll obviously supply a different bit pattern to the row lines.

On the assumption that you haven't use a parallel port much, I suggest you go look up the EPP specification as it's the easiest for your purposes. A simple implementation (like, 3 or 4 ICs in a breadboard) gives you an address register and arbitrary number of data registers, presumably addressed by the address register. I suggest you have address = column and data = row. That will allow you to run an array up to 8x8 pixels. Once you get more pixels (eg a row of these 5x7 elements), connect the address register to a bunch of decoders (eg 74LS138) to select the columns; that will give you up to 256x8.

If you have more questions, look my email up in my profile and I can supply some code hints and maybe (if I can find it!) a schematic of my old parallel port interface.

You'll quickly run into timing inconsistencies on the PC, resulting in ugly flicker and columns stuttering bright/dim occasionally. At that point, you need a microcontroller.

If you want to go for highish res, you need to think about some slightly trickier hardware that will refresh regions of the display concurrently for you so that you maintain an acceptable refresh rate without the duty cycle (and therefore brightness) becoming unacceptably low. More columns = less time for each column = less light from each column. The trickier hardware stores the state of each region of display and handles refresh for you; these run in parallel so that multiple regions are refreshing concurrently. That's what the Maxim controllers do for you; ignore all that crap and just make the 5x7 work on your parallel port :)
posted by polyglot at 4:04 AM on March 26, 2006


One other thing you might want to consider is that you can get bitmapped LCD displays fairly cheap. I have a couple of 128x64 sitting here that I got for AUD30 each from a surplus electronics joint. That have Hitachi HD61202 on them, a very simple interface that's similar to the HD44780 that sits behind pretty much every ascii LCD in the known universe.
posted by polyglot at 5:15 AM on March 26, 2006


You can find a 16x16 array of LEDs, run by an open source
8051 based processor, at Spare Time Gizmos. You can buy
it as a kit, or as a PC board. It's got an infrared receiver.
posted by the Real Dan at 11:17 AM on March 26, 2006


This site has programable badges, belt buckles and PCBs: Digital badge
posted by vidvicar at 9:08 AM on March 27, 2006


« Older does batman retire?   |   Medical Songs Newer »
This thread is closed to new comments.