Introduction: Driving a Salvaged VFD With MAX7219 and an Arduino

About: IT Student, Brno University of Technology

You can get your hands on some very interesting components when disassembling old electronics. One such I've found was this VFD (Vacuum Fluorescent Display). Trying to reverse-engineer the controller was, however not the way to go as all ICs on the board were covered with glob-tops. So I decided to de-solder it from the control board and build a simple driver. Here's how to do it with a MAX7219 (I've had a few left from a previous LED project) and some other components.

Supplies

  • 1 x VFD display (with 7-segment characters)
  • 5 x BC547 transistor
  • 10 x 1M resistor
  • 6 x 10K resistor
  • 1 x Arduino
  • 2 x UDN2981
  • 1 x MAX7219
  • 1 x 18V power supply

Step 1: Circuit Layout

Please bear in mind that I'm no electrical engineer, the design is based on my very vague idea of how electronics work, so it most-likely could have been done a lot better but that's out of scope with my current knowledge.

After doing some reverse-engineering, you can figure out the pinout to the parts of the display you're interested in. For the specific display I used, the pins are as above.

The filament pins (the two left-most pins) require around 3V to operate. Grids and anodes(digits and segments) both need around 18V to provide sufficient contrast.

The MAX7219 cannot be used to drive a VFD directly as the logic is a bit different from 7-segment common-cathode LED displays. Instead of pulling the currently multiplexed digit to ground, it needs to be supplied with 18V as well as its corresponding segments. The NPN transistor with a few resistors did the trick.

Finally, UDN2981s are used to supply the segments and digits with 18V. Its inputs are triggered by the outputs of MAX721

Step 2: Code

Any other library developed for MAX7219 should work just fine with this. I wanted to try writing one myself just with the very basic functionality I expect to be able to do with the display (displaying integer numbers, floating point with two decimal places and 5-character strings). If you'd like to use mine, it's again up on my GitHub.

Step 3: Final Touches

The breadboard prototype was a bit of a mess. Since I want to use this in a latter project, I decided to make it into sort of a module. That's all for now, thanks for stopping by and stay tuned for the project I'm planing to use this in!