PIC関連メモ/クロック周波数のずれについて

Last-modified: 2009-12-24 (木) 06:26:53

PICの内部クロック周波数は、様々な要因でずれることがある。
モーターの制御など、厳しいタイミングが求められるプログラムは、
マニュアル通りに書いても、動かない原因になるので注意。

原因

1.OSCCALデータが破壊されている
2.回路条件が悪い
3.工場出荷時のOSCCALの値がずれてる

OSCCALとは

PICのレジスタの名前。
クロック周波数を補正するための較正値で、工場出荷時に書き込まれている。
普通にPICを消去すると一緒に消えてしまう。
PICのリセット時に、Wレジスタに較正値が書き込まれるので、
OSCCALレジスタに書き戻すということをする。

MPLAB IDEの問題点

Microchipのツール類では、OSCCALなどの値を自動的に保存して、
書き戻してくれるようになっているはずなのだが、
実際には、MPLAB IDEでプログラムの消去を行うと、
OSCCALが破壊されるという現象があるらしく、
実際に、ver8.4(2009年12月現在)でもこの現象を確認した。

OSCCALの確認法

PICKit2 Programerというのを使うと、自動的にOSCCALの値が読み込まれる。
これは、PICKit2につないでおけば自動的にPICを判断して、
値を読み込んだりしてくれるスグレモノ(一部、判定に失敗するPICもある)

回路が悪いことも…

PICの内臓クロックの精度は、VddとVss間に接続したコンデンサの取り付け方にも左右される。
なるべく足に近いようにつける必要がある。

工場出荷時のOSCCALの値がずれてる

というより、実際の回路条件次第で、最適な内部クロック周波数の較正値は変わる。
だから、完全に実装した状態で較正値を修正するのが望ましい。

  movlw    較正値
  movwf    OSCCAL

もちろん、正確な修正には、周波数カウンタなどの測定器が必要。

問題の回避方法

MPLABのProgrammerをNONEにして、PICKit2 Programmerを使って消去・書き込みを行う。
(MPLAB IDEを使わない)