Sahara's WebLog

日記のような、備忘録のような、うらみつらみのような、自慢のような…。

PIC32MM0064GPL028でMCCPのPWMは動くのにSCCPのPWMが動かなかった件

MPLAB X IDE v5.10
XC32 v2.15
MCC v3.75
この記事の内容は、MCCの不具合による問題のようなので、MCCのバージョンが上がれば解決されると思う。
そもそもデータシートをちゃんと読む人には全く関係の無い話。

PIC32MM0064GPL028でMCCPのPWMで音を鳴らしたりして遊んでいた。
PIC32MM0064GPL028にスピーカーをつないで音声を鳴らす。
PIC32MM0064GPL028で左右ウインカー、ハザード、点滅音を実装してみる。
PIC32MM0064GPL028で音と電飾シリーズ – ホーンの音も追加 –
だんだん手が込んできて、SCCPでもPWMを使って音を鳴らそうとしたら全く何も出力されない。
MCCPと同じように設定しているのにだ。

SCCP2の例で先に解決策を書く。
 MCCがOCAENをDisabledにしてしまっているのでそこを変更する。
 方法1:sccp2_compare.c の void SCCP2_COMPARE_Initialize (void){} の最後に
     CCP2CON2bits.OCAEN = 1;
     を追加する。

 方法2:MCCのRegistersで直接変更する。

方法2の方が楽だ。

MCCP1とSCCP2を両方動かすとMCCP1だけ信号が出る。
SCCP2もタイマー割り込みにしてコールバックの中でLチカするとちゃんとLチカする。

散々捜し歩いても解決策が見つからなかった。
データシートを丹念に読むばもしかしたら気づいたかも知れないが、MCCどっぷりなのでそこまでちゃんと読む気が無くなっている。
結局、MicrochipのForumで質問したらすぐに教えてくれた。
あわてて、渋々データシートを読むと以下のようになっている。

MCCP1の場合はCCP1CON2のOCAEN~OCFENが出力ピンのOCM1A~OCM1Fに対応して出力するかどうかを決めている。
SCCP2の場合はCCP2CON2のOCAENが出力ピンのOCM2に出力するかどうかを決めている。
SCCPではOCBEN~OCFENは使わない。

なのに、MCCの吐き出すコードではSCCPに関してこのレジスタがDisabledに設定されてしまっている。
そのためピンに信号が出力されなかった。

このエントリーをはてなブックマークに追加

Posted under: PIC32MM0064GPL028


コメントを残す

メールアドレスが公開されることはありません。

Time limit is exhausted. Please reload CAPTCHA.