最終更新日: 2009年9月9日

シリアル対応LCDディスプレイを作る

Arduinoを使っていて、内部の動作を確認するための定番は「Serial.print()」でしょう。IDEで動作している時ならばデバッグにとても便利ですが、スタンドアロンで動かしている時に内部状態を確認したい…という時にはLCDディスプレイが便利です。でも、そのためだけにLCDディスプレイ表示ルーチンを組み込むのも面倒だし、LCDディスプレイの接続も多数の信号線が必要で面倒です。
最近、I2C接続のLCDディスプレイもあるようで、これは接続する信号線の数が少なくて便利そうです。
しかし…だったら、普通にシリアルインターフェースのLCDディスプレイを作ってしまえばいいじゃないか…Serial.print()で表示させたものがそのまま表示されうようなものを。

仕様

ということで、インターフェースとしては先に作成した汎用シリアルインターフェースを使用することにします。この端子を用意しておけばプログラミングをすることも、他の機器から表示させることも可能です。
LCDディスプレイとしては定番の…SC1602って言うのでしょうか、秋月で500円で売ってる16文字×2行のモジュールを使う事にします。が、20文字×4行のモジュールも使えるようにしておきます。
シリアル信号のスピードは、とりあえず9600,19200,38400あたりが使えるようにしておきます。これらはDIPスイッチで切り替えられるようにしておきます。

工夫したのが改行の処理です。
どのタイミングで改行するか。普通ならCRやLFを受信したら改行処理をする事になると思いますが、このディスプレイは2行表示を想定しています。単純にCRがを受信したら次の行へ…という処理をすると、Serial.println()が使われると、いつも表示をした直後に改行され、最下行はいつも空白になってしまいます。
そこでCRやLFを受信した直後は改行せず、その次に普通の文字のコードを受信した時に改行、スクロールをするようにしました。

製作

ハードは単純で、Arduinoの各I/O端子にLCDディスプレイの各端子を接続するだけです。
しかし、なぜか16×2表示のモジュールと20×4表示のモジュールは電源とGNDの端子が逆です。これでは不便なので20×4表示のモジュールを改造し、ピンを完全互換としました。これでふたつのLCDディスプレイを単純に差し替えて使えます。

ソフトは、シリアルから受信し、それをlcd.print()で表示させるだけです。スクロース等も行えるよう、ただ単純に受信したデータをLCDに流すだけではなく、バッファへ記録します。

とりあえずブレッドボードで組んで動作確認。IDEのシリアルモニタで入力した文字列が表示されればOK。そしてこの状態で9Vバッテリーチャージャーに接続してみました。結果OK。バッテリーチャージャーで普通にSerial.print()で表示させていたものがLCDに表示されました。

9Vバッテリーチャージャーと接続してテスト。この時点では電源はACアダプターから供給。

あとは万能基板にマウント。I/Oピンが残っているのでLCDとの接続は8bitモードを使うようにしました。ちょっとは速いかもしれない…。

16×2のディスプレイを装着し、ファンコントローラーに接続。 20×4のディスプレイを装着し、バッテリーチャージャーに接続。ちなみにchumbyに充電中。

もちろん接続コネクターは先に決めた汎用インターフェースの通りです。これにより、USB-シリアルインターフェースと接続すれば普通にArduinoのIDEからプログラミングができ、他の機器と接続すればシリアルモニターとして機能する、という仕組みです。

使ってみると、これは便利。
LCDに表示させるための特別なコードを書く事なくLCD表示ができるので、デバッグ目的にはとても便利です。これは作って大正解の一品でした。




home | Elec top

inserted by FC2 system