メモリスイッチを変更するためにROMライタでROMの内容を読み込んだのですが,
アドレスが説明書と異なります。正しいアドレス値を教えてください。
一番右下に文字を表示すると画面がスクロールしてしまいます。
画面全体に文字を表示することはできないでしょうか。
エスケープコマンドを送ったらキーボードから入力できなくなりました。どうしたらよいでしょうか。
テキストデータを連続して送ると文字の取りこぼしが生じて全部表示できませんでした。なぜですか。
スクロールして画面から消えてしまった受信データを表示させる方法はありますか。
LCDプラスのハードを使って自分でプログラムしたいのですが,
どんなことに注意したらよいでしょうか。
文字コードと文字パターンの対応表をダウンロードしてください。(textcode.gif)
LCDプラスのROM領域はもともと8Kバイト(64Kbit)で設計されており,以前は27C64を使用していました。しかし最近は27C64の入手が難しくなったので,27C256に変更しています。
ところで,変更に際して基板を新たに設計するのではなくジャンパ結線で対応しました。具体的には27C256のA13,A14をVCCに接続します。そのため27C256を搭載しているとはいえ,実際に使えるのは今までどおり8Kバイトです。また,CPUのメモリマップの0000h〜1FFFh番地にROMの6000h〜7FFFh番地の内容があらわれます。
というわけで,ROMライタでROMの内容を読み込むと,6000h番地以降にプログラムが書き込まれていることになります。ROMライタでメモリスイッチの変更をするときはマニュアルのアドレス値に6000hを加えてください。(ドキュメントに資料をアップロードしています。)
次のようにメモリスイッチを設定すると表示できます。
memsw2(1FF2h番地)のbit2を0にする。
たとえば,memsw2は出荷時には0Dhに設定されていますが,これを09hに変更すればスクロールしなくなります。そのかわり,画面右下の文字を表示するとカーソルは画面左上に移ります。
(「ユーザーズマニュアル」の「2-3.表示に関する設定」をご覧ください。)
エスケープコマンドのヘッダー(EC,1Bh)を受信すると,LCDプラスはキーボード入力を禁止します。許可するには,CR(0Dh),LF(0Ah),EX(03h)のいずれかを送信してください。
(「ユーザーズマニュアル」の「3-3.エスケープコマンド」をご覧ください。)
LCDプラスにはRAMが実装されていないので受信バッファはありません。それでデータを受信したら,次のデータを受信する前にLCDモジュールに書き込まなければなりません。
さて,LCDモジュールに対して1バイトのデータの書き込み,読み込みに要する時間は,モジュールメーカの資料によると40μsです。(表示クリアやカーソルホームは1.64msかかる。)通信速度が9600ボーとすると,1バイトのデータを送るのに要する時間は約1msなのでその他の処理をしたとしても十分間に合う計算になります。
しかし,40μsたてば常に受信可能になるわけではありません。たとえば,右下にカーソルがあるときに1文字受信すると1行スクロールしなければなりません。LCDモジュール自体にスクロール機能はないためプログラムでこれを行っています。まず,右下に1文字表示し,次に下3行の内容を1行上に表示しなおし(LCDにどんな文字がセットされているか読み込んで1行上の場所に再度書き込むことを120文字分繰り返す),下1行をスペースで埋めて,最後に次に表示する位置にカーソルをセットします(LCDモジュールへの書き込み,読み込みだけで約20ms,その他の処理時間がプラスされる)。そのほかにも改行やバックスペース,カーソルセットなど,通常より多くの時間を要する処理があります。この間にデータを受信しても蓄えておくことができないため文字の取りこぼしが生じます。
これを回避する方法ですが,1つの方法は1データごとに適当なウェイトを入れることです。2つ目の方法は,LCDプラスは時間のかかる処理のときはRTSをノンアクティブにして送信を停止するよう要求するので,ホスト側でこれを監視し,RTSがアクティブのときだけ送信するようにしてください。(「ユーザーズマニュアル」の「2-4.ホストとの接続」,「3-1.テキストの表示」をご覧ください。)
LCDプラスにはRAMが実装されていないため,いわゆる受信バッファは存在しません。受信したデータはすぐにLCDモジュールに書き込まれます。
LCDプラスには受信バッファがないので,受信データはLCDに表示されているものだけLCDモジュールに蓄えられています。よって,画面から消えてしまったデータは表示できません。
LCDプラスの機能の多くは,Z80互換マイクロプロセッサ,TMPZ84C015(東芝)に依存しています。詳細はTMPZ84C015の資料をご覧ください。また,LCDモジュールについてもモジュールメーカの資料を参考にしてください。LCDプラスのハードウェアについては回路図とシステムマップをご覧ください。その他,アプリケーションを開発する場合に役立つ幾つかの情報を記載します。
水晶発振子の2分の1の周波数で動作しています。よって,CPUクロックは4.9152MHzです。
チャネル0はSIOのボーレートで使用しています。チャネル1から3は自由に使えますが,ZC1とCLK2,ZC2とCLK3が接続されています。
チャネルAを使用します。チャネルBはSIOとしては未使用ですが,制御信号(DTRB,RTSB)をLCDバックライトの制御に使用しています。
PIOはキーボードのマトリックススキャンと入力に使用しています。キーボードはSW4に接続します。
キーボード入力はCPUがプログラムでスキャンする方式です。アプリケーション側で,スキャンプログラムを作成する必要があります。
LCDプラスを最初に開発した時は,SWはディップスイッチのみを想定していました。その関係でマトリックスキーボードを接続する時はハードウェア的に多少問題があり(逆流防止用ダイオードの挿入位置),ソフトウェアで対処が必要になります。
キーボード入力のシーケンスですが,キースキャンをしていない時はスキャン信号(PA0〜PA3)を入力ポートにします。そして,スキャンしたいラインだけ出力ポートに切換えてLowを出力し,その時のデータ(PB0〜PB7)を入力します。このようにしませんと,マトリックススイッチの押し方によっては,PA0〜PA3がショートすることになりますので,ご注意ください。
尚,弊社標準キーボード(TLX-43)のCN1が,LCDプラスのSW4とストレートケーブルで接続できます。
CPUリセットでWDTがイネーブルになります。端子WDTOUTはリセットにつながっているため,WDTを定期的にクリアするか,ディセーブルしてください。
現在弊社で採用しているLCDモジュールは,セイコー電子のL4044とオプトレックスのDMC-40457です。この2機種はコントローラICに同じデバイスを使用し,また,コネクタのピンアサインも同じです。よって,まったく同一のプログラムで動作します。例としてLCDの上2行に'0'を表示するプログラムは次のようになります。
LOOP: | LD | A,(6001h) | ;Busy Check |
BIT | 7,A | ||
JR | NZ,LOOP | ||
LD | A,30h | ;'0'Display | |
LD | (6002h),A |
基本的に内蔵I/Oは通常のZ80シリーズのI/Oと同じです。追加されている部分は,F0h〜F4h番地に割り付けられているホールトモード・WDT・割込み優先順位を設定するポートです。詳細はCPUの資料をご覧ください。
Copyright (c) 2000-2024 ToyoLinx Co.,Ltd.