VFD Newhaven Display Question

Just bought a new vfd display. Glad I found this topic which seemed to have the code and point me in the right direction.

I figure that I needed 5volts, ground, three pins from the pic below, and the code. I wired the VFD 3,4,6 to my adruino 11,10,13 from the code example.

Nothing happened, not even a blink. Any suggestions? Looking at the jumper setting pic makes me think maybe I should short and open the small JP pins? Does this change the display to Serial Interface?

VFD 3, 4 and 6 would be more likely to work.
No comments to the code You didn't post.Check JP2 to JP7...

@Railroader, thanks for the reply
Here is the code.
What do you mean by Check JP2 to JP7? I was thinking I would have to get my solder out a literally short them? Thats how interpreted the data sheet png.

thanks

//VFD  to  Arduino
// 1         GND
// 2         VCC
// 3-SIO     D11-MOSI
// 4-STB     D10-Slave Select
// 5-SCK     D13-SCK

#include <SPI.h>
const int slaveSelectPin = 10;

  unsigned char UDF[13][8]=
  {
    0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0xff,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0xff,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,
    0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
    0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,
    0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,
    0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,
    0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
  };

  unsigned char i,j,k;

unsigned char Seril_Demo_Line1[]={
' ',' ',' ',' ','V','F','D','-','D','I','S','P','L','A','Y',' ',' ',' ',' ',' ',
};
unsigned char Seril_Demo_Line2[]={
'M','O','D','E',':','S','E','R','I','A','L','-','D','E','M','O',' ',' ',' ',' ',
};


void setup()
{
  pinMode (slaveSelectPin, OUTPUT);
  SPI.begin();
  SPI.setDataMode(SPI_MODE3);
}

void cdelay(unsigned int t)
{
    while(t--);
        delay(100);
//        delay(t);
}

void DATA(unsigned char temp_1)
{
  digitalWrite(slaveSelectPin,LOW);
  SPI.transfer(0xfa);
  SPI.transfer(temp_1);
  digitalWrite(slaveSelectPin,HIGH);
}

void COM(unsigned char temp_2)
{
  digitalWrite(slaveSelectPin,LOW);
  SPI.transfer(0xf8);
  SPI.transfer(temp_2);
  digitalWrite(slaveSelectPin,HIGH);
}

void loop()
{
  //

  COM(0x01); //clear all display and set DD-RAM address 0 in address counter
  COM(0x02); //move cursor to the original position
  COM(0x06); //set the cursor direction increment and cursor shift enabled
  COM(0x38); //set 8bit operation,2 line display and 100% brightness level
  COM(0x80); //set cursor to the first position of 1st line
  COM(0x0c); //set display on,cursor on,blinking off
//  COM(0x06); //set display on,cursor on,blinking on (this is a guess)
  delay(10);
  
  for (j=0; j<13; j++)
  {
    COM(0x40); //CGRAM ADDRESS SETTING
    
    for (k=0; k<8; k++)
    {
      DATA(UDF[j][k]);
    }
    
    COM(0x80); //DRAM ADDRESS SETTING
    
    for (i=0; i<80; i++)
    {
      DATA(0x00);
    }
    cdelay(20000);
    cdelay(20);
  }
  
  COM(0x80);
  for (i=0; i<20; i++)
  {
    DATA(Seril_Demo_Line1[i]);
  }
  
  COM(0xc0);
  for (i=0; i<20; i++)
  {
    DATA(Seril_Demo_Line2[i]);
  }


  cdelay(50000);
  cdelay(50000);
  cdelay(50000);
  cdelay(50000);
  cdelay(50000);
  cdelay(50000);
  cdelay(50000);
  cdelay(50000);
  cdelay(50000);
  cdelay(50000);

  COM(0x80); //DDRAM ADDRESS SETTING
  for (i=0; i<20; i++)
  {
    DATA(0x2a);
    DATA(0x20);
  }
  for (i=0; i<20; i++)
  {
    DATA(0x20);
    DATA(0x2a);
  }
  cdelay(50000);
  cdelay(50000);

  COM(0x80); //DDRAM ADDRESS SETTING
  for (i=0; i<20; i++)
  {
    DATA(0x20);
    DATA(0x2a);
  }
  for (i=0; i<20; i++)
  {
    DATA(0x2a);
    DATA(0x20);
  }  
  cdelay(50000);
  cdelay(50000);

  COM(0x40); //CGRAM ADDRESS SETTING
  
  for (k=0; k<8; k++)
  {
    DATA(0xff);
  }
  
  COM(0x80); //DDRAM ADDRESS SETTING
  
  for (i=0; i<80; i++)
  {
    DATA(0x00);
  }
}

