Show Posts
Pages: [1] 2 3 ... 13
1  Projects / Your Projects / Re: My take on a Nixie Clock on: November 08, 2017, 01:43:47 PM
Beautiful!  Extremely nice workmanship, and use of wood.  Love how this looks.

As far as the real time clock, I've been picking at that problem now for a while as well.  And I am not a coder at all.  Wish I could show you the way to do it, as it'd be handy for me as well!
2  Projects / ArduiNIX / Re: IN-17 x 6 + GPS TimeSync + Interrupt-based Tube Refreshing / Muxing on: February 25, 2017, 01:25:28 PM
Thank you for sharing Maxime!
3  Projects / ArduiNIX / Website fixes on: November 19, 2016, 11:45:56 AM
Sorry guys, we had some broken links on the assembly section and the code section.  Those should be fixed now.  Please let me know if you find anything else that is broken on the website.

Thanks!

Brad
4  Projects / ArduiNIX / Re: IN-16 Tubes on: June 09, 2016, 02:53:59 PM
Has anyone tried using the IN-16 tubes? I'm working on mine now, but my first setup doesn't seem to work.  I think I just have the voltage set too low. I plan on getting back to it at some point this week if all goes well.

What voltage do you have it set to? What power supply are you using?  Make sure it's at least 650 milliamps or greater, one amp would be good. 
5  Projects / ArduiNIX / Re: More efficient multiplex code on: June 09, 2016, 02:53:10 PM
digitalWrite is very slow and inefficient because it does error checking to make sure the user isn't trying something stupid, and because it has to decode which port and bit the requested pin is on.  And it makes your code much easier to read and understand.  Not necessarily bad, but in a multiplex routine, especially one called from an interrupt, speed counts.  The code gets executed hundreds of times a second.  If it's slow and inefficient, it leaves less processing power for other things.

A faster and more efficient way to control pins is the write directly to the control registers.  The disadvantages to this are the opposites of what I mentioned above.  You need to know what port and bit the pin is on.  You better get it right, because if you do it wrong, god only knows what could happen.  And it involves binary math and bit manipulation which can be rather confusing.

So here it is, a routine for controlling the output pins that writes directly to the ports.  It is literally 100 times faster (I benchmarked it!).

Code:
void setOutputs(byte bank, byte digit1, byte digit2) {

byte val1 = digit1 << 2; // Store number 1 in value 1, shift bits 2 places left (Move BCD value on last 4 bits to middle 4 bits)
byte val2 = digit2 << 6; // Put least 2 bits of Number 2 into upper 2 bits of Value 1
byte val3 = digit2 >> 2; // put highest 2 bits of Number 2 into lowest 2 bits of Value 2
byte val4 = (1 << (bank + 2));  // Choose which bit is needed to control the bank pins 10-13
// The bank selection is middle 4 bits, so the number needs to be shifted over by 2 bits

PORTD &= B00000011; // Turn pins 2-7 off
PORTB &= B11000000; // Turn pins 8-13 off
PORTD |= val1; // Set pins 2-5 to match BCD number held in middle 4 bits of Value 1
PORTD |= val2; // Set pins 6 & 7 to match highest 2 bits of value 1 which is lowest 2 bits of num2
PORTB |= val3; // Set pins 8 and 9 to lowest 2 bits of value 2 which is highest 2 bits of num2

PORTB |= val4; // Turn the appropriate pin (10-13) for the bank
}

This code is very specific to Arduino models Uno, Micro, Mini, Nano, and other Arduino clones that use the 328P chip.  To use it on a Mega, or some other type of microcontroller, you will need to change the ports and which bits get manipulated.


Wow, that's pretty awesome. 

It'd be nice to get a fresh codebase for the ArduiNIX one day, I've been looking into it, but I am not a coder, I am more on the art side and hardware side.

