Show Posts
Pages: [1] 2
1  Projects / ArduiNIX / Nixie short/glow in one digit - after 10,000 hours on: May 26, 2015, 03:25:05 PM
Hey All,
      The nixie clock I built based on the Arduinix circuit is still going strong after three years.  Recently, the #3 digit on one of the IN-4 tubes stopped displaying as a number, and now there's just a blobby glow on one side of the tube.  I've had that happen once before on a tube that doesn't display the full 0-9 digits, and swapping it with another tube eventually cleared it up.  But this one appears to be sticking around.

I'm assuming what has happened is that some kind of filament bridge has formed between the number and the adjacent anode mesh.  I was thinking maybe I could run low voltage current through it to burn out the bridge, but I thought I'd post the issue first to see if anyone has had a similar problem and found a solution for it.  

thxthx!
2  Projects / ArduiNIX / How to correct for slow/fast clock on: March 29, 2012, 11:17:09 PM
Hi All,
     Has anyone written some code to correct for a fast/slow clock?  In the IN-17 code, nonentity has:
Code:
// Get time in seconds.
  long time = (runTime) / 1000; //////////change this value to speed up or slow down the clock

So I guess I get that, if for example my clock was 7 minutes fast per six month period, and there are 259200 minutes in a six month period, then I should...?

I can work out a time correction code, but before I do, has anyone already done this?  Just hate to duplicate labor.

thx!
3  Projects / ArduiNIX / Re: Only 60V on the HV supply? on: May 03, 2011, 12:57:03 PM
Okay, it was a board geometry problem.  I had some large areas of copper trace for the MOSFET as a heatsinking measure, and apparently that added capacitance was throwing everything off.  I redid the board with just a large ground plane and all of the high voltage components moved adjacent to each other, and thus far it's performing beautifully.

Another thing I discovered: if you ground the metal mounting plate of the MOSFET (where the screw goes through), it won't work?  Which seems like a really strange design by the manufacturer of the IRF730, I would expect that plate to be connected to the ground lead if anything.  So if your system is not producing high voltage, check that, I guess.
4  Projects / ArduiNIX / Re: Only 60V on the HV supply? on: April 23, 2011, 11:06:05 PM
Okay, I'm completely stumped.  I've replaced everything in the 555 control circuitry including the 555 and the high voltage generator parts, part by part, and I'm getting a consistent max voltage of 80V.

At this point, I'm thinking that it might be because my board geometry is quite different than the stock configuration, because that top voltage is so consistent. 

So if I wanted to increase the max voltage range, how would I do that?  I tried reducing capacitor C3 to 1pF, but that had no effect that I could see.  I also tried different values for R17+R18, and was able to get lower minimum voltage but I wasn't able to raise the maximum voltage.  Thoughts?  Thanks so much, I'm so close to having this thing done.
5  Projects / ArduiNIX / Re: Set Buttons on ArduiNIX on: April 23, 2011, 09:59:14 PM
My tact switch time set code, which includes debounce (so that erroneous 'bounce' clicks are not detected):
Code:
/**********Time Set Routine**********************/
boolean switchread = 1;
switchread = digitalRead(TIME_SET);
if (switchread == LOW) {
   while (switchread == LOW) {
     switchread = digitalRead(TIME_SET);
     }//do nothing while the switch is low
   delay(10);
   timeset = ((timeset + 1) % 4);
   }

//Set hours
if (timeset == 1) {
      //mask off everything but the hours
      NumberArray[2] = 999;
      NumberArray[3] = 999;
      NumberArray[4] = 999;
      NumberArray[5] = 999;

      boolean switchread = 1;
      switchread = digitalRead(TIME_UP);
      if (switchread == LOW) {
        while (switchread == LOW) {
          switchread = digitalRead(TIME_UP);
          }//do nothing while the switch is low
          delay(10);
        DateTime adjust (now.unixtime() + 3600); //set hours + 1
        RTC.adjust(adjust); // set to new time
        }
       
      switchread = digitalRead(TIME_DOWN);
      if (switchread == LOW) {
        while (switchread == LOW) {
          switchread = digitalRead(TIME_DOWN);
          }//do nothing while the switch is low
          delay(10);
        DateTime adjust (now.unixtime() - 3600); //set hours + 1
        RTC.adjust(adjust); // set to new time
        }
  }//end set hours
     
