Goldbrick_Gangboss:
You are correct. I will be using two HV5622 chips in my project. The only reason I am using two chips is because I want to implement “Vegas Protocol” on the clock. Meaning I want to cycle all the numbers on all tubes at certain time increments one digit at a time. A slot machine effect per say.
Thanks for the schematic. I now see that you don't actually need two 5622s. I was not considering that the hours/mins digits will not utilize all ten pins for their respective Nixie displays.
Are you saying the Vegas thing would look like:
2 1 : 48
2 2 : 48
2 3 : 48
2 4 : 48
Goldbrick_Gangboss:
At any given hour and minute of the day, let’s say 21:48. As I understand it I would only need to drive the outputs for the 2X:XX, X1:XX, XX:4X, and XX:X8 of the two HV 5622 registers. Perhaps this wiring diagram might give you some insight at what I am trying to accomplish. This by no means is the way I am designing the clock, but this is where I got the idea to use the HV5622.
http://reboots.g-cipher.net/time/time-schematic.pdf
I think you're missing what the shift register does. Let's use the schematic you gave. Minutes Ones requires ten pins from the 5622, since the digits 0-9 will be shown. Minutes Tens requires six pins from the 5622 because only digits 0-5 are needed. So we've used sixteen of the thirty-two pins available.
I made up a short sketch to illustrate one way that it can be done in the Arduino to generate the shift register data.
#include "binLdngZero.h" // so we can see all thirty-two bits.
int secs = 60;
unsigned long srData; // to hold S.R. data
void setup() {
Serial.begin(115200);
}
void loop() {
for (uint8_t i = 0; i < secs; i++) {
int secOnes, secTens, temp;
temp = i;
secOnes = temp % 10;
temp = temp / 10;
secTens = temp % 10;
srData = 0;
bitSet(srData, secOnes); // turn on a bit to drive the ones Nixie
bitSet(srData, secTens + 10); // turn on a bit to drive the tens Nixie
printBinWithLeading(Serial, srData, true);
Serial.print("\t\t");
Serial.print(secTens);
Serial.print("\t");
Serial.println(secOnes);
delay(1000);
}
}
You'll need to include this header file.
// Print a number in binary with leading zeroes
//
// by septillion: https://forum.arduino.cc/index.php?topic=464778.0
//
// Prints a whole number in its binary form with leading
// zeroes - to keep column alignment.
// 1/26/19 - Added option (bool type 'nybbleSep') to print one
// space between nybbles. nybbleSep true = add separator,
// else no separator.
// 1/26/19 - Added types long and int
//
// Calling convention: printBinWithLeading(Serial, argument, true/false);
#ifndef BIN_LDNG_ZERO_H
#define BIN_LDNG_ZERO_H
void printBinWithLeading(Print &out, unsigned long n, bool nybbleSep, byte size) {
for (byte i = size ; i--;) {
out.print(bitRead(n, i));
if (nybbleSep) { // add a space between nybbles? hdp 1/26/19
if (!(i & 3) & i != 0) out.print(" ");
// if (i % 4 == 0 & i != 0) out.print(" ");
if (i == 0) {
break;
}
}
}
}
inline void printBinWithLeading(Print &out, unsigned long n, bool nybbleSep) {
printBinWithLeading(out, n, nybbleSep, sizeof(n) * 8);
}
inline void printBinWithLeading(Print &out, long n, bool nybbleSep) {
printBinWithLeading(out, n, nybbleSep, sizeof(n) * 8);
}
inline void printBinWithLeading(Print &out, int n, bool nybbleSep) {
printBinWithLeading(out, n, nybbleSep, sizeof(n) * 8);
}
inline void printBinWithLeading(Print &out, uint16_t n, bool nybbleSep) {
printBinWithLeading(out, n, nybbleSep, sizeof(n) * 8);
}
inline void printBinWithLeading(Print &out, byte n, bool nybbleSep) {
printBinWithLeading(out, n, nybbleSep, sizeof(n) * 8);
}
#endif
Add this file by opening a new tab in your sketch and giving it the indicated name. Copy/paste the code into the new tab.

The eight columns of four represent the contents of the 5622 to be presented to the Nixies, LSB on the right based on the last two columns (seconds tens and seconds ones in decimal form).

This would represent a value of 04 minutes.

