My most recent Nixie project uses ZM1032 tubes. They are a 9-pin tube, with five cathode pins and two anodes. I'm using direct-drive on all the cathodes, but skimp on the tens-of-hours digit where I only drive three cathodes instead of all five. I'm using four SN75468 darlington arrays to drive the cathodes and two opto-isolators to drive the anodes, multiplexing the anodes as all evens and all odds.
I'm using a Teensy 4.1 processor to control everything, though I could have used an ESP32. I just wanted something with a lot of pins to handle driving the 28 cathodes. I'm not using a timing interrupt at all. In the main loop I use the built-in arduino "micros()" call to keep track of the time and compare it to the time of the next event. I use a state variable to keep track of what to do next. Here's some pseudo code:
if (long)(micros() - timeNextDisp) >= 0 {
switch(dispstate) {
case DISP_DELAY_EVEN:
timeNextDisp = micros() + 200
turn off all anodes, turn on all cathodes
dispstate = DISP_EVEN
break;
case DISP_EVEN:
timeNextDisp = micros() + disp_even_time
turn off all cathodes
turn on appropriate cathodes
turn on even anode
dispstate = DISP_DELAY_ODD
/* split work between even/odd anodes */
read PIR
read GPS
break;
case DISP_DELAY_ODD:
timeNextDisp = micros() + 200
turn off all anodes, turn on all cathodes
dispstate = DISP_EVEN
break;
case DISP_ODD:
timeNextDisp = micros() + disp_odd_time
turn off all cathodes
turn on appropriate cathodes
turn on odd anode
dispstate = DISP_DELAY_EVEN
/* split work between even/odd anodes */
read RTC
read ADC
calculate time display values
break;
}
In my case the even digits are behind a screen electrode which blocks their light. I keep the even digits on for about twice as long as the odd digits to even out the brightness. I could have increased the even digit's current by reducing the even's anode resistor, but I decided to keep the current the same for even/odd and just increase the "on" time. My timings are roughly 10.1ms on for even, 0.2 ms for dead time, 5.1ms on for odd, 0.2 ms dead time, for 15.625 ms per cycle (64 times a second).
A more typical multiplexing scheme could have two state variables, one selects either displaying a digit or discharging the tube, the other selects what tube to display.