Sahara's WebLog

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

PIC32MM0064GPL028 – MPLAB Code Configuratorを使ってMCCPの割り込みでLチカさせる。 –

最近 PIC32MM0064GPL028 で遊んでいる。
PIC32MM0064GPL028 – MPLAB Code Configuratorを使ってTimer1の割り込みでLチカさせる。 –
PIC32MM0064GPL028 – MPLAB Code Configuratorを使ってUART1でシリアル出力させてみる。 –
Timerが1個しかないかと思ったら、Capture/Compare/PWM/Timer (CCP) modules というのが、とりあえずTimerの機能も持っているらしい。
その中には、Single output modules (SCCPs) というのと Multiple output modules (MCCPs) というのがある。
SCCP は 1つの PWM 出力を持ち、MCCP は最大で6つのさまざまな出力を持つんだって。
ここでは、単純に Timer1 以外にもういくつか Timer が使いたいというだけなので、MCCPを1つ使って 16-Bit の Timer を2つ用意してみる。
とはいっても、全体をちゃんと把握していないので、以下の設定で試してみる。

割り込みを有効にする。
システムのクロックを1MHzにして、それをMCCPのソースとして用いる。
もちろん1MHzならわざわざPLL使う必要は無いが、練習なのでわざわざ面倒なことをやってみた。

タイマーは16ビットとし、Pimary Timer Period = 0x5DC(1500)、Secondary Timer Period = 0x7D0(2000)、Prescaler = 1:64 とする。

これでGenerateすると、mccp1_tmr.cの中にタイマーの割り込み処理が2か所作成されるので、そこへお決まりのLチカ動作を書き込んで、実行させる(※)

自動生成されたプログラム中のCCT1とCCP1の区別が良く分からないが、
CCT1 –> LATB7(16pin) –> Logic Analyzer 1ch(Brown)
CCP1 –> LATB15(26pin) –> Logic Analyzer 0ch(Black)
というようにつないで実際にパルスを見てみる。
結果、
CCT1 –> LATB7(16pin) –> Logic Analyzer 1ch(Brown) –> 96ms
CCP1 –> LATB15(26pin) –> Logic Analyzer 0ch(Black) –> 128ms
となった。
1000000 / 64 / 1500 = 10.42Hz(96ms)
1000000 / 64 / 2000 = 7.81Hz(128ms)

MCCでの記述と、実際に生成されるコードとの関係は下のようになっている。
pic32mm0064gpl028_mccp1_161026_04
Reference Manualのブロック図では以下のとおり。
pic32mm0064gpl028_mccp1_161026_06
3つのタイマーをそれぞれ異なる周期で使ってLチカしているので下のようにバラバラな点滅になる。

こんなんで、Timerだけを取っても16ビットのが7つも使えてたったの175円ですぜ、奥さん。

参考
PIC32MM0064GPL028 + MCC でPWMを試してみる。

PIC32MM0064GPL028関連記事一覧

(※)追記(2019/02/05)
この記事を最初に書いた時のバージョンがはっきりしないが、現状で
IDE v5.10
XC32 v2.15
MCC v3.66
MCCの出力するコードに
MCCP1_TMR_PrimaryTimerCallBack();
MCCP1_TMR_SecondaryTimerCallBack();
が追加されたのでわかりやすくなった。
mccp1_tmr.cの該当部分に以下のように書けば2つのLチカができる。

出力をRB6、RB7とした例になっている。

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

Posted under: PIC32MM0064GPL028


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

Time limit is exhausted. Please reload CAPTCHA.