アクティブマトリクス蛍光表示管の実験用表示モジュールの試用
Facebookのお友達からお借りしました、「アクティブマトリクス蛍光表示管(CL-VFD)
MW25616L 実験用表示モジュール」を調査中です。
16x256ドットのグラフィック表示が可能なモジュールです。
制御用にAtmega328pが使われており、Arduino IDE環境にてプログラム開発が出来ます。
いくつか、自由に使えるGPIOピンが開放されており、I2Cやシリアル通信も使えそうです。
日本語フォントROM GT20L16J1Y16を搭載していており、日本語表示も可能です。

背面にICSP端子があり、この端子経由でSPI接続でSDカードなんかが使えそうですね。
Arduinoと同じようにUSB経由での書込みと電源供給が出来ます。
非常にお手軽に使えるモジュールです。

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

輝度が強く、私のデジカメでは綺麗に映すことがが出来ません。光が広がってフォントが
つぶれた映像となってしまいます。動画も撮影したのですが、ダメダメでした。
(何枚も撮って一番よさそうなのを掲載しました)
実際には表示は非常にきれいです。文字が左にスクロール表示します。
日本語のメッセージが表示出来ます。
ただし、日本語フォントROM GT20L16J1Yは私も使ったことがあるのですが、
ひらがな、カタカナ、漢字、全角英数、半角英数そのれぞれのバランスが微妙です。
制御方法について
表示のための制御は比較的簡単のようです。
表示パターンは2バイト16ビットが縦1列に対応しています。そのデータが
横256ドット分、合計512バイト分シーケンシャルに並んでいる構造です。
シフトレジスタを使う要領で4つのSI、CLK、LAT、ENを使ってデータを転送します。
16x256ドット分の4096ビット分のレジスタがあり、4096ビット単位でラッチして
表示データを確定出来ます。
表示機器にはこの形式多く、過去に手掛けて蓄積したノウハウが役立てそうです。
この構造の場合、表示中の画像に線を書いたり、追記描画するのは苦手です。
追記しようにも、データを送るとシフトされて左に画像全体が移動します。
通常、このような構造で自由に描画するにはフレームバッファ(ワークメモリ)を用います。
一旦、フレームバッファに描画してそのデータを一括送信して表示更新する方法です。
次のような感じです。

この方式では一括転送に要する時間が早いほど映像が素早く更新出来ます。
動きのある表示や、リアルタイム更新表示を行う場合は早い方が良いです。
(ちょっと前にやった「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指定でプログラムに埋め込み、表示画像も
プログラムに埋め込みでちょっと使い勝手が良くないです。
この当たり、自作のマルチフォントライブラリ、ビットマップ画像ローダを使って
自由度のあるコンテンツ表示をやりたいなぁと思います。
2016/12/20~ 随時追記中
裏の端子にアクセスしやすいように専用の脱着式の基板を作成しました。

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

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

動作の様子
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」カテゴリの記事
- Freenove Mecanum ホイール カー キットを購入しました(2025.05.28)
- Arduino IDE+Arduino STM32環境で指定と異なるgccが使われてしまう(2025.01.23)
- Zorin OSでArduino Uno互換機(CH340)が認識しない(2025.01.19)
- Arduino IDE 2.3.4でArduino STM32を利用する(2025.01.12)
- Arduino用 SKK日本語変換ライブラリの開発 その1(2024.12.28)
「表示器制御関連」カテゴリの記事
- NeoPixel(WS2812B)の制御 その5(2024.09.15)
- Arduino用 美咲フォントライブラリを更新しました(2024.03.21)
- Raspberry Pi Pico(MicroPython)でLEDドットマトリックスを使ってみる(2024.03.14)
- Raspberry Pi Pico MicroPython用のマルチフォントライブラリ(2023.02.09)
- MicroPython(Raspberry Pi pico)で8x8ドットNeoPixcel文字表示(2023.02.08)
「VFDモジュール」カテゴリの記事
- アクティブマトリクス蛍光表示管の実験用表示モジュールの試用 (3)(2018.08.06)
- アクティブマトリクス蛍光表示管の実験用表示モジュールver.2の動作確認(2018.07.28)
- 豊四季タイニーBASIC for Arduino機能拡張版 作成しました(2018.03.18)
- アクティブマトリクス蛍光表示管の実験用表示モジュールの試用 (2)(2018.02.15)
- アクティブマトリクス蛍光表示管の実験用表示モジュールの試用(2016.07.23)
コメント
« LPC810を使ったUART-I2Cブリッジの改良版が出来ました | トップページ | IchigoJam Tが到着 »

こんにちは、 実験用表示モジュール製作者のVFDふぁんです。試用いただき、またとても詳しい紹介をしていただきありがとうございます。試行錯誤の中でとりあえず形にしたものですので、皆さんからのご意見をいただきながら完成度を上げたいと考えています。勝手ながら私のブログに本記事へのリンクを貼らせていただきましたがよろしかったでしょうか?今後ともよろしくお願いいたします。
投稿: VFDふぁん | 2016年12月 3日 (土) 13時15分
VFDふぁんさん
こんにちは(こんばんは)
こちらこそ、楽しいデバイスの開発ありがとうございます。堪能させていただきました。
リンクは大歓迎です!こちらこそよろしくお願いたします。
実は実験表示モジュール、SDカード接続を試そうとしているところ、
不手際で動かなくなってしまいました。背面のショートが原因だと思われます。
開発者さんのVFDふぁんさんにはちょっと申し訳なく思っています。
投稿: たま吉さん(管理者) | 2016年12月 3日 (土) 23時43分
たま吉さん、こんにちは。
リンクの件ありがとうございます。
表示モジュールは代わりのものをお送りしますので、メールで送り先をご連絡ください。
動作しないものについて、ショートが原因ならヒューズF1が切れているかもしれません。
それ以外の場合、返送いただけば修理できるか確認してみます。
投稿: VFDふぁん | 2016年12月 4日 (日) 11時36分
VFDふぁんさん
ありがとうございます。
お言葉に甘えさせて頂きます。
追って連絡します。
投稿: たま吉さん(管理者) | 2016年12月 5日 (月) 10時28分
このモジュールはどこで購入可能ですか?
投稿: ちじたぜ | 2017年12月17日 (日) 00時41分
ちじたぜさん
私は電子工作で交流している知人より譲り受けました。
「チーム伊勢」さんが開発しており、
電子工作系ものづくりのイベントにて展示・販売されているようです。
イベント外の販売については、私も分かりません。
イベント情報については
「VFDふぁん」さんのブログ「http://vfd-fun.blogspot.jp/」を参照下さい。
投稿: たま吉さん(管理者) | 2017年12月17日 (日) 08時30分