AK6TE Jason Watkins

Nixie Clock: Overview

Posted
Updated
Series
Part 1 of N, ongoing

This series documents the design and construction of my first nixie tube clock, including a high voltage flyback converter designed from scratch, ESP32 main board and 3D printed case. I'll also cover writing Rust firmware for the ESP32 to handle WiFi, NTP, USB Power Delivery, and the high voltage converter.

Intro

Don't remember when I first heard about nixie tubes, but like every engineer I've introduced them to, I was pretty immediately enamored. Sometime in 2021 or 2022, I designed the board for my first attempt at a clock in Eagle.Still its own thing back then, not... whatever zombie thing fused to Fusion that it is now. This was the first board I ever sent to a fab, and either insufficient review of the footprints I found online or my failure to account for fab tolerances correctly left me with a board that the tubes didn't even slot into.

Four nixie tubes glowing orange behind a acrylic panel, reading 23:30, with a neon pair of dots between the hour and minute pairs. The exposed board behind them is silkscreened NX1 to NX4 for the tubes and R1 to R5 for the resistors. A black 3D printed case with a vented top encloses it.
The clock, which looks a million times better in person

In 2026 I was mentoring some community college students, and we got on the subject of circuit design. After talking with them about it in general terms for a couple of hours, I decided I needed a project to really practice and learn the skill in depth. The original board files were long gone, and with the confidence born of a moderately priced LLM subscription, I had bigger ambitions anyway.

Versioning

I started this project optimistically believing that I could design everything a single time and send it to the fab. The first couple of revisions were just A and B. By the time I got to C and still wasn't very close to actually ordering anything, I realized I needed more granularity or I would run out of letters, so I added a numeric step variable. The current revision scheme increments the letter each time I change the fundamental design of the board in some way, and increments the step each time I generate the fabrication files. The tooling in the repository ensures that each fab generation is based on a clean git repo and tags the commit used so that I can always trace design files back to a specific repository state.

The current design is rev C4.

Files

All files for this project, including KiCad projects, firmware, software and 3D models, are in a single repository on GitHub. The repo does necessarily reproduce freely available but copyrighted material (mostly datasheets and vendor 3D models of components), but all of my work in that repo is licensed under CC BY-SA.

Repository (github.com↗)

Components

Part Notes
Main Board USB PD, 3.3V and 5V bucks, ESP32
HV Board USB PD bus voltage in, ~170V out, flyback topology
Face Board Tubes, ballast resistors and K155ID1 drivers
Body 3D printed in 5 parts
Firmware Async Rust, modules split by subsystem, wifi, ntp, hv, pd, nixies

Project Status

Area Version Status Report
Main Board C4 Working flawlessly. One minor hiccup with getting the ESP32 on the USB bus that we'll talk about in a future post.
HV Board C4 Working in some configurations; by far the most in need of a second iteration out of any of the components. With a 5V supply (computer port), the clock works great. On a 12V supply the supply works either intermittently or not at all depending on which of the two built boards I use.
Face Board C4 Fully working and operational. The biggest issue on this board is how big it is. The resulting clock case to fit the face feels too big to me. Considering an alternative design that ditches the K155ID1s and moves all of the non-tube components to SMD on the back side to cut the front face area roughly in half.
Body Unversioned Works okay, takes about 12 hours of total print time.
Firmware 1.1 Fully working. No real surprise there. This is the only component where I am completely within my professional competency. I did have to learn async Rust finally and work through setting up the Xtensa toolchain, but the former is actually very straightforward and the latter was easy with a couple of pointers from Claude.

System Architecture

Nixie clock system architecture Block diagram of the main, high-voltage, and face boards. USB-C enters the main board, where a CYPD3176 manages power delivery and USB data switching. Switched VBUS supplies the 3.3 volt and 5 volt converters and the high-voltage board. An ESP32-S3 enables the flyback and drives the face board over sixteen BCD lines. Main board High-voltage board Face board Wi-Fi network SNTP time sources USB-C USB power and data CYPD3176 + bus switch TS3USB221A USB mux ESP32-S3 firmware and Wi-Fi TPS63070 3.3 V buck-boost TPS629203 5 V buck VBUS D+/D− HPI USB switched VBUS 3.3 V LM51561H flyback adjustable ≈ 170 V default-active inhibit EN_HV PGOOD ≈ 170 V 4 × K155ID1 static cathode drive 4 × IN-12B 2 × INS-1 anode ballasts 16 BCD lines 5 V power signal high voltage wireless Ground returns are omitted.
Nixie clock system architecture

Design Constraints

The Design in Brief

A red circuit board with positions for four digit nixie tubes, two dot nixie tubes, and four BCD decoders, as well as an Arduino Nano.
A bare black circuit board with four eleven-pin tube sockets silkscreened NX1 to NX4, two rectangular pads for the colon tubes NX5 and NX6, six axial resistors, an electrolytic capacitor at C3, and four empty DIP sockets along the bottom edge.
My failed first attempt, circa 2021, and the updated 2026 face board

