Fresh off of finishing the nixie tube watch, I wanted to make something similar but with a bit more complicated circuitry and I found some interesting vintage LED displays almost half a century old and figured it would be a cool project to get another way with these displays. It felt like a great opportunity to flex the skills I learned from that last project, make good design decisions from the start with the knowledge I acquired, and add a bunch of other cool features such as:
These are the display chips. There are 4 characters per chip, with each character being comprised of a 5x7 grid of LEDs. The two metallic rectangles are the exposed dies of the shift registers that hold the current display state. You can even see the bond wires coming off of them to the LEDs!
After a lot of reading from old xerox'ed copies of datasheets from the mid 70's, I got it to work. I wrote a library for driving the display with text, and create a custom font using byte arrays representing the chars that fit in a 5x7 resolution character.
Once all alphanumerics and some common symbols were added, I wrote a small animation on top of it to make it look like the text is being 'decoded' when it comes on screen. The nice thing is that this decoding animation works well across longer chains of displays that feed into each other. You can even connect the data out of one to the data in of another to create long daisy chains of these.
This was the first batch of breakout cards used for breadboarding the design; I really wanted to go about this project in a more methodical and professional way. I isolated each section of the overall schematic into it's own custom PCB for testing and debugging.
This is the final breadboarded prototype of the wristwatch. The top breadboard is dedicated for the atmega328p. On the right of lower breadboard you can see the daisy-chained dot matrix displays acting as one extended display of the time. As you look towards the left on the breadboard, you'll see a row of display driver transistors on a green breakout board hidden underneath some of the jumper wire. Further left is the 4 way input switch, and to the furthest left you see the blue breakout board with the TXCO. Attached by ribbon cable in the upper right corner is the accelerometer. I had this separated to easily move around and test the look-detection code.
Here's a small easter egg since I finished the firmware for it while being engrossed in Doom Eternal. The DIY alarm buzzer plays out the iconic E1M1 riff while this is shown
This photo shows some progress soldering together the finalized PCBs after breadboarding phases were completed. Here's my pinky for scale; I did all the soldering by hand with an incredibly sharp-tipped iron. No reflow oven or hot air gun.
This is a photo of the back; the yellow disk is a small auxiliary battery that's used only by the real time clock to keep time. The DS3231M component that keeps track of the time uses power so slowly, it will last for ~10 years even if the main battery for the watch dies. It's nice because even if the watch main battery dies, this keeps on going and the time is not lost.
Shot of the front before permanently installing the displays.
This is how I program the board. I leave a few silkscreen stops on traces that deal with ISCP, and cut a custom shape of ribbon cable out to connect on them. the output wires are then connected to a 6-pin In-Circuit Serial Programmer board I bought from Sparkfun, to program it with Arduino IDE.
Unfortunately I had issues with the lithium battery charging circuit. For some reason, the battery charge controller IC would let out the magic smoke whenever you plugged in the micro USB cable to charge it and I have yet to figure out why.