//Set minutes
if (timeset == 2) {
      //mask off everything but the minutes     
      NumberArray[0] = 999;
      NumberArray[1] = 999;
      NumberArray[4] = 999;
      NumberArray[5] = 999;

      boolean switchread = 1;
      switchread = digitalRead(TIME_UP);
      if (switchread == LOW) {
        while (switchread == LOW) {
          switchread = digitalRead(TIME_UP);
          }//do nothing while the switch is low
          delay(10);
        DateTime adjust (now.unixtime() + 60); //set mins + 1
        RTC.adjust(adjust); // set to new time
        }
       
      switchread = digitalRead(TIME_DOWN);
      if (switchread == LOW) {
        while (switchread == LOW) {
          switchread = digitalRead(TIME_DOWN);
          }//do nothing while the switch is low
          delay(10);
        DateTime adjust (now.unixtime() - 60); //set mins - 1
        RTC.adjust(adjust); // set to new time
        }
     
      }//end set minutes

//Set seconds
if (timeset == 3) {
      //mask off everything but the seconds
      NumberArray[0] = 999;
      NumberArray[1] = 999;
      NumberArray[2] = 999;
      NumberArray[3] = 999;

      boolean switchread = 1;
      switchread = digitalRead(TIME_UP);
      if (switchread == LOW) {
        while (switchread == LOW) {
          switchread = digitalRead(TIME_UP);
          }//do nothing while the switch is low
          delay(10);
        DateTime adjust (now.unixtime() + 1); //set seconds + 1
        RTC.adjust(adjust); // set to new time
        }
       
      switchread = digitalRead(TIME_DOWN);
      if (switchread == LOW) {
        while (switchread == LOW) {
          switchread = digitalRead(TIME_DOWN);
          }//do nothing while the switch is low
        delay(10);
        DateTime adjust (now.unixtime() - 2); //set seconds - 1
        RTC.adjust(adjust); // set to new time
        }
     
      }//end set hours






I use three switches.  The first enters 'time set' mode, and each time it is pressed it goes to set hours, minutes, and seconds, then exits time set mode.  The other two buttons increment and decrement.  It just lives in the main loop() statement.
 
6  Projects / ArduiNIX / Re: Only 60V on the HV supply? on: April 03, 2011, 12:34:48 PM
Thanks for the tip, I'll definitely take a look at that.  I did find that when I connected a pot to pin 5 of the 555 and adjusted the control voltage, I was able to get the voltage up to 120V, so it's definitely somewhere in the 555 control circuitry.
7  Projects / ArduiNIX / Only 60V on the HV supply? on: March 31, 2011, 12:59:13 PM
Hey All,
       I'm rebuilding my project described in this post:
http://www.robotpirate.com/forums/index.php?topic=296.0
And here:
http://blog.wingedvictorydesign.com/2010/10/13/my-nixie-clock-build/

So I'm using the Arduinix circuit and a modified version of the software, but with my own layout to fit within my enclosure.  So I'm rebuilding my board after a hardware failure with the inclusion of a heatsink for the mosfet, but I'm only getting 60V on the HV supply.  When I adjust the voltage trim I can get as much as 70V, but that's about it.  Any idea what component I should look at?  I'm really wanting to get this finished up.

Thanks!
Max
8  Projects / ArduiNIX / Re: overheating MOSFET? on: January 02, 2011, 12:22:58 AM
Further testing:

I desoldered the MOSFET from the board and it tested good-- I ran some LEDs through the drain to source, and was able to toggle them off and on by touching the gate to +5V and ground.  I soldered the MOSFET back onto the board and I'm now getting high voltage at the test point-- mysterious!

I think the MOSFET got hot enough to partially melt the solder, and so it eventually worked itself into a point where it was effectively cold soldered to the board, and not making a good enough electrical connection to operate properly.

So the remedy is to find a way to get a heatsink on it, but I can't see doing that with my current board configuration.

By the way, I'm using the Arduinix circuit design but a custom board layout, as the Arduinix would have been too wide to fit in my enclosure:
http://blog.wingedvictorydesign.com/2010/10/13/my-nixie-clock-build/