Face Board

Design started from the old boards, which I still inexplicably have despite my anti-hoarding instincts and their utter uselessness. The new board retains the 4 digit HH:MM display, repositions the ballasts a bit, and retains the K155ID1 BCD drivers, all in pretty much the same layout. The display is statically driven rather than multiplexedI gather from my research that some people use a single driver that cycles which tube it is driving. This design seems so obviously wrong to me that I have thus far refused to even look up the specifics.. The tubes are wired to the K155ID1s in an order that simplifies layout rather than wiring the tube digits to their nominal BCD output. The firmware handles this with a simple table lookup to translate. I quickly realized that an on-board WiFi capable MCU and high voltage converter would make the clock board too big for any reasonable clock footprint, so everything else moved to separate boards.

High Voltage Board

My next bright idea was to put the HV converter on its own board and build it with through hole components where practical so it would be somewhat period appropriate and could be displayed as part of the clock. After some consideration, I came to the conclusion that putting anything carrying ~170V at several milliamps on display was a pretty idiotic idea. The current clock hides it under a sheet of acrylic where it's mostly invisible anyway. I think the next revision will move the design to full SMD on the main board.

Electrically the board is a ground-referenced flyback built around an LM5156H controller and a Coilcraft DA2032-AL transformer. It converts a 5-12V input into an adjustable rail centered at 170V. The main board controls a default-off enable circuitMeaning the HV output stays disabled if it is somehow powered without a connection to the main board and monitors the LM5156H's power good output.

Main Board

Finally, for circuit boards, the main board holds the ESP32, USB Power Delivery chip and associated parts, along with 3.3VThe 3.3V converter is in fact currently a buck/boost for reasons we'll get into later in the series, but this was a relatively expensive and egregious over-design on my part. and 5V buck converters. The ESP32 manages USB Power Delivery through the CYPD3176 controller over HPI.

Case

The case was the very last thing I worked on. I would call the design "utilitarian minimalist". It's a box. I did spend a lot of time looking at pictures of other nixie clocks, and of desk/table clocks from back when those were a thingI consistently typed "60s table clock", "70s desk clock", etc. into the search bar, but it was obvious from the results that Kagi image search does not have any real concept of time., and what little actual design there is in the case was aimed at evoking a sense of the style of the time when these tubes were in common useIt occurs to me as I write this that I never typed "Soviet table clock" into the search bar, which is probably a way better search term....

Mechanically the printed enclosure consists of a face frame that holds the face board and upper and lower body sections, each of which mounts one of the two remaining boards. Acrylic panels cover the face and the HV board, which is mounted underslung from the top body panel. This keeps both boards visible without exposing a high voltage touch hazard.

Firmware & Software

The firmware uses the Xtensa Rust toolchain and Embassy's async executor through Espressif's esp-rtos. The code is split into modules based on purpose. So far the firmware has performed flawlessly, but I have not added unit tests or done extensive performance analysis. The ESP32-S3 I put on the first iteration has a second core, but it is not currently used.

In addition to the firmware, I have added a basic command and telemetry protocol on the firmware side and a simple egui desktop application that can read the device logs and issue software resets. This has been invaluable while debugging the 12V power supply issues, where I can't simultaneously plug the device into a computer USB port to connect probe-rs.

I didn't start working on the firmware until after I had already ordered the boards. As a consequence, I realized very shortly after it was too late to cancel the order that there is a RISC-V version of the ESP32ESP32-C series, likely ESP32-C6 for this design that would have gotten me first tier Rust toolchain support. That version of the ESP32 has fewer GPIOs and only a single core, but so far I don't think I need the second core and an I2C linked buffer to expand the IOs is trivial. I'll likely make this switch in rev D.

Closeout

Summary of the Current State

Initial bringup went a lot better than I expected considering the high voltage converter design was a little out of my depth and I relied on Claude more than I would have liked. Ultimately, aside from the 12V issue that still needs more debugging, the only real problems were a couple of parts that had incorrect values in DigiKey's parts catalog. Fortunately none of those parts ended up in the critical path.

I have a ton of competing ideas for the next revision, which is why I'm going to try to write up the current state in detail first before figuring out how those all fit together. I think I can reduce parts count on the main board a lot, but then I also want to expand the HV converter to make it more capable. TBD whether rev D ends up any cheaper than my first go-around.

Estimated Cost

The previous paragraph just made me realize that I haven't mentioned cost at all. I should probably go back and total it all upOr not... for my own sanity, but I'd estimate that cost at about $600 for 5 of each board, including assembly on the main board and parts to build out 2 of each. A big chunk of that is shipping and tariffs from a Chinese board house, but I got several quotes and no one in the US could even match the price despite no tariffs and shorter shipping. One US house quoted me as much per board as the entire order from China.

Rest of the Series

I plan to write several more notes in this series, focusing on individual boards and the firmware. I'll probably skip the case since at least the current iteration really doesn't have a ton of thought put into it.