前回までで、SCL(Stimulus Control Language)によるJR-100の模擬出力データ生成プログラムと、実際にPICに組み込むプログラムができました。今回はこのプログラムをデバッグします。まず机上で、次に実機で挑戦です。
今回のプログラムの特徴は、外から入ってくる信号に応じて正確な時間で信号を生成する必要があることです。デバッガで機械語の1命令ずつステップ実行すればロジックの正しさは確かめられますが、時間の観点でも意図したように動いているのかは分かりません。
しかしこういうことのためにMPLAB X IDEはちゃんとStopwatchという機能を用意しています。この機能は、ブレークポイントでプログラムが一時停止するたびに、前回の一時停止時点からの命令サイクルと実行時間(命令サイクルとクロック周波数から計算される時間)を計測するものです。
机上デバッグ
まず机上デバッグから始めるため、PICのデバッグモードをシミュレータモードにします。この記事を参考にしてデバッグモードへの変更とデバッグ用のSCLファイルを読み込みまで行います。
以降は、最低限のロジックチェックが終わっているものとします。つまり動作は意図通りだが時間が正しいかどうかはまだ分からない状態です。
PICプログラム上で時間を計りたい場所にブレークポイントをセットしましょう。今回は水平同期信号の立ち下がりエッジを生成する命令にブレークポイントを設定してみます。この場合、毎回224サイクル(クロックが3.579545MHzの場合)または500サイクル(クロックが8MHzの場合)になるはずです。なぜ8MHzも試しているかは、次回の記事で説明します。
ここでStopwatch画面を表示しておきましょう。画面右下のウィンドウから"Stopwatch"タブを選びます。もしタブが無ければ、メニューからTools > Windows > Debugging > Stopwatchを選ぶとStopwatchタブが表れます。
さてプログラムをデバッグ実行してみます。すると最初のブレークポイントで停止するので、その後何回か継続実行してみます。するとStopwatchウィンドウに、ブレークポイントで停止するたびに前回停止時からの実行命令サイクル数と実行時間が表示されます。この例ではクロックを8MHzにして実行しているのですが、ちゃんと500命令サイクル、62.5μsで実行されていることが分かり、想定通りになっていることが確認できました。
実機デバッグ
さてシミュレータ上はうまく動いているので、いよいよ実機に組み込んでテストします。ちなみにまた回路図を修正しました。今回の修正点は以下の3点。
- 電源周辺とパスコンを明記
- 出力電圧が1Vp-pではなく2Vp-pとなるよう修正
- インピーダンス整合をとるために出力抵抗として75Ωを追加
この回路をブレッドボード上で組み立てます。また、JR-100から必要な信号線を引き出してきて接続します。
ここまでで最低限の動作チェックはしておきます。配線の過不足、電源がショートしていないか、JR-100からの信号がちゃんと届いているか、PICのクロックはちゃんと動作しているか、など。このあたりはオシロスコープが無いと厳しいかもしれません。私はpico scopeを使ってます。値段も手ごろで、趣味レベルの実験であれば機能十分ではないかと思います。
ここでMPLAB X IDEのモードを"Simulator"から"PICkit3"に変更します。まずPCにPICkit3をUSBで接続しておいて、File > Project Properties (プロジェクト名) からHardware ToolボックスでPICkit3を選びます。次に電源の設定をします。再びFile > Project Properties (プロジェクト名) として左のリストからPIKkit3を選び、右の"Option categories"でPowerを選びます。今回の回路には5Vの外付け電源を使っているので、PICkit3から電源供給をする必要はありません。そこで"Power target circuit from PICkit3"のチェックボックスはoffにしておきます。
後はシミュレータでの場合とデバッグのやり方は同じです。命令のステップ実行もできますし、PIC内部のレジスタ値のウォッチも問題ありません。ちゃんと動くまでがんばりましょう:-)
次はようやく実行結果の考察です。
コメント