UARTで制御する液晶(AD-128160-UART)を使ってみた

aitendo(http://www.aitendo.co.jp/)で販売されている液晶モジュールのAD-128160-UARTが面白そうでしたので試してみました。

概要


  • 3.3V単一電源で駆動
  • 160x128pixel
  • 1.77インチ(表示領域 : 28.03x35.04mm)
  • 制御はUART(シリアル通信)
  • USB mini-B端子がありPCからデータの転送が可能(内蔵フラッシュメモリは4MB)
  • ARMのCortex-M3コア内蔵STM32F103搭載
  • 2,680円(aitendo)

他の概要は販売ページで確認することができます。
http://www.aitendo.co.jp/product/3119

しかしデータシート等の詳細な情報は提供されていないようです。
幸いなことにGingaXさん(http://www31.atwiki.jp/gingax/pages/1.html)が基本的な使用方法をまとめてくださっているので簡単に使用することができました。

高速1.77インチ液晶モジュール(128x160,SPI)[AD-128160-UART]
http://www31.atwiki.jp/gingax/pages/63.html

準備

今回は画像を表示したかったので最初から画像表示を試してみました。

画像を表示するには、

  1. 直接ピクセルを描画する方法
  2. PCから事前に転送してマイコンから呼び出す方法

の2種類があります。今回はPCから転送しておく方法をやってみます。


液晶モジュールに画像を転送するためにMrsToolというツールを使います。こちらもGingaXさんのページにて使い方がまとめられています。

高速1.77インチ液晶モジュール(128x160,SPI)[AD-128160-UART] MrsTool
http://www31.atwiki.jp/gingax/pages/64.html

こちらのページの「ダウンロード」よりソフトをダウンロードして解凍します。


ところがドライバの入手法がaitendoや他の方の説明と異なっていたので3時間ほど悩んでしまいました。
aitendoの説明には、

PCにUSBドライバをインストールする必要があるが、STM32のダウンロードページの「Software-PC」のコーナーから「CDC Driver」をダウンロードしてください。

とありますがSTのサイト構成が大きく変わって現在はアクセスできませんでした。
そこで色々辿ってみたらSTM32用のVirtual COM Port Driverを見つけたのでインストールしてみましたがなぜか本モジュールには適用できませんでした。
不思議なことに他サイトの説明を見る限りSTM32は「STM32 Virtual COM Port」という名前で認識されるようですが、自分の環境では「MzTH Virtual COM Port」と認識されます。
ググッてみると1件だけ中国語のサイトが引っかかりました。どうやらこのモジュールの開発元?のようです。
余談ですがそのサイトを見るとUARTで制御できる同シリーズのサイズ違い・解像度違いのモジュールも販売されていました。

それからサポートを辿るとMzTHなる名前が付いているドライバのようなものを発見。でもよくよく見るとMrsToolに同梱されている模様。そこでさっき落としてきたMrsToolのフォルダを見ると「Software Driver」フォルダがありました。もしやと思いこのフォルダを指定してドライバのインストールしてを試みたところあっさり成功。あの3時間は何だったんだろう....
とはいえ無事インストールできてPCからも認識されたのでよしとします。ちなみにフォルダ内には2つ.infファイルがありますがとりあえず「MzTH_FirmwareVr2000_L.inf」を指定したところ正常に動作しました。もう1つとどう違うのかは分かりません。

画像の転送

液晶モジュールをUSBケーブルで接続し、MrsToolを起動します。PCと接続した時点では液晶には何も映りません。

見事に中国語&文字化けです。

はじめにデバイスの選択をします。左上のボタンを選択します。

すると以下のような画面が開きます。

この液晶モジュールは「MzTH17 V10」という名前らしいので初期状態の「MzTH17_V10_V」のままで変更しなくてOKです。ちなみに「MzTH17_V10_W」というのもあり、こちらは画面を縦にするか横にするかの選択のようです。しかし「MzTH17_V10_W」を指定して画像を転送すると正しく表示されないという現象が起きたのでここでは「MzTH17_V10_V」を選択します。
液晶を横にして使用したい場合は90度傾けた画像を用意する必要があります。
次に左から3番目のボタンを選択します。

すると以下の通信ポートの設定画面が開きます。

自分の環境ではこのモジュールがCOM15に割り当てられたので、デバイスマネージャで確認した上でそのように指定しました。
ここで正常に通信ができると液晶モジュールに以下のような表示が出ます。

次に転送する画像を指定します。真ん中くらいのボタンを選択します。

ファイル選択のダイアログが開くのでビットマップファイルを指定します。ツール側で変換してくれるようで、元画像の大きさやビット数は特に気にしなくてもいいようです。

そして画面中央のボタンを押し、転送リストに追加します。

未確認ですが、リスト上部のバーはモジュール内に保存できるデータ容量を表している気がします。
ちなみにリストの一番左の項目は画像のIDで、マイコン側から呼び出しをする時に指定する番号になります。
そして右から2番目のボタンで転送を開始します。

完了すると以下のダイアログが出ます。

最後に右端のボタンで終了します。

以上で画像の転送は完了です。

マイコンから呼び出し

GingaXさんのサイトにて通信データについての詳しい解説がありますが、今回はその解説を元にnuchoさん(http://javatea.blog.abk.nu/)がmbed向けにライブラリを作成されていましたので利用させて頂きました。

2011/12/12(月) AD-128160-UARTのライブラリ作った
http://javatea.blog.abk.nu/064
mbed公開ライブラリ : AD128160
http://mbed.org/users/nucho/libraries/AD128160/m24mml

上記のクラスではmbedとはVCC、GND、受信、リセットの4本を接続するだけでOKです。

テストしたプログラムは以下の通りです。各命令の間に1秒のwaitを入れていますが実際はそんなに必要はありません。

#include "mbed.h"
#include "AD128160.h"

AD128160 lcd(p13, p5);

int main() {
    lcd.reset();     // モジュールリセット
    wait(1);
    lcd.cls();     // 描画範囲クリア
    wait(1);
    lcd.brightness(500);     // バックライト光量指定
    wait(1);
    lcd.bmp(0, 0, 0);     // x座標, y座標, 画像ID 
}

クラスリファレンスでは図形や文字を描画するメソッドについて記述がありましたが、画像呼び出しについては記述されていませんでした。しかしソースコードを読んでみるとbmp()というメンバがいたので使ってみたところ正常に転送した画像を表示してくれました。

そこそこきれいです。

まとめ

ライブラリのおかげもあり簡単に画像を表示させることができました。まだ試していませんが文字や図形の描画も簡単にできそうです。
ちょっと値段が張るのがネックかなと思いましたが、この扱いやすさを考えるとこのくらいでもいいかもしれません。

初めて液晶を扱いましたがLED、7セグLED、キャラクLCDに続く表示デバイスとして選択肢がまた1つ増えました。どんなものが作れるかいろいろ考えてみたいと思います。


最後に、サイトだけでなくTwitterでも直接いろいろと教えてくださったGingaXさん、nuchoさんにこの場を借りて御礼申し上げます。ありがとうございました。