Resistor Color Code Clock

The resistor color code is a method for encoding numeric information with color. The Resistor Color Code Clock uses that code to display the time and date on an acrylic "resistor".

In 2006, the Hack-A-Day Design Challenge made a call for new, interesting and innovative projects that their readers might consider building. The RCCC was to be my entry for the competition, but building and programming the clock, along with creating some of the parts became quite challenging and the deadline for the contest passed.

I chose to use surface mount components mostly because of the space limitation imposed by the Design Challenge's credit-card sized circuit board, but also to show electronics hobbyists that SMD is a technology to embrace. An ordinary toaster oven for reflow soldering, and practically no drilling reduce the assembly time of the clock's approximately 70 component board to about an hour or so. (Oops, I had the wrong parts count on an earlier draft of this page.)

A clock as unique as the RCCC needed an equally unique user interface. An article on Hack-a-Day provided the basis for the clock's UI in a story describing a method to use an ordinary LED as a light sensor. This new element makes the RCCC's interface completely buttonless. That's right, all of the clock's functions are accessed without pushing, poking or prodding. There's no stylus to lose, or magnet to misplace. All you need is light, the clock has detects when a bright light is shining on it, which toggles the clock into showing the date, and optionally entering the set time mode.


RCCC PC board

Major components of the RCCC are

The chips are both SOIC types, and the LEDs are PLCC. Resistors and capacitors are all 0805 parts, and there's a mix of 0805 and 1206 parts used for jumpers on the single-sided board. The driver transistors and the two voltage regulators are SOT23 packages. Both crystals and the battery holder are also surface mounted parts. A pair of 1206 packaged red LEDs round out the surface mounted parts, the only part that required drilling is the power connector.

The blue segment of the 10 hours "digit" uses two I/O pins, and the two red LEDs used as the separator use one pin each. The rest of the LED segments use one pin and a driver transistor. The X1226 uses an I2C interface to communicate with the CPU, and provides a 1 Hz signal to the CPU.



The "resistor" body is the acrylic roller from a Speedball brayer kit. The bands were lightly sanded to diffuse the light from the LEDs. The endcaps were made from outdoor faucet caps from a local hardware store. The leads were formed from solid copper grounding wire. The clock base was assembled from five pieces of 2" x 1/2" poplar and some wood veneer accents, and finished with about 20 coats of spray lacquer.


For something as simple as a clock, the RCCC contains an astounding amount of code. Some of code handles converting time data from the X1226 to the format the clock displays. More of the code is devoted to fading the transitions from one time to the next. The bulk of the code is about setting the clock and some related tasks. The time setting procedure sets the clock one digit at a time. During the time setting process, the oscillator trim adjustment can be modified if the clock is running fast or slow. In the next revision of the code, I'll add a quick way to switch between Daylight Saving time and Standard time.


Using the blue segment of the 10 hour "digit" makes it necessary to use a halogen or LED flashlight to set the clock. That is because a blue LED is not very sensitive to the redder light from incandescent bulbs. Originally the separator was going to blink, but it seemed to be too distracting to me. It now fades up (dimmer to brighter) in the A.M. hours, or fades down during the P.M. taking 60 seconds to complete a cycle. The Sharp LEDs became mixed in my parts box, and the color of the minute LED does not quite match the other three. The "resistor" acts as a lens, which made the two prototypes unusable because the viewing angle was very narrow. The viewing angle of this design is a bit over 45 degrees, and is just right to be used as a desk clock. The RGB values for most of the colors were relatively easy to figure out, though a few needed tweaking to be more easily differentiated. Brown was the most problematic, and ended up being a very dim orange. There is a single unused I/O pin, just enough to provide an output for an alarm function. The layout for the PC board was created with a CAD program, and would not likely be of much use if I made it available. The program was also unwilling to allow me to insert the Hack-a-Day logo, so I had to place text on the board. I have since switched to Eagle. Someday, I might redesign the RCCC. If I do, I will post the Eagle files and source code here. It may be quite some time in the future though, the clock works well enough that I am using it as the main clock in my living room. I built the clock mostly to see if it could be done, and to see how usable the resistor color code would be as a display interface. The time displayed in the picture at the top of the page is 5:26, but my digital camera seems to be unable to capture the colors of the LEDs well. I meddled with the photo using the HDR technique. My thanks to Hack-a-Day for considering my clock worthy of a page.

(June 2010) The design for version 2 of the clock is nearly finished. The notable changes include

  • No RTC
  • No separator/colon
  • High accuracy TXCO
  • External battery backup
Once the prototype is up and running, I'll add a link here. Unless something goes horrifically wrong, it should be ready sometime in August.

(Sept. 2010) Sorry folks, I was side-tracked. The PC board design is complete, and I've started on the code. Stay tuned.

(Apr. 2011) The new design is built and running! There's still some code to write, followed by the new pages for it. Hang in there, it'll be worth it.

(May 2016) I was a bit sidetracked working on the CDM102 LED module.


Video of a time transition followed by triggering the clock to show the date, 6 Meg.

© 2010 DB