Vacuum Fluorescent Display Watch

13,766

93

62

Introduction: Vacuum Fluorescent Display Watch

That whole project started a while back with an hackaday article from 2014 in which [Johngineer] build the 'ChronodeVFD', a wristwatch made from an old soviet vacuum fluorescent display. It kind of triggered the 'shut up and take my money' reflex in me, but as it wasn't for sale and didn't have any design details available I quickly had to scrap that.

Fast forward a bit, during a late night eBay shopping spree (as one usually does...), I stumbled upon a listing from an Ukrainian guy who sold an IVL2-7/5 VFD - the exact same model used for the ChronodeVFD. After a bit of back and forth with the seller I ended up with a box of these babies neatly wrapped in what seems like Russian newspaper - nice!
However, I now realised that I had no clue how to drive these things or even how they worked, so some googling was in order.

Step 1: What the Hell Is an VFD and How Does It Work?

Vacuum fluorescent displays work kind of like a CRTs where accelerated electrons are bombarded on a layer of phosphor which then emits this typical blue-greenish light. VFDs are driven with much lower voltages compared to CRTs which is why they are often found in small consumer equipment predating the LCD-era.

In order to create free electrons a filament is heated within the VFD, the cathode (at negative, or in our case ground potential). This creates an electron cloud around the filament, which will be accelerated towards any positively charged surface, here the plates of the anode. This on its own works already, but would require a separate pin for each segment on the display to drive it. To reduce the number of inputs, most VFDs are multiplexed with a matrix above each substructure like a 7-segment. Only when the plate and its matrix are at a positive voltage electrons will hit the phosphor surface.

The IVL2-7/5 is controlled with an anode voltage of around 24V for the matrix and plates. The filament is heated with 2.4V AC. The AC is needed to even out the voltage difference between the filament and the anode. If DC is used, the side closer to ground will be at a higher voltage difference (0-24V vs 2.4-24V) and may be brighter than the other side. In practice the difference is hardly noticeable.

Step 2: Testing

Initially I didn't have a datasheet for the display, so I had to resort to trial-and-error testing. The filament pins can easily be found by measuring the resistance between them as it should be in the order of tens of Ohms. All the other pins are either a short or open circuit.
In the end I found the original datasheet, so this wasn't really necessary...

Step 3: Circuit Design & PCB Layout

The watch was designed with the following specifications in mind:

  • Run (briefly) from a AA alkaline battery
  • Compact size
  • Wifi & Bluetooth
  • Easily programmable

The brain of the watch is an ESP32 (Wroom-32 module) as it can be programmed via Arduino and has build in Wifi/Bluetooth and a very low power sleep mode. To interface with the ESP32 a FTDI USB-Serial converter was used.

The most challenging part of this project was to get the different power supply correctly designed. The VFD needs 24V for its anode and ideally 2.4V AC for the filament. The ESP32 also need its share of 3.3V at more than 240mA when heavily using wireless communications. All that has to be squeezed out of a 1.5V AA alkaline cell.

Early on the 2.4V AC was replaced by just using 3.3V on the filament and modulating the output with an H-bridge to not burn up the filament. It actually can survive 3.3V for a bit, but quickly turns into a light bulb...

The 3.3V is generated using a MP3120 boost converter, that is specifically designed to work with single cell alkaline batteries. It can theoretically go down to 0.8V, but in practice only at very low currents. But it has a built in linear regulator, that allows the use of batteries with higher than 3.3V voltage like 14500 lithium cells.

24V for the VFD comes also from a boost converter MCP1663. This one is less efficient due to the high step-up from 3.3V to 24V. The display also works at lower voltages down to 16V, but loses much of its brightness.

To switch the 24V on the display anodes 2 high-side switching ICs TBD63783A with a 16 bit I2C expander (MCP23017) are used. This can also be done with discrete PNP & NPN transistors, but due to limited board area I opted for the more integrated solution.

The whole design and layout was done with KiCad5.

Step 4: Assembly and Some Troubleshooting

The PCB were ordered from JLCPCB with black solder mask and gold plating (because why not...). The assembly was done by hand.

Initially the USB-Serial converter didn't work, but after some troubleshooting this was due to mixed up data lines on the USB connector, that were fixed with some bodge wires as seen in the picture above.

Step 5: Code

The software was written with Arduino using PlatformIO.

The full source code and design files can be found on GitHub:

https://github.com/Pakue95/VFD_Watch

Thanks for reading!

Arduino Contest 2019

Participated in the
Arduino Contest 2019

1 Person Made This Project!

Recommendations

  • 3D Printed Student Design Challenge

    3D Printed Student Design Challenge
  • Laser Challenge

    Laser Challenge
  • Made with Math Contest

    Made with Math Contest

62 Comments