Very neat work!
6  Projects / ArduiNIX / Re: 4 tube IN-17s - Only 2 tubes lighting dimly on: October 31, 2015, 09:37:28 AM
So I've put everything together, no visible cold solder joints, I plug everything in and do the voltage test - disconnected I can get to about 183v on the low end of the pot. Once the tubes are in, it reads about 149 or so, but only the middle two tubes light up and it seems as though multiple cathodes are lit. If it is displaying a number, it's indistinguishable to me. I also tested each of the tubes from anode to every cathode to verify there are no shorts in the tubes. I'm using the basic code off the site.

Looking for the next logical test steps...

Thanks in advance!

Can you tell us if your driver chips may have been fried? Pictures would help, but that's my first thought.
7  Projects / ArduiNIX / Re: Nixie short/glow in one digit - after 10,000 hours on: October 31, 2015, 09:36:18 AM
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!

Do you think it could be cathode poisoning?  If so, to reverse it, swap the anode and cathode for the digit in question and run it in "reverse" for a bit.
8  Projects / ArduiNIX / Re: ArduiNIX V2 Base Code on: February 28, 2015, 10:30:04 PM
Is it okay to use this code with a V1 board?  When comparing this and the original code I see the input pins are the same, but there are a few things in here I don't understand and wanted to make sure.

Yes, but you might have to flip the anode connections.  A1 to A4, etc.
9  Projects / ArduiNIX / Re: Only 8volts to test point on: December 20, 2014, 12:46:54 PM
I just noticed that when I move the MOSFET around I saw the voltage jump up (around 24 volts) and maybe short out (it kept reading zero volts then 8 and the light on the power supply was flashing.)

Should I replace MOSFET?  Does that sound like the cause of my low voltage to the test point?

Edit:  I ordered a MOSFET.   On an unrelated note, I also plan to add an atomic clock module to keep time as well, but one thing at a time.

Hey please let us know if that fixes your problem.
10  Projects / ArduiNIX / ArduiNIX V2 Base Code on: December 10, 2014, 08:47:48 PM
Hi All,

Below I have placed the base code for the ArduiNIX V2.  Please let me know how it works, and feel free to change or improve it.

Thanks!

Code:
// fading transitions sketch for 8-tube board with default connections.
// based on 6-tube sketch by Emblazed

// 06/16/2011 - 4-tube-itized by Dave B.
// 08/19/2011 - modded for six bulb board, hours, minutes, seconds by Brad L.
// 09/03/2010 - Added Poxin's 12 hour setting for removing 00 from hours when set to 12 hour time
// 01/28/2013 - expanded to 8 digit crossfade by Brad L.
// 12/04/2014 - First V2 standardization version by Brad L.

// SN74141 : Truth Table
//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 (1)
int ledPin_0_a = 2;               
int ledPin_0_b = 3;
int ledPin_0_c = 4;
int ledPin_0_d = 5;

// SN74141 (2)
int ledPin_1_a = 6;               
int ledPin_1_b = 7;
int ledPin_1_c = 8;
int ledPin_1_d = 9;

// anode pins
int ledPin_a_1 = 10;
int ledPin_a_2 = 11;
int ledPin_a_3 = 12;
int ledPin_a_4 = 13;

