フォト
2017年3月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
無料ブログはココログ

« LPC810を使ったUART-I2Cブリッジの改良版が出来ました | トップページ | IchigoJam Tが到着 »

2016年7月23日 (土)

アクティブマトリクス蛍光表示管の実験用表示モジュールの試用

Facebookのお友達からお借りしました、「アクティブマトリクス蛍光表示管(CL-VFD)
MW25616L 実験用表示モジュール」を調査中です。

16x256ドットのグラフィック表示が可能なモジュールです。

Dscn5467

制御用にAtmega328pが使われており、Arduino IDE環境にてプログラム開発が出来ます。
いくつか、自由に使えるGPIOピンが開放されており、I2Cやシリアル通信も使えそうです。

日本語フォントROM GT20L16J1Y16を搭載していており、日本語表示も可能です。

Dscn5465

背面にICSP端子があり、この端子経由でSPI接続でSDカードなんかが使えそうですね。

Arduinoと同じようにUSB経由での書込みと電源供給が出来ます。
非常にお手軽に使えるモジュールです。

Dscn5453

プログラムを書きこんで表示で表示してみた様子
公開かさているサンプルスケッチを書きこんで動かしてみました。

Dscn5456_2

輝度が強く、私のデジカメでは綺麗に映すことがが出来ません。光が広がってフォントが
つぶれた映像となってしまいます。動画も撮影したのですが、ダメダメでした。
(何枚も撮って一番よさそうなのを掲載しました)
実際には表示は非常にきれいです。文字が左にスクロール表示します。
日本語のメッセージが表示出来ます。

ただし、日本語フォントROM GT20L16J1Yは私も使ったことがあるのですが、
ひらがな、カタカナ、漢字、全角英数、半角英数そのれぞれのバランスが微妙です。

制御方法について

表示のための制御は比較的簡単のようです。
表示パターンは2バイト16ビットが縦1列に対応しています。そのデータが
横256ドット分、合計512バイト分シーケンシャルに並んでいる構造です。

シフトレジスタを使う要領で4つのSI、CLK、LAT、ENを使ってデータを転送します。
16x256ドット分の4096ビット分のレジスタがあり、4096ビット単位でラッチして
表示データを確定出来ます。

表示機器にはこの形式多く、過去に手掛けて蓄積したノウハウが役立てそうです。

02

03

この構造の場合、表示中の画像に線を書いたり、追記描画するのは苦手です。
追記しようにも、データを送るとシフトされて左に画像全体が移動します。

通常、このような構造で自由に描画するにはフレームバッファ(ワークメモリ)を用います。
一旦、フレームバッファに描画してそのデータを一括送信して表示更新する方法です。

次のような感じです。

04

この方式では一括転送に要する時間が早いほど映像が素早く更新出来ます。
動きのある表示や、リアルタイム更新表示を行う場合は早い方が良いです。

(ちょっと前にやった「4連8x8ドットLEDマトリックス」なんかも同じ方式でやっています)

実際に、フレームバッファを使って1点描画するごとに表示更新を行う処理を
ArduinoのShiftOut()関数を使って行ったところ、目視で5画面/秒程度がやっとな感じでした。

ShiftOut()は無駄に遅いことで有名で、同じ処理を直接I/Oレジスタを操作して
転送を行うとかなり改善します。ShiftOut()とdigitalWrite()と次のような感じで
実装して置き換えるだけで、転送速度は8倍ぐらいに改善しました。

void new_shiftOut(uint8_t dataPin,uint8_t clockPin,uint8_t bitOrder,byte val) {
  uint8_t i;
  uint8_t bit_data = digitalPinToBitMask(dataPin);
  uint8_t bit_clock = digitalPinToBitMask(clockPin);
  volatile uint8_t *out_data = portOutputRegister(digitalPinToPort(dataPin));
  volatile uint8_t *out_clock = portOutputRegister(digitalPinToPort(clockPin));

  for (i = 0; i < 8; i++)  {
    if (bitOrder == LSBFIRST) {
      if(val & (1 << i)) {
        *out_data |= bit_data;
      } else {
        *out_data &= ~bit_data;
      }
    } else {
      if(val & (1 << (7 - i))) {
        *out_data |= bit_data;
      } else {
        *out_data &= ~bit_data;
      }
    }
    *out_clock |= bit_clock;
    *out_clock &= ~bit_clock;
  }
}

