LED Marquee Module for Gadget Gangster Platform (w/ video)
I've had this project brewing since August when I saw the NerdKits LED Marquee. Rather than use an AVR I decided to use a propeller because the multiple cogs would allow one cog to drive the LED's, another to render text into bitmaps, and a third to write user input into a buffer for rendering. This much easier than dealing with interrupts, plus I could make the marquee larger because the propeller has more pins.
So I followed the basic design, but scaled it up to 8x24. The alternate columns are charlieplexed to half the pin count and it follows this schematic:
This results in the module use eight row pins and 12 column pins. The propeller has more pins left over and now I wished I made the module larger. But soldering 192 LED's was a chore, so I might not have finished a larger matrix.
This first spin file mines the propeller's ROM for the character set and scales it down to an 8x8 grid.
FontMaker.spin
The results were less than satisfactory and I spent about five hours hand tweaking the font to look decent. This file is the current driver software which displays the message shown over in the general forum.
LedMarquee.spin *
Still to do is to have a third cog read user input and write that to a buffer for rendering. There's also a diagnostic which displays the entire font which I will upload a video later. I'm also working on a second font which is larger, but more restricted than the general font. I also post some pictures of the module so you can see more details.
BTW Sorry prof_brainio and the other Forth guys. This project would be good to tackle in Forth, but my chops in that language aren't up to it yet.
* Updated with latest 1.1 version.
So I followed the basic design, but scaled it up to 8x24. The alternate columns are charlieplexed to half the pin count and it follows this schematic:
This results in the module use eight row pins and 12 column pins. The propeller has more pins left over and now I wished I made the module larger. But soldering 192 LED's was a chore, so I might not have finished a larger matrix.
This first spin file mines the propeller's ROM for the character set and scales it down to an 8x8 grid.
FontMaker.spin
The results were less than satisfactory and I spent about five hours hand tweaking the font to look decent. This file is the current driver software which displays the message shown over in the general forum.
LedMarquee.spin *
Still to do is to have a third cog read user input and write that to a buffer for rendering. There's also a diagnostic which displays the entire font which I will upload a video later. I'm also working on a second font which is larger, but more restricted than the general font. I also post some pictures of the module so you can see more details.
BTW Sorry prof_brainio and the other Forth guys. This project would be good to tackle in Forth, but my chops in that language aren't up to it yet.
* Updated with latest 1.1 version.
spin
49K
Comments
The RGB modules are nice, but as near as I can tell they require 32 control lines. So additional driver chips are required. Following your link and looking for similar items lead me to a 32 by 32 RGB panel for $100! I think I already have a version 2.0 of this module brewing in my head.
BTW not including the Propeller Platform, the budget for this project is under $10 with the LED's being most of the cost. So this is a really cheap project if you can find a source for cheap LED's.
This picture is a bit blurry, but gives you an idea about how the matrix is formed and attached to the row and column pins. The black electrical tape is there to prevent the PP's power LED from showing through the perf board. The next two pictures are close ups of the 12 column and 8 row pins:
To construct the marquee I put in one row of LED's and folded the anodes down, and then the cathodes to the right. I soldered the anodes into a column and clipped them short as I went. I then clipped the cathodes so they would be just touch the next row. I put in the next LED row and folded the anodes to the left and solder them to the previous row's cathodes. I then folded the second row's cathodes down and soldered and clipped them. I repeated this step for all 24 rows and tested each LED, then column as I went. I dropped and lost one LED, made two polarity mistakes, and had two defective LED's out of the 192 I soldered, not bad as an error rate, and each one was corrected as I went. I also tried to align the LED's as best as possible to look neat.
Making the row wires was next and I worked left to right and top to bottom. I took a single copper wire and removed all the insulation. I then cut the insulation into pieces just small enough to span two adjacent column wires. I then slid the insulation segments back onto the wire (not easy) and soldered the end to an anode/cathode pair. I slid the insulation segments into place and soldered the row wire to the next cathode/anode pair, and then slid the insulation into place. I repeated this until I came to the end of the row and soldered the wire to a 220 ohm resistor.
I then glued the row (top) and column (bottom) pin headers into place and soldered the other end of the resistors to the row pin headers.
Connecting the columns was the last construction step and the only trick is not melting the insulation of any row wires. At this point there are 24 columns, but they exist in charlieplexed pairs to 12 pins. To do this I exposed enough wire to span two columns, tinned the wire, and soldered it to the column wire. If you work quickly (or use a heat sink) the row wire insulation won't melt. Now take the free end and solder it to a column pin. The upside to the charlieplexed rows is that you can half the pin count, the downside is that you can't light adjacent columns and need to invert the logic on odd/even rows. A minor problem is that you scan rows within a column while most bitmaps are designed to scan columns, then rows. So I needed to write a program to rotate bitmaps too the correct orientation.
The final step was testing with a 3.3v power supply to make sure all LED's in the matrix lighted as expected. At this point I was ready to begin programming.
Note that I updated the LedMarquee.spin file in the first note with these changes.
I have a 12 X 10 display I made. (You're not the only crazy one around here.) I searched the internet and found a couple of fonts I liked. I really need to follow your example and make a video of it.
Thanks for posting this.
I scaled it to 16 lines tall and studied the scaled characters. I scaled it to eight lines tall some characters looked great, some needed small tweaks, and some were unrecognizable. So I went back to the 16 line font to see what important bits dropped out, and hand tweaked the eight line font until it captured the feel of the character. At the end of the five hours of font tweaking I started being able to figure out how to tweak the the characters by looking at the binary in the source. It's weird what the brain can do with enough practice.
I want to add a simple graphics API to allow for uses other than just text display and font animation commands. I would then add a serial line control protocol, so I can control the marquee via bluetooth from a PC. Given where I want to take the project, porting the Spin to Forth may be ideal as Forth already has an interactive command line. The PC program could just send Forth words to initiate display operations. But I could also use Mike Green's FemtoBASIC as the basics an interactive parser.