0
emrecetinkaya86
emrecetinkaya86

6 weeks ago

Thank you soo much for your share! I've been searching so much to find some information about this tube on the internet and found your project. Now i got it to first run on the breadboard. More is coming, i first wanted to thank you especially for explaining how this tube works(everyting is Russian about this).

0
LoneRanger4711
LoneRanger4711

Question 6 months ago

First of all...a big thank you for sharing this wonderful project! I`m almost done with the pcb, just only waiting for the micro-usb socket to be able for programming in system. While waiting i trie to understand the code you`ve written. Have put it up to an evaluation board and enabled the serial to get the messages of the time (in main.cpp). There i get only shown the inital time the board gets through NTP. No counting up like i expected. I apologize for not being the crack in coding, so there`s the question if this is the wrong point (activating the serial output in main.cpp) to have a look wether the code is functional. Maybe you can give me a hint...
Cheers

0
pakue
pakue

Answer 6 months ago

Hey,
Great, that you're enjoying the project!
The program simply joins the configured WiFi and updates the time via NTP. After that the ESP keeps track of the time internally and therefore the WiFi is turned off again.
If you uncomment the Serial print line in the updateTime function it should print out the local time every 2 seconds. Otherwise it just sends the update to the display. On a dev board without the display it won't do much.
Let me know if that helped.

Best wishes.

0
LoneRanger4711
LoneRanger4711

Reply 6 months ago

Thank you for your instant reply. When uncommenting the Serial print line in the updateTime function i only get the time from the moment, when the esp32 connects the timeserver via NTP. Every two seconds it shows the same time like 20:15:12 ... 20:15:12 ... 20:15:12 ... 20:15:12 ... 20:15:12 and so on. There is no update in the time visible in the terminal. I expected to see the ongoing local_time like 20:15:12 ... 20:15:14 ... 20:15:16 ... 20:15:18 ... 20:15:20 ... from the esp32 in the terminal to be shure that the code is running well. For being shure that the code is doing well i checked it out on the dev board. But there`s my limitation in coding. I`m not able to find out, if the code gives really the ongoing time via the Serial to the terminal. That`s why i asked which time the terminal will show. In fact, there is no update in the time visible...
Best regards

Serial.Println.jpg
0
LoneRanger4711
LoneRanger4711

Reply 6 months ago

