Nixie Clock #2 IN16

My second nixie clock design.
This clock is compared with my other Nixie clock much simpler, it uses less components and the code is kept simple and short.
The segments are multiplexed to increase lifetime of the tubes and simplify the 170V power supply.
Due the separate tube pcb it’s possible to use it with other tube’s. I have used IN-16 tubes for this clock, bought them on ebay.

To-do: Wooden enclosure with aluminum top and bottom.

Schematic
3D Design Front
3D Design Back
Finished top pcb
Finished bottom pcb
Finished tube pcb
It's working
Result2
PlayPause
previous arrow
next arrow
 
Schematic
3D Design Front
3D Design Back
Finished top pcb
Finished bottom pcb
Finished tube pcb
It's working
Result2
previous arrow
next arrow

The clock in action.

Multiplexing in action, shot with 1000fps camera

 

 

'============================================================================

'=  Simple IN-16 nixie tube clock with multiplexed segments, low part count =
'=             Shortest Nixie Bascom code available on the net              =
'=                                                                          =
'=                    Copyright Evertdekker.com 2011                        =
'=                    Code Created with Bascom 2.0.7.1                      =
'============================================================================

$regfile = "M88pdef.dat"
$crystal = 1000000                                          'Internal 8mhz div/8
$hwstack = 32
$swstack = 64
$framesize = 16

Config Clock = Soft                                         'Use the softclock, 32.768KHz crystal connected to tosc1/2
Config Date = Dmy , Separator = -
Enable Interrupts
Date$ = "15-03-11"
Time$ = "12:15:45"

'== Setup hardware ==
Digit Alias Portc
Config Digit = Output                                       'Set up portc as output for the digit
Ddrd = &B00111111                                           'Setup portd as output for the segment and keep bit6&7 free for other use
Button_hr Alias Pinb.0
Button_min Alias Pinb.1
Config Button_hr = Input
Config Button_min = Input                                   'Set buttons as input
Set Portb.0
Set Portb.1                                                 'Switch on the pullup for the buttons

Dim Multiplex As Byte
Multiplex = 1                                               'Multiplexer starts with 1

Do

Select Case Multiplex
 Case 1 : Digit = _sec Mod 10                               'Seconds
 Case 2 : Digit = _sec / 10                                 'Seconds tens
 Case 4 : Digit = _min Mod 10                               'Minute
 Case 8 : Digit = _min / 10                                 'Minute tens
 Case 16 : Digit = _hour Mod 10                             'Hour
 Case 32 : Digit = _hour / 10                               'Hour tens
End Select

Portd = &B11000000 Or Multiplex                             'Switch on one tube
Waitms 2                                                    'Some delay to slow down the multiplexer

If Multiplex < 32 Then                                      'Shift the multiplexer one bit to the left until all 6 segments are done
 Shift Multiplex , Left , 1
Else
 Multiplex = 1                                              'Start over again at segment 1
End If

Debounce Button_min , 0 , Setminute , Sub                   'One of the buttons pressed, jump to the sub to change the time
Debounce Button_hr , 0 , Sethour , Sub

Loop
End

'=== Subs ===
Setminute:
 Incr _min
 If _min > 59 Then _min = 0
Return

Sethour:
 Incr _hour
 If _hour > 23 Then _hour = 0
Return