PICには、内蔵のプレシジョン・オシレータ(工場出荷時校正済みで、誤差±1%(理想状態), ±2%(通常使用時), 最悪でも±5%以内というカタログスペック)を持っている品種がある。電源さえ供給すれば、外部回路全くなしに、ある程度の精度を持ったクロック周波数で動作させることができるというわけである。PICは少ピンマイコンであるから、2ピン節約できる(その分I/Oに振り向けられる)のもうれしい。
私は以前、12F675(8ピン)の内蔵プレシジョン4MHzオシレータを使おうとしたのだが、試してみたら、周波数、すげーズレてるじゃん!(実測で約3MHzだった)と思って、使用をあきらめてセラロックを外付けしたことがあった。
しかし、これは私がデータシートをちゃんと読んでなかったのがいけなかったのだった。12F629/675の場合、出荷時に、プログラムメモリ(FLASH)の最終番地に(RETLW命令で)校正値が書いてあって、これを、ユーザが読んでOSCCALレジスタに書かないといけないのだった。
bsf STATUS, RP0
bcf STATUS, RP1
call 3FFh
movwf OSCCAL
bcf STATUS, RP0
※だから、12F629/675を使う場合は、プログラムメモリの最終番地を書き換えてしまわないように注意が必要である。
ところで、このような、ユーザーがプログラムする式の校正ではないPICもある。
16F648Aがそうだ。非常にポピュラーだった16F84Aと同じ18ピンだが、高機能・低価格になった。
16F648Aも内蔵プレシジョン4MHzオシレータがあるのだが、OSCCALレジスタはない。データシートにも校正についての記載は見あたらない。校正はユーザーには見せない形で行われているのだろうか。
しかし、検索すると、7%ズレていた、という人がいた。私も、ズレてるんじゃないの?と思われるチップを見たことがある。
どうなっているのだろうか?
P.S.
16F648Aのメモリが少ない版の、16F628Aというのもあるが、2005/08/10現在、秋月電子では価格が逆転していて、16F648Aのほうが安い(628A@250円、648A@220円)。
(10個まとめて買うと、割引されて、どちらも2,000円になる)
2005/08/14 実験してみた。
5個の16F648Aを内蔵4MHzオシレータ CLKOUTモードにして発振周波数をオシロで測ってみた。
CLKOUTには1/4の波形が出てくる(つまり1MHz)
電源電圧は3V(単四アルカリ乾電池2本)
1個目 0.998MHz
2個目 1.007MHz
3個目 1.004MHz
4個目 0.999MHz
5個目 0.999MHz
…実験した限りでは問題ないなあ。
コメント