タイマ1割り込みと外部割込みを使ってみる。

ここでは、タイマ1割り込みと外部割込みを使ってみます。
サンプルプログラムはここ
(zipファイル)

モニターとして、ポートAのRA0・RA1・RA2をLEDに接続して点滅させます。
RA0は通常のメインループで1秒間隔で点滅を繰り返します。RA1は250ms間隔の割り込み処理で点滅を繰り返します。
R2は外部割込みが発生する度に、点灯・消灯を繰り返します。

ポートBのRB0が外部割込みを検出しますのでタクトスイッチに接続します。通常はHighでボタンを押すとLowとなり割り込みが発生します。
スイッチはチャタリング対策を行っていないのでスイッチは少し長めに押してから離してください。
ちょっと押しただけですとチャタリングで割り込みが発生して点灯・消灯が一瞬にて行われます。

タイマ割り込みの時間を確かめる方法として、シミュレータを起動させてストップウォッチを使います。
File→Project Properties で設定ダイアログを開きます。


Hardware Tool: の”Simulator”を選択して、右下の「Apply」を押します。

Categories: に”Simulator”が出てきますのでこれをクリックします。 

クリックすると別のダイアグラムが表示されますので、”Option categories”を”Oscillator options”にします。
ここで、”Instruction Frequency(Fcyc)”は、システムクロック8MHzの1/4の2MHzにします。
(PICは1命令4クロック使用するためらしい・・・)
あとはOKを押して元に戻ります。

ストップウォッチを表示します。
Window→Debugging→Stopwatchで起動します。

これで、デバッグが利用できるようになります。ただしもう一度ビルドする必要があります。
ビルドしてエラーが無ければすぐに実行しますので隣の停止ボタン(赤い四角)を押して停止させます。

まず、設定が正しいかメインループにある、250msのウエイトで調べます。
ブレークポイントを設定するためにソースの行番号をクリックします。ここでは65行と66行にブレークポイントを設定します。
あと、ストップウォッチにあるアイコンをクリックして画面をクリアーして時間を0に戻してください。


再生ボタンのようなアイコンを押すとプログラムが再開されます。

65行のブレークポイントで停止して再度実行させます。また66行で停止しますのでストップウォッチの時間を確認してください。
250msであれば設定に問題が無い事がわかります。
ただし、割り込み処理があると若干時間が長くなっている場合があります。


割り込み処理にブレークポイントを設定して、割り込み時間を計って間違いないか確認してください。
割り込み時間の計算が面度な人はこれで試すと楽です・・・・


オシロスコープでも確認してみました。



PICkit3で書き込む時は、
File→Project Properties で設定ダイアログで、PICkit3を選択して”Apply”を押してください。

メインへ