MPLABX XC8 PICkit3の環境で、PIC12F675にプログラムが書けて、ほっとしたとこです。
Lチカ、割り込みを使ったLチカと進んできて、次の課題は、PIC12F675が持っていない機能であるシリアル通信とI2C通信の実験をやろうと思っています。
それらのタイミングをとるのに、内臓クロック周波数の精度を調べてみようと思います。
CONFIGで、FOSC = INTRCCLK とすれば、クロックの1/4の周波数(1MHz)が、GP4に出力されます。
これを利用して、クロック周波数を周波数カウンタ(自作です)測定してみると
なんと、30%以上ござがあります。キャリブレーション値がOSCCALレジスタに書き込まれていないようです。
さて、この環境で、どうしたらキャリブレーション値をPICに書き込むことができるのでしょうか。
Web上で方法を探してみると、MPLABXのProject propatiesのXC8 Linkerを開いて設定するようです。
さっそく、Calibration oscillator にチェックを入れ、Alternate oscillator calibratiom value に記録しておいたメーカー設定値「341C」を入れてみました。
1C=28なので、「3428」をキャリブレーション値にセットして(これでいいのか、疑問)、プログラムを書き込んで、周波数をチェックすると
誤差約3%になりました。この後、3420~3480の間で、周波数を測定してみましたが、最初の値が一番誤差が小さいようでした。
クロック周波数ですが観察してみると、RC発振回路なので、100Hz台まで、ちょこちょこと周波数が変化します。
でも、通信関係程度ならこの精度でもなんとかなるかな、と考えています。
メーカーキャリブレーション値を消してしまった場合の対策につ紹介してるサイトは、いくつか見つかりました。
今回は、メーカーキャリブレーション値を記録しておいたので、助かりました。