This was a cake/light sequencer I made for my friend Jeannette for her birthday using the PIC 16F684 microcontroller. The program was written in the Hi-Tech C Compiler running within MPLAB. Unfortunately, the 106 degree weather in August wasn't too forgiving causing most of the cake to collapse. It was still a fun prop to have at Beethoven's outside bar.
So my original thought was that I was going to make a cake in the form of a building with a King Kong toy taking over it. There was to be a scrolling sign with Jeannette's name on it (PIC part of the project) and other little toy figures sticking out the windows (which were also going to be made of chocolate bar squares), and other figures on the base. Well I couldn't find a King Kong toy so used a dinasour toy instead.
Everything went as planned, but the Texas heat in August literally made the cake melt on the way to San Antonio. No big deal, it added some character. It was my birthday that Friday night and Jeannette's on Sunday so we had a blast working behind the bar that night.
The PIC 16F684 microcontroller can only source 90mA on it's output at one time and I wanted to reduce the amount of components and not having to use transistors or other drivers for the LEDs. I also wanted to use two LEDs for each letter in Jeannette's name, but that would mean I would have to source 360mA (20mA x 18) if I wanted to have all LEDs on at one time. So I decided to go with sort of a "charlieplexing" method. Although charliplexing (which there are dozens of good tutorials about that online) uses the tri-state properties of the I/O pins of the uC. My method is similar in that it strobes each pair of LEDs two at a time where at most only two LEDs (40mA) are on at one particular time. When viewing however, the POV (persistence of vision) effect appears like all are on at one time since the uC is running at such high speeds. The schematics and source code can be found here:
So the whole thing took me about three days to make. I was going a little crazy trying to find out why my code wouldn't work early on, but it ended up being a wiring issue on my breadboard.