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
(full sized image)
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
// DISPLAY BRIGHTNESS / BOOST CONFIGURATION
//
// 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
// DISPLAY MULTIPLEXING ALGORITHM
//
// 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.
//
// #define DIGIT_MULTIPLEXING
#define SUBDIGIT_MULTIPLEXING
// #define SEGMENT_MULTIPLEXING
// IV-18 TO-SPEC HACK
//
// 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
// TO-SPEC BRIGHTNESS ADJUSTMENT METHOD
//
// 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) 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.