• ベストアンサー

PICでウォッチドッグ時間を変更したい

PIC16F1939では setup_wdt(WDT_128S) のように実行中にウォッチドック時間を変更できました。 現在、CCSのPCHでコンパイルしています。 PIC18LF46K22で同様に変更するにはどのようにしたらよいのでしょうか。 #fuse で WDT1~WDT32768まで設定して setup_wdt(WDT_ON)で固定的に 動作させることは出来ますが実行中に変更する方法がわかりません。 CONFIG2H (0x300003) を変更すればよいと思いますが #BYTE ではアクセス出来ないようです。

質問者が選んだベストアンサー

  • ベストアンサー
  • SortaNerd
  • ベストアンサー率43% (1185/2748)
回答No.1

回答がないようなのでPICのC言語には詳しくありませんが軽く調べた範囲で回答します。 #BYTEというのはどうもレジスタに書き込むための指示のようですが、CONFIGはレジスタではないので書けません。 Flashメモリに書き込む方法を使う必要があります。なお書き込みには数ミリ秒かかりその間CPUは停止します。

caceres
質問者

お礼

ご回答ありがとうございます。 結果からご報告します。 問題は取り合えず解決しました。 CCSでしたら byte cBuf[14]; read_configuration_memory(cBuf, sizeof(cBufL)); //50us(4MHz) cBuf[3]=0x03 | 0x04; //0x04 - 0x3C write_configuration_memory(cBuf, sizeof(cBuf)); //50ms(4MHz) のように read_configuration_memory および write_configuration_memory により 必要な部分を書き換えて書き戻すことで変更できました。 ただし、書き込みに4HMzClockで50msも要するためそれより短い設定にすると正常に 動作しなかったりウォッチドックが効いてしまいました。 そこでそれまでは #fuses に WDT_SW が無かったため #fuses  ***,WDT_SW, WDT1,*** のように WDT1 で4ms としソフトウェア制御で必要な時間を得ることとしました。 ソフトウェア制御のWDT_SW を追加することで write_configuration_memory による長時間処理も問題はなくなるでしょう。 しかし、Flash書き込みだとすると頻繁な書き込みは寿命問題がありますので 結果的には書き換えはやめることにしました。

関連するQ&A