デバッグ支援 1行表示ディスプレイ S-10551D
2009年9月 ※2013/03 ページデザイン変更 LCDモジュールネタが続きます。SD1602(16文字x2行)は様々な用途に対応できるLCDモジュールですが、若干高価です。 これより情報量が少ない8文字x2行や16文字x1行の安価なLCDモジュールもあります。用途を限ればこれでも十分役目を果たせます。 というわけで、デバッグサポート用にシンプルなディスプレイが欲しくなったので、安価なS-10551D(16文字x1行)を使ってシリアル制御のディスプレイを製作しました。 このページではLCDモジュールS-10551Dを紹介します。 製作したディスプレイの回路図や制御プログラム、表示用のライブラリを公開します。 |
デバッグ用ディスプレイの製作 |
S-10551Dでデバッグ用ディスプレイを製作しました。今後、マイコン工作で使っていこうと思います。 回路図 LCDモジュールの制御にはATtiny2313を使っています。回路は単純です。
LCDモジュールはソケットに抜き差しできるようにしてあります。SD1602も挿せます。先述の通り逆向きの取り付けになるので、正位置で読むには基板全体を逆向きに置いて使うことになります。 このLCDモジュールをソケットに挿せるようにするには工夫が必要です。SD1602の場合はスルーホールになっていてピンヘッダを部品面/ハンダ面どちら向きにもハンダ付けできましたが、S-10551Dはハンダ面にしかランドがないので、ピンヘッダの頭をハンダ面から差し込んでも部品面でハンダ付けできません。 L型ピンヘッダを付けて上辺方向からL型ピンソケットで受けるようにするか、リボンケーブルを付けて背面へ回すかと考えましたが、いずれも基板との接続がスマートにキマリません。 結局、普通のピンヘッダを強引に付けました。ピンヘッダの根元を押し出し、LCDモジュールの部品側からはめてハンダ付けします。押し出した長さ以内(2〜3mm)でハンダ付けすれば、ピンソケットに奥まで挿しても干渉しません。これでブレッドボードにも挿せるようになりました。製作中、便利でした。 |
制御プログラムと表示用ライブラリ | |||||||||||||||||||||||
ダウンロード
このディスプレイは、何かを開発中(製作中)のマイコンから表示位置指定のコマンドやデバッグ情報である数値や文字列のデータを受け取り、画面に表示します。受信専用です。送信側は lprint(-2468); lprints("START!!"); などとデータを送ります。 制御プログラムの説明 ディスプレイ基板上のATtiny2313に lcd16x1.hex を書き込んでください。 この制御プログラムは次のような動作をしています。
また、文字にすると送信するデータ量が増えます。16ビット整数は(当たり前ですが)値によらず2byteのデータ量です。これを文字にすると最大6byteのデータ量になります(-10000〜-32768のとき → 例:{ '-', '3', '2', '7', '6', '8' } )。受信側でバッファを用意するなら、そちらも容量がかさみます。 手短に送信したいことと、送信側の処理の負担を減らしたいことで、このディスプレイでは数値は数値のまま送信するようにしました。これが吉と出るか凶と出るか、使ってみないと分かりませんが。 ※【後日追記】そりゃ凶と出ます。受信側からしてみれば、数値データなのか制御コードなのか区別が付かないわけで。 シリアルポート通信の基本を忘れていました。 受信処理に割り込みを使用していません。受信バッファはデータ1個分しか持っていません。送信側とのタイミングが合わなければデータの取りこぼしが続発するでしょう。このディスプレイ、作ったもののまだ開発作業で活用していません。まずはこのソフトでスタートして、実際に使用しながら仕上げていくことにします。 それゆえ ver 0.90 としてリリースします。ただしバージョンアップしてもここに掲載しないかもしれません。これを使ってくれというよりも、これを参考にして利用者が好き好きに作ればよいと思っています。 表示ライブラリの説明
printlib.h 表示ライブラリのヘッダファイルです。送信側のマイコンでプログラムに#includeしてください。 #defineで関数名の読み替えをしています。都合に合わせて書き換えても構いません。 printlib.c 表示ライブラリの本体です。先頭付近でボーレート(通信速度)を#defineしているので適宜書き換えてください。初期化関数の引数にするより、プログラムサイズ節約の点で有利です(コンパイル時に値が確定するので)。 AVR Studioのコンフィグ設定内のFrequency、またはWinAVRのmakeの引数でCPU動作クロック(F_CPU)を定義してください。
※lprintSetPos()の定義が2通りあるのは軽量化の試行錯誤をした痕跡です。コメントアウトして一応残しておきます。 printlibLcdPrint1()と掛かる関数を削除したとき、lprintSetPos()だけは必要だったのでマクロから関数に変更した、という状況でした。 注意 lprintCls()は時間がかかる処理です。LCDモジュールのClearDisplayコマンドを呼び出しており、これがもともと4ms弱かかる処理です。送信側プログラムの中で、時間待ちが動作に影響する場所ではlprintCls()を実行しないでください。 テストプログラムについて 表示ライブラリのzipファイルに表示デモ用のlprinttest.cを同梱しています。 まずprintlib.cのLCD_PRINT_BAUD_RATE(通信速度)を適宜変更します。 次にlprinttest.cのF_CPUの値を書き換えて(またはAVR Studioのコンフィグ設定やWinAVRのmakeで指定して)ビルドし、lprinttest.hexを適当なAVRに書き込んで、TXDピンをディスプレイのRXDピンに接続します。 そしてディスプレイの通信速度の設定を適宜変更します(ジャンパースイッチ)。 以上の準備ができたらディスプレイの電源を入れ、次に送信側のAVRの電源を入れます。 すると直ちに、ディスプレイに数値や文字列が表示されます。 何も表示されない場合や繰り返し見るときは、送信側もディスプレイも電源の接続状態はそのままで、送信側のAVRをリセットしてください。 このテストプログラムは ATtiny2313 1MHz、通信速度4800bps で正常動作を確認しました。 |
ハードウェア面の説明 | ||||||||
送信元はTXDピンを空ける ディスプレイの表示にはシリアル通信を使うため、送信側のマイコンはTXDピンを空ける必要があります。ライブラリは、送信役を任意のピンに割り当てられるようには作られていません。送信側のマイコンがATtiny2313(プログラム領域が2KBと小さい)でも使えるよう、ライブラリのサイズを小さくするためソフトウェアUSERTは実装していません。 ディスプレイの通信速度を設定する 出力側のマイコンが安定して出せる通信速度に、ディスプレイの通信速度を合わせます。ディスプレイ側のATtiny2313は8MHzで動いており、最高速度38400bpsとしています。 ジャンパースイッチで4つの速度を切り替えます。電源投入時/リセット時に設定を読みます。 下図で「・」はピンヘッダを、「==」はジャンパーピンを表します(2つのピンヘッダをショートする)。
ディスプレイの電源を先に入れる 送信元のマイコンより先にディスプレイの電源を入れてください。送信元がlprintInit()を実行する前にディスプレイの受信準備をしておくためです。 ディスプレイはRXDをGNDに接続して電源を入れると、ジャンパースイッチで設定した通信速度を表示します。目的の設定ができているか確認してください。 |
オマケのデバッグ補助具 |
単なるLEDアレイです。点灯パターンを見てポートの出力状態を確認できます。 LEDアレイはICソケットに刺さっているので、向きを変えてソース電流/シンク電流どちらにも使えます。 こんなものに回路図も何もあったもんじゃないですが一応掲載しておきます。 |
部品について |
本当のところ、S-10551Dありきでこの製作はスタートしました。秋月のサイトを眺めていて、「安いLCDモジュールはどれだろう? これか、16文字x1行か、何に使おうか? よし、デバッグ用ディスプレイを作ろう!」 せっかくS-10551Dが安価なので、全体的にシンプルに安価に製作しています。LCDモジュール以外は既に部品箱に入っていると思います。 |
部品名 | 部品番号 | 値 | 個数 | 参考価格/備考 |
AVR(マイコン) | U | ATtiny2313 | 1 | 100円(秋月電子) |
LCDモジュール キャラクタ液晶 |
LCD | S-10551D | 1 | 300円(秋月電子) |
積層セラミックコンデンサ | C | 0.1uF [104] | 1 | 10個100円 |
半固定抵抗 | VR | 10kΩ | 1 | 1個30円 |
ピンヘッダ | JMP | 2x2ピン | 1 | ジャンパースイッチとして |
ピンヘッダ | -- | 14ピン | 1 | 40ピン50円/折って使う S-10551Dに付ける |
ジャンパーピン | (JMP) | -- | 1 | 10個60円 |
ピンソケット | -- | 14ピン | 1 | 1個50円/S-10551Dを挿す |
◆ ◆ ◆ |
これからの開発に活かすためのデバッグ用ディスプレイを製作しました。 ライブラリの開発時にこれ自身が活躍しました。 |
(C) 『昼夜逆転』工作室 | [トップページへ戻る] |