重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【解消】通知が届かない不具合について

現在、PIC18F2550を使用してプログラムを組んでいます。

電源遮断前にEEPROMへ書込を行ってからシャットダウンできるように
大きめのコンデンサを使って充電し
LVD機能を使用して割込を行い、アイドルモードにしたり内部クロックへの切り替え等の
省電力化をしてEEPROMへ書込を行っています。

電源を遮断して1秒程度してから電源を再投入すると
問題なく動くのですが、瞬断のようにOFF-ONを
瞬間的に行うと誤作動を起こしたように上手く作動しません。

恐らく、低電圧を検知してLVD割込に入って
EEPROM書き込み等を完了する前に復電して
初期化リセットされる(初期化時にEEPROM読込エラーとなる?)ため
ではないかと推測しています。

LVD割込時処理を完了するまで待機してから
初期化することが出来れば良いのですが
どのように実現すれば良いか分かりません。
助言いただけますでしょうか。

出来ればプログラム書き換えだけで対応したいです。
MCLRポートはI/Oポートとして使用しているため
出来れば使用したくありません。

コンパイラはCCS社コンパイラを使用しています。
プログラムは全て書くと膨大になるのでLVD割込時のみ書きます。
要望があれば補足書き込みします。

よろしくお願いいたします。

// ==================== 電源遮断時処理 ===========================
#int_lowvolt
void Low_voltageDetect_isr() // low voltage detect interrupt routine
{

glLVDdetect = 1;
while (PIR2bits.LVDIF) // check if LVDIF is set
disable_interrupts(INT_EXT1);// INT1(RB1)割り込み禁止 入力信号
setup_oscillator(OSC_31KHZ | OSC_INTRC | OSC_IDLE_MODE);
PIR2bits.LVDIF = 0; // set LVDIF to zero
EEPROM_W();// EEPROM書き込み

}

A 回答 (3件)

Power ON Resetはソフトウエアではどうしようもありません。


ハード側で瞬断を防止する回路(Power OFF後一定時間電源の供給を絶つなど)を作るより無いでしょう。
    • good
    • 0

リセットが掛かったときの RCON: レジスタのPOR、BORを確認してください。


もし、POR==0、BOR==1であれば、Brown-out Reset をオフにすると上手くいくでしょう。
BORの電圧はプログラムで選択できるので試してみても良いでしょう。

もし、POR==1であれば、Vdd電圧の変化によるリセットなので、回路で工夫するしかありません。
回答するには、具体的な回路情報が必要です
    • good
    • 0

恐らくパワーオンリセットが上手くかからない為と思われます


シャットダウン処理にて、RESET命令を実行してみては?

(外部接続機器のリセットがかからない場合もあります)

参考
http://www.picfun.com/pic18/pic18xx04.html
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!