But I would be curious as to what temperature everyone else's MOSFET is-- warm to the touch?  Scalding?  If so, learn from my mistake and engineer some airflow into your enclosure.
9  Projects / ArduiNIX / overheating MOSFET? on: December 31, 2010, 05:12:43 PM
Hi All,
       My clock worked great for several weeks, but then stopped working-- no numbers displayed at all.  I put my voltmeter on the test point and discovered that there's no high voltage.  I noticed that while it was working the MOSFET got quite warm, and I have it in a very small enclosure with no airflow.  I haven't performed extensive troubleshooting, but has anyone else had an issue with the MOSFET overheating and failing?

Thanks!
10  Projects / ArduiNIX / Re: Found a bug in the code? Or maybe a dead pin? on: August 29, 2010, 04:55:50 PM
Update: definitely a hardware problem with that specific chip.  I started having odd behavior with the I2C, and ended up swapping out the microcontroller chip.  That chip was actually the first one I ever bought, and I was going to put it into this project as its retirement plan.  So, apparently these things wear out, which I did not know.
11  Projects / ArduiNIX / Re: Found a bug in the code? Or maybe a dead pin? on: August 18, 2010, 02:17:22 PM
I ended up moving the offending input to another pin, and it's working fine.  Probably a hardware issue specific to my setup, but I'd be interested to hear if anyone else has this issue.
12  Projects / ArduiNIX / Re: Found a bug in the code? Or maybe a dead pin? on: August 13, 2010, 12:45:38 PM
Sorry double post.  Mods, please delete this thread.
13  Projects / ArduiNIX / Found a bug in the code? Or maybe a dead pin? on: August 11, 2010, 10:00:51 PM
I'm working on my build using an Arduino Really Bare Bones Board (RBBB).  I've got an interesting behavior here when I try to add in some tact switches for a time set routine and blank the display.

I have the switches hooked into pins 2 and 3, so that I can use the external interrupts to trigger the respective routines.  Pin  2 works fine, but pin 3 toggles randomly, as if it was left floating rather than tied to high with the internal pull-up resistors.

I can't reproduce the problem on my standard Arduino board with Atmega328, only on the RBBB, which has an Atmega168.  What's really crazy?  The problem persists even when I just tie that pin off to the 5V supply.

By selectively commenting out parts of the code, the problem seems to be somewhere in the DisplayNumberSet() routine, but I can't figure out exactly where. 

I have two theories-- one is that that fancy pointer business you have in the code is somehow accessing the register for that pin.  The other is that I have somehow inadvertently killed that pin on the hardware side, and now it just floats.

Thoughts?  Code follows:

Code:
//
// Arduinix 6 bulb
//
// This code runs a six bulb setup and displays a prototype clock setup.
// NOTE: the delay is setup for IN-17 nixie bulbs.
//
// by Jeremy Howa
// www.robotpirate.com
// www.arduinix.com
// 2008
//
//
//

// SN74141 : True Table (stock)
//D C B A #
//L,L,L,L 0
//L,L,L,H 1
//L,L,H,L 2
//L,L,H,H 3
//L,H,L,L 4
//L,H,L,H 5
//L,H,H,L 6
//L,H,H,H 7
//H,L,L,L 8
//H,L,L,H 9

// SN74141 : True Table (modified)
//D C B A #
//L,L,L,L 4
//L,L,L,H 6
//L,L,H,L 8
//L,L,H,H 9
//L,H,L,L 7
//L,H,L,H 0
//L,H,H,L 2
//L,H,H,H 3
//H,L,L,L 5
//H,L,L,H 1


// SN74141 (1)
int ledPin_1_a = 14;               
int ledPin_1_b = 13;
int ledPin_1_c = 6;
int ledPin_1_d = 10;
// SN74141 (2)
int ledPin_2_a = 18;               
int ledPin_2_b = 17;
int ledPin_2_c = 16;
int ledPin_2_d = 15;
// anod pins
int ledPin_a_1 = 7;
int ledPin_a_2 = 8;
int ledPin_a_3 = 9;


// Defines
long MINS = 60;         // 60 Seconds in a Min.
long HOURS = 60 * MINS; // 60 Mins in an hour.
long DAYS = 24 * HOURS; // 24 Hours in a day. > Note: change the 24 to a 12 for non millitary time.

long runTime = 0;       // Time from when we started.

//       default time sets.
//       The values you see here would be what you change
//       if you added a set clock inputs to the board.
long clockHourSet = 12;
long clockMinSet  = 34;
long clockSecSet  = 00;

byte timeset = 0;
boolean displayblank = 0;


#define TIME_SET 3
#define DISPLAY_BLANK 2
#define TIME_UP 1
#define TIME_DOWN 0

