●専用基板全体デバッグの開始
パソコンのソフトはテストプログラムのまま、デバイスドライバーも「汎用ドライバー」のままにしておき、
専用基板のメインマイコンと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でした。
![]() |
![]() |