Changing from "Serial.println(&local, "Date: %d.%m.%y Time: %H:%M:%S"); // print formated time" to - "Serial.println(time, "Date: %d.%m.%y Time: %H:%M:%S"); // print formated time" did the trick. The expression "&local" didn`t contain the internal time from the esp32. Using the expression "time", the same that is used for updating the vfd, was solving the problem. Now the terminal is showing the continuing time :-)

0
pakue
pakue

Reply 6 months ago

Glad you could figure it out!
I changed the time variable at some point and didn't update the comment.
I hope your board works once the connector arrives ;-)

0
LoneRanger4711
LoneRanger4711

Reply 5 months ago

So finally the watch is build ... in the first shot ... without a fault. Thank you again for your efforts in coding and constructing!!!
Next stage is to customise the brightness. Although it looks great in the picture (because i made the pic in a darker enviroment ), the brightness is in reality not enough. I spent a few hours in looking in the code in order to increase the PWM with the value "dutyCycle", but unfortunately i didn`t find the place where the value could be set higher. Maybe you can give me a hint for this.
Next thing i would like to change, and this can`t be done by me because of missing ability in coding, is disactivating the display for four seconds and activating for one second and so on. It would be a great benefit for the battery life if you have the time and the interest in a further developement by coding the deactivation for four seconds and activating for one second.

Cheers

VFD_Wristwatch.jpg
0
GloomUnderNight
GloomUnderNight

Question 7 months ago on Introduction

Hi, I'd like to attempt this project and wanted to ask, if you have a complete list of components and gerber files for the pcb? It would be very much appreciated!

0
pakue
pakue

Answer 7 months ago

Hey, did you have a look at the GitHub page? There should be everything you need.
Let me know if something is unclear.

0
leoo13
leoo13

1 year ago

Hi, I am Alexander and I am from Ukraine!
I repeated your project, please explain to me how can I program the U6 ESP32-WROOM module?
How can I check if the "Battery voltage regulation" and the "VFD driver" are working correctly, at what control point should be 24V? How can I measure it?
Thank you waiting for an answer from you ...

IMG_20191126_215056.jpgIMG_20191126_215035.jpg
0
verbijvlad4
verbijvlad4

Reply 1 year ago

Здравствуйте, Александр, хочу задать вам вопрос - как вы нашли перечень компонентов с нужными обозначения и?

0
leoo13
leoo13

Reply 1 year ago

1;"R19,R18,R5,R6,R9,R12,R13,R14,R15,R16,R17";"R_0805_2012Metric";11;"10k";;;
2;"C19";"C_1206_3216Metric";1;"10uF";;;
3;"U10";"ILV2-5_7";1;"IVL2-7_5";;;
4;"REF**,REF**,REF**,REF**";"Strap_Holes";4;"Strap_Holes";;;
5;"U6";"ESP32-WROOM";1;"ESP32-WROOM";;;
6;"U8,U9";"SOP-18_7.0x12.5mm_P1.27mm";2;"TBD62783A";;;
7;"U4";"SSOP-20_3.9x8.7mm_P0.635mm";1;"FT231XS";;;
8;"J2";"PinHeader_1x04_P1.27mm_Vertical";1;"I2C_Con";;;
9;"U7";"SSOP-28_5.3x10.2mm_P0.65mm";1;"MCP23017_SS";;;
10;"REF**,REF**,REF**,REF**";"Wire_Holes";4;"Wire_Holes";;;
11;"U1";"SOT-23-5";1;"MIC5219-3.3YM5";;;
12;"L2,L1";"L_Taiyo-Yuden_MD-5050";2;"10uH";;;
13;"BT1";"BK-92";1;"AA BK-92";;;
14;"C1,C2,C5,C6,C8,C11,C12,C14,C15,C16,C17";"C_0805_2012Metric";11;"4.7uF";;;
15;"C3,C4";"C_0805_2012Metric";2;"47pF";;;
16;"C9,C10,C18";"C_0805_2012Metric";3;"100nF";;;
17;"C13";"C_0805_2012Metric";1;"1uF";;;
18;"D1";"D_SOD-323";1;"D_Schottky 40V 1A";;;
19;"J1";"USB_Micro-B_Molex_47346-0001";1;"USB_B_Micro";;;
20;"Q1";"SOT-363_SC-70-6";1;"MBT3904DW1";;;
21;"R1,R2";"R_1206_3216Metric";2;"0R";;;
22;"R3,R4";"R_0805_2012Metric";2;"27";;;
23;"R7";"R_0805_2012Metric";1;"1M";;;
24;"R8";"R_0805_2012Metric";1;"640k";;;
25;"R10";"R_0805_2012Metric";1;"1.05M";;;
26;"R11";"R_0805_2012Metric";1;"56k";;;
27;"SW1";"SW_SPST_EVQP7A";1;"B1";;;
28;"SW2";"SW_SPST_EVQP7A";1;"B2";;;
29;"SW3";"SW_SPST_EVQP7A";1;"B_RES";;;
30;"SW4";"SW_SPST_EVQP7A";1;"B_0";;;
31;"U2";"WSON-8-1EP_2x2mm_P0.5mm_EP0.9x1.6mm";1;"DRV8837C";;;
32;"U3";"TSOT-23-6";1;"MP3120";;;
33;"U5";"TSOT-23-5";1;"MCP1663";;;
34;"C7";"C_0805_2012Metric";1;"470pF";;;

0
blackalex1973
blackalex1973

Reply 7 months ago

MCP1663 - где можно найти?

0
leoo13
leoo13

Reply 7 months ago

вы от куда ?

0
blackalex1973
blackalex1973

Reply 7 months ago

Киев. Я бы не спрашивал, будь вы в другой стране. Хотя, купить с доставкой я могу по всему миру.

0
pakue
pakue

Reply 1 year ago

Hey Alexander,

Sorry for the late reply!
I answered your PM. Let me know if you have any problems.

0
leoo13
leoo13

Reply 1 year ago

Hi, I figured out how to add firmware to the Arduino IDE platform.
How should I choose a module? What parameters should I set?
Thank you, I look forward to hearing from you ...

esp32.jpg
0
Critters n Me
Critters n Me

Question 1 year ago

Hello,
Thank you for sharing your work. I'm almost ready to attempt making a version but wondering what component attributes should be acquired for the resistors, e.g., tolerance (1%, 5%, etc.) and, more so, the capacitors, e.g., voltage ratings (10V, 25V, 50V) and tolerance (2%, 5%, 10%)? Mouser/Digikey have quite a variety and I didn't want to presume that the most commonly stocked (highest inventory) would be suitable. Thank you again.

0
pakue
pakue

Answer 1 year ago

Hey,

Cool that you plan on making one! For the resistors, most of them should be fine with 5% tolerance, just the 3.3V Step-Up sense resistors should be 1% so the voltage output is within spec. The capacitors for the 24V rail should be 50V to give a little headroom and otherwise 20% (standard precision for X7R, X5R) on decoupling capacitors is more than enough. However the price difference for low quantity is not that large so it may be easier to just by 1% resistors and 50V caps if you're unsure.

Hope that helps!

Best wishes,
Patrick