IN-13 Nixie Bargraph Arduino Control Circuit

Introduction: IN-13 Nixie Bargraph Arduino Control Circuit

I was looking for an easy and flexible way to send a PWM signal from an Arduino to drive an IN-13 nixie bargaph display, but wasn't finding exactly what I needed. After a bit of trial and error, here is a working circuit.

Here it is running a simple sweeping sketch:

In this Instructable, I'm assuming that you know how to assemble a circuit on a breadboard, know how to upload code to an Arduino, etc. Also, please keep in mind that the IN-13 runs at ~180V DC, so there is a risk of electrical shock if you're not careful when handling this project.


IN-13 bargraph Nixie

Arduino of your choice (I used a Nano)

Resistors: 1k, 15k, and 220k

20k potentiometer

IRL610A MOSFET (or an alternative 200V, logic level MOSFET)

180V DC power supply for the IN-13 Nixie

Step 1: Build This Circuit and Upload the Arduino Sketch

Not much to the circuit... The potentiometer is used to set the maximum current so that you don't overdrive the IN-13. Just dial in enough resistance that the maximum bargraph output ends wherever you want it to. IN-13's behave non-linearly as the current increases, so you won't want to max out the bargraph length.

I found that the key to getting a good output on the IN-13 tube is to maximize the PWM signal frequency from the Arduino. At the default PWM frequency of 490 Hz on pin 9, the tip of the glowing section would thin and spread, especially at the low end of output. An IN-13 displays current, and a PWM-driven voltage gives intermittent current. I think that at lower PWM speeds and small PWM values, the IN-13 was showing a spread of current inputs and "smearing" the bargraph output. Raising the PWM speed from the default of 976.56 Hz to the max of 62,500Hz (only available on pins 5 and 6) fixed the issue. This runs the PWM 64 times faster than normal.

Many thanks to the author of this page for info on changing PWM frequency!

IMPORTANT: Changing the PWM frequency on pins 5/6 will also change the frequency of "millis" and "delay". My understanding is that those commands will run 64 times faster with the PWM maxed out at 62,500Hz. So if you want a delay of 1ms, you'll have to multiply by 64 and "delay(64);".

I've attached some code for you to try:

Sweep_test_sketch.ino is a simple PWM fade up and down without linear correction of the bargraph length.

IN-13's are known to be non-linear in their response (in my case, hilariously non-linear with respect to my PWM input). I did some measuring and testing and came up with correction factors to adjust the PWM output of the Arduino to ensure linearity of the IN-13 output display. With this code, you specify the millimeters of bar that you want (0-95mm) and the Arduino calculates a PWM frequency to give you that length. I only have one IN-13 to play with, so I have no idea if the correction factors for this tube will work perfectly for your tube.

IN-13_sweep_corrected.ino is a simple sweep of the IN-13 at 1mm intervals.

IN-13_5mm_steps.ino sweeps the display at 5mm increments to check accuracy.

Be the First to Share


    • Microcontroller Contest

      Microcontroller Contest
    • Automation Contest

      Automation Contest
    • Make it Glow Contest

      Make it Glow Contest