Using Older Noritake Itron VFD Modules

Introduction: Using Older Noritake Itron VFD Modules

About: pmdway.com - everything for the maker and electronics enthusiast, with free delivery worldwide

Now and again you come across interesting parts on ebay, from friends or just rooting around in second-hand stores. One example of this was a huge Noritake Itron 40 x 2 character vacuum-fluorescent display from 1994 (or earlier) which was passed on from a client.

Originally it looked quite complex, however after spending some time the data sheets were found and it was discovered to have a simple serial interface – and with a little work we’ve got it working, so read on if you’re interested in classic VFDs or have a similar unit.

Step 1:

The serial interface baud rate is determined by the jumper pads on the PCB.

Step 2:

So comparing the table above against the jumpers on our module gives us a data speed of 19200 bps with no parity. Great – we can easily create such a connection with a microcontroller with a serial output and 5V logic levels; for our examples we’ll use an Arduino-compatible board.

Step 3:

Wiring up the VFD is simple – see the white jumpers labelled CN2 as shown previously. Pin 1 is 5V (you need an external supply that can offer up to 700 mA), pin 2 to Arduino digital pin 7, and pin 3 to Arduino and power supply GND.

We use Arduino D7 with software serial instead of TX so that the display doesn’t display garbage when a sketch is being uploaded. Then it’s a matter of simply sending text to the display, for example here’s a quick demonstration sketch:

// Working with Noritake Itron VFD modules - model CU40026SCPB-T20A
#include <softwareserial.h> SoftwareSerial VFD(6,7); // RX, TX

void setup() { VFD.begin(19200); }

void loop() { VFD.print("Hello, world. This is a Noritake VFD "); // You can blast out text do {} while (1); }

Step 4:

Which results with the following...

Step 5:

If you’re not keen on the colour or intensity of the display, try some Perspex over the top – for example...

Step 6: Controlling the Display

At this point you’ll need the data sheet data sheet. As you saw previously, writing text is very simple – just use .print functions. However you may want to send individual characters, as well as special commands to control aspects of the display. These are outlined in the data sheet – see the “Software Commands” and “Character Fonts” tables.

If you need to send single commands – for example “clear display” which is 0x0E, use a .write command, such as:

VFD.write(0x0E); // clear display

Some commands are in the format of escape codes (remember those?) so you need to send ESC then the following byte, for example to change the brightness to 50%:

VFD.write(0x1B); // ESC
VFD.write(0x4C); // brightness VFD.write(0x40); // 50% brightness

Armed with that knowledge and the data sheets you can now execute all the commands. According to the data sheet it is possible to change fonts however no matter what the hardware jumper or command we tried it wouldn’t budge from the Japanese katakana font. Your screen may vary. If you use the “screen priority write” function heed the data sheet with respect to the extended “busy” time by delaying subsequent writes to the display by a millisecond.

Step 7: Putting It All Together

Instead of explaining each and every possible command, I’ve put the common ones inside documented functions in the demonstration sketch below, which is followed by a quick video of the sketch in operation.

// Working with Noritake Itron VFD modules - model CU40026SCPB-T20A
// John Boxall 2013

#include <softwareserial.h> SoftwareSerial VFD(6,7); // rx, tx

void setup() { VFD.begin(19200); // set speed for software serial port resetVFD(); VFDclearsceen(); // VFD.write(0x12); // vertical scroll mode (on) }

void resetVFD() // performs a software reset on the VFD controller { VFD.write(0x1B); // ESC VFD.write(0x49); // software reset }

void VFDnewline() // moves cursor to start of next line { VFD.write(0x0D); // carriage return VFD.write(0x0A); // line feed }

void VFDclearsceen() // moves cursor to top-left and clears display { VFD.write(0x0E); // clear display VFD.write(0x0C); // form feed - cursor to top-left }

void VFDbrightness(int amount) // sets VFD brightness - 25/50/75/100% // uses ESC sequences { switch(amount) { case 25: VFD.write(0x1B); // ESC VFD.write(0x4C); // brightness VFD.print(0); // 25% brightness break; case 50: VFD.write(0x1B); // ESC VFD.write(0x4C); // brightness VFD.write(0x40); // 50% brightness break; case 75: VFD.write(0x1B); // ESC VFD.write(0x4C); // brightness VFD.write(0x80); // 75% brightness break; case 100: VFD.write(0x1B); // ESC VFD.write(0x4C); // brightness VFD.write(0xC0); // 100% brightness } }

void VFDchars() // run through characters for selected font { for (int i = 21 ; i < 256; i++) { VFD.write(0x16); // underline cursor off VFD.write(i); delay(100); } }

void moveCursor(byte position) // moves the cursor - top row is 0~39, bottom row is 40~79 // vertical scroll mode must be turned off if used { VFD.write(0x1B); // ESC VFD.write(0x48); // move cursor VFD.write(position); // location }

void loop() { VFD.write(0x16); // underline cursor off VFD.print("Hello, world - line one."); // You can blast out text delay(1000); VFDnewline(); VFD.print("Hello, world - line two."); delay(1000); VFDclearsceen(); VFDbrightness(25); VFD.print("*** 25% brightness ***"); delay(1000); VFDclearsceen(); VFDbrightness(50); VFD.print("*** 50% brightness ***"); delay(1000); VFDclearsceen(); VFDbrightness(75); VFD.print("*** 75% brightness ***"); delay(1000); VFDclearsceen(); VFDbrightness(100); VFD.print("*** 100% brightness ***"); delay(1000); VFDclearsceen();

VFDchars(); VFDclearsceen();

for (int i = 0; i < 80; i++) { VFD.write(0x16); // underline cursor off moveCursor(i); VFD.print("X"); delay(100); moveCursor(i); VFD.print(" "); } VFDclearsceen(); }

We hope you found this interesting and helpful.

This post is brought to you by pmdway.com – everything for makers and electronics enthusiasts, with free delivery worldwide.

1 Person Made This Project!

Recommendations

  • Make it Move Challenge

    Make it Move Challenge
  • 3D Printed Student Design Challenge

    3D Printed Student Design Challenge
  • Tinkercad Student Design Contest

    Tinkercad Student Design Contest

6 Comments

0
nethera
nethera

9 months ago

Excellent post!
I have similar, but slightly different VFD module CU40026SCPB-T30A and it has 26 pin IDC cable connector. I cannot find the datasheet to figure out the serial pins. So I'm stuck.. Help?

0
nethera
nethera

Reply 4 months ago

Actually I got the datasheet pdf for CU40026SCPB-T30A in one day by emailing Noritake. Amazing customer service they have!

0
limbo
limbo

Reply 4 months ago

Try the white connector on the side, the three pin one! Usually this is the serial and power connector. The middle should be the RX pin.

0
limbo
limbo

Tip 4 months ago

CN2 in the back of the module can be used to connect this module with Arduino
Pinout
1=Vcc 5V
2=RX (this should be wired to pin 7 of Arduino board)
3=Gnd
Use external power supply because the module requires up to 0.8A which cannot be supported by Arduino 5V PIN

4096-3072-max.jpg
0
Alex in NZ
Alex in NZ

2 years ago

Interesting re-use of some old gear. Scary to think that 1994 is a quarter of a century ago though! Thanks for sharing what you learned :-)

0
pmdwayhk
pmdwayhk

Reply 2 years ago

Very true. Enjoy :)