There are a number of different ways to build this system, using different microcontrollers (or no microcontrollers at all) and a variety of hardware and circuits. We built our system around Atmel AVR microcontrollers (ATtiny2313s, specifically), but if you would prefer to use something else and understand the operating principles, you should have no problem writing your own code. Maybe you’ll come up with something better. Regardless, these instructions are based on our system using AVRs.
AVR Development
AVRs are probably the most well-documented microcontrollers on the internet so I won’t spend a lot of time explaining how to develop with them. You can get some nice kits (STK-200) that will let you drop in and program all of the major AVRs, or you can build on a breadboard or cheap prototype board and program via ISP. You can develop in Windows or Linux, but I’ll provide a basic overview of the Windows process.
Personally, I mostly use Linux but find the combination of AVR Studio and AVRISP to be so convenient that they’re worth booting into Windows or running in a virtual environment.
AVR Studio
Atmel provides a powerful IDE (based on Visual Studio) for writing and compiling c and assembly programs for all of their microcontrollers. We provide the code as a Project that can be opened directly and built. Use something like ISP to download the machine code to the AVR.
ISP
There are a variety of different ways to program AVRs (some depending on which AVR you’re using), but ISP (in-system programmer) is pretty convenient. You can build a cable to do this from a parallel port or buy a USB ISP programmer (get one on ebay straight from China and it will only cost a few dollars). In Windows, you can use AVRISP to program the microcontroller.
The Timer Circuit
You need at least two timers, but four or six are better. Build your own board from scratch or use a readily-available prototype board such as the ones produced by Olimex. One ATtiny can clock several more ATtiny’s, so only one oscillator is needed for the entire system. All of the AVRs can run the same code, but one will have to have the fuses set to use an oscillator and to enable the clock output, while the rest will need to be set up to use an external oscillator.