void setup() {
  Serial.begin(9600);
 
  //Sets up the time and display controls to be inputs with internal pull-up resistors enabled
  pinMode(TIME_DOWN, INPUT);
  digitalWrite(TIME_DOWN, HIGH);

  pinMode(TIME_UP, INPUT);
  digitalWrite(TIME_UP, HIGH);

  pinMode(TIME_SET, INPUT);
  digitalWrite(TIME_SET, HIGH);

  pinMode(DISPLAY_BLANK, INPUT);
  digitalWrite(DISPLAY_BLANK, HIGH);

  /* One hardware interrupt will be used to trigger the time-set routine, the other
   * to blank the display.
   */
  //PIN 2
  attachInterrupt(0, displayBlankISR, LOW);
  //PIN 3
  attachInterrupt(1, timeSetISR, LOW);
  interrupts();
 
  pinMode(ledPin_1_a, OUTPUT);     
  pinMode(ledPin_1_b, OUTPUT);     
  pinMode(ledPin_1_c, OUTPUT);     
  pinMode(ledPin_1_d, OUTPUT);   
 
  pinMode(ledPin_2_a, OUTPUT);     
  pinMode(ledPin_2_b, OUTPUT);     
  pinMode(ledPin_2_c, OUTPUT);     
  pinMode(ledPin_2_d, OUTPUT);     
 
  pinMode(ledPin_a_1, OUTPUT);     
  pinMode(ledPin_a_2, OUTPUT);     
  pinMode(ledPin_a_3, OUTPUT);     
 
  }// end setup()

////////////////////////////////////////////////////////////////////////
//
// DisplayNumberSet
// Use: Passing anod number, and number for bulb 1 and bulb 2, this function
//      looks up the truth table and opens the correct outs from the arduino
//      to light the numbers given to this funciton (num1,num2).
//      On a 6 nixie bulb setup.
//
////////////////////////////////////////////////////////////////////////
void DisplayNumberSet( int anod, int num1, int num2 ) {
  int anodPin;
  int a,b,c,d;
 
  // set defaults.
  a=0;b=0;c=0;d=0; // will display a zero.
  anodPin =  ledPin_a_1;     // default on first anod.
 
  // Select what anod to fire.
  switch( anod ) {
    case 0:    anodPin =  ledPin_a_1;    break;
    case 1:    anodPin =  ledPin_a_2;    break;
    case 2:    anodPin =  ledPin_a_3;    break;
    } 
 
  // Load the a,b,c,d.. to send to the SN74141 IC (1)
  switch( num1 ) {
    case 0: d=0; c=1; b=0; a=1;  break;
    case 1: d=1; c=0; b=0; a=1;  break;
    case 2: d=0; c=1; b=1; a=0;  break;
    case 3: d=0; c=1; b=1; a=1;  break;
    case 4: d=0; c=0; b=0; a=0;  break;
    case 5: d=1; c=0; b=0; a=0;  break;
    case 6: d=0; c=0; b=0; a=1;  break;
    case 7: d=0; c=1; b=0; a=0;  break;
    case 8: d=0; c=0; b=1; a=0;  break;
    case 9: d=0; c=0; b=1; a=1;  break;
    } 
 
  // Write to output pins.
  digitalWrite(ledPin_1_d, d);
  digitalWrite(ledPin_1_c, c);
  digitalWrite(ledPin_1_b, b);
  digitalWrite(ledPin_1_a, a);
 
  // Load the a,b,c,d.. to send to the SN74141 IC (2)
  switch( num2 ) {
    case 0: d=0; c=1; b=0; a=1;  break;
    case 1: d=1; c=0; b=0; a=1;  break;
    case 2: d=0; c=1; b=1; a=0;  break;
    case 3: d=0; c=1; b=1; a=1;  break;
    case 4: d=0; c=0; b=0; a=0;  break;
    case 5: d=1; c=0; b=0; a=0;  break;
    case 6: d=0; c=0; b=0; a=1;  break;
    case 7: d=0; c=1; b=0; a=0;  break;
    case 8: d=0; c=0; b=1; a=0;  break;
    case 9: d=0; c=0; b=1; a=1;  break;
    }
 
  // Write to output pins
  digitalWrite(ledPin_2_d, d);
  digitalWrite(ledPin_2_c, c);
  digitalWrite(ledPin_2_b, b);
  digitalWrite(ledPin_2_a, a);

  // Turn on this anod.
  digitalWrite(anodPin, HIGH);   

  // Delay
  // NOTE: With the differnce in Nixie bulbs you may have to change
  //       this delay to set the update speed of the bulbs. If you
  //       dont wait long enough the bulb will be dim or not light at all
  //       you want to set this delay just right so that you have
  //       nice bright output yet quick enough so that you can multiplex with
  //       more bulbs.
  delay(3);
 
  // Shut off this anod.
  digitalWrite(anodPin, LOW);
  }//end DisplayNumberSet()

