蛍光表示管モジュール・VFD ( Vacuum fluorescent display ) は明るくはっきりした表示器です。

PICAXEで動くVFD(蛍光表示管ディスプレイ)のデジタル時計に温湿度センサーを追加してみた

漢字が使える20文字×2行のVFDキャラクタ表示器でUART接続の物が大阪デジットの特価品で出ていたので試してみました。

私には少し高価でしたが,,ま,良い子にしていたつもりですがサンタは来てくれなかったので自前ということです(^^)。


・試作機材です

MCU:ATtiny1616
VDF:CU20029-T303C (NORITAKE ITRON CORP.)
   VDD:5V 800mA,UART接続,SJIS X0208





・半角互換モードもありますが,全角・漢字の表示例です。
 なかなかきれいです(^^)。






・裏面の接続コネクタと設定用ディップスイッチです




接続はPH7Pinコネクタなので,コネクタとPH用のコードを忘れずに一緒に購入しています。同じショップで揃います(^^)。

VCCやGNDは2本ずつ接続しますが,PHコネクタの電流限界?のためでしょうか。800mA流れますから,,。

なおディップスイッチはSW1をON,SW2とSW3はOFF(9600bps),SW4をOFFに設定しています。



以上のようにUART接続でハード的には特に問題なく,Shift-JISの2バイトコードで漢字表示ができましたV(^^)

このディスプレイはフォントを内蔵しているので,ATtiny1616のようなマイコンでも表示はできます。



JIS第一水準を順に表示するだけのプログラムですが,メモしておきます。

なおプログラム中のVFD_RESET操作後は十分なdelayをとるのが良いようです。
VFD側のパワーオンリセットは不確かな事が多い感じがします,,。

また,SJISは結構空き番号があり,表示が止まったような間が空く箇所が多くありますね(^^;;;。

/** ATtiny1616 VFD kanji test_1 **/ 

/* VFD: CU20029-T303C (NORITAKE ITRON CORP.), SJIS X0208
  1.VCC(5V) 2.VCC(5V) 3._RESET 4.RXD 5.BUSY 6.GND 7.GND (PH 7Pin)
     
  SW1 ON Japanese / OFF Europe (half-width char.)
  SW2 ON 4800bps  OFF 9600bps  OFF 19200bps  ON  38400bps
  SW3 ON ^        OFF ^        ON  ^         OFF ^
  SW4 ON test mode / OFF normal mode

*/


// VFD Reset Pin, UART baud rate
#define VFD_RESET 0       
#define VFD_baud 9600

byte kanji_mode[]={0x1F,0x28,0x67,0x01,0x01};   // command code
byte two_byte_on[]={0x1F,0x28,0x67,0x02,0x01};
byte two_byte_off[]={0x1F,0x28,0x67,0x02,0x00};
byte japanese_on[]={0x1F,0x28,0x67,0x0F,0x00};

void send_5command(byte cmd[]){
 for (byte i = 0; i <5; i++){
    Serial.write(cmd[i]);
 }
}


void setup() {

         // *** VFD Initialize ***

 pinMode(VFD_RESET,OUTPUT);        // VFD _RESET
 digitalWrite(VFD_RESET, HIGH);
 digitalWrite(VFD_RESET, LOW);  
 digitalWrite(VFD_RESET, HIGH);
 delay (1000);                     // delay 1000ms

 Serial.begin(VFD_baud);           // Start UART

 Serial.write(0x0C);         // Clear Dislay
 delay(24);

 send_5command(kanji_mode);  // kanji mode
 send_5command(two_byte_on); // 2byte on
 send_5command(japanese_on); // japanese on

}

void loop() {
 for (uint16_t i=0x813F; i<0x9874 ; i++){
     Serial.write((byte)(i>>8));
     Serial.write((byte)(i & 0x00FF));
 delay(100);
 }
}