IC16F1829でのCCPモジュールについて
PIC16F1829でのCCPモジュールを使用した、パルス幅のキャプチャについて
割込み関数を用いたら、mainループ内でCCP*IFを検知しません。状況:
CCPモジュールを用いて、パルスの幅を計測しようとしています。CCP単独での動作では、パルス幅を計測できました。
ここでの「単独」とは、割り込み関数を用いないmainループ内での処理です。
//「単独」での仕様 //
(1)CCP2モジュールでPWMパルスを発生する
(2)上記パルスをCCP1で立下がり、CCP4で立上がり検出する
(3)上記の値の差を計算
(4)I2C通信でLCDに表示
これで、タイマ1の分解能を1usに設定し、パルスのOFF時間を計測できました。
問題:
PICにラインカメラを接続し、カメラの出力パルスOFF幅を計測したいのですが
できません。
原因:
mainループ内
if(CCP1IF){
}
に処理が入らない。
質問:
なせCCP1IFを検知できないのでしょうか。
割込み関数を入れると、検知できないようになってしましいます。
何か競合するのでしょうか。
PICでは割込み関数の処理が終わるまでは、ほかの割込み禁止なはずなので
下に書いてある、フローチャート通りにプログラムが動くはずなのですが・・
私の力不足で、うまく動作しません。
後閑さんの本やPIC16F1829のデータシートも見ましたが原因がわかりません。
よろしくお願いします。
仕様(フローチャート):
概要
割込み関数は
・タイマ0 (CCP2のパルスカウント)
キャプチャした値の計算とシリアル送信を行う
・タイマ4 (20ms周期でリセットパルスを生成)
メイン関数は
・CCP1で立下りエッジ検出
・CCP4で立上がりエッジ検出
******
タイマ0の割込みは約13msです。
タイマ4は20msです。
時系列で言うと
(1)プログラムスタート~タイマ0割込みまで(0~13ms)
main関数が走り、パルスのエッジをキャプチャする
(はずですが、現状CCP1IFを検知できません)
(2)タイマ0割込み中(13~19.9ms)
キャプチャの値の計算とシリアル送信
(3)タイマ4割込み発生(20ms)
リセット信号と全ての値のクリア
お礼
教えて頂いたおかげで、今回の通信線補修工事に大変役に立ちました。 本当にありがとうございました。 自分はまだまだ駆け出しですが、これからも一生懸命がんばります!! また何かわからなことがあったら教えて頂ければ幸いです。 本当にありがとうございました。