void setup()
{
  pinMode(ledPin_0_a, OUTPUT);     
  pinMode(ledPin_0_b, OUTPUT);     
  pinMode(ledPin_0_c, OUTPUT);     
  pinMode(ledPin_0_d, OUTPUT);   
 
  pinMode(ledPin_1_a, OUTPUT);     
  pinMode(ledPin_1_b, OUTPUT);     
  pinMode(ledPin_1_c, OUTPUT);     
  pinMode(ledPin_1_d, OUTPUT);     
 
  pinMode(ledPin_a_1, OUTPUT);     
  pinMode(ledPin_a_2, OUTPUT);     
  pinMode(ledPin_a_3, OUTPUT);   
  pinMode(ledPin_a_4, OUTPUT);   
 
  // NOTE: Grounding on virtual pins 14 and 15 (analog pins 0 and 1) will set the Hour and Mins.
 
  pinMode( 14, INPUT ); // set the virtual pin 14 (pin 0 on the analog inputs )  SET HOURS
  digitalWrite(14, HIGH); // set pin 14 as a pull up resistor.

  pinMode( 15, INPUT ); // set the virtual pin 15 (pin 1 on the analog inputs )  SET MINUTES
  digitalWrite(15, HIGH); // set pin 15 as a pull up resistor.
 
  pinMode( 16, INPUT ); // set the virtual pin 15 (pin 1 on the analog inputs )  FREE TO USE AS INPUT OR OUTPUT
  digitalWrite(16, HIGH); // set pin 15 as a pull up resistor.

  pinMode( 17, INPUT ); // set the virtual pin 15 (pin 1 on the analog inputs )  FREE TO USE AS INPUT OR OUTPUT
  digitalWrite(17, HIGH); // set pin 15 as a pull up resistor.

  pinMode( 18, INPUT ); // set the virtual pin 15 (pin 1 on the analog inputs )  FREE TO USE AS INPUT OR OUTPUT
  digitalWrite(18, HIGH); // set pin 15 as a pull up resistor.

  pinMode( 19, INPUT ); // set the virtual pin 15 (pin 1 on the analog inputs )  FREE TO USE AS INPUT OR OUTPUT
  digitalWrite(19, HIGH); // set pin 15 as a pull up resistor. 
 
 // Open serial communications:
 // Serial.begin(9600);
 
}

void SetSN74141Chips( int num2, int num1 )
{
  int a,b,c,d;
 
  // set defaults.
  a=0;b=0;c=0;d=0; // will display a zero.
 
  // Load the a,b,c,d.. to send to the SN74141 IC (1)
  switch( num1 )
  {
    case 0: a=0;b=0;c=0;d=0;break;
    case 1: a=1;b=0;c=0;d=0;break;
    case 2: a=0;b=1;c=0;d=0;break;
    case 3: a=1;b=1;c=0;d=0;break;
    case 4: a=0;b=0;c=1;d=0;break;
    case 5: a=1;b=0;c=1;d=0;break;
    case 6: a=0;b=1;c=1;d=0;break;
    case 7: a=1;b=1;c=1;d=0;break;
    case 8: a=0;b=0;c=0;d=1;break;
    case 9: a=1;b=0;c=0;d=1;break;
    default: a=1;b=1;c=1;d=1;
    break;
  } 
 
  // Write to output pins.
  digitalWrite(ledPin_0_d, d);
  digitalWrite(ledPin_0_c, c);
  digitalWrite(ledPin_0_b, b);
  digitalWrite(ledPin_0_a, a);

  // Load the a,b,c,d.. to send to the SN74141 IC (2)
  switch( num2 )
  {
    case 0: a=0;b=0;c=0;d=0;break;
    case 1: a=1;b=0;c=0;d=0;break;
    case 2: a=0;b=1;c=0;d=0;break;
    case 3: a=1;b=1;c=0;d=0;break;
    case 4: a=0;b=0;c=1;d=0;break;
    case 5: a=1;b=0;c=1;d=0;break;
    case 6: a=0;b=1;c=1;d=0;break;
    case 7: a=1;b=1;c=1;d=0;break;
    case 8: a=0;b=0;c=0;d=1;break;
    case 9: a=1;b=0;c=0;d=1;break;
    default: a=1;b=1;c=1;d=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);
}


float fadeIn = 4.0f;
float fadeOut = 4.0f;
float fadeMax = 6.0f;
float fadeStep = 1.0f;

//float fadeMax = 0.1f;
//float fadeStep = 0.1f;

int NumberArray[8]={0,0,0,0,0,0,0,0};
int currNumberArray[8]={0,0,0,0,0,0,0,0};
float NumberArrayFadeInValue[8]={0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,0.0f};
float NumberArrayFadeOutValue[8]={5.0f,5.0f,5.0f,5.0f,5.0f,5.0f,5.0f,5.0f};

