Supply voltages

The tricky part with IV-6 tubes is that they require several non-standard voltages to operate. Each tube has a grid, eight display segments (including a decimal dot), and a heater filament (you can check out the original datasheet here in Russian). These require the following voltages to operate:

  • 25V DC to the grid (pin 9)
  • 25V DC to each segment (pins 1-6, 10-11)
  • 1.2V DC (or AC) across pins 7 and 8. If you're using DC, treat one of these as the positive and one as the ground (it doesn't matter which is which).

If you are confused about the pinout orientation, simply look on the tube itself for the short pin (unused) and the pin that attaches to the grid. Here is a translation of the relevant voltage and current information from the datasheet:

It is not critical that your voltages be exact. I initially ran my grids and segments with 24V, and the heater filament with 1.5V from a AA battery (I later replaced the battery with 1.2V from a buck converter). Whatever you use, be sure all your power supplies share a common ground. The heater filament is actually designed to be run on alternating current, but because there is no easy way to supply 1.2VAC in a DC circuit, most of us just use direct current for this. The downside is that some of the digits may be slightly brighter than others. If you can see the heater filament glowing, you're giving it too much voltage.

The world runs on Multiplexing

This is a great project for learning about multiplexing. Multiplexing is a circuit design technique that significantly reduces then number of inputs and outputs needed to control a display. If we were to wire up each input individually for these three tubes, the circuit would require 29 connections: eight segments per digit + one grid per digit + two shared lines for the filament. This setup would not only be horribly inefficient, but our Arduino Nano also doesn't offer this many outputs. Not to mention the fact that we ultimately want to display data from an external source, which will also requires some of the Arduino pins.

To get around this problem, we and the rest of the civilized world use a trick called "multiplexing" to minimize the number of outputs needed to drive a display. The idea is this: at any given time, only one of the digits is actually illuminated. We cycle through the different digits so quickly, illuminating them one after the other, that the human eye cannot perceive any disruption. In my circuit, each digit is illuminated for five milliseconds (5/1000 of a second), and there is a pause of one millisecond between digits. These intervals are sufficient to create the illusion that the tubes are continuously illuminated.

But because the grids and the segments require 25V, they cannot be powered directly from our Arduino. So for the multiplexing to work, we must use a series of transistors acting as switches that push 25V to the tubes when the Arduino gives the command. This "switch" is activated by a LOW signal from one of the Arduino's digital pins to the transistor's base. It's possible to build this circuit with 11 individual transistors (and a lot of patience), but it's much easier to just use a transistor array such as the ULN2803.

The ULN2803 is the secret weapon that makes multiplexing possible for non-genius makers like myself. To control a display segment, we simply connect an Arduino pin to an input on one side of the ULN2803 chip and connect the output to the corresponding segment of the tube. On the output side we add our 25V supply through a 10K resistor:

We then use a second ULN2803 in roughly the same configuration to control the grid on each of the digits. This allows us to turn each digit on and off during the multiplexing (check out the full schematic below). So with the help of these two transistor arrays, we are able to control three VFD tubes from a mere 10 pins on an Arduino. Pretty cool!

The Display Module

The IV-6 tubes...

Read more »