home1.gif

next1.gif
back1.gif
 

20x4 LCD monitor

 

基礎編
 PORT入出力
 シリアル通信
 タイマー機能
 A/Dコンバータ
 D/Aコンバータ
 外部割り込み
 液晶モニタ

応用編
 アウトプットコンペア
 インプットキャプチャ
 SRAM増設

Tips
 関数集
 シリアルEEPROM
 20桁×4行液晶モニタ
  (SC2004C)
 加速度センサを読む

 20桁×4行液晶モニタ

 イントロダクション
  基礎編で16桁×2行表示LCDモニタの使用方法について説明しました。
 ここではその姉妹機であるSC2004Cを使ったマルチファンクションディスプレイを作ります。まず、今回使用するSC2004Cについてですが、これはSC1602BSLBと同じ命令セットが使え、信号のタイミングも同じです。したがって、変更すべきは増えた分の行数に対応させるだけで済みます。

Sunlike SC2004C

 ただし、普通に表示させただけでは前回の説明と何も代わり映えしませんので、右の写真のように液晶表示部とキー入力機能を備えた多目的モニターを作ります。

 この装置はRS-232Cを使って外部の端末(RS-232Cが使えればパソコンでもマイコンでも何でもOK)から入力があるとその通りに表示し、あらかじめ決めておいた特殊コードが来れば、改行や画面クリアや任意の行に移動、あるいはブザーを鳴らすといった機能を備えます。
 また、一方通行でもデバッグの役には十分使えるのですが、それ以外にもいろいろと入力を与えたいときのために、各ボタンを押すとそれぞれに対応する6種類のコードを接続先に送るようにします。

 わざわざこんなユニットを作ってしまうのは、フリーのポートが少ない状態のマイコンや、わざわざデバッグの為にモニタをつけたくない場合、あるいは普段はモニタ無しで使用し、必要なときだけデータを表示させたいとき、複数の入力が欲しいけれどもやはりポートが少ない時や工作が面倒なときなどに、RX・TX・GNDのたった3本の配線をするだけでそれらの要求を汎用的に満たせるからです。

 チャタリング防止
 この装置を作るに当たり、1つ小技を使います。「チャタリング防止」と呼ばれる方法です。この章まで一度も触れなかった方が不思議なような初歩的な小技なので、ぜひ理解してください。

 チャタリングとは、ボタンを押したときに必ず遭遇する問題なのですが、そもそもボタンのONとOFFとは電気的な接触を手動で行うことです。したがって、高速なサンプリングを持つマイコンからみれば、一発でOFFからONに切り替わることはほとんどなく、実際にはごく短い間にON/OFF/ON/OFF/ON/OFFというように連打されているように認識してしまいます。これをそのまま入力として使うと、実際には単発の入力が欲しいのに、一度押しただけで数回〜数十回の入力が入ってしまいます。
 これを防止するのが「チャタリング防止」という機能で、ソフトウェアに簡単な細工をすることで実現することが可能です。ひとことで内容を言ってしまうと「押されてからしばらくはキー判定をしない」ということです。
 もちろん、急がないプログラムであるならばforループなどを使って時間稼ぎをしても良いのですが、このモニタではそれをすると、時間待ちの間に受信があったりしたら対応できなくなるおそれがあります。したがって、少し贅沢な使い方ですが他に特に用途もないのでタイマー割り込み機能を使います。(ついでに少し時間を長めにとって誤連打防止機能にもします)

 ハード編
 こちらは技と言うほど大げさな物ではないのですが、右の写真に示すような切り換えスイッチを付けます。

 肝心なことを言い忘れましたが、今回使うのはこれまで説明してきたH8/3048Fではなく、その廉価版とでも言うべきH8/3664Fです。このチップの特徴は、3048FはプログラムをROMに書くときに専用のライターが必要でしたが、それが必要有りません。RS-232Cでパソコンに接続し、直接プログラムの書き換えができます。
 ただし、3048Fに比べてROMの容量もRAMの容量も少ないので、あまり大きなプログラムは作れませんし、ポートの数も少ないのでそれなりに考えて設計しなければ使い物になりません。

 さて、このスイッチですが、これはH8を通常の通り走らせるのか、それともプログラムを書き直すのかを選択するための物です。

 これをあらかじめ付けておけば、ケースに収納した後でもプログラムにバグが発見されたりしたときに簡単に修正版に変更することができます。かなり重宝しますので付けておいて損はないでしょう。

 circle15_pink.gifKeyword  H8/3664F

 H8/3664Fの最大のメリットは一言で言えばコストパフォーマンスです。H8/3048Fの約半分の値段で手に入ります。ちなみに私が多用している秋月電子通商ではチップに加えて専用ボードがセットになって\2000で購入できました。
 実用的なメリットでは上に述べたフラッシュROM書き込み制御回路を内蔵しているところが一番大きいでしょう。
 メリットといえるかどうかは微妙ですが、3048Fと同等のクロックで動作させることができますし、4chのA/Dコンバータと、1chのシリアル端子、4つのIRQを持っていますので、工夫次第でそこそこの仕事はこなします。まぁ、値段の割にはえらく高性能といって差し支えないと思います。

 ただ、ちょっとポートが少ないんですよね。特に8ビットまるまる取れるポートが2つしかないというのは3048Fに慣れた身では心許ないものを感じます(実際には今までがすごく贅沢な使い方をしていただけなのですが)

 プログラミングについては3048Fとほとんど同じ考え方でOKなのですが、シリアル関係で一部勝手が異なることと、兼用ポートが多いので使うときにはちゃんと初期化をやっておかないと全然動いてくれませんから注意が必要です(3048Fはシングルチップモードではほとんどデフォルト値でOKですから、ここも勝手が違いますね)。また、HEWに定義ファイルは有るので(※)すぐにプログラミングに掛かれるのですが、hwsetup.cがずいぶん手抜きなので、ポートの初期化や使い方はハードウェアマニュアルとにらめっこしながらでないとできません。intprg.cも手抜きなので、どの割り込みフラグが立ったのかをいちいちチェックしなければいけないのも少々面倒です。
 さらにいうと、タイマーはジェネラルレジスタはGRA〜GRDの4つあるとはいえ、大きな分け方では1chしか無いので、並列でタイマーを動かすと言うことはできません。(8ビットモードでは2系統使える?)

    ※HEWの古いバージョンでは定義ファイルが存在しません。日立のホームページにHEWのアップ
     デートファイルがいくつかありますので、パッチを当てて対処してください。

 ハードの組み立て
 

 

 circle15_pink.gifサンプルプログラム