PIC18F14K50でのスリープとピン状態変化割り込みについて
本家Microchipのフォーラムでも検索しましたがヒットしませんでしたので質問させてください。
開発環境はMPLAB+C18で18F14K50を使用して、電池駆動の温度計を制作中です。書き込みはPickit3です。
消費電力を押さえるため、電源投入後10秒程度でスリープし、スイッチ操作によってスリープ解除する仕様としました。
スリープへの移行はできたのですが、次にポート状態変化割り込みを設定すると、ポート変化していないにもかかわらずスリープから復帰してしまいます。
以下が関連する設定箇所です。
WPUAbits.WPUA5 = 1;
WPUAbits.WPUA4 = 1;
INTCON2bits.RABPU = 0; //weak pull-up enable
INTCON2bits.RABIP = 0; //PORT CHANGE 優先度=低
INTCONbits.RABIE = 1; //port change interrupt enable
IOCAbits.IOCA5 = 1; //RA5 port change enable
IOCAbits.IOCA4 = 1; //RA4 port change enable
INTCONbits.RABIF = 0;
--中略--
if(sec==13){
Sleep();
Nop();
Lcd_dat(); //LCDに”SLEEP”表示
スイッチはRA4,RA5に接続されていて、上記の様に内蔵プルアップを有効にしていますが、ここを無効として外付けプルアップとしても同様でした。
スリープに入ったかどうかは、Sleep()命令の後にLCDに表示させて確認させています。
上記設定のままだと、一瞬LCDにスリープした表示がでるのですが、すぐに復帰してしまいます。
そこで、IOCAbits.のIOCA5とIOCA4をコメントアウトするとスリープに入ります。ただし、当然のことながらスイッチ操作で復帰はしません。
同様に、INTCONbits.RABIE=0としても、スリープに入りますが復帰しません。
ポート状態変化の設定をコメントアウトするとスリープするということは、他の要因で復帰していないということだと考えています。
設計仕様通りに、ある時間が経過後スリープして、ボタン操作でwake upするには、どうすればよいのでしょうか。
ごく一般的な仕様なので、同様の経験をした方はいませんか。
それとも、全く見当違いのことをやっているのでしょうか。
アドバイスをお願いします。
PIC18F14K50でのスリープとピン状態変化割り込みについて
- いち
- 2014/04/24 (Thu) 15:04:44