• 締切済み

PICのLVD割込中のリセット回避

現在、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書き込み }

みんなの回答

  • tadys
  • ベストアンサー率40% (856/2135)
回答No.3

リセットが掛かったときの RCON: レジスタのPOR、BORを確認してください。 もし、POR==0、BOR==1であれば、Brown-out Reset をオフにすると上手くいくでしょう。 BORの電圧はプログラムで選択できるので試してみても良いでしょう。 もし、POR==1であれば、Vdd電圧の変化によるリセットなので、回路で工夫するしかありません。 回答するには、具体的な回路情報が必要です

  • koujikuu
  • ベストアンサー率43% (429/993)
回答No.2

恐らくパワーオンリセットが上手くかからない為と思われます シャットダウン処理にて、RESET命令を実行してみては? (外部接続機器のリセットがかからない場合もあります) 参考 http://www.picfun.com/pic18/pic18xx04.html

回答No.1

Power ON Resetはソフトウエアではどうしようもありません。 ハード側で瞬断を防止する回路(Power OFF後一定時間電源の供給を絶つなど)を作るより無いでしょう。

関連するQ&A