

Easy to use nixie driver - only 3 control lines. Multiple drivers can be connected in series. 10 high-voltage outputs for nixie cathodes.
Project website: www.nixietester.com
REPLACEMENT
If you are a maker or nixie enthusiast, you have probably used or had contact with a nixie tube drivers e.g. 155ID1, 74141. Unfortunately, these drivers have their technical limitations for modern projects. Sometimes VFD or AC electroluminescent display drivers (such as HV5812 or HV5530) are used to control nixie tubes but they are mainly suitable for dedicated applications and the lack of flexibility in control and power supply or even in assembly (smd) effectively discourages experimenting with new nixie tube designs.
An alternative solution may be a new nixie tube driver:
- 10 outputs for connecting the nixie tube cathodes (K0-K9)
- 300V off-state maximum output voltage
- Compatible with all 5V / 3.3V designs
- Easy to use with Arduino or Raspberry Pi etc. (only 3 control lines)
- The drivers can be connected in series


DEDICATED LIBRARIES
- Eagle Library
- Altium Library
- KiCad Library
- EasyEDA Library
Download all libraries




// Nixie Tube Driver by Marcin Saj https://nixietester.com
// https://github.com/marcinsaj/Nixie-Tube-Driver
//
// Driving Nixie Tubes Example #2
//
// This example demonstrates how to control up to 6 nixie tubes.
// The control is carried out using up to six Nixie Tube Drivers in serial connection.
#define DIN_PIN 7 // Nixie driver (shift register) serial data input pin
#define CLK_PIN 6 // Nixie driver clock input pin
#define EN_PIN 5 // Nixie driver enable input pin
// Function prototype with optional parameters
void NixieDisplay(byte digit1 = 10, byte digit2 = 10, byte digit3 = 10, byte digit4 = 10, byte digit5 = 10, byte digit6 = 10);
void setup()
{
pinMode(DIN_PIN, OUTPUT);
digitalWrite(DIN_PIN, LOW);
pinMode(CLK_PIN, OUTPUT);
digitalWrite(CLK_PIN, LOW);
pinMode(EN_PIN, OUTPUT);
digitalWrite(EN_PIN, LOW);
}
void loop ()
{
NixieDisplay(1);
//NixieDisplay(1, 2);
//NixieDisplay(1, 2, 3);
//NixieDisplay(1, 2, 3, 4);
//NixieDisplay(1, 2, 3, 4, 5);
//NixieDisplay(1, 2, 3, 4, 5, 6); // NixieDisplay(digit1, digit2, digit3, digit4, digit5, digit6);
delay(1000);
}
// Function with optional parameters
void NixieDisplay(byte digit1, byte digit2 , byte digit3, byte digit4, byte digit5, byte digit6)
{
StartShiftOutData();
if (digit6 != 10) ShiftOutData(digit6);
if (digit5 != 10) ShiftOutData(digit5);
if (digit4 != 10) ShiftOutData(digit4);
if (digit3 != 10) ShiftOutData(digit3);
if (digit2 != 10) ShiftOutData(digit2);
if (digit1 != 10) ShiftOutData(digit1);
EndShiftOutData();
}
void StartShiftOutData()
{
// Ground EN pin and hold low for as long as you are transmitting
digitalWrite(EN_PIN, 0);
// Clear everything out just in case to
// prepare shift register for bit shifting
digitalWrite(DIN_PIN, 0);
digitalWrite(CLK_PIN, 0);
}
void ShiftOutData(byte digit)
{
// Send data to the nixie drivers
for (int i = 15; i >= 0; i--)
{
// Set high only the bit that corresponds to the current nixie digit
if(i == digit) digitalWrite(DIN_PIN, 1);
else digitalWrite(DIN_PIN, 0);
// Register shifts bits on upstroke of CLK pin
digitalWrite(CLK_PIN, 1);
// Set low the data pin after shift to prevent bleed through
digitalWrite(CLK_PIN, 0);
}
}
void EndShiftOutData()
{
// Return the EN pin high to signal chip that it
// no longer needs to listen for data
digitalWrite(EN_PIN, 1);
// Stop shifting
digitalWrite(CLK_PIN, 0);
}




Project website: www.nixietester.com