inline void new_digitalWrite(uint8_t pin, uint8_t val) {
  uint8_t bit = digitalPinToBitMask(pin);
  volatile uint8_t *out = portOutputRegister(digitalPinToPort(pin));
  if (val == LOW)
    *out &= ~bit;
  else
    *out |= bit;  
}

ShiftOut()なら本来、SPIを使った高速通信に置き換えるのが容易なのですが、
SPIピンとは別ピンに接続されているのがちょっと残念です。
それでも、上記修正で秒20画面位は更新できそうです。

現状、表示する文字列はシフトJIS指定でプログラムに埋め込み、表示画像も
プログラムに埋め込みでちょっと使い勝手が良くないです。

05

この当たり、自作のマルチフォントライブラリ、ビットマップ画像ローダを使って
自由度のあるコンテンツ表示をやりたいなぁと思います。

2016/12/20~  随時追記中

裏の端子にアクセスしやすいように専用の脱着式の基板を作成しました。

Dscn6226

SPI接続にてSDカードを接続。自作のマルチサイズフォントライブラリが動くようになりました(ただし、調整中)。

Dscn6268

SDカードが3.3V駆動にため、電圧レベルの調整をしています。

Photo

動作の様子


8ドット漢字も意外と読めますね。

表示は前述のフレームバッファに一旦書きこんでから、VDFに一括転送しています。
表示するメッセージの指定はUTF-8文字列です。

void demo02() {

  uint8_t font[MAXFONTLEN];   uint16_t x = 0;   uint8_t sz[] = {16,14,12,10,8};   mw_claerbuf();   SDfonts.open(); // フォントのオープン   for (uint8_t i = 0; i < 5; i++) {     char* pUTF8 = "SDカード漢字フォント利用テスト";     SDfonts.setFontSize(sz[i]); // フォントサイズの設定     x = 0;     while ( pUTF8 = SDfonts.getFontData(font, pUTF8) ) { // フォントの取得       mw_drawFont(x, font);       x+=SDfonts.getWidth();     }     mw_update();     delay(1500);     mw_claerbuf();      }   SDfonts.close();  // フォントのクローズ   delay(2000); }

次はメッセージの縦スクロール、SDカードに青空文庫の小説(テキストファイル)入れて
表示出来るようにしてみます。

(つづく)


« LPC810を使ったUART-I2Cブリッジの改良版が出来ました | トップページ | IchigoJam Tが到着 »

arduino」カテゴリの記事

VFDモジュール」カテゴリの記事

表示器制御関連」カテゴリの記事

コメント

こんにちは、 実験用表示モジュール製作者のVFDふぁんです。試用いただき、またとても詳しい紹介をしていただきありがとうございます。試行錯誤の中でとりあえず形にしたものですので、皆さんからのご意見をいただきながら完成度を上げたいと考えています。勝手ながら私のブログに本記事へのリンクを貼らせていただきましたがよろしかったでしょうか?今後ともよろしくお願いいたします。

VFDふぁんさん

こんにちは(こんばんは)
こちらこそ、楽しいデバイスの開発ありがとうございます。堪能させていただきました。
リンクは大歓迎です!こちらこそよろしくお願いたします。

実は実験表示モジュール、SDカード接続を試そうとしているところ、
不手際で動かなくなってしまいました。背面のショートが原因だと思われます。
開発者さんのVFDふぁんさんにはちょっと申し訳なく思っています。


たま吉さん、こんにちは。
リンクの件ありがとうございます。

表示モジュールは代わりのものをお送りしますので、メールで送り先をご連絡ください。
動作しないものについて、ショートが原因ならヒューズF1が切れているかもしれません。
それ以外の場合、返送いただけば修理できるか確認してみます。

VFDふぁんさん

ありがとうございます。
お言葉に甘えさせて頂きます。
追って連絡します。

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/571408/63952660

この記事へのトラックバック一覧です: アクティブマトリクス蛍光表示管の実験用表示モジュールの試用:

« LPC810を使ったUART-I2Cブリッジの改良版が出来ました | トップページ | IchigoJam Tが到着 »