Go Down

Topic: Multiplex Nixie Tube or similar (Read 13692 times) previous topic - next topic

wyager


That sounds interesting! Are you experimenting directly via arduino or with some IC? Can I ask you what type of transisrors are those? I have similar neon bulbs but I don't know wich transistor should I use...
Thanks!
Fede


Hey, I posted some more info to the google site. Code and schematics are available at sites.google.com/site/willyager/nixie-clock. I am using MPSA42 transistors and 100K anode resistors at 170V on the little A1A neon tubes (200K is probably better if you are not multiplexing them). The A1As are very cheap and easy to get, I got 10 of them for about $5 shipped off ebay.

FEDERICO

Federico - Sideralis
Arduino &C: http://www.sideralis.org
Foto: http://blackman.amicofigo.com


volvodani

I work on the same project. I am going to make an LED secondpointer which drive around a round plate at the centre there would be 4 nixie Tubes. All the "output" are driven by 74HCT595 to get away from Multiplexing the tubes to get the chance of full light of the tubes (the main Voltage would be driven with an PnP Transitor to contol the brightness over the full spectrum 0-100%. The only "special" is an  8*8 Matrix for the second (without using the last 5 digits) driven by 2 74HCT595.
My first problem was dividing the minutes and hour to 4 4Bit BCD-Code and take them into the last 2 74HCT595. All the 74HCT595 are Dasychained and i get no problems of to slow shifting. There is another Solution to shift out via SPI this is much faster shifting than the normal shiftout()-Function.
For testing i put all the thing together with 32 LED´s for testing the code. I also get an 5=>200VDC converter for the nixiesupply . And these code is working fine. You only have to upgrade the code for an workable time recierver RTC or Radio Clock.

Code: [Select]
//#include <Wire.h>

#define LEDlatchPin 3      // 3 Pin connected to latch pin (ST_CP) of 74HC595
#define LEDdataPin  2      // 2 Für Ring LED Pin connected to Data in (DS) of 74HC595
#define LEDclockPin 4     //4  Für Ring LED Pin connected to clock pin (SH_CP) of 74HC595
int ss=45;
int mm=33;
int hh=22;
byte zero=0;
byte Puffer1=0;      //Puffer für 1. Register aktive Spalte aktiv=HIGH Anoden über 220Ohm Widerstand
byte Puffer2=255;    //Puffer für 2. Register aktive Rheihe akiv=LOW Kathoden
byte Puffer3=0;      //Puffer beide Minutenstellen Bit 7-4 Minutenzehner/Bit3-0 Minuten Einer
byte Puffer4=0;      //Puffer beide Stundenstellen Bit 7-4 Stundenzehner/Bit3-0 Stunden Einer


void setup() {
  //Serial.begin(9600);
  //Wire.begin();
  pinMode(LEDlatchPin, OUTPUT);           
  pinMode(LEDdataPin, OUTPUT); 
  pinMode(LEDclockPin, OUTPUT);
  for (int i; i<=3;i++){
    shiftOut(LEDdataPin, LEDclockPin,MSBFIRST,zero);      // 4 Bytes lässt z.B. nach Reset die Register alles vergessen
  }
}

void loop() {
  if (ss>=0 && ss<=59){
    ss=ss++;
  }
  if (ss>=60){
    mm=mm+1;
    ss=1;
  }
/*  if (mm>=60){
    mm=0;
    hh=hh++;
  }
  if (hh>=24){
    hh=0;
  }*/
  PufferSekunden(ss);
  Puffer3=Pufferbuild(mm);
  Puffer4=Pufferbuild(hh); 
  digitalWrite(LEDlatchPin, LOW);      // Latch aussetzten um Flackern der LED beim Shiften zu vermeiden
  shiftOut(LEDdataPin, LEDclockPin, MSBFIRST, Puffer4);                    //Shift out der einzelenen Puffer wobei im letzten
  shiftOut(LEDdataPin, LEDclockPin, MSBFIRST, Puffer3);                    //Register Chip das erste Puferbyte sitzt
  shiftOut(LEDdataPin, LEDclockPin, MSBFIRST, Puffer2);
  shiftOut(LEDdataPin, LEDclockPin, MSBFIRST, Puffer1);
  digitalWrite(LEDlatchPin, HIGH);                                            // Aktiverien des Latches zum Anzeigen
  delay(1000);
}

byte Pufferbuild(int Wert){
  // Puffer 3+4
  int zehner;
  int einer;
  byte PufferA;
  byte PufferB;
  byte PufferC;

  zehner=Wert/10;                // Zehnerstellen da Integer Berechung
  einer=Wert%(zehner*10);       // Einerstellen aus dem Gesamten Wert
  PufferA=zehner;                // PufferA wird gefüllt
  PufferA=zehner <<4;              // PufferA um 4 nach links schieben
  PufferB=einer;                 // Puffer B wird mit Einer ggefüllt
  PufferC=PufferA|PufferB;          // AnzeigePuffer mit zusammenführung Puffer A+B
  return PufferC;
}


void PufferSekunden(int Wert){                              //Diese Funtkion schreibt die Pufferwerte für die Sekundenmatrix 8*8
  Puffer1=0;
  Puffer2=255;
  if (Wert >=1 && Wert <=8){
    bitWrite(Puffer1,(Wert-1),HIGH);
    bitWrite(Puffer2,      7,LOW);
  }
  if (Wert >=9 && Wert <=16){
    bitWrite(Puffer1,(Wert-9),HIGH);
    bitWrite(Puffer2,      6,LOW);
  }
  if (Wert >=17 && Wert <=24){
    bitWrite(Puffer1,(Wert-17),HIGH);
    bitWrite(Puffer2,      5,LOW);
  }
  if (Wert >=25 && Wert <=32){
    bitWrite(Puffer1,(Wert-25),HIGH);
    bitWrite(Puffer2,      4,LOW);
  }
  if (Wert >=33 && Wert <=40){
    bitWrite(Puffer1,(Wert-33),HIGH);
    bitWrite(Puffer2,      3,LOW);
  }
  if (Wert >=41 && Wert <=48){
    bitWrite(Puffer1,(Wert-41),HIGH);
    bitWrite(Puffer2,      2,LOW);
  }
  if (Wert >=49 && Wert <=56){
    bitWrite(Puffer1,(Wert-49),HIGH);
    bitWrite(Puffer2,      1,LOW);
  }
  if (Wert >=57 && Wert <=64){
    bitWrite(Puffer1,(Wert-57),HIGH);
    bitWrite(Puffer2,      0,LOW);
  }
}


"Komm wir essen Opa!" - Satzzeichen retten Leben!

wyager

Thanks for the code, volvodani. BTW, you don't have to use SPI to get a faster shiftout, you only have to use AVR-C instead of processing+wiring (but SPI is probably the fastest).

Also, if anyone is interested, I posted schematics and code for an RTC+temp sensor circuit that I just finished on my site. It might save you some time and frustration.

Go Up