void DisplayFadeNumberString()
{
 

 
  // Anode channel 1 - numerals 0,4
//  SetSN74141Chips(currNumberArray[0],currNumberArray[4]);  THIS LIGHTS THE INS-1 COLONS
 
  digitalWrite(ledPin_a_1, HIGH);
  SetSN74141Chips(0,0);   
delay(1.0f); 
  SetSN74141Chips(1,1);   
delay(1.0f); 
 // SetSN74141Chips(2,2);
//delay(1.0f);
//  SetSN74141Chips(3,3);
//delay(1.0f); 
//  SetSN74141Chips(4,4);   
//delay(1.0f); 
  SetSN74141Chips(5,5);   
delay(1.0f); 
  SetSN74141Chips(6,6);
delay(1.0f);
  SetSN74141Chips(7,7);
delay(1.0f);
  SetSN74141Chips(8,8);   
delay(1.0f); 
  SetSN74141Chips(9,9);
delay(1.0f);
  digitalWrite(ledPin_a_1, LOW);
   
 
    // Anode channel 2 - numerals 1,5
  SetSN74141Chips(currNumberArray[1],currNumberArray[5]);   
  digitalWrite(ledPin_a_2, HIGH);   
  delay(NumberArrayFadeOutValue[1]);
  SetSN74141Chips(NumberArray[1],NumberArray[5]);   
  delay(NumberArrayFadeInValue[1]);
  digitalWrite(ledPin_a_2, LOW);
 
   // Anode channel 3 - numerals 2,6
  SetSN74141Chips(currNumberArray[2],currNumberArray[6]);   
  digitalWrite(ledPin_a_3, HIGH);   
  delay(NumberArrayFadeOutValue[2]);
  SetSN74141Chips(NumberArray[2],NumberArray[6]);   
  delay(NumberArrayFadeInValue[2]);
  digitalWrite(ledPin_a_3, LOW);
 
     // Anode channel 4 - numerals 3,7
  SetSN74141Chips(currNumberArray[3],currNumberArray[7]);   
  digitalWrite(ledPin_a_4, HIGH);   
  delay(NumberArrayFadeOutValue[3]);
  SetSN74141Chips(NumberArray[3],NumberArray[7]);   
  delay(NumberArrayFadeInValue[3]);
  digitalWrite(ledPin_a_4, LOW);
 
  // Loop thru and update all the arrays, and fades.
  for( int i = 0 ; i < 8 ; i ++ ) //equal to & of digits
  {
    if( NumberArray[i] != currNumberArray[i] )
    {
      NumberArrayFadeInValue[i] += fadeStep;
      NumberArrayFadeOutValue[i] -= fadeStep;
 
      if( NumberArrayFadeInValue[i] >= fadeMax )
      {
        NumberArrayFadeInValue[i] = 0.0f;
        NumberArrayFadeOutValue[i] = fadeMax; //affects the refresh cycle
        currNumberArray[i] = NumberArray[i];
      }
    }
   
   
  } 
}

// Defines
long SSECS = 100;         // sub seconds
long SECS = 60;         //  milliseconds in a Sec
long MINS = 60;         // 60 Seconds in a Min.
long HOURS = 60 * MINS; // 60 Mins in an hour.
long DAYS = 12 * HOURS; // 24 Hours in a day. > Note: change the 24 to a 12 for non military time.

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

// default time sets. clock will start at 12:34:00.  This is so we can count the correct order of tubes.
long clockHourSet = 12;
long clockMinSet  = 34;
long clockSecSet  = 00;
long clockSSecSet  = 00;

int HourButtonPressed = false;
int MinButtonPressed = false;

