Revitalizing an aging Ice Tube Clock display
Moderators: adafruit_support_bill, adafruit

Please be positive and constructive with your questions and comments.

Revitalizing an aging Ice Tube Clock display

by jarchie on Tue May 31, 2016 12:04 am

Although the Ice Tube Clock kit has been discontinued for a while now, some people with older clocks might be interested in improving the look of their well-worn IV-18 display tubes.

The Adafruit Ice Tube Clock powers the IV-18 filament (cathode) with ~2.5v DC; brightness is controlled by adjusting the boost (anode and grid) voltage. One disadvantage of this method is that, at low brightness, the display exhibits a slight brightness gradient as well as slightly inconsistent segment illumination. Both of these attributes seem to become more noticeable as the display ages... or at least they did in my clock with a tube that has been in use for about five years.

For consistent illumination, the Noritake VFD guide recommends using a high anode and grid voltage. In this configuration, the display is blanked with a PWM signal, and brightness can be controlled by adjusting the duty cycle of the PWM signal. Driving the tube in this fashion gave my older, well-worn IV-18 tube the consistent, even illumination of a fresh, unused IV-18 tube.

Modifying the display drive on the Ice Tube Clock requires my xmas-icetube firmware (forum, GitHub) as well as a minor hardware mod. There are good tutorials for installing this firmware (Windows, OS X). When configuring the firmware, be sure to uncomment the "#define VFD_TO_SPEC" line in config.h to enable support for this mod.

The only pin on the microcontroller that can output a suitable PWM signal for brightness control is PD5/OC0B. Inconveniently, PD5 is already used for the MENU button. So PD5 must be rewired to the blanking pin on the VFD driver chip, and the menu button must be reconnected to another pin (PB4):

  • cut the trace between PD5 and the MENU button
  • cut the trace between PC3 and the MAX6921 BLANK pin
  • solder a wire between PB4 and the MENU button
  • solder a wire between PD5 and the MAX6921 blank pin
These mods are illustrated in the photos below. The two cut traces are circled, and the two new wires are indicated with arrows. The 50 ohm variable resistor is installed in place of R3, which is unnecessary but allows me to easily play with the value of R3. The two unmarked wires are not related to this mod: the leftmost black wire repairs a cut trace and the rightmost red wire is for the extended battery hack.

(full sized image)
board-mods.jpg (158.45 KiB) Viewed 839 times

Once your clock hardware is modified, you can fine-tune the display driver settings by making adjustments to config.h. I am personally using a "hybrid" drive which primarily controls brightness through PWM blanking, but also drives the boost circuit harder at higher brightness levels. Because the clock uses more current from the boost supply at higher brightness levels, this hybrid approach keeps the boost voltage from sagging at higher brightness levels. Here are the specific parameters I'm using in my clock:

Code: Select all | TOGGLE FULL SIZE
// VFD displays lose brightness as they age, but increasing the
// grid/segment voltage can extend the useful life.  This voltage
// is controlled by the OCR0A register, and OCR0A is set by
//   OCR0A = OCR0A_MIN + OCR0A_SCALE * brightness
// where brightness is 0-10 as set through the configuration menu.
// The grid/segment voltage can be roughly estimated by
//   voltage = OCR0A / 4 + 6
// The IV-18 display has an absolute maximum grid/segment voltage of
// 70 volts, but on the Adafruit Ice Tube Clock, a Zener diode prevents
// this from exceeding 60 volts.  And the clock's fuse might blow before
// that point, so the hardware will ensure that the grid/segment voltage
// maximum is never exceeded.
// For a dim display, I suggest setting OCR0A_MIN to 30 and OCR0A_SCALE
// to 14.  If the fuse blows or becomes warm during operation, reduce
// OCR0A_SCALE or install a higher power fuse.
#define OCR0A_MIN   50
#define OCR0A_SCALE 11
#define OCR0A_MAX OCR0A_MIN + 10 * OCR0A_SCALE

// The following multiplexing options define how the display should be
// multiplexed.
// Digit multiplexing displays each digit in rapid succession.
// Although this is the standard way to do multiplexing, there might
// be slight ghosting, especially of decimals at higher boost voltage.
// I recommend digit multiplexing for use with the Adafruit Ice Tube
// Clock v1.1, without the to-spec hack.
// Subdigit multiplexing is similar to digit multiplexing, but
// displays each digit twice--once showing only segments B, C, and H
// (those lit when displaying "1.") and once showing only the other
// segments.  This method eliminates ghosting, but reduces overall
// brightness.
// I recommend subdigit multiplexing for use with the to-spec hack and
// the xmas-icetube hardware revision.  The reduction in overall
// brightness is a benefit here, as the minimum brightness attainable
// with PWM brightness control and digit multiplexing is a bit too
// bright.  And the maximum brightness with plain PWM and digit
// multiplexing is unnecessarally bright.
// Segment multiplexing displays each segment (on all digits where
// that segment is displayed) in rapid succession.  This method
// eliminates ghosting, and the maximum brightness is similar to that
// with digit multiplexing.  But the per-digit brightness adjustment
// is not available when using this method.
// I do not recommend segment multiplexing, but left the feature in
// the code in case anyone wants to play with it.  The problem with
// segment multiplexing is that resistance through the MAX6921
// limits current on each segment, so if one segment is displayed on
// many digits, that segment will be dimmer than if one segment is
// displayed on only a few digits.  Also, more current will flow
// through segments with the least resistance (at the right of the
// display), so those digits appear slightly brighter.

