最近BBSでちょっとした騒動が起きた。これは、PICを使う人に有益になると思うので、ブログでも紹介しておくとしよう。
その後、PICの事で以前からお世話になっている
natuさんより設定に違いがあるご指摘を受けることになる。
設定値はマイナス1してCCP1に設定
これが今回の焦点となった。
何度かBBSにてやり取りを行い、私も簡単ながら途中で検証も行った。MPLABにはソフトウェアシミュレータMPSIMが搭載されていて、ステップ実行やステップ時間をブレークをかけて検証ができる便利な機能がある。
まずこの機能での表示をが正しいと思い込んだのが、今回の真偽を惑わされてしまった原因になってしまった。上記は、計算値をそのままCCPレジスタにセットしてインターバルタイマーとした時のMPSIMの結果である。計算通りの割り込みで、一切の疑いも掛けていなかった。ところが、それをマイナス1すると、当然この結果が変わってくる。
チップでも試してみた。このチップは「ES」(エンジニアリングサンプル)で、知人が何か不完全な機能があるから注意してといって貰った物。そしてこのチップのDIP版があったので、会社の空いた時間にササッと確認。このES品の内蔵クロックが±5%の範囲にはいっておらず、更に現象を不確定にすることに。
とにかく、natuさんは古くからBBSなどに来る方の質問に答えて頂いたりしている御方である。
適当にアドバイスする事など考えられない。ひとつひとつ事実を知る事が大事である。
まずは、実機作成だ。といってもブレッドボードであるが、不確定要素を排除するために、高精度の水晶発信器KTXO12.8MHz(秋月の絶品)を使用。デバイスは16F877Aを使用し、PICkit2でオンラインでバッグ出来るようにする。もちろん、電源周りにも配慮し、最短距離配線とパスコンは欠かさない。1時間程度で組み上げる。
出来上がり。これにRC0出力で割り込みが入る毎にポートを反転させるようにした。
セコメントをする