////////////////////////////////////////////////////////////////////////
//
//
////////////////////////////////////////////////////////////////////////
void loop()     
{
  // Get milliseconds.
  runTime = millis();
  //int ssTime = millis();
 
  int hourInput = digitalRead(14); 
  int minInput  = digitalRead(15);

  if( hourInput == 0 )
    HourButtonPressed = true;
  if( minInput == 0 )
    MinButtonPressed = true;
  if( HourButtonPressed == true && hourInput == 1 )
  {
    clockHourSet++;
    HourButtonPressed = false;
  }
  if( MinButtonPressed == true && minInput == 1 )
  {
    clockMinSet++;
    MinButtonPressed = false;
  }

  // Get time in seconds.
  long time = (runTime) / 1000; //////////change this value to speed up or slow down the clock, set to smaller number such as 10, 1, or 100 for debugging
  int sstime = (runTime) / 10;
  // Set time based on offset..
  // long hbump = 60*60*clockHourSet;
  //long sbump = 60*60*60*clockHourSet; //change hourset to secondset
  long hbump = 60*60*clockHourSet;
  long mbump = 60*clockMinSet;
  time += mbump + hbump;

  // 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;     
//  long sseconds  = 76;// time -= seconds  * SECS;
  long sseconds  = runTime / SECS; time -= sseconds  * SECS;

  // 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;
  int lowerSSeconds = sseconds % 10;
  int upperSSeconds = sseconds; - lowerSSeconds;
 
  if( upperSSeconds >= 10 )  upperSSeconds = upperSSeconds / 10;
  if( upperSeconds >= 10 )   upperSeconds = upperSeconds / 10;
  if( upperMins >= 10 )      upperMins = upperMins / 10;
  if( upperHours >= 10 )     upperHours = upperHours / 10;
 
  if( upperHours == 0 && lowerHours == 0 )
  {
    upperHours = 1;
    lowerHours = 2;
  }
 
  // Fill in the Number array used to display on the tubes.
 
  NumberArray[7] = upperHours;
  NumberArray[6] = lowerHours;
  NumberArray[5] = upperMins;
  NumberArray[3] = lowerMins;
  NumberArray[2] = upperSeconds; 
  NumberArray[1] = lowerSeconds;
 
  DisplayFadeNumberString();
}
11  Projects / ArduiNIX / Re: Code for 6 digits / 4 separators / multiple modes / RTC / inputs / more on: October 17, 2014, 10:05:47 AM
Here's the code for my build. I posted description and photos in the projects forum here:
http://www.robotpirate.com/forums/index.php?topic=4.msg638#msg638

Code highlights:
- 6 digits + 4 separators + 3 mode indicators
- 2 Inputs: standard button and rotary encoder (with button)
- Uses DS1307 RTC to keep time/date while display off (~9yr lifespan)
- Standard modes: time, date, and countdown timer.
- EASY setting: Press encoder, dial up/down SS, press for MM, press for HH, press to confirm
- Cathode poison prevention mode can be activated on startup (hold pushbutton at end of tube test)
- Countdown timer displays HH:MM:SS above 1min and    SS.DD below 1min
- Uses MCP23008 Port Expander
- Does not use millis() for time
- Does not use delay() for multiplexing

Feel free to use any way you'd like.
Enjoy!

Excellent work, I will sticky this for future reference!
12  Projects / ArduiNIX / Re: Excess MOSFET Heat and Voltage Bleed on: March 17, 2014, 06:35:18 PM
Apparently the ghosting has nothing to do with sharing an anode. I finally finished my software and when i display 5:00PM there is a ghost in the first hour digit (which is disabled):


Based on other post's i've seen the shift registers are probably the cause.

Well, normally when they ghost like that, if it's a driver chip issue, that usually means they always fire multiple tube elements, AND they exhibit the same error across more than one tube.  Meaning, if say, your first two digits share the same driver chip, both those tubes would ghost.

It seems like there may be a short on the cathode side, can you tell me which numerals ghost? if it's all of them, or just one or two?


