Introduction: Versatile I/O Extender PCB to Control Many Nixie Tubes With I2C
Currently there is a lot of interest in bringing vintage nixie tubes to life. Lot's of nixie tube clock kits are available on the market. There appeared to be even a lively trade on old stock of russian nixie tubes. Also here on Instructables there are tons of projects on nixie tubes (https://www.instructables.com/howto/nixie/).
This Instructable describes a driver for nixie tubes with I/O extenders, controllable by I2C, using a versatile PCB developed specifically for this purpose.
The microcontroller and its software are not part of this Instructable. There are countless ways to do this, using any microcontroller that speaks I2C, such as Arduino, Raspberry Pi, Beagle Bone, ESP8266 or whatever is on your desk. I will leave that part to you, and please write an Instructable about your project if you have succeeded.
- Nixie tubes with TTL driver, or preferably an old device like my 'Impulszähler EZK' from 'electromatic'.
- The PCB described below. You need one for driving two nixies.
- Header pins and jumpers for address selection
- PCF8574 I/O extender (one per PCB)
- 10k resistors, you need three for one I2C bus (many PCBs)
- A microcontroller capable of I2C, like Arduino, Raspberry Pi, Beagle Bone, ESP8266, or whatever is laying around on your desk.
Teachers! Did you use this instructable in your classroom?
Add a Teacher Note to share how you incorporated it into your lesson.
Step 1: Cleanup the Attic
Recently when cleaning up my attic, I found a carton box with a six digit nixie display and even some documentation, showing that this is a 'Impulszähler EZK' from 'electromatic'. I can't remember how it found the way to my home. Maybe I bought it long ago on a flee market.
So I was quite happy when I found this device and my first thought was to make a clock out of it. In the end I made a versatile display device, based on an Intel Edison, for displaying time, date, temperature, humidity and even the number of likes of the projects blog. It all can be found on my project blog on Element14.
I can imagine that you will not find such a device when cleaning the attic, but it should be not too difficult to get some nixie tubes with their corresponding SN74141 TTL drivers.
Step 2: Investigations
The circuit of the counter is very straightforward and therefore easy to modify. A very well known SN74141 nixie tube driver is used, driven by SN7490 BCD counters, as can be seen on the photo and circuit diagram.
By replacing the SN7490 BCD counters by a 4 bit digital output, each nixie can freely be programmed.
In total 6 digits, times 4 BCD inputs so 24 digital GPIO outputs are needed. For this we use PCF8574 I/O expanders from which we need three since these are 8 bit (4 bits for each nixie tube).
Step 3: Functional Design
Here is the old circuit diagrams and a sketch of the new approach. The 7490 BCD counters must be removed, and for each two of them replaced by one PCF8574 I/O extender. For this counter three I/O extenders are needed, interconnected with I2C and connected to a control device. Luckily all IC's are placed in sockets, so the replacement circuit can be inserted in the 7490 sockets.
Step 4: Circuit Design
The circuit is designed in Autodesk Eagle. SOCKET1 and SOCKET2 connects to the 7490 sockets. For SOCKET1 all 14 pins, which includes the 4 BCD inputs, the GND and the VCC to drive the circuit. Since one VCC connection (pin 5) is enough SOCKET2 only connects the BCD inputs (pin 8,9,11 and 12) and the GND for the second PCB and the left part of the DIP14 is not needed. This saves some space on the PCB for the other components. Pin 1-7 of SOCKET2 connects to pin 14-8 on the 7490 socket.
With the jumpers labeled ADDR the I2C address of each individual PCF8574 can be selected. This is an important feature, as I need three I/O extenders on one I2C bus to drive six nixies. I2C_BUS connects to the other boards and to the controller. The bus consists of the SCL, SDA and INT signal. SCL and SDA are the clock and data line, INT can be used to signal an input change on the I/O lines. INT is not needed in this application, as the I/O only is used in output mode, but to be complete and versatile they are added to the circuit. Each signal is connected to two headers, so the boards can be easily daisy chained. The three resistors are the pull-up resistors for the I2C bus. They are needed just once for each bus. So they are placed on the last PCB in the row and omitted on the other PCB's.
Step 5: PCB Design
Here is a picture of the PCB board designed in Eagle PCB, and some pictures of the actual PCB bottom and top manufactured by a PCB manufacturer. It is a simple 2 layer PCB. The Eagle design files and the Gerber files which are needed for PCB production can be found on GitHub (https://github.com/AgriVision/Nixie_Edison).
Step 6: Placing the Header Pins
In SOCKET1 and SOCKET2 pin headers are placed on the bottom side of the board. These pin headers will fit into two 7490 sockets on the counter PCB.
Remember that for one socket all 14 pis are used, While for the other only pin 8-14 is used.
Step 7: Placing Other Components
The other components are placed on the top side of the board. Note that when using multiple boards on one I2C bus, only one of them needs the terminating resistors.
Step 8: Put It Together
Repeat the previous steps for the other two I/O extender boards. Now all three boards can be inserted in the 7490 sockets. Connect the I2C lines SCL and SDA. Be sure to give each board its own address using jumpers on the address headers. These addresses of course need to correspond to the software you will write!
Step 9: Wrap Up
This video shows the circuit in operation. In this case the microcontroller is an INTEL Edison, and the display shows time, date, temperature, humidity, pressure and rain fall in sequence by holding and releasing the button.
As mentioned earlier the microcontroller and its software are not part of this Instructable, I will leave that part to you. There are countless ways to use these boards, to let the nixies display whatever measure you need, by using whatever microcontroller you like, as long as it outputs I2C.
And please write an Instructable about your project if you have succeeded.
Finalist in the
PCB Design Challenge