Markus | Monday, January 15th 2018, 18:29

-- A basic general purpose USB enabled display

Figure 1. The USB VFD board

When ordering at Pollin Electronic, there is this unwritten rule of at least throwing in one probably useless item, one that you might never even get to work (or that is broken in the first place). In my last order, this was a Samsung HCS-12SS59T vacuum fluorescent display[1]. I absolutely love this kind of display and they were cheap at only EUR 1.75 a piece. So why not?

In this post, I will showcase the project that this display became.


After some initial research and the code and schematics from qrti on GitHub[2], I managed to get the VFD to power up on my lab power supply. It wasn't too hard. You just need a power supply of up to around 24 VDC and one that can generate a constant current of 100 mA, plus one 5 V supply for the logic and micro controller.

As the target was to make this a simple USB-powered gadget, I needed to power it all from a single 5 V supply. To generate the 24 VDC for the VFD anodes, I used a cheap DC-DC converter module which can be bought on, for example, eBay by searching for "dc dc boost". For the filament, VFDs usually require an AC current. This display module, however, also accepts DC without any visual penalties (might decrease the lifespan of the filament though). To generate a constant current, a simple single transistor current sink[3] has been used. It is important to use a current sink here instead of a current source as the filament voltage needs to be offset from ground by about 1 to 2 V. All of teh remaining logic can be powered directly from the USB port.

The processor on the design is an Atmega8, mainly because it supports V-USB[4] and has plenty of memory for most applications.

After some tinkering, this resulted in the following -- let's call it -- schematic:

Figure 2. USB VFD schematic


After adapting the USB-CDC code from Osamu Tamura[5] and tinogoehlert[6], I managed to create a simple USB-Serial (/dev/ttyACMx, COMx) device with the following commands:

  • Set text: t<12b ASCII>
  • Set raw: T<12b RAW>
  • Set brightness: b<0\15> / B<RAW>
  • Shift text: s<ASCII>...
  • Set character RAM: C<0-15><2b character>
  • Reset LCD: r
  • Reset board: R
  • Enable progress bar mode: xx
  • Set progress bar: x<0-60> <0-60> / X<2b progress>

By pushing the button on the back, the board can also enter a USB bootloader[7] mode for easy firmware updates.

All source code and other information can be found in my git repository: When cloning it, make to to also download the embedded Git submodules.

If you are interested in only the C driver for the VFD, but not the USB part, take a look at my GitHub:


I have one more of these displays lying around. The aim for that one is to give it an analog input and create a VFD based VU meter. I will update you should this project really take shape.


Tags: avr hardware