If a driver chip is bad, that would mean any tube associated with it would ghost, or display a jumble of numerals.
13  Projects / ArduiNIX / Re: Excess MOSFET Heat and Voltage Bleed on: March 16, 2014, 07:10:52 PM
Hello,
     I'm building clock with four IN-4 and INS-1 Neon Tube colons. I have everything wired but i'm having some issues with the MOSFET heating up and an issue where voltage is leaking to cathodes. For example, anode2 is shared by a nixie tube (cathode1) and the INS-1 colon (cathode1). When i fire the colon, some voltage is bleeding through to the nixie tube.

    I'm wondering if i damaged the SN74141's. I didnt' have any sockets on hand and impatiently solder'd them directly.

    FYI, here's a link to my Driver software. Still a work in progress. If the C++ pattern ends up being too slow i'll re-write it in C-style code:
https://github.com/waldo1979/WitchingHour

-Waldo

Can you tell me a bit about your setup?

Do the tube and colon share a common anode as well?
Are they both resistored on the anode?

Try different anode channel per unit. And use the multiplexing to gate them.

Below is a table describing my tube wiring. The nixies have a 10k resistor on the anodes and the neons are connected in series with a 47k resistor. When I illuminate the neon tubes (colon) and leave it on the Nixie->hour2 has a ghost. Using a different anodes have the same effect. if i illuminate in a loop with a delay the ghosting isnt visible.

The wiring to the tubes is AWG 28 (http://amzn.com/B007R9SQQM), which might be a little small. The tubes are socketed using sockets from Germany i bought off ebay: http://www.ebay.com/itm/331114980365

When the neon tube is illuminated, if i take a voltage reading from the cathode pins which are supposed to be in the off/low state and ground there is 140~ volts. I checked for shorts but didn't see any. Seems like the problem lies within the shift registers.

Anode1Nixie->Hour1
Anode2Nixie->Hour2, Neon Tubes
Anode3Nixie->minute1
Anode4Nixie->minute2
Cathode0Nixie->hour1, Nixie->hour2
Cathode1Nixie->Minute1, Nixie->Minute2, Neon Tubes



First off, if you don't have your neon lamps equipped with a resistor for EACH anode per each lamp, you will have a bit of trouble there.  I've seen ghosting and other odd results when multiple neon lamps use unresistored anodes.
14  Projects / ArduiNIX / Re: Excess MOSFET Heat and Voltage Bleed on: March 15, 2014, 06:46:43 AM
Hello,
     I'm building clock with four IN-4 and INS-1 Neon Tube colons. I have everything wired but i'm having some issues with the MOSFET heating up and an issue where voltage is leaking to cathodes. For example, anode2 is shared by a nixie tube (cathode1) and the INS-1 colon (cathode1). When i fire the colon, some voltage is bleeding through to the nixie tube.

    I'm wondering if i damaged the SN74141's. I didnt' have any sockets on hand and impatiently solder'd them directly.

    FYI, here's a link to my Driver software. Still a work in progress. If the C++ pattern ends up being too slow i'll re-write it in C-style code:
https://github.com/waldo1979/WitchingHour

-Waldo

Can you tell me a bit about your setup?

Do the tube and colon share a common anode as well?
Are they both resistored on the anode?

Try different anode channel per unit. And use the multiplexing to gate them.
15  Projects / ArduiNIX / Re: What arduino pins are used for arduinix? on: February 01, 2014, 09:26:31 PM
I am new to both the arduino and the arduinix.  I assembled the arduinix and all appears to be working fine.  I want to extend the model and introduce other hardware (e.g. a motion sensor to turn on the display).  I am of limited experience with the arduino, but I am smart enough to know that I would need to attach it to the arduino to be able to code to it, my question is what pins are available to use?  It looks like the analog pins are optionally connected to the arduinix; I connected those when I assembled the board.  This was not clear to me when I did the assembly so I added the pins and completed the connections.

If this is optional, what was accomplished by connecting these to the arduinix?  If I remove that connector can I then use those pins for other purposes?  Any insight here would be appreciated.

Those analog pins are available, they have been used in code as buttons for set time, but they don't have to be.

You can solder a set of wires to the top of the headers above the board if you need to.
Pages: [1] 2 3 ... 13