●専用基板全体デバッグの開始

パソコンのソフトはテストプログラムのまま、デバイスドライバーも「汎用ドライバー」のままにしておき、
専用基板のメインマイコンとPICマイコンの結合デバッグにかかりました。

『1』 まずは1チャンネル目を使い、80KHzクロックで16件の取り込みテスト

先にIICデータ取り込み確認で用いたのと同じ信号(疑似信号のクロックを80KHz程度、
データ件数は16件)で、IIC疑似データがパソコンまで上がってくるかを確認したところ
正常にサンプルできたことを確認しました。

デバッガーでメモリダンプし、データ取り込みを確認する

『2』 80KHzクロックで連続1秒間(約9千件データ)の取り込みテスト

次に、同じ疑似信号を1秒間繰り返し継続してPC9801プリンターポートから出力させた
時にも正常にパソコンまでデータが上がってくるか調べました。

  ん? ところどころにデータ抜けが発生している!

1秒間連続でデータサンプルした約9千件のデータをHOSTパソコンの画面に表示して眺めていたところ、
ところどころデータが抜けている部分があるのを発見しました。
 PLD → メインマイコン → PICマイコン → HOSTパソコン
と順次データ を受け渡すどこかでデータ抜けしているのです!。

『3』 メモリーには正しいデータが取り込めているか?

そこで、どこでデータ抜けが発生しているのかを探るために、まずメインマイコンのメモリー
に保存している9千件のデータに抜けがあるかをチェックしました。目視で9千件のデータを
調べるのは大変なので、データに抜けがないかを見つけるサブルーチンを作成し調べてみました。

結果、メインマイコンのメモリーに保存したデータには抜けがなさそうです。

『4』 メインマイコンからPICマイコンへのデータ受け渡しができているか

今度は、メインマイコン → PICマイコン データ送出時に抜けがないかを調べました。
調べる方法としては、メインマイコン側では PICマイコンへ送出したデータ数をカウント
し、PICマイコンでは、パラレルスレーブポート割り込み回数をカウントします。
データを全部HOSTパソコンへ渡した後、デバッガーにて両マイコンのカウンターを
調べたところ・・・・・・ 

PIC側カウント値が少ない??

何度調べても、

PIC側のカウンター値 < メインマイコン側カウンター値

になっています。

まず疑ってみたのは、PICマイコンがポート出力している Busy、空きメモリー量の情報をメインマイコンが
確認しながら同期をとって1バイトずつデータを渡す処理を行う際に、双方のマイコンのタイミングによっては、
メインマイコンが連続してデータを出力しているのではないか・・・ということです。

プログラムソースに穴が空くほどソースファイルを検証してみたのですが、そんなところは見あたりません。

プログラムソースを眺めてみる

次に疑ってみたのが、メインマイコンがPICマイコンのパラレルスレーブポートに書き込みを行う時の
WR パルスの幅です。

そこで、オシロスコープにてこの書き込みパルスの幅を調べてみることにしました。

オシロスコープを接続

その結果、書き込みパルス幅は、約150uSでした。
PICマイコンの外付けクリスタルは24MHzですので、1インストラクションサイクルは166uSです。

ということは、WRパルス幅が150uSではパルス出力タイミングによっては、PICマイコンが取り込めない
ケースがでてくるのでは・・・・。

WRパルス幅が150uSだということは、メインマイコンのウェイトコントロール設定が1ウェイトになっている
ということではないかと思い、再度ソフトを確認したところ、外部IOアクセス時のウェイトコントロールを
2エウィトにしたつもりが1ウェイトの設定にしていました。

ソフト設計時は2ウェイトにしないとタイミングが怪しいと思って2ウェイトにしていたつもりでしたが・・・・。
結局、2ウェイトの設定にソフト変更したら、とりこぼしが無くなりました。

1ウェイトの時のWRパルス 2ウェイトの時のWRパルス

『5』 200KHzクロックで連続1秒間(約22,000件データ)の取り込みテスト

PC9801のプリンターポートからの疑似信号は、ソフトをアセンブラ言語で記述してもクロックスピードを
約80KHzまでしか上げられなかったので、最近購入したDOS/Vマシンのプリンターポートから200KHz
クロックの疑似信号を発生させることにしました。

信号発生をDOSVマシンに変更

割り込み処理ルーチンの実行時間が90uS以内になるように変更した後、200KHzクロックで連続1秒間の
取り込みテストを行いました。    結果はOKでした。

『6』 200KHzクロックで連続15秒間の取り込みテスト

取り込みデータを保存するメモリーをリングバッファーとして使用するようにしたので、保存時の
バッファリング操作のデバッグ目的に連続15秒データ取り込みテストを行いました。     結果はOKでした。

『7』 同様のテストを2チャンネル目でも確認

2チャンネル目を使って、上記同様のテストを行いOKでした。