• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PIC12F683でコンフィグレーションビット設定プログラムを入れると、動作できなくなる。)

コンフィグレーションビット設定プログラムでPIC12F683が動作しなくなる原因とは?

このQ&Aのポイント
  • PIC12F683でコンフィグレーションビット設定プログラムを入れると、動作できなくなる。
  • 現在PIC12F683マイコンをC言語でCCSコンパイラを使ってプログラムをやっています。数個マイコンにコンパイラしたプログラムの実行ファイルを書き込んでいくとき、書き込み機にコンフィグレーションビット設定をいちいち撃ち込んでいくのが面倒くさくて、プログラム上にコンフィグレーションビット設定のプログラムというのがあったので、作業を省略してくれるとのことでやってみたのですが、コンパイルして実行ファイルを書き込むとマイコンが全く動かなくなってしまいました。
  • こんプログラムを入れてみたのですが、なぜ、マイコンが全く動かなくなってしまうのでしょうか? 一応main関数の永久ループに行く前に、デバッグとしてprintf文をいれてUART出力で0xFFという文字を出力させているのですが、このコンフィグレーションビット設定プログラムの実行ファイルではこのprintfも出力されていません。

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

  • ベストアンサー
  • hashend
  • ベストアンサー率92% (12/13)
回答No.4

ここまで来て言うのもなんですが、私の知識では想像できない部分で不都合があるのかもしれません。ちなみに、#fusesを使わずにライターで直接コンフィギュレーションビットを書き換えた場合でも現在使用しているICで動作確認できますでしょうか? もしHEXファイルを確認するのであれば、最後の方の行にコンフィギュレーションビットが書かれています。下位バイト上位バイトの順に書かれていると思います。しかし、ICに正確にコンフィギュレーションビットが書かれているということは原因はコンフィギュレーションビットではなくプログラムの方にあると思うのですが

その他の回答 (3)

  • hashend
  • ベストアンサー率92% (12/13)
回答No.3

状況をすこし確認したいのですが、 (1)書き込み用のファイルにはフュースビットの情報が書き込まれている。 (2)ICへの書き込み器でICそのもののヒューズビットを呼び出しても正しい情報である。 (3)テスト用のプログラムでもWDTタイマのクリアを行なっている。 (1)が正しければ、#fusesの表記は正しいので、問題は無いでしょう。これは書き込みソフトで確認出来ているようですので、書き方そのものは成功していると言えます。動かないのは他に原因があるようです。 (2)が正しければ物理的に壊れている可能性とソフトウェアの問題の2つが上げられます。 (3)が間違いであれば、WDTをクリアするプログラムを追加する必要があります。

techhouse
質問者

お礼

回答頂きありがとうございます。 >2)ICへの書き込み器でICそのもののヒューズビットを呼び出しても正しい情報である。 一応、マイコンの中に書き込んだ#fuses文を含んだデータをMPLAB ICD2を使ってReadしてみて、コンフィギュレーションビットの設定を確認していたのですが、#fusesの内容と同じということを確認しました。 それで、(3) >(3)が間違いであれば、WDTをクリアするプログラムを追加する必要があります。 現在の#fuses文を #fuses INTRC_IO, NOWDT, PUT, NOMCLR, NOPROTECT, NOCPD, BROWNOUT, NOIESO, FCMEN このように宣言してNOWDTでウォッチドックを無効にして動作させてみたのですが、これでもマイコンは全く動作しない状態です。 もしかしたら#fuses文を含んだ実行ファイルと含まない実行ファイルをバイナリ比較で何かわかるかも知れませんね。もしかしたら・・・

  • hashend
  • ベストアンサー率92% (12/13)
回答No.2

フューズビットの呼び出しで、正確に書き換えられているかはチェックしましたか? また、今更ですが、 >#fuses WDT // WDT_ON になっているのですが、ウォッチドックタイマを使用しているのですか?

techhouse
質問者

お礼

回答頂きありがとうございます。 フューズビットの設定をプログラムでしてコンパイル後、作成された実行ファイルを書き込み機のユーティリティソフトで開いた時に、フューズビットの設定の項目で、自分が行った設定にちゃんと表示されるかで、確認はしております。ソフトはSPWriterを使用しています。 今回のプログラムではウォッチドックタイマを使用しています。

  • hashend
  • ベストアンサー率92% (12/13)
回答No.1

CCSのコンパイラを使った事はありませんので憶測で申し訳ないですが、#fuses INTRC_IO,WDT,PUT.... のように改行せずに一行で書かなければならないような気がします。 推測で本当に申し訳ないのですが、各オプションは論理和または論理積で計算されるため、最後に指定した「#fuses FCMEN」だけが適用されている気がします。また純正のプログラマーを使用している場合はフューズビットの呼び出しが可能だと思いますので、マイコンに書き込まれている内容を確認されるとよいと思います。

techhouse
質問者

お礼

回答頂きありがとうございました。 #fuses INTRC_IO, WDT, PUT, NOMCLR, NOPROTECT, NOCPD, BROWNOUT, NOIESO, FCMEN このような感じで一行にフューズビットの設定を行ってみたのですが、結果main関数に動作が到達していないようで、動きませんでした。 シミュレーションではちゃんとプログラムは動いているのですが、実際の動作では違うようです。

関連するQ&A

専門家に質問してみよう