From a faulty DVD player I took VFD display and a power source. I used the power source to power the VFD display and Arduino.
Picture of VFD and the power source
VFD display module which I took from a faulty DVD player uses PT6312 controller, for which I found on the internet datasheet. According the datasheet PT6312 is a controller for a vacuum fluorescent display (VFD) packaged in a 44 pin plastic housing. PT6312 is functionally compatible with the μPD16312. To communicate with the Arduino I used DAT, CLK and STB lines from module and connect on Arduino digital pins 2, 3 and 4.
Sketch for initialize VFD module
// *********************************************************
// Program: VFD display control (PT6312)
// Version: 1.0
// Author: Elvis Baketa
// Description:
// *********************************************************
#define DAT 2
#define CLK 3
#define STB 4
#define displayMode 0x01 // 5 digits, 16 segments
#define dataSettings 0x40 // Data write & read mode settings
#define incrementAddress 0x40 // Increment address after data has been written
#define fixedAddress 0x44 // Fixed address
#define addressSettings 0xC0 // Address settings command
#define startAddress 0x00 // start address of ram memory
#define endAddress 0x09 // end address of ram memory
#define displayControl 0x8F // Display settings ON/OFF
// standard Arduino setup routine
void setup()
{
// initialize vfd display
initDisplay();
// send some data to display
updateFixedAddress(startAddress, 0b01110111);
}
// standard Arduino loop routine
void loop()
{
}
// routines for sending commands
void sendCommand(unsigned int command, boolean data)
{
digitalWrite(CLK, HIGH);
digitalWrite(STB, LOW);
for(int i = 0; i < 8; i++)
{
if(bitRead(command, i) & 0x01)
{
digitalWrite(DAT, HIGH);
}else{
digitalWrite(DAT, LOW);
}
digitalWrite(CLK, LOW);
digitalWrite(CLK, HIGH);
}
if(data) digitalWrite(STB, HIGH);
}
// routines for sending data
void sendData(unsigned int data, boolean last)
{
for(int i = 0; i < 8; i++)
{
if(bitRead(data, i) & 0x01)
{
digitalWrite(DAT, HIGH);
}else{
digitalWrite(DAT, LOW);
}
digitalWrite(CLK, LOW);
digitalWrite(CLK, HIGH);
}
if(last) digitalWrite(STB, HIGH);
}
// routines for set ram address
void setAddress(unsigned int address, boolean data)
{
sendCommand(addressSettings | (address & 0x1F), data);
}
// routine cleaning of display memory
void clearDisplay()
{
sendCommand(incrementAddress, true);
setAddress(startAddress, false);
for(int i = 0; i <= endAddress; i++)
{
sendData(0x00, false);
}
digitalWrite(STB, HIGH);
}
// routines for initialize display
void initDisplay()
{
delay (200);
// define communication pins
pinMode(DAT, OUTPUT);
pinMode(CLK, OUTPUT);
pinMode(STB, OUTPUT);
// clear display ram memory
clearDisplay();
// set display mode to 5 digits, 16 segments
sendCommand(displayMode, true);
// set display on and maximum dimming
sendCommand(displayControl, true);
}
// routine to update fixed memory addresses
void updateFixedAddress(int address, int data)
{
sendCommand(fixedAddress, true);
setAddress(address, false);
sendData(data, true);
}

