I didn’t think that my first six tube clock would be an ITS1A clock, but after I got some of the tubes and spent a little time getting them to light up (and then be able to control what was displayed), it seemed a small step to building an actual clock.
- I wanted this to be all through-hole components so that I could sell spare boards as kits for others to build.
- I wanted to re-use a lot of my existing clock code that runs on ESP8266 chips.
The control circuitry is documented here. Rather than go into all the same details, I’ll just summarize here:
- The sub-cathode (the -250V line, pin 7) is held constant.
- The 1st anode (40V, pin 2) and the 2nd anode (100V, pin 14) are normally held high, and are briefly pulled low to reset the thyratron – i.e. to make it possible to change the state of a segment. The datasheet states a shortest duration of this pulse of 500μs. In practice some tubes were reluctant to clear with this timing, so I made it configurable up to 5,000μS.
- The desired state of the segments (1st grid) is then set: 0V = on, above 0.4V = off.
- The state is locked in by briefly pulling the 2nd grid (pin 6) high (normally it is at 0V). Again the datasheet specifies a minimum of 100μs. I made this configurable too, up to 1,000μs.
- The display is multiplexed. This is achieved by only pulsing the 2nd grid on the tube whose display should change.
The core of the power supply is a boost converter based around the MC33063. This is configured to produce roughly 50V. The unrectified output is then fed into a couple of Cockroft-Walton ladders to produce the 100V and -250V.
Life isn’t that simple, of course. Cockroft-Walton ladders are leaky, and the MC33063 can’t really produce 50V at the power levels I need. So the ladders actually go up to a nominal 150V and -300V, then Zener voltage clamps set the 100V and -250V. An interesting thing to note is the tolerance on the zener voltage. Typically this is ±5%, which is ±12.5V for the -250V level. This is a little extreme, so I managed to find some with a tolerance of ±2%.
The 40V is produced by a Zener clamp, which relies on the characteristics of the ITS1A/B tube for this pin.
Finally(?), I added some bleeder resistors to drain all those capacitors when the power is removed. These are very high voltages that can give quite a jolt. Without the bleeder resistors, it takes a couple of minutes for them to decay to around 20V.
The ITS1A/B are actually very easy to drive – by design they can be directly controlled using logic-level signals. I was somewhat limited by my self-imposed requirements – an ESP8266 and only through hole. The only off-the-shelf product that met these requirements was the ESP-01. This exposes a bare minimum of GPIO pins, but as I fleshed out how many control pins I needed, it became clear that the ESP8266 just doesn’t have enough anyway. So I settled on using a MCP23017 I/O expander. It has 16 GPIO, can be controlled using I2C and works at 3V3.
The software makes use of the ESP8266 wifi connectivity to synchronize time with the internet and provide a web-based configuration dashboard. In fact, there is no RTC chip in the clock.
This web control dashboard uses JQuery mobile to provide a smart-phone-friendly interface to all of the configuration options. This is an example screen:
I used the ESP8266 Core for Arduino to program the ESP8266 – it comes with many great libraries that allow me to focus on developing the actual clock code.
The clock can also be controlled via Alexa – it uses the very simple FauxmoESP library. Did I mention that the Arduino platform has great library support already?
Here is a video of it in action. You can see it has backlighting. It is a string of neopixels that were literally glued on the back of the display board. The software will drive them if they are there.