こんばんは、ファルコンM です。
PIC24 でMCC を使用した開発で、はまった時の話。
HLVD ( HIGH-LOW-VOLTAGE DETECT ) を使って、バッテリー電圧の低下を検出しようとした。
だが、検出と同時にマイコンがリセットされているようだった。
その原因が、BOR の設定っぽい。
開発環境
- マイコン PIC24FJ128GC006
- PICKIT3
- MVA v2017_03_06
HVLD で電圧低下を検出するとマイコンがリセットする
MCC でHVLD の設定を有効にする。

電圧低下を検出したいので、
- Trip Points → Min:2.45 Max:2.70
- Voltage Change Direction : Falls Below Trip Point
とした。
ソースコードをジェネレートして、実機でデバックを行った。
hlvd.c の void __attribute__ (( interrupt, no_auto_psv )) _ISR _LVDInterrupt( void ) 関数の先頭でブレークポイントを設定する。

マイコンの供給電圧を低くしていく。Trip Points を下回ったあたりで電圧低下を検出し、ブレークポイントで停止した。
よし、できた!!!
って思ったが、続けて実行するとマイコンがリセットした。マイコンの先頭からプログラムが走っている。
設定した電圧値が低すぎるのが原因か?
と思って、Trip PointsをMin:3.00 Max:3.25 に変更した。だが、それでもリセットした。
そもそもマイコンは、2.0V くらいまでの電圧に耐えられるはずなのだが。。。
BOR の設定でリセットしていたようだ
参考サイトは以下。
PIC24F ファミリは設定可能なブラウンアウト回路を備えます。この回路を設定する事により、
VDD が設定トリップポイントより低下した時にデバイスリセットを発生させる事ができます。
FPOR<BORV1:BORV0> ビットにより3 つのトリップポイントを選択できます。既定値では
BOR 回路は有効です。この回路は、コンフィグレーションビット FPOR<BOREN1:BOREN0>
をクリアする事により無効にできます。FPOR<BOREN1:BOREN0> ビットをクリアしてBOR
回路を無効にした場合、ソフトウェアでRCON<SBOREN> ビットをセット/ クリアする事に
よってBOR 回路の有効化/ 無効を行えます。
上記サイト p.36-4 から引用
つまり、BOR( ブラウンアウト リセット ) を無効にしないと、デバイスリセットが発生してしまうようだ。
これは、コンフィグレーションビットを設定しないといけない。

上記図で、BOREN をBrown-out Reset Disabled とした。
MCC でコンフィグレーションビットを設定して、再度ジェネレートして、実機で実行してみる。
今度はマイコンがリセットせずに、動作した。
コンフィグレーションビットを設定しろって、ちょっと分かりにくい。
しかし、
問題はそれで解決はしなかった。
また、別問題が発生した。ずっと割り込みが入りっぱなし。
これは、次の機会に。。。
コメントを残す