// The Adafruit Ice Tube Clock v1.1 does not drive the IV-18 VFD tube
// to specifications, but with some rewiring and additional circuitry,
// enabling the following macros will drive the IV-18 tube as
// intended.  The following thread on the Adafruit Clocks forum
// describes the required hardware modifications for this hack:
//   http://forums.adafruit.com/viewtopic.php?f=41&t=41811
#define VFD_TO_SPEC

// These options should only be used with the to-spec hack above.
// With the to-spec hack, brightness may be controlled with boost
// voltage, pulse width modulation (PWM), or both.  I recommend
// controlling brightness with PWM only.
// If neither OCR0A_VALUE nor OCR0B_PWM_DISABLE is defined, brightness
// will be controlled by both boost voltage and PWM.
// If only OCR0A_VALUE is defined, the boost voltage will be fixed,
// and brightness will be controlled by PWM (recommended).
// If only OCR0B_PWM_DISABLE is defined, brightness will be controlled
// by the boost voltage.
// Defining OCR0A_VALUE and OCR0B_PWM_DISABLE is possible, but doing
// so will lock the display to a constant brightness and break the
// menu-configurable brightness adjustment.
// If D1 is a power blocking diode (as in the xmas-icetube hardware
// revision), I suggest an OCR0A_VALUE of 192.  If D1 is a Schottky
// diode (as in the original Adafruit design), I suggest an OCR0A_VALUE
// value of 128.  Ideally, the exact value should be tuned for your
// particular clock:  OCR0A_VALUE should be large enough such that the
// boost circuit generates just over 50v with the display installed
// and at maximum brightness, but OCR0A_VALUE should be no larger than
// necessary to prevent excessive voltage from being lost through the
// Zener diode.
// #define OCR0A_VALUE 128
// #define OCR0B_PWM_DISABLE

With an Adafruit tube drive, the first two photos illustrate the difference between a new (unused) spare tube and my old worn tube. Notice the brightness gradient and uneven illumination in the second photo. The third photo shows the same old tube driven with the hybrid drive and digit multiplexing ("#define DIGIT_MULTIPLEXING"). The fourth photo shows how consistent illumination can be maintained at even lower brightness with subdigit multiplexing ("#define SUBDIGIT_MULTIPLEXING"), and increasing voltage to the filament by replacing R3 with a jumper does not change anything (fifth photo).

(full sized image)
combined.jpg (285.29 KiB) Viewed 839 times

Photographing VFD tubes is something of a dark art that I have not yet learned. (Or maybe I just need a better camera.) The older tube definitely looks a lot better with the hybrid drive, but you can only see a slight improvement in the images above. I wish I could post photographs that more accurately reflect the improvement, but these images at least give some idea of the difference. Each photograph was taken in a dark room, with the clock at minimal brightness, and with the same camera settings.

Posts: 546
Joined: Sun Jun 24, 2012 2:16 pm
Location: Santa Cruz, California, United States

Re: Revitalizing an aging Ice Tube Clock display

by nhibanez on Tue Dec 05, 2017 10:16 am

I've got an Ice Tube Clock that's almost 8 years old and I recently noticed that when the display dims that most of the segments go unreadable. I found your fix and it does sound promising but does your firmware support auto-dimming? I'd hate to lose that functionality. If it doesn't, I'm considering just ordering up several new tubes and just have to replace them every once as they die.

Posts: 10
Joined: Sat Oct 27, 2012 1:40 pm

Re: Revitalizing an aging Ice Tube Clock display

by jarchie on Thu Dec 07, 2017 12:39 am

nhibanez wrote:I found your fix and it does sound promising but does your firmware support auto-dimming?

There is a full list of features for the xmas firmware in the README file for the project, and autodimming support is enabled by default. Specific details for the autodimmer mod are described in the config.h file and quoted below:

Code: Select all | TOGGLE FULL SIZE
// Defining the following macro enables support for Automatic dimming.
// This hack also allows for the clock display to be disabled at night
// (when dark).
// In the Adafruit Ice Tube Clock v1.1, this feature requires a
// pull-up resister to be installed in R4 and a CdS photoresistor to
// be installed in CT1.  CT1 is the two expansion pins nestled among
// L1, R4, and SPK.  I suggest using a 5.6k pull-up resistor with an
// Advanced Photonix Inc PDV-P8001 photoresistor.  Note that
// photoresistors purchased from Adafruit should behave like the
// PDV-P8001 and are acceptable substitutes.
// The automatic dimmer hack is discussed extensively on the
// Adafruit Clocks forum:
//   http://forums.adafruit.com/viewtopic.php?f=41&t=12932
//   http://forums.adafruit.com/viewtopic.php?p=219736#p219736

nhibanez wrote:If it doesn't, I'm considering just ordering up several new tubes and just have to replace them every once as they die.

The hack described in this thread should extend your displays' life, but it's always a good idea to have a spare tube on hand. I would suggest picking up a spare regardless. (Just my two cents.)

Anyway, good luck and happy hacking!

Posts: 546
Joined: Sun Jun 24, 2012 2:16 pm
Location: Santa Cruz, California, United States

Please be positive and constructive with your questions and comments.