Goldbrick_Gangboss
Published © GPL3+

IИ-1 Nixie Tube Clock 1st Prototype

Designed and built a nixie tube clock while learning to use Arduino.

IntermediateWork in progress1,504
IИ-1 Nixie Tube Clock 1st Prototype

Things used in this project

Hardware components

High Voltage Shift Register HV5622
×2
ItsyBitsy 32u4
Adafruit ItsyBitsy 32u4
×1
Adafruit DS1307 RTC
×1
IN-1 Nixie Tubes
×4
LUMOS HV_PS
×1
Through Hole Resistor, 33 kohm
Through Hole Resistor, 33 kohm
×4
Through Hole Resistor, 680 ohm
Through Hole Resistor, 680 ohm
×1
LED (generic)
LED (generic)
×2

Hand tools and fabrication machines

Soldering iron (generic)
Soldering iron (generic)

Story

Read more

Schematics

Schematic

Code

IN1 Itsy Bitsy Clock

Arduino
#include <Wire.h>
#include <RTClib.h>
#include <SPI.h>
#define NX 10
#define latchPin 10
#define blankPin 8
#define ledPin 12
int ledState = LOW;
int testpattern = 0;

RTC_DS1307 RTC;
DateTime now;
unsigned long previousMillis = 0;
const long interval = 1000;
unsigned long MinuteCount = 0;
unsigned long SecondCount = 0;


uint32_t Symbol[10]={0x1, 0x2, 0x4, 0x8 , 0x10, 0x20, 0x40, 0x80 , 0x100, 0x200};
//Logic arrangement [ 0,   1,   2,   3 ,   4  ,  5  ,  6  ,  7  ,    8  ,   9  ]
//                   LSB          << Shifts this way ------->
//                                >> Shifts this way <-------            MSB
//                                   Personal Notes only
void setup() {
  pinMode(ledPin,OUTPUT);
  pinMode(blankPin, OUTPUT);
  digitalWrite(blankPin, LOW);
  pinMode(latchPin, OUTPUT);
  Serial.begin(9600);
  RTC.begin();
  Wire.begin();
  SPI.begin();
  SPI.setDataMode(SPI_MODE2);
  SPI.setClockDivider(SPI_CLOCK_DIV4);
  //RTC.adjust(DateTime(F(__DATE__),F(__TIME__)));
  if (! RTC.isrunning()){
    Serial.println("RTC is NOT RUNNING!");
    RTC.adjust(DateTime(F(__DATE__),F(__TIME__))); 
  }  
  delay(1000);
  }

void loop() {
  digitalWrite(blankPin, HIGH);
  if (millis()-MinuteCount > 40000) {
    MinuteCount = millis();
    if (testpattern == 0) {
        testpattern = 1;
    } else if (testpattern == 1) {
      VegasProtocol();
      testpattern = 0;
    }
  } else if (millis()-SecondCount > 1000) {
    SecondCount = millis();
    GetTime();
    Timex();
  }
  unsigned long currentMillis = millis();
  if (currentMillis - previousMillis >= interval){
    previousMillis = currentMillis;
    if (ledState == LOW){
      ledState = HIGH;
    }else{
      ledState = LOW;
    }
    digitalWrite(ledPin, ledState);
  }
  //Uncomment below to see serial monitor output of time
  //Serial.print(now.hour(),DEC);
  //Serial.print(':');
  //Serial.print(now.minute(),DEC);
  //Serial.println();
  //delay(1500);
  }

void VegasProtocol()
{
  uint16_t digitValue=0x200;
  for (int i=0;i<NX; i++){
    digitalWrite(latchPin,LOW);
    SPI.transfer16(digitValue);
    SPI.transfer16(digitValue);
    SPI.transfer16(digitValue);
    SPI.transfer16(digitValue);
    digitalWrite(latchPin,HIGH);
    digitValue=digitValue>>1;
    delay(100);}
  for (int i=0;i<NX; i++){
    digitalWrite(latchPin,LOW);
    SPI.transfer16(Symbol[i]);
    SPI.transfer16(Symbol[i]);
    SPI.transfer16(Symbol[i]);
    SPI.transfer16(Symbol[i]);
    digitalWrite(latchPin,HIGH);
    delay(100);
  }
}
   
void Timex()
{
  digitalWrite(latchPin, LOW);                                      
  uint32_t Timemm;
  uint32_t Timehh;
  Timemm=now.minute();
  uint32_t Var32;                                  
  Var32=0;
  Var32|=(uint32_t)(Symbol[Timemm%10]<<16);//NX4 xx:x0
  Timemm=Timemm/10;  
  Var32|=(uint32_t)(Symbol[Timemm%10]);//NX3 xx:0x
  //Register 2 controlling NX3 and NX4    
  SPI.transfer(Var32>>24);
  SPI.transfer(Var32>>16);
  SPI.transfer(Var32>>8);
  SPI.transfer(Var32);
  Timehh=now.hour();
  Var32=0;
  Var32|=(uint32_t)(Symbol[Timehh%10]<<16);//NX2  x0:xx
  Timehh=Timehh/10;
  Var32|=(uint32_t)(Symbol[Timehh%10]);//NX1 0x:xx
  //Main Register controlling NX1 and NX2
  SPI.transfer(Var32>>24);
  SPI.transfer(Var32>>16);
  SPI.transfer(Var32>>8);
  SPI.transfer(Var32);
  digitalWrite(latchPin, HIGH);  
}
void GetTime(){
  now = RTC.now();
}

Credits

Goldbrick_Gangboss

Goldbrick_Gangboss

0 projects • 0 followers
Aircraft engineer (mechanic/avionics)

Comments