A 15-Segment VFD controlled by HT16515

 Author:   Posted on:   Updated on:  2020-07-20T19:25:13Z

How to control FV865ND VFD display with HT16515 controller using Arduino library.

FV865ND is a VFD panel manufactured by Futaba Corporation. It is designed to be used in DVD players or set-top-boxes. It can show 8 characters and it has a lot of symbols (icons). I found it in a DVB-S2 receiver (Comag SL100HD) where it was used at the front panel with HT16515 controller IC. Fortunately, the front panel of this receiver contains everything needed to power the VFD (the power is supplied via 5 V line and it is converted to filament and VFD voltage by a small transformer located on the back side of the PCB).

I couldn't find any software for HT16515 but its datasheet is available. The IC is 3.3V and 5V compatible and the nice thing is that the panel connector has different pins for IC supply and VFD transformer. The IC supports key scan too and the front panel makes use of only 7 keys (maximum 32). Data is sent/received via 4 lines serial interface, SPI like.

Comag SL100HD front panel with VFD

Comag SL100HD front panel with VFD

Unknown segment displays require a lot of work until you get them to actually display something useful. This happens because each manufacturer will wire the segments in a different way to the controller. Basically, this controller IC is just a RAM memory with one host interface (that allows you to put data in the RAM) and one output interface (which continuously outputs RAM contents as lit segments on display). By writing the RAM one bit at a time and taking note of the segments that get turned on, one can map them to characters. Here are the segment assignments for this device.

HT16515 FV865ND segment assignments

HT16515 FV865ND segment assignments

The display has 8 positions where a single digit/character can be displayed. Each position is 24 bits wide in the RAM of the controller. Bits [14..0] are assigned to character segments, bit 15 is the separator (two dots) available on positions 1 to 6 and bit 16 is assigned to the icons above the characters. The separator sign can be lit from any of the adjacent positions.

I had a hard time getting those left icons working. In fact they are "segments" of the 9th digit. I had to configure HT16515 for a 9 digit display to get them turned on.

I wrote an Arduino library to control this front panel. The highest level functions are writeStr(string) and writeNum(number, base, position) which may be used to print immediately character strings (only ASCII uppercase letters are supported) and numbers. The other functions prefixed with FV865ND_ will only operate at the local buffer level and require writeBuffer() called after to actually send the buffer to display controller.

#include "HT16515.h"

// HT16515(CLK, CS, MOSI, MISO)
HT16515 vfd(9, 8, 7, 6);

void setup() {
  Serial.begin(9600);
  vfd.init(7); // maximum intensity

  vfd.FV865ND_setIcon(FV865ND_RCLOCK);
  vfd.writeStr("HELLOVFD"); // sends data to controller

  delay(1000);
  vfd.FV865ND_setIcon(FV865ND_RCLOCK, false); // turn off icon
  vfd.writeStr("TEST    ");

  vfd.FV865ND_setSeparator(FV865ND_SEP43);
  vfd.FV865ND_setIcon(FV865ND_PLAY);
  vfd.writeBuffer(); // required after the above to send data to controller
}

void loop() {
  vfd.FV865ND_setIcon(FV865ND_REC, true);
  vfd.writeNum(millis() / 1000, 10, 0);
  delay(500);
  vfd.FV865ND_setIcon(FV865ND_REC, false);
  vfd.writeBuffer();
  delay(500);

  byte k = vfd.getComagPushbuttons();
  if (k)
    vfd.FV865ND_setIcon(FV865ND_KEY, true);
  else
    vfd.FV865ND_setIcon(FV865ND_KEY, false);
}

The functions which turn on icons must called for one icon at a time. Only one byte of the key matrix memory is used by this frontpanel. You can get the pressed keys byte with getComagPushbuttons(). The pinout of this front panel I got from the set-top-box is the following (the colors match the wires):

Comag SL100HD front panel pin configuration

Comag SL100HD front panel pin configuration

Resources

No comments :

Post a Comment

Please read the comments policy before publishing your comment.