ソフトウェアのデバッグ方法はいろいろあると思いますが、今回私が行った方法を以下に記載します。
準備今回のソフトデバッグではステップ動作による方法とブレークポイントによる方法で行いました。 デバッグはMPLABを使って行います。画面には以下のウインドウを表示しておきます。
SFR ( Special Function Register )
でも、最低限アッセンブルリストは常時表示しておいた方が良いです。 以下の説明ではプログラムの実行場所を表すのに
プログラムメモリのアドレス( PCカウンタの内容 )を使います。 初期化処理のデバッグ
アッセンブルリストのPC=0000の行に黒いバーが付きます。 ステップ動作による確認
以上で初期化処理のデバッグが終了しました。 スイッチスキャンおよびLED点滅処理のデバッグ
ステップ動作による確認
各点滅パターンをブレークポイントによる方法で確認することもできますが、時間がかかるので、各パターンの確認は実際のPICで行った方が良いと思います。 タイマー処理のデバッグ
10MHzの発振器を使用している場合には2500サイクルの命令を実行すると1ミリ秒になります。 プログラムカウンターの変更
Debug → Run → Change Program Counter... または によりプログラムカウンター変更のダイアログが表示されます。 PCの項目に16進で変更したいプログラムカウンタ値を入力し、Changeボタンをクリックすると、プログラムカウンターが変わります。 今回の場合は、PCに 00B5 と入力します。プログラムカウンターの表示バーが00B5に移動したことを確認します。
以後、カウンター減算の処理が行われます。 これ以上ステップ動作で確認しても意味がないので、ブレークポイントによる確認を行います。
以上の操作でブレークポイントが設定されました。 次に ボタンをクリックします。 Debug → Run → Run でもできます。 少し時間が経ってから、プログラムカウンターの表示バーが00BFhになって、止まります。 MPLABがプログラムを実行(シミュレーション)している間は、画面の下にある、ステータスバーが黄色になっています。 MPLABでのシミュレーション動作は実際のPICの動作に比べ、非常に遅いです。おおよそPICで1ミリ秒の処理に1秒位かかります。(約1000倍) 使用するパソコンによっても違うと思います。ですから、1秒タイマーを処理するのに約15〜20分位かかります。 1ミリ秒タイマーの場合、数秒で止まると思います。これが、数十分かかっても止まらない場合は、作成したプログラムに誤りがあるか、ブレークポイントの設定が正しくないか確認する必要があります。
MPLABでの発振器周波数の設定は Options → Development Mode... で表示されるダイアログのなかの CLOCK で設定できます。 また、スチップウォッチのウインドウは Window → Stopwatch で表示することができます。 実際に1ミリ秒タイマーの時間を測定してみます。
ソフトウェアによるタイマーの場合、処理ステップにより待ち時間を作っているので、正確ではありません。と言うのは、1秒タイマーでは1ミリ秒タイマーを1000回使っているので、1ミリタイマーでは1サイクルの誤差でも、1秒タイマーでは1000サイクルの誤差になります。また、サブルーチンを呼び出す処理、ループカウンターの設定処理なども加わります。ただ、発振器自体の誤差もあるし、1秒の時間で数ミリ秒誤差が出ても実際には影響は少ないと思います。正確な時間を望むなら、ハードタイマーを使用した方が良いです。 ちなみに1秒タイマーをストップウォッチ機能で計測してみました。私のパソコンではこの計測に18分かかりました。 LED点滅制御には全く問題ない誤差です。 もっとシビアな回路で使う場合は影響が出るかも知れません。 |