Interfacing to VFD via serial - no success

I'm trying to interface my Arduino Decimila to a VFD that I've had a number of few years (but never used - it's been in a drawer).

The VFD is Noritake CU40026SCPB-24A. Here's the [u]datasheet[/u]

The VFD datasheet says it's both TTL and RS232C compatible - so i've been connecting it's 3 pin connector directly to the +5V, GND and TX (Pin 1) of my Arduino board.

The VFD powers up - but I've failed to make it to display anything other than "SCPB-TNA".
I've tried multiple baud rates (including he 19200 the board defaults to with no jumpers (see datasheet).

The code I'm using with Arduino does nothing more than set the baud rate, send the initialization bytes ( 0x1B, 0x49 ) then send a string via Serial.println().

Nada. Nothing. Zilch.

Any tips/hints/corrections gladly accepted!

Cheers,
Rob

I've been following:
http://www.arduino.cc/playground/Learning/SerialLCD

as a guide - though, obviously, the 3-pin connector in my VFD doesn't require the 2nd GND line - just a TX line.

My pin connections:

Arduino +5V -> Pin 1 (on Power Connector - Section 10.2)
Arduio GND -> Pin 3 (on Power Connector - Section 10.2)
Arduin Pin 1 (TX) -> Pin 2 (on Power Connector - Section 10.2)

My code looks like this:

void setup()
{
Serial.begin(19200);

Serial.print(0x1B, BYTE);
Serial.print(0x49, BYTE);
}

void loop()
{
Serial.print("fred");
}

apparently i have to post one "normal" message before i can reply..

Hi UBob.

i also had some trouble finding proper documentation for my display aswell,

mine is a CU200225SCPB 20x2 green VFD
with Serial. and 4/ 8 bit parallel interface

i started with the example from ioBridge.com's Serial LCD Demo
but i have also gotten it working with a modified SerLCD from SparkFun

all you need to do, is modify the command sets according to the datasheet.
this is as far as i can tell NOT 100% hd44780 compatible

below is some example code based on the ioBridge.com's Serial LCD Demo

IT IS NOT Finished yet, its NOT Pretty or anything,
as i just got it working myself.
but it will write to the display, and i have finished up most of the important functions
some may not work. (Scrolling messages, Special chars, custom chars)

but its a start.
i will finish this, and put it in the playground a little later

/Kyndal


"as proof. a little "hello world" ofcourse :smiley:

//
// ioBridge.com Serial LCD Demo and Functions
//

void setup() {

  // The ioBridge Serial LCD Uses a Baud Rate of 9600 on Pin 1(TX)  
  Serial.begin(9600);

}


//setBacklightBrightness(0x40);
//clearLCD();
//lcdSetPosition(0, 0);
//moveCursorHome();
//turnCursorOn();
//turnBlinkCursorOn();
//turnCursorOff();
// Blinkspeed(0x01); 
//

void loop()
{ 

  // Clear LCD Screen
  clearLCD();
 lcdSetPosition(5, 0);
   displayMessage("Hello world");
 lcdSetPosition(0, 0);
   displayMessage("x");
 lcdSetPosition(19, 0);
   displayMessage("x");
 lcdSetPosition(0, 1);
   displayMessage("x");
 lcdSetPosition(19, 1);
   displayMessage("");
   lcdSetPosition(5, 1);
  displayMessage("Show Corners");
   delay(5000);
 clearLCD();

}


//
// ioBridge Serial LCD Functions and Parameters
//

void displayMessage(char* message){
  Serial.print(message);
}

void clearLCD(){   
  Serial.print(0x0E, BYTE);
}

void setBacklightBrightness(byte level){
  //Level = 00 Hex to 3F  Approx 25%
  //Level = 40 Hex to 7F  Approx 50%
  //Level = 80 Hex to BF  Approx 75%
  //Level = FF Hex to 3F         100% 
  Serial.print(0x1B, BYTE); 
  Serial.print(0x4C, BYTE);
  Serial.print(level);   
}


void moveCursorHome(){  
  Serial.print(0x1B, BYTE);
  Serial.print(0x48, BYTE);
  Serial.print(0x00, BYTE);
}


void turnCursorOn(){   //  "_" Cursor
Serial.print(0x14, BYTE);
}

void turnCursorOff(){  // Cursor off  / Invisible
Serial.print(0x16, BYTE);
}

void turnBlinkCursorOn(){   // "[ch9618]" Blinking Cursor
  Serial.print(0x15, BYTE);
}

void Space(){                // Cursor move one space Right
  Serial.print(0x09, BYTE);
}

void Blinkspeed(byte value){   //Set Blink Speed of the Cursor
  Serial.print(0x1B, BYTE);
  Serial.print(0x54, BYTE);
  Serial.print(value, BYTE);

//periode of blinking value x 29ms
//default 14 hex
//range 00 hex(1) - 01(256) hex

}


//Scrolling message  NOT WORKING YET
void scrollMessage(int row, int speed, char* message){
  // row
  // 1=First Line -> 2=Second Line

  // speed
  // 0=Slowest -> 9=Fastest
    
  Serial.print(0x12, BYTE);
  Serial.print(row);
  Serial.print(speed);
  Serial.print(message);
//  Serial.print(0xFE, BYTE); 
}

// LCD I'm using is 20x2 characters.  
// Line 0's viewable cursor positions is 0-13 and
// line 1's viewable curser position is 14-27
// 
//  X is char position X=0-19  
//  Y is Linie nummer  Y=0-1   
// lcdSetPosition(x, y);
// lcdSetPosition(0, 0);  Top right
// lcdSetPosition(19, 1); lower left

void lcdSetPosition(byte x, byte y)
{
  byte positionCode = (y*0x14 + x);
   Serial.print(0x1B, BYTE);
  Serial.print(0x48, BYTE);
  Serial.print(positionCode, BYTE);
}

I struggled with this too; I have exactly the same display (CU40026SCPB-24A) and eventually got it working using kyndal's code. The trick is that the board defaults to 19200 baud, even parity, whereas arduino's default is no parity. So to make kyndal's code work, I just changed setup() to:

Serial.begin(19200);
UCSR0C = UCSR0C | B00100000;

(I got the trick for changing parity here: http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1243894373 )