Backstory
Circa 1983, 14 year-old me was enamored of a clock seen at The Sharper Image store in the mall. It consisted of concentric rings of 60 LEDs of the classic 5mm domed package type. It featured a cool "60ths" LED animation that would circle the clock once each second. It had a price tag of an astonishing $250 - almost $800 in today's money!
About 5 years later, just a year or two out of high school , a friend and I decided that we knew enough to build that clock ourselves and maybe we could make it for much less money. So we brainstormed some ideas for the circuit design. We breadboarded some of the concepts but alas... school, work, and all the other early-adult-life distractions conspired to put the project in the drawer, and that was that ... for 33 years when, in 2021, I got the wild idea to complete the project using all the cool software and manufacturing services that have cropped up in the hobby space since.
Could this have been done with a microcontroller and some shift registers or maybe some charlieplexing? And are there a dozen ways to make the design more clever and use fewer parts? Yep! But those ideas wouldn't be "the" clock as we teenagers envisioned. So this design is as true as possible to our original ideas...
Counters
To track the time, binary counters were used, needing 6 bits to cover the 60-count of LEDs in each ring. 74393 dual 4-bit counters fit the bill nicely. Some discrete logic would decode the value of sixty to generate a pulse that would both reset that counter to zero and increment the next counter. We'd need 4 counters - jiffies, seconds, minutes, and hours.
An interesting point that came up was accounting for 60 LEDs in the hours ring to emulate a proper analog hour hand. For that, a spare counter acted as a divide-by-12 from the reset pulse going into the minutes counter - advancing the hour ring by one LED every 12 minutes.
Clock Source
The original idea was to use a 9V AC adapter and derive a 60Hz pulse from the mains. This has two problems. The first is that given the multiplexed nature of the LED driver arrangement (we'll get to that next), we would need a 240Hz clock. The second is that in 2024, the idea of powering something by anything but USB-C and fiddling with barrel connectors and wall warts seemed dumb, especially a natively 5V circuit.
So starting at 240Hz and working my way up the binary food chain, I discovered 3.93216 Mhz crystals and the 744060 binary divider that can drive a crystal directly -- clearly, I'm not the first to walk this path! Conveniently, a SPDT tactile switch could switch between 240Hz clock and one of the available less-divided lines for the fast-forward time-set function.
This 240Hz clock was fed into the remaining half of one of the 74393 counters to provide both the signals for the multiplexers (hang on, that part's next) and the 60Hz input to the jiffy counter.
Driving the LEDs
To drive the LEDs, we decided back in 1988 that the 74154 4-to-16 line decoder/multiplexer would be a good candidate, given the ample current-sinking ability on its outputs. But when we determined that we'd need 16 of them and saw the price at the time, we took a step back.
Some brain-stretching later, we considered that we could get away with only 4 of them if we multiplexed them by switching both the counter lines and the high-side power to each ring in sync, effectively rows and columns. Since we had more brains than money, we decided this was the way to go.
So the lower four bits of the counter would go to all of the '154s and the two remaining upper bits would choose which '154 would be active - This was considered Quite Cool and Elegant to us!
This is why we needed a 240Hz clock, in order to cycle through all four rings 60 times/sec, which was a requirement to support the little jiffy "chaser".
Yes, it's got a 555!
One little glitch discovered was that the counters could have arbitrary start-up values and that was no good because even if they do eventually roll over to zero, the relationships between the counts would be wrong. So a classic 555 was added to the design like fine retro seasoning, its output holding all the counter reset lines for a short time upon power-up.
Breadboarding
With a few online purchases yielding a pile of chips, LEDs, and breakout boards, I started breadboarding on my big breadboard and as the circuit grew, it invited some of its breadboard friends along to help. In time, I had a fully-functional prototype. It still had the one row of LEDs for all four “rings” but I could see that it was working properly and I had good faith that the high-side switching of the LEDs would be straightforward.
Ugly Prototype PCB
I'd done a few PCB designs here and there using Eagle, KiCAD, and PCBExpress, and I'd done a fair bit of SMD soldering, all by hand as the part counts and unit quantities were always quite low. This would be a great way to expand my existing skills and add a few new ones, like reflowing a whole board with almost 300 parts.
Since this was a big PCB by my standards with a lot of parts and using a much more recent version of KiCAD than I'd used before, I decided that I'd make an ugly-but-functional board just to prove out the entire circuit and my ability to work KiCAD's design tools and ERC/DRC functions. I wanted to be able to revise the circuit before putting major time into a prettier and more optimized layout and possibly having to undo a lot of work to revise it.
First capturing the schematic as I'd breadboarded and then the tedious task of scouring Digi-key to create an orderable bill of materials. Their website is quite nice for this, especially the ability to create a BOM for a single unit and then specify a quantity of units and watch the prices adjust for quantity breaks - very nice and exactly how it should work!
I let Freerouting do the dirty work as nothing in the circuit was particularly high-speed or critical and this was just a functional test board. After a loooong week waiting for boards and several hours of hand-soldering(!!) 275 SMD parts, I was equally shocked and pleased that it worked straight away!
Final PCB
Feeling pretty good about my abilities with KiCAD and the circuit design, I set forth to create the final PCB design. The original clock at The Sharper Image was a wall clock but I was more interested in making a desk clock, the small SMD parts and LEDs seemingly more in scale.
I started out placing all the non-LED components, trying to get an aesthetically pleasing design that would yield a clock of acceptable size for a desk clock. Placing 192 LEDs in a circle was going to be capital-T tedious, especially with the expected revisions to get to the final arrangement. I'd read about the Python scripting abilities in newer versions of KiCAD so I added that to the acquired skills list. I cobbled together a working script from various bits found around the web. Trying to keep the clock at desk-clock size meant bringing the LEDs together as much as possible while also allowing reasonable trace routing. I enhanced my Python script to allow arbitrary rotational offsets that allowed me to set the LEDs at a 45-degree angle offset from their "natural" rotation around the face. This allowed trivial iterations to arrive at the final design. I set Freerouting on a quest with this board, and it created a nightmare hallucination that any current AI would be proud of!
Taking a step back, I decided that the 45-degree rotational offsets also allowed me to route to the common/high-side of each ring of LEDs with a simple circle of copper for each ring - sweet! A little more scripting automatically placed vias near each LED to act as cross-unders for the low side of the LEDs to each 74154 in the board interior. This made a very clean design where Freerouting had the most difficulty and I let it have its way for the rest of the board.
After submitting my gerber files to JLCPCB and getting back boards and a stencil, I got to work, first applying solder paste and then 3 hours of hand-tweezing all 275 components - LEDs would be a lot easier to place if they were not polarized - those little tiny polarity dots are *small*! After checking some solder temperature specs and heating up my reflow plate, 20-30 seconds of eternity passed while I watched to be sure all the solder paste turned silver and hoped I wasn’t cooking any components to death. I slid the board off the plate, cooled it down, and then soldered on the time-set switch, USB connector, and the crystal...
…IT WORKED!
The Mechanical Pretty bits
Now to create the face, backing plate, and stand. Adding another skill to the mental toolset, I picked up OnShape for the first time. Some fun with circles and tangential constraints, I created the "scalloped" hexagon shape and sent my files to SendCutSend - a week later, I had some really nice-fitting visual bits that I finished off with some black-oxide socket-head cap screws and nuts.
Some time later, I decided that while the scalloped design was neat on paper, maybe a simpler hexagon would be better and I sent a revised design to SendCutSend and, yeah, I like it better. I ordered this new design in both the original dark acrylic, which gives it a nice clock-hovering-in-the-void vibe, and in light-gray which definitely shows off the board a lot better, but is a little too bare, I think. Something in between these two shades would be ideal. Also, I'd like to find a low-reflection plastic or coating if such a thing exists.
Small Production Run
While really happy that I was able to successfully reflow this board on the first try, I knew that I did not want to spend 3 hours hand-tweezing parts for each one. So I ventured for the first time into contract manufacturing/assembly, using JLCPCB again. Unfortunately, being a Chinese manufacturer, I had to re-source all the parts with JLC's local distributor LCSC. There was a lot to learn about the relationship between JLC and LCSC, how they worked their different tiers and schemes of inventory and how all that related to costs as well as minor issues with spec'ing 1980's parts. I eventually got all the parts arranged and in my inventory space at JLC, including one chip that was not available from JLC that they were able to source from Digi-Key. Not the cheapest way to go, but given that time was short and a production run of only five boards meant that a couple extra dollars here and there weren't going to break me, I went for it.
The assembled boards came back beautiful with only one issue - three of the boards had one or two LEDs that were upside down. They were still stuck to the board, probably just by flux and were in precisely the correct position and it was only green LEDs. I'm not sure if they were upside down in the tape from the part manufacturer or flipped around in the pick-and-place machine, but JLC gave me a token $8 credit for my hand-rework trouble when I reported it, fair enough.
What's Next
- I'd like to try an intermediate-darkness acrylic for the face plate and maybe an anti-reflective coating.
- I brought out three lines to a pin header on the back - 5V power, ground, and reset. I have a Raspi Pico W that I'd like to program to get the current time via NTP and at midnight/noon each day, tap the reset line to zero the counters to 12:00 to automatically set/correct the time. I had other ideas like bringing out the clock line to set an arbitrary time by resetting the clock to 12:00 and feeding in fast clock pulses to set the time, maybe that's an idea for V2.
- One quirk I'd like to address is when the multiplexing scheme flips both the counter and the high-side of the LEDs, the timing isn't perfect, probably due to some propagation delay differences between the multiplexers for the counters and the high-side switching. If you look *really* close, you can see the tiniest bit of glow in the "wrong" ring for each lit LED. This is virtually invisible in use except when fast-forwarding to set the time where the propagation delay is a much larger percentage of the multiplex timeslice, resulting in a minor LED disco inferno. Rather than taking on trying to fix the multiplexing timing differences, I may change the time-set function to feed the 1/60th jiffy clock into the minutes counter.
Closure
I contacted my friend of long ago and sent him an email with the words “I MADE THE CLOCK” to which he responded, “So I'm not the only one who's thought about that project over the years!” I dutifully sent him one of the finished clocks.