I did use VFD 3,4,6. Good catch. I edited the numbers on my original post.

I also replied to you with the code and a follow up question but it was flagged as spam, so it may take a while for my reply to show. (The code is also linked in my above message)

The spec I read shows JP3 shorted for serial.

Did You use code tags, the sixth symbol in this window?

The code you linked uses the SPI Arduino interface, and may or may not work with that display, but that requires JP3, JP5 and JP7 to be shorted.

I use the parallel M68 interface with those displays, which is very similar to the HD44780 LCD interface, and the LCD libraries will work with it.

1 Like

Okay, my post that was flagged as spam asked, 'Do I take out my solder and short it that way, or can I do it with a breadboard?' Thank you for confirming. I'm a little inexperienced with electronics, so I hadn't seen that before.

For example, for Serial JP6 needs to be open. Do I burn away the connection with my solder? Thanks!

Okay, that's great to know, and thanks for mentioning the more common LCD. I'll give it a try.

Jp3 - yes you need to jumper is somehow. Soldering is likely the easiest.

Jp6 - NO you don't "burn away solder" you can:

  1. Heat the solder with a soldering iron and move the solder around and MAYBE it will separate. You cannot hold the soldering iron on the board for more than 5 seconds.
  2. Get a solder sucker (I've had the best luck with this one). Just heat to solder to a liquid and let the solder sucker literally "suck" it up.
  3. Use "solder wick". I would recommend #1 size or #2 size at the largest. Else you will have to heat up a lot of wick to remove a small amount of solder.
1 Like

The photo you posted shows JP4 and JP6 shorted, which selects the M68 parallel interface. It should work with the standard Arduino LiquidCrystal library, if you wire the display correctly.

Here is the first test code that I used with a different brand VFD display, but same interface:

(Edit: replaced with correct code)

/*
  LiquidCrystal Library - Hello World

 works with Noritake VFD

  Demonstrates the use a 16x2 LCD display.  The LiquidCrystal
  library works with all LCD displays that are compatible with the
  Hitachi HD44780 driver. There are many of them out there, and you
  can usually tell them by the 16-pin interface.

  This sketch prints "Hello World!" to the LCD
  and shows the time.

  The circuit: (VFD pin)
   LCD RS (4) to digital pin 12
   LCD Enable (6) to digital pin 11
   LCD D4 (11) to digital pin 5
   LCD D5 (12) to digital pin 4
   LCD D6 (13) to digital pin 3
   LCD D7 (14) to digital pin 2
   LCD R/W (5) pin to ground
   LCD VSS (1) to ground 
   LCD VCC (2) to 5V
   LCD VFD (3) not used
   contrast (LCD, not VFD) 
   10K resistor: ends to +5V and ground
   wiper to LCD VO pin (pin 3)

  Library originally added 18 Apr 2008
  by David A. Mellis
  library modified 5 Jul 2009
  by Limor Fried (http://www.ladyada.net)
  example added 9 Jul 2009
  by Tom Igoe
  modified 22 Nov 2010
  by Tom Igoe
  modified 7 Nov 2016
  by Arturo Guadalupi

  This example code is in the public domain.

  http://www.arduino.cc/en/Tutorial/LiquidCrystalHelloWorld

*/

// include the library code:
#include <LiquidCrystal.h>

// initialize the library by associating any needed LCD interface pin
// with the arduino pin number it is connected to
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
unsigned long print_time = 0;

void setup() {
  // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);
  // Print a message to the LCD.
  lcd.print("hello, world!");
}

void loop() {
  if (millis() - print_time >= 1000UL) {
    print_time = millis();

    // set the cursor to column 0, line 1
    // (note: line 1 is the second row, since counting begins with 0):
    lcd.setCursor(0, 1);
    // print the number of seconds since reset:
    lcd.print(millis() / 1000);
  }
}

1 Like

thank you for the tips and links!

1 Like

thank you!

I tried it with its default settings, and it was much easier. Thank you.

/**********************
 * ~      VFD       ~ *
 **********************
 * GND-1     -        *
 * VDD-2     +        *
 * RS-4      D12      *
 * R/W-5     -        *
 * ENABLE-6  D11      *
 * VFD4-11   D5       *
 * VFD5-12   D4       *
 * VFD6-13   D3       *
 * VFD7-14   D2       *
 * RST-3     D7       *
**********************/

Congratulations! Those are beautiful, easy to read displays.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.