マイコン独立大作戦
CRT/VGAIF+KEYIF+SDCARDIFボードの製作
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
WindowsパソコンにUSB接続して使う現行方式はそれなりに便利ではありますが、ときとしてWindows
のしがらみから開放されて、小さいながらも独立した一個のパソコンとして機能したいと思うこともあります。
昔はそれが普通のことだったのですが、安価なCRTディスプレイが生産中止となって久しい今日ではそれ
は叶わぬことと諦めていたのですが…。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[総合第45回]
●RS232Cのテスト(READ#、WRITE#)
RS232C通信はUSB経由ではありませんがUSBインターフェースに使っているPIC18F14K50の機能を利用しているため、プログラムとしてはWindowsパソコンに対してキーボード入力を要求したり画面表示データを送ったりするのと同じような処理をすることになります。
独立型ではキーボード入力、画面表示などをPIC18F14K50を介さないで、キーボードインターフェース、CRT/VGAインターフェースに対して行ないます。
しかし232C通信についてはUSB接続型と同じようにPIC18F14K50を通じて行ないます。
そこのところがうまく交通整理できているかどうかをテストしました。
テストはZB3BASICの232C送信、受信プログラムを使って行ないました。
こちらはND80Z3.5独立型セットです。
ND80Z3.5は試作基板をまだ大切に使っています。
組立キットのLSIを出荷前にテストするために、テストソケットを使っています。
こちらは232C通信の相手側です。
こちらはND80ZVをUSB接続型で使います。
ND80Z3.5とND80ZVは9ピンのクロスケーブルで接続しています。
どちらもZB3BASICプログラムを使います。
ND80ZVは最初に受信して次に送信の順で、ND80Z3.5は逆に最初に送信して次に受信の順で行ないます。
受信側を先に実行します。
こちらはND80Z3.5(独立型)の画面です。
テスト中なのでRAMにロードしたシステムを起動しています。
7FFFの値を書き換えることができましたからシステムがRAM上で動いていることが確認できました。
SDカードの232Cテストプログラムをロードしました。
先に送信してから次に受信するプログラムです。
ND80ZVのプログラムとは順序が逆になっています。
先にND80ZVのほうをRUNさせてから、こちらのプログラムを実行しました。
送信と受信が正しく行なわれました。
ND80ZVのほうも正しく実行されました。
これで独立型ZB3BASICの232C送信命令(WRITE#)、受信命令(READ#)が正しく実行されることが確認できました。
でもついでですので、こんどは双方のプログラムを入れ替えて、逆の順序でテストをしてみました。
さきほどND80ZVが実行したのと同じプログラムをND80Z3.5(独立型)にロードしました。
今度はND80Z3.5(独立型)を先にRUNしました。
ND80ZVにはさきほどND80Z3.5が実行したプログラムをロードしました。
先にND80Z3.5のほうをRUNしてから、ND80ZVをRUNさせました。
送信、受信が正しく行なわれました。
こちらはND80Z3.5(独立型)の画面です。
こちらも正しく実行されました。
●RS232Cのテスト(INPUT$)
ZB3BASICのINPUT$には2つの機能があります。
1つは前回説明しましたように、指定した文字数の文字をキーボードから入力する機能です。
もう1つはキーボードの代わりにRS232C回線から受信する機能です。
後者の場合はINPUT$の第2パラメータとして#1をつけます。
テストプログラムをロードしてRUNしました。
ND80ZVは送信側です。
先ほどのテストプログラムを利用します。
送信を完了したらそのままプログラムを終了するように、STOP文を追加しました。
ND80ZV側の送信プログラムを実行しました。
送信が完了してブレイクしました。
ND80Z3.5の側は?
受信の途中で停止しているようです。
なぜでしょう?
もう一度ND80ZV側のプログラムを実行しました。
やっぱり同じです。
4文字受信したところで止まってしまいます。
どうやらそれから後ろのデータは落ちてしまうようです。
さては?
思い当たるところがありましたので、[Ctrl]+[B]でブレイクしました。
CLS(Clear Screen)コマンドで画面クリアします。
画面クリアしてからもう一度RUNしました。
ND80ZVの送信プログラムをもう一度実行しました。
今度は正しく受信できました。
RS232C受信はPIC18F14K50を使って行なっていますが、PIC18F14K50はそのほかにUSB通信も行なうため、232C受信に多くの資源は割けません。
独立型ではUSB通信は使いませんが同じPIC18F14K50をそのまま使いますから232Cについては同じです。
CPU側が受信データの引き取りに遅れると受信したデータを落としてしまいます。
上の例では、CPU側は画面の最下行で受信データの表示を行なうため、1文字受信ごとに画面全体を上に1行分スクロールしています。
毎回1画面2000文字の移動を行なわなければならないため、その時間が原因で受信データが落ちてしまいました。
再テストでは画面をクリアしてスクロールしない状態で受信したのでデータを落とさずに受信することができました。
十分な受信バッファを用意して、時間がかかる処理をしている間でもデータを受信するようにできるとよいのですけれど、いろいろな制約の中でこういう機能になっていることをご理解ください。
CRT/VGAIF+KEYIF+SDCARDIFボードの製作[総合第45回]
2017.4.11upload
前へ
次へ
ホームページトップへ戻る