こんにちは、ファルコンM です。
PIC24 でMCC を使用した開発で、HVLD( HIGH-LOW-VOLTAGE DETECT ) を使用してはまった時の話。
前回の続き。
開発環境
- マイコン PIC24FJ128GC006
- PICKIT3
- MVA v2017_03_06
HLVD で電圧低下検知で割り込みが入りっぱなしになった
やりたいこと
- マイコンの電源を電池から取得する。
- マイコンの供給電圧が基準値( 2.45 ~ 2.70V ) を下回ったら、HLVD 割り込みを発生させる。
- HLVD 割り込み処理で、電圧低下検知の処理をする。
まず、MCC でHLVD の設定を行い、ジェネレートする。
ソースコードをコンパイルして、デバックする。
HLVD の割り込みハンドラの先頭でブレークポイントを設定する。
テスト環境は、安定化電源を使用している。安定化電源の電圧を下げていくと、基準値くらいでHLVD の割り込みが発生し、ブレークポイントで止まった。
しかし、ブレークポイントから再実行すると、すぐに同じ割り込みハンドラの先頭で停止した。
どうもこのHLVD 割り込みは、電圧低下を検知している状態だと割り込みフラグが立ちっぱなしになるようだ。
以下リンク( pdf )の、p-36 – 10 で、使い方の例を書いてあるのだが、、、
検知したらHVLD の機能を停止させる
対策がこれしか思いつかなかった。HVLD を一回検知したら、機能を停止する。
今回は電圧低下を1回検知すれば十分なので、これでよい。
ソースコード
void __attribute__ (( interrupt, no_auto_psv )) _ISR _LVDInterrupt( void ) { if(IFS4bits.HLVDIF) { /* TODO : Add interrupt handling code */ HLVD_Disable(); IFS4bits.HLVDIF = 0; } }
特別にすごいことをやっているわけではない。
割り込みハンドラが呼ばれたら、HVLD_Disable() 関数を呼び、HVLD の機能を停止しているだけ。
一回HVLD の割り込みが発生したら、どこかで再びHVLD_Enable() 関数を呼ばない限り、HVLD の割り込みは発生しない。
逆に、HVLD の割り込みが発生しっぱなしになることはない。
まとめ
PIC MCC HLVD で電圧低下検知すると割り込みが入りっぱなしになる原因と対策について書いた。
こんなことはどこにも書いてなかったが、これでできるはず。
コメントを残す