Proudly featured on the cover of the March 2018 issue of Nuts and Volts magazine! |
This was the day this project officially started. I submitted my proposal for my Senior Project for next semester.
A number of years ago, I remember reading about a technique to individually control a large number of LEDs with a relatively small number of I/O lines. I immediately thought a good use of this technique would be to make a clock with 180 LEDs. It would have 60 LEDs each for seconds, minutes and hours (which would increment every 12 minutes). It never became much more than an idea in the back of my mind until I suggested it to my instructor for my Senior Project.
My instructor responded that he would accept the proposal if I added an alarm feature. The goal originally was to independently drive 180 LEDs, read two pushbuttons and monitor the 60Hz line, all with an 18-pin microcontroller. Now to support the alarm feature, I would have to add a buzzer for the alarm, an “Alarm” LED and probably two more pushbuttons for setting the alarm. While I’m at it, I might as well add “PM” LED to make it a 24-hour clock. That way an alarm set for 7:00AM would not go off at 7:00PM.
But now I had a dilemma! I really, really did not want to increase the pin count of the microcontroller! In the back of my mind, I figured that if thing got really hairy, I could use a 20 or 24-pin controller. But I was going to do all I could to keep it limited to 18 pins! So I submitted my formal proposal stating that I would use only a 18-pin microcontroller to drive the clock!
Could I do it? Could I actually figure out a way to drive 182 LEDs and a buzzer, and read the status of four pushbuttons, all with using only 16 I/O pins (two pins are dedicated to power and ground)? Oh, and did I mention, I want the controller to monitor the 60Hz from the AC-AC wall wart for a time base as well?