
GU-3000シリーズ(RS232 I/F対応モジュール)に表示させる
GU-3000シリーズ(RS232 I/F対応モジュール)に表示させる
今回はGU256X64C-3900Bを使用します。 Arduinoに比べて大きめの表示器を使用したため別途配線しました。インターフェースはRS232を使用したため、レベル変換用にRS232トランシーバを間に入れてあります。 詳細は下記接続図をご覧ください。
Arduinoのウェブサイトから統合開発環境をダウンロードして、ソフトウェアを作成します。 今回作成したのは"Hello world" "Hello world" "蛍光表示管"と3行に表示し、その後押したボタンの色を表示するものです。 使用した蛍光表示管はモジュールと言われる内部にコントローラを持っているもので、 更にFROM内に漢字フォントを持っているため、コマンドだけで中国語や韓国語、32ドットの日本語まで表示できます。 その他にプログラムマクロ機能など便利な機能が満載ですが、それは別途ご紹介します。 詳細は下記スケッチをご覧ください。
使用部品
- 蛍光表示管モジュール
GU256X64C-3900B
RS232シリアル接続ができ、漢字フォントを搭載したグラフィック表示器。 - Arduino本体
Arduino Uno R3
Arduino本体で、もっとも販売数が多いそうです。 - RS232トランシーバ
DS14C232CM
同機能のICが多くありますが、どれでも使用可能です。今回ではこちらを使用しています。 - セラミックコンデンサ
上記RS232トランシーバに使用します。今回は上記ICに合わせて1.0μFを4つ使用しました。使用するICに合わせて用意してください。 - 基板
ユニバーサル基板でも結構ですが、今回は専用基板を作成しました。
自作される場合は、EagleのCADデータを使用ください。EagleのCADデータをダウンロード
- その他
赤・青タクトスイッチ、ピンヘッダ・ソケット、半田・配線材料 等
適切なものをご用意ください。表示器への接続はXHコネクタ XHP-7とコンタクトが必要です。
回路図

日本語が文字化けするときに(Unicode<>Shift-JIS変換ツール)
PCの多くはUnicodeで動作していますが、VFDモジュールのフォントテーブルはShift-JISになっています。 文字コードが違うため、PCからモジュールに文字を書き込むと、文字化けすることがあります。
そこで、クリップボードにコピーされているUnicodeのテキストを、Shift-JISの16進数列表記に変換するツールを用意しました。 ダウンロードしてご活用ください。 ツールのダウンロードはこちら
また、Arduino上でShift-JISに変換するサンプルスケッチもございます。 スケッチのダウンロードはこちら
サンプルスケッチ(サンプルプログラム)
「スケッチ」とは、本開発環境でのプログラムを指します。下記はVFDモジュールを表示させるためのサンプルスケッチです。 スケッチのダウンロードはこちら
/*
** VFDシールド スケッチ
**
** ノリタケ伊勢電子製 GU-3900シリーズモジュールを
** RS-232Cシリアル接続でつないでみました。
** 2012/8/23
*/
// ピン配置
//int vfd_RxD = 0;
//int vfd_TxD = 1;
int vfd_RTS = 2;
int vfd_CTS = 3;
int sw_blue = 12; // 青ボタン
int sw_red = 13; // 赤ボタン
// 作成した関数のプロトタイプ
void vfd_put(unsigned char onebyte);
void vfd_print(unsigned char message[], int L);
void vfd_crlf();
void vfd_kanjiOn();
void vfd_setCursor(int X, int Y);
// the setup routine runs once when you press reset:
// リセット後に1回だけ実行されるプログラム
void setup() {
// initialize the digital pins
pinMode(vfd_RTS, OUTPUT);
pinMode(vfd_CTS, INPUT);
pinMode(sw_blue, INPUT_PULLUP);
pinMode(sw_red, INPUT_PULLUP);
Serial.begin(38400);
Serial.print("Hello world"); // 少しならそのまま書き込みできます。
vfd_crlf(); //改行
unsigned char message[12] = "Hello World";
vfd_print(message, sizeof(message)-1);
vfd_crlf(); //改行
vfd_crlf(); //改行
vfd_kanjiOn();
unsigned char kanji_code[ 10 ] =
{ /*** 蛍 光 表 示 管 S-JIS code *****/
0x8c, 0x75, 0x8c, 0xf5, 0x95, 0x5c, 0x8e, 0xa6, 0x8a, 0xc7, };
vfd_print(kanji_code, 10);
}
// the loop routine runs over and over again forever:
// 繰り返し実行されるプログラム
void loop() {
if(digitalRead(sw_red) == LOW) //赤ボタン
{ vfd_setCursor(100,1); // カーソル移動
vfd_put(0x90); // "赤"
vfd_put(0xd4);
}
if(digitalRead(sw_blue) == LOW) //青ボタン
{ vfd_setCursor(100,1); // カーソル移動
vfd_put(0x90); // "青"
vfd_put(0xc2);
}
}
void vfd_put(unsigned char onebyte)
{
while( digitalRead(vfd_CTS) == HIGH){}
Serial.write( onebyte);
}
void vfd_print(unsigned char message[], int L)
{
int i;
for(i=0; i<L; i++)
{
vfd_put(message[i]);
}
}
void vfd_crlf()
{
vfd_put(0x0d);
vfd_put(0x0a);
}
void vfd_kanjiOn()
{
unsigned char data[15];
data[0]=0x1f;
data[1]=0x28;
data[2]=0x67;
data[3]=0x01;
data[4]=0x02;
data[5]=0x1f;
data[6]=0x28;
data[7]=0x67;
data[8]=0x02;
data[9]=0x01;
data[10]=0x1f;
data[11]=0x28;
data[12]=0x67;
data[13]=0x0f;
data[14]=0x00;
vfd_print(data,15);
}
void vfd_setCursor(int X, int Y)
{
unsigned char data[6];
data[0] = 0x1f;
data[1] = 0x24;
data[2] = X % 256;
data[3] = X / 256;
data[4] = Y % 256;
data[5] = Y / 256;
vfd_print(data,6);
}