はじめに

これまでの案件ではPICを4MHz程度で動作させることが多かったのですが,ある案件で32MHzでの動作をさせることとなりました.この速度だったからなのか,正直よくわからないのですが,AD変換でちょっとはまったことがあったので書いておきます.

環境

  • MCU: PIC16F18857
  • 開発環境: MPLAB X 6.05
  • コンパイラ: XC8 2.40

はまったこと

AD変換結果がおかしすぎる,ということです.想定される値の1.3倍くらいになる感じでした.いろいろと調べていった結果分かったのはAD変換を行う時間が短すぎたということです.データシートに掲載されている1.0us以上待った方が良いということは承知していたため,動作周波数32MHzに対して32分周することで1usを確保していました.しかし,どうもこの値が短すぎたらしく,結局のところ4usにすることで値が安定化しました.おそらくですが,32MHzで動作させているPICマイコンが個体差により,より早い場合があると思われます.あまりぎりぎりの1usを狙わず,最初から4usほどの時間をかけるように今後はしていきたいと思います.