JH7UBCブログ

アマチュア無線 電子工作 家庭菜園など趣味のブログです

PIC16F1705 MCC PWMテスト

2022-04-03 22:17:49 | MPLAB X MCC
 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)を使います。