Throughout this project, I have been saying that the oscillator I am using, the DS32kHz, is accurate to 7.5 parts per million, or 4 minutes per year. Having run the clock continuously for about 3 weeks now I would expect the clock to have drifted by approximately 14 seconds. However, measuring the clock against the clock on my phone I have found that it has drifted by approximately only two seconds.
Playing guitar and electronics have been two of my favourite things for a long time now. When I was about 14, I combined these two for the first time and built a pretty simply 32W amplifier. While the design is super simple, it actually has a really nice clean tone and does not distort the sound at all. It’s capable of diving an 8 ohm or 4 ohm load. Today I decided to give it a bit of a clean and check if it still worked.
The clock is controlled by an ATTiny87 which has three main jobs:
- Counting the pulses from the Maxim DS32kHz
- Controlling the display via the shift registers (read more)
- Interacting with the user via the reed switches to produce a user interface
Each of these jobs will be discussed separately below as well as the main code to bring it all together in a power efficient way. Full code can be found at my GitHub.
The Amazon Echo Dot is a popular home voice assistant, often trusted to control heating, lighting, music and even door locks. Personally, I use mine for trivial tasks such as controlling Spotify and setting alarms but you can see that it would make an obvious target for an attack.
As discussed in the previous article, the display is controlled by a number of shift registers. Shift registers can be controlled directly by a SPI bus, which is useful as most microcontrollers (including our ATtiny87) have a built in SPI bus peripheral. This means that writing a byte to the shift register is almost as easy as just writing a byte to a register.
My Nixie tubes have 11 active pins each: a common anode and one cathode per digit (ten in total). The anode is connected to +180V via a 47k current-limiting resistor and each cathode is connected to the collector of a high voltage bipolar transistor (MPSA42) so that current can be controlled through each of them via the base of the transistor. This gives a total of 29 transistors that need to be individually controlled (24 hour clock requires 3 possible numbers for the first digit, 10 for the second, 6 for the third and 10 for the fourth). I chose to do this by using four 8-bit shift registers, connected in series to make one, 32-bit shift register.
A geometric series is a series of numbers where each number in the series is equal to the previous number multiplied by a constant multiplication factor. For example: 2, 4, 6, 8, 16… is a geometric series with a constant multiplication factor of 2.
The sum to infinity of such a sequence, then, can be represented as: