MicrochipのMCC(MPLAB Code Configurator)は,マイコンで避けて通れない初期設定を簡単に行ってくれるのでとても便利です.今までは最初にマイコンのデータシートを一生懸命読んで初期設定をしていましたが,様々なPICを扱うことが増えてきたため,それならMCCを使ってみようかということになり,ここ1年くらいはちょこっと使っています.しかし,動きがおかしいとか,MCCで設定したことがうまくコード化してくれなかったりとかがあります.今回は,PIC19F1936で遭遇した,MCCのおかしい挙動について記します.

環境

  • MCC: Ver.4.0.1
  • ターゲットデバイス: PIC16F1936
  • 行いたいこと: PICをI2Cのスレーブにしたい

動作がおかしいと思われるところ

下の図のように,I2Cのスレーブにしているはずなのに,それに対応するはずのSSPCON1が全く変化しない.もう少し具体的に言うと,SSPCON1のSSPM0~SSPM2が変化するはずです.しかし,ここが0(I2Cのスレーブにするなら6)になりません.

01

 

ちなみに,Registerを直接設定する方についてもSSPM0~2を変更することができません.下の図のように"7 Bit Polling"っていう選択しかできない状態です.

02

 

このコンボボックスには,ほかにもいくつかの選択肢があるのですが,いずれもI2Cのスレーブにする,というような選択肢はありませんし,仮に適当な選択をしたとしても,下の図のようにWARNINGが発生してしまいます.

03

 

結局,手動でSSPM0~2を6にするようなコードを下の図のようにi2c_slave.cへ追加することとなってしまいました.

04

 

一事が万事.ほかのところでもMCCに全幅の信頼を置いていいのか迷ってしまっているところです.