Following is the tutorial of a DIY Nixie Clock implemented on Arduino; featuring a DCF77 receiver, alarm clock, timer, stopwatch, automatic brightness and more… The purpose of this page is to help electronics enthusiasts around the world to build their own Nixie Clock by reusing the whole or part of the current design and software. I hope you find this material useful and would be happy to hear your feedback in the comment box at the bottom of this page.
Warning: Nixie tubes are powered by a dangerously high voltage of more than 170 Volts. The author of this page is not liable and takes no responsibility of any damage to living beings and things due to improper handling of the high-voltage parts. Please be aware that the current design has not been certified for safety, consequently it is not suitable for commercial applications and must be implemented at your own risk. If you are not fully confident in what you are doing or do not possess advanced electronics, debugging and soldering skills; please do not attempt this project and look for something simpler to begin with. Otherwise, i hope you enjoy working on this project.
Affiliate links: please support this website by using the supplied affiliate links for purchasing the parts required for this project.
About Nixie Tubes
A Nixie tube, or cold cathode display, is an electronic device for displaying numerals or other information using glow discharge. The glass tube contains a wire-mesh anode and multiple cathodes, shaped like numerals or other symbols. Applying power to one cathode surrounds it with an orange glow discharge. The tube is filled with a gas at low pressure, usually mostly neon and often a little mercury or argon.
The most common form of Nixie tube has ten cathodes in the shapes of the numerals 0 to 9 (and occasionally a decimal point or two), but there are also types that show various letters, signs and symbols. Because the numbers and other characters are arranged one behind another, each character appears at a different depth, giving Nixie based displays a distinct appearance. Some Russian Nixies, e.g. the ИH-14 (IN-14), used an upside-down digit 2 as the digit 5, presumably to save manufacturing costs as there is no obvious technical or aesthetic reason.
Each cathode can be made to glow in the characteristic neon red-orange color by applying about 170 volts DC at a few milliamperes between a cathode and the anode. The current limiting is normally implemented as an anode resistor of a few tens of thousands of ohms.
Nixie tubes suffer from an effect called “Cathode Poisoning”. Whereas the cathodes of the digits that are not being regularly lit get contaminated by deposits emerging from more frequently lit neighboring digits. These deposits eventually lead to the partial or total failure of the affected cathodes. In oder to acoid cathode poisonoing, all of the Nixie tube’s cathodes must be powered-on at regular intervals.
Hundreds of variations of this design were manufactured by many firms, from the 1950s until the 1990s when they were displaced from the market by the LED and LCD displays.
The Nixie Clock is built around six IN-8-2 Soviet-made Nixie tubes shown in the above picture. This kind of tubes can display digit values from 0 to 9, complemented by a decimal point at the bottom-right side of the digit. These were produced at the Melz Tube Factory in Moscow. In contrast to other Soviet tubes (like the IN-14), these tubes have slightly larger digits relative to the overall tube height and don not use an inverted “2” for the digit “5”. According to the imprint on their back, the particular samples used for this project are dated 1974 and are still running good.
The Nixie Clock runs off a 12 Volt power supply, however the Nixie tubes require a high anode voltage of approximately 180 Volts DC. The 12 Volts are up-converted using an off-the-shelf DC-DC converter; which ensures an adequate galvanic separation from the mains power supply. The tubes cathodes are driven by a K155ID1 cathode driver IC, which is a BCD-to-decimal decoder especially designed for this purpose. Each of the anodes is driven via a dedicated optocoupler (TLP 127).
The clock’s CPU is an Atmel ATmega328P microcontroller which runs on an off-the-shelf Arduino Pro Mini compatible board. The CPU has a clock frequency is 16 MHz, 2 Kilobytes of RAM and 1 Kilobyte of EEPROM. It features two separate programmable timers. Timer 1 is used for the main timekeeping, while lower resolution Timer 2 supplies the clock signal for the Countdown Timer and Stopwatch features.
The microcontroller drives the Nixie tubes via multiplexing. Which means that only one Nixie tube can be lit at any single moment in time. One single K155ID1 cathode driver chip is used for driving the cathodes of the tubes in parallel. Each of the anodes is individually driven using its own optocoupler. The microcontroller quickly cycles through the individual digits, while the persistence of the human vision creates the illusion that all of the digits are being simultaneously lit.
The brightness of the Nixie tubes is automatically adjusted to match the ambient lighting conditions. A photoresistor is used for measuring the ambient light intensity. Brightness is controlled by varying the power-on duty cycle of the Nixie tubes.
To avoid cathode poisoning, the Nixie Clock ensures that all of the digits are being periodically lit by using one of the Cathode Poisoning Prevention routines.
This clock has a built-in receiver for the DCF77 time signal. DCF77 is a German longwave time signal and standard-frequency radio station. It started service as a standard-frequency station on 1 January 1959. In June 1973 date and time information was added. Its primary and backup transmitter are located at 50°0′56″N 9°00′39″E in Mainflingen, about 25 km south-east of Frankfurt am Main, Germany. The transmitter generates a nominal power of 50 kW, of which about 30 to 35 kW can be radiated via a T-antenna. The DCF77 signal can be received within a range of around 2000 km away from the transmitter.
The time keeping is based on the 16 MHz resonator of the Arduino Pro Mini. Resonators are pretty inaccurate devices when compared to quartz oscillators. If used without any compensation measure, the resonator would yield to a clock drift of the order of tens of seconds per day. The Nixie Clock actively compensates for this clock drift by periodically calibrating the Arduino’s Timer1 frequency against the DCF77 time signal.
The Nixie Clock uses a supercapacitor to provide backup power for the event of a main power loss. Once main power is disconnected, the microcontroller backs-up all of the settings to EEPROM and switches to a power-saving mode while continuing the timekeeping with the usual accuracy. Once the supercapacitor voltage drops below a certain threshold, the microcontroller switches into the next level of power saving by powering down most of the hardware peripherals, including Timer 1 which is used for the main timekeeping; timekeeping will continue with a reduced accuracy using the watchdog hardware.
Following is the full list of the Nixie Clock features:
- Arduino Pro Mini: Atmel ATmega328P, 16 MHz, 2 KB RAM , 1 KB EEPROM, 14 GPIO, 8 ADC inputs
- 6 IN-8-2 Nixie tubes featuring 0-9 digits and decimal points
- Multiplexed display, requires one single K155ID1 Nixie driver chip
- Synchronization with the DCF77 time signal
- Automatic oscillator calibration against the DCF77 time signal
- Backup power from a built-in supercapacitor
- Dual timers: Timer1 used for timekeeping and Timer2 for countdown timer / stopwatch
- Automatic and manual display brightness adjustment
- Menu navigation using 3 push-buttons
- Alarm clock with the weekday and weekend options
- Countdown timer
- Service menu
- Cathode poisoning prevention and the “Slot Machine” effect
- Screen blanking with dual time intervals
- Settings are stored to EEPROM
The Nixie Clock consists of the following hardware components as seen on the picture below:
- Nixie Tubes
- Arduino Pro Mini board
- DC-DC converter board
- DCF77 reciever board with antenna
- K155ID1 anode driver IC
The clock has been designed around an off-the-shelf enclosure of type “RND 455-00121” (link) with the dimensions of 200 x 121 x 40 mm.
The following picture shows the open enclosure of the Nixie Clock with various components marked in red color.
The circuit has been assembled on a stripboard PCB with most of the components mounted on the top side; except for the optocouplers, voltage regulator and a couple of resistors which are soldered to the bottom side of the PCB. The following picture show the top side of the PCB where the DC-DC converter and Arduino boards have been removed. Note that there is a 220nF ceramic capacitor hidden under the socket of the K155ID1 IC.
The following picture shows the bottom side of the PCB. Note the placement of the 8 optocouplers (in white) as well as the voltage regulator (bottom-left corner) and 2 resistors. Also note the locations where the copper lanes have been cut.
The following picture gallery shows the insides of the Nixie clock from different perspectives.
IN-8-2 Nixie Tube
The following figures show the outline and pinout of the IN-8-2 Nixie tube (source: www.tube-tester.com/sites/nixie/data/I/IN-8-2/in-8-2.htm).
|1||Cathode digit 1|
|2||Cathode digit 2|
|3||Cathode digit 3|
|4||Cathode digit 4|
|5||Cathode digit 5|
|6||Cathode digit 6|
|7||Cathode digit 7|
|8||Cathode decimal point|
|9||Cathode digit 8|
|10||Cathode digit 9|
|11||Cathode digit 0|
The current device has been running for 5000+ hours and has proven to be very reliable and silent.
The figure below shows the schematic of the Nixie Clock.
It consists of the following blocks:
- Power supply: generates the voltages required for powering-up the various sub-systems. It uses the AMS1117 (U5) linear regulator for the 5 Volts output and a Zener diode (D2) for the 3.3 Volts.
- High voltage generator (U1): generates the Nixie tube anode voltage of approximately 180 Volts. It uses an off-the-shelf DC-DC converter which was purchased from China on Ebay.
- High voltage activation circuit (T1, D4, D5, C9, R10): as soon as the ATmega microcontroller begins driving the Nixie tube anodes, this circuit detects the periodic pulses on the anodes of tubes N2 and N3 and subsequently enables the high voltage output on the DC-DC converter (U1).
- Brightness boost circuit (R2, R3, R6, OK7): increases the Nixie tube brightness by reducing the value of the anode resistor. This is an exceptional measure for very bright daylight conditions as the brightness is normally controlled via Pulse Width Modulation (PWM).
- DCF77 receiver (U4): contains the “Pollin DCF1” receiver which runs at 3.3 Volts, has a very low power consumption (as it is designed for battery-powered clocks) and has very high output impedence. An NPN transistor (T3) is used for boosting the output signal and making it suitable for the ATmega microcontroller’s input pin.
- Buzzer (SG1): includes an NPN transistor (T2) buffer stage for the buzzer
Further, the schematic contains the following items:
- 6 Nixie tubes (N1 to N6), the optocouplers (OK1 to OK6) for driving the anodes and the decimal point cathode (OK8); and the K155ID1 (U2) cathode driver chip for driving the digit cathodes
- Backup power circuit with a Schottky diode (D3) and a supercapacitor (C10)
- Photoresistor (R17), push-buttons (S1, S2, S3) with their pull-up resistors (R13 to R16) and related input protection circuitry. Notice that due to the shortage of digital pins, the three push-buttons are actually connected to the left-over analog pins. Also note the lack of any debouncing circuitry as button debouncing is being performed in software.
- Three 10 µH (L1, L2, L3) inductors have been placed around the circuit, one standalone and two as part of low-pass networks. These are required for suppressing the high-frequency noise of the DC-DC converter and the 12 Volt switching power supply. Failing to do so would significantly reduce the performance of the DCF77 receiver which is overly sensitive to electrical noise.
Some Electrostatic Discharge (ESD) protection measures have been taken in order to protect the Arduino’s ATmega microcontroller. The push-buttons and the photoresistor are especially prone to for taking ESD due to their location on the outside of the enclosure, the frequent user interaction and their direct connection to with the Arduino’s ADC pins.
In order to prevent ESD damage, the metal bodies of the push-buttons (S1, S2, S3) have been connected to the negative power supply (not shown on the schematic) and current-limiting resistors (R21, R24, R25) have been connected in series with the ADC inputs. This will ensure that any ESD discharge would be diverted to the negative power supply through the bodies of the switches and any residual current is limited by the resistors.
ESD protection of the photoresistor (R17) has been achieved via a current-limiting resistor (R18) in conjunction with a pair of clamping diodes (D6, D7). The clamping diodes deflect the excess voltage due to an ESD event towards the positive and negative power rails, ensuring that the voltage at the analog input pin stays within the range from -VD to VCC + VD. Whereas VD is the junction voltage of the diode (0.3 V for the used Schottky diode) and VCC is the +5 V power supply voltage. The current-limiting resistor protects the clamping diodes from being destroyed by the ESD current pulse.
Notice some minor discrepancies between the below schematic and the pictures shown in the previous section. The schematic shows a couple of additional filtering capacitors (C1, C8) and better-suitable diode types (D4, D5). The schematic does not show any of the jumpers and pin headers present on the PCB.
The above schematic has been implemented using Autodesk Eagle, the related source files can be found under the downloads section below. Please note that the PCB layout has not been yet finalised, however i would be very happy if someone would find the time to contribute.
Among others, below you can find GitHub download links for the Arduino firmware source code, user manual and the Eagle schematic source files. All of the source code is distributed under the GNU General Public License v3.0.
Please note that the current implementation uses the watchdog timer functionality which requires the customized Arduino bootloader found under the link below. For more details, please follow the installation instructions found within the README file on GitHub.