MPLAB X + XC8 + MCC環境で、PIC16F1705のPWMのテストをします。
MCCを使わない場合、クロック、タイマー、デューティ設定などを計算によって求めなければなりません。(PIC16F1705PWMテスト参照)
MCCを利用することにより、非常に簡単にPWM信号を発生させることができます。
例として、500Hz,デューティ比50%のPWM信号をRA0に出力してみます。PIC16F1705はPWMを発生できるモジュールを4つ持っています。(CCP1(PWM1),CCP2(PWM2),PWM3,PWM4)今回は、PWM3を利用します。
プロジェクトを作成し、MCCを立ち上げます。
System moduleでクロックの設定をします。
INTOSC,FOSC,8MHz_HFとして、クロックは8MHzとしました。
PWM3モジュールとTMR2モジュールを導入します。
Pin moduleで、PWM3をRA0に出力するよう設定します。
PWMの周期を設定します。500Hzですから、PWM周期は2msです。
これを設定するのは、TMR2モジュールです。Prescalerの比を調整して、Timer Periodを2msに設定します。
PWM周期を設定するとPWMモジュールのPWM Parametersに表示されます。
デューティ比(Duty Cycle)は、%で設定します。その時のPWMDC(PWM Duty Cycleレジスタ)の値が表示されます。この場合499です。
これで、Generateし、MCCを終了します。
生成されたmain.c です。
------------------------------------------------------------
#include "mcc_generated_files/mcc.h"
void main(void)
{
// initialize the device
SYSTEM_Initialize();
while (1)
{
}
}
------------------------------------------------------------
最小限のプログラムですが、PWM信号がRA0に出力されました。
実際の周波数を測定してみました。498Hzでした。
デューティ比を変えるには、
PWM3_LoadDutyValue(uint16_t dutyValue) 関数を使います。
この例では、50%でPWMDCの値が499ですから、デューティ比25%にするには、dutyValue=250とします。
PWM3_LoadDutyValue(250);
をプログラムに書き込みます。
その波形です。
PWM信号を止めるには、dutyValue=0にするか、TMR2を止める
TMR2_StopTimer(void)関数を使います。
PWM信号をスタートさせるのは、
TMR2_StartTimer(void)を使います。