昨日からPIC(ワンチップマイコン)で遊んでるわけですけど、今日は、あるプログラムを書いたあとチップがうまく動かなくなる現象に悩まされました。
相当調べた所、マイコンチップ内のアドレス0x3FFに書かれているOSCのキャリブレーションデータがゼロになってしまうとうまく動作しなくなってしまうみたい(ただし、内部クロックを使って動作させているときに限るみたい)。
マイコンへの書き込みはPICKIT2を使っていて、開発環境としてはMPLAB X IDEのlinux版を使っていたのですが、コレのせいかと思って、windows7にMPLAB IDE(Xがつかないもの)を使って動かしてみましたけど、1回目の書き込みはOKなんだけど、2回目からはやはりNG。
ちなみに、NGになってしまったチップは、PICKIT2付属のライターのメニューでキャリブレーションデータを直接書き換えることができて、それで正しい値(もしくはそれっぽい値)を書きこむとまた元に戻ります。
いろいろと調べた結果、コンパイル時にキャリブレーションデータでOSCの周波数を補正しないモードというのがあって、その設定をおこなうことで(発振周波数の精度は落ちますが)、コンパイル→書き込みを繰り返しても問題なく動作するようになりしまた。
ちなみに、MPLAB IDEとMPLAB X IDEでは設定の方法が違っていて、MPLAB X IDEでは「File」→「Project Properties」で開いた画面の左側のメニューの「XC8 linker」をクリックし、「Option Categories」を「Runtime」にしたときに下の窓にあらわれるパラメータのうち、Calibrate Oscillatorのチェックを外すとOKです。
というわけで、プログラミングの勉強というより、デバイスや開発環境の使い方で一日費やしてしまいましたとさ。
(ちなみに、この件、一度Eraseしてから書きこめば大丈夫とか書いてあるサイトもありましたが、まだ未検証です)
<追記>
何やらlinuxでもコマンドラインからマイコン内のメモリの読み書きができるコマンドがあるとのことで、情報収集。
pk2cmdってのをコンパイル→インストールしてみたり、それとライタ(pickit2)のFWも更新したりしたりといろいろといじっていたら、なんだかキャリブレーションデータが消えなくなったようなきがする・・・。
しばらく使ってみて様子みます。なんなんだ・・・。
いままでMPLAB IDEアセンブラで作成して12f629にPICKIT2で書き込んでいたときは問題ありませんでした。C言語に変更するためMPLAB Xにしたところ、同じトラブルで困っていましたが、上記設定に変更して書き込みできるようになりました。大変参考になりました。ありがとうございます。
返信削除お役に立ててよかったです^^;
削除既に2年以上前の話で、今自分で読んでも呪文にしか見えませんwww