////////////////////////////////////////////////////////////////////////
//
// DisplayNumberString
// Use: passing an array that is 8 elements long will display numbers
//      on a 6 nixie bulb setup.
//
////////////////////////////////////////////////////////////////////////
void DisplayNumberString( int* array )
{
  // bank 1 (bulb 0,3)
  DisplayNumberSet(0,array[0],array[3]);   
  // bank 2 (bulb 1,4)
  DisplayNumberSet(1,array[1],array[4]);   
  // bank 3 (bulb 2,5)
  DisplayNumberSet(2,array[2],array[5]);   
}

void loop() {

  // Get milliseconds.
  runTime = millis();

  // Get time in seconds.
  long time = (runTime) / 1000;

  // Set time based on offset..
  long hbump = 60*60*clockHourSet;
  long mbump = 60*clockMinSet;
  time += mbump + hbump + clockSecSet;

  // Convert time to days,hours,mins,seconds
  long days  = time / DAYS;    time -= days  * DAYS;
  long hours = time / HOURS;   time -= hours * HOURS;
  long minutes  = time / MINS;    time -= minutes  * MINS;
  long seconds  = time;

  // Get the high and low order values for hours,min,seconds.
  int lowerHours = hours % 10;
  int upperHours = hours - lowerHours;
  int lowerMins = minutes % 10;
  int upperMins = minutes - lowerMins;
  int lowerSeconds = seconds % 10;
  int upperSeconds = seconds - lowerSeconds;
  if( upperSeconds >= 10 )   upperSeconds = upperSeconds / 10;
  if( upperMins >= 10 )      upperMins = upperMins / 10;
  if( upperHours >= 10 )     upperHours = upperHours / 10;

  // Fill in the Number array used to display on the tubes.
  int NumberArray[6]={0,0,0,0,0,0};
  NumberArray[0] = upperHours;
  NumberArray[1] = lowerHours;
  NumberArray[2] = upperMins;
  NumberArray[3] = lowerMins;
  NumberArray[4] = upperSeconds;
  NumberArray[5] = lowerSeconds;

  // Display.
  DisplayNumberString( NumberArray );

  Serial.print(displayblank, DEC);
  Serial.print("  ");
  Serial.println(timeset, DEC);
 
  }//end loop()


void timeSetISR() {
  //since we will need delay() and the like, don't do our time set routine in the ISR
  timeset++;
  }
 
 
void displayBlankISR() {
  displayblank++;
  }
 
14  Projects / ArduiNIX / Found a bug in the code? Or maybe a dead pin? on: August 11, 2010, 09:59:08 PM
I'm working on my build using an Arduino Really Bare Bones Board (RBBB).  I've got an interesting behavior here when I try to add in some tact switches for a time set routine and blank the display.

I have the switches hooked into pins 2 and 3, so that I can use the external interrupts to trigger the respective routines.  Pin  2 works fine, but pin 3 toggles randomly, as if it was left floating rather than tied to high with the internal pull-up resistors.

I can't reproduce the problem on my standard Arduino board with Atmega328, only on the RBBB, which has an Atmega168.  What's really crazy?  The problem persists even when I just tie that pin off to the 5V supply.

By selectively commenting out parts of the code, the problem seems to be somewhere in the DisplayNumberSet() routine, but I can't figure out exactly where. 

I have two theories-- one is that that fancy pointer business you have in the code is somehow accessing the register for that pin.  The other is that I have somehow inadvertently killed that pin on the hardware side, and now it just floats.

Thoughts?  I'll post my code in the following post.
15  Projects / ArduiNIX / Re: Voltage and lamp life? on: July 30, 2010, 02:03:32 PM
Thanks for the info!

I will try running them a bit above their minimum voltage and see if I need to bump them up for daytime viewing.
Pages: [1] 2