PIC12F1822を使って、MCCで設定してPWMのテストをします。
テストをする回路図です。
RA0(AN0)で10kΩのボリュームの電圧をAD変換して0~1023で取り込み、その値でPWM出力して、LEDの明るさを変化させるプログラムを組んでみます。

プロジェクト作成後、MCCを開きます。
System Moduleの設定です。INTOSC,FOSC,16MHz,PLLなしとしました。

AD変換についての設定は、前の記事と同じです。
PWMの設定は、ECCP(Enhanced Captuer Compare PWM)モジュールで行いますので、ECCPモジュールを組み込みます。
更にPWMは、Timerを使いますので、Timerモジュールも組み込みます。 PIC12F1822では、TMR2しか使えませんのでTMR2を組み込みます。

PWMモジュールの設定をします。
Timer Selectは、Timer2です。(これしか選べません)
Duty Cycleは、50%のまま。
PWM modeは、singleのまま。RA2がP1A(PWM出力)になります。
pin polarityは、P1A active highのまま。アクティブの時に出力がHighになります。
TMR2を組み込むとPWM parameterが自動的に設定されます。
FOSC=16MHzの場合、PWM period=64us,PWM Resolution= 10bit,PWM Frequency=15.625KHzとなります。

TMR2モジュールです。

特に設定はしません。
プログラムです。非常に簡単です。
----------------------------------------------------------------
#include "mcc_generated_files/mcc.h"
void main()
{
// initialize the device
SYSTEM_Initialize();
while (1)
{
EPWM_LoadDutyValue(ADC_GetConversion(channel_AN0));
}
}
---------------------------------------------------------------
void main()
{
// initialize the device
SYSTEM_Initialize();
while (1)
{
EPWM_LoadDutyValue(ADC_GetConversion(channel_AN0));
}
}
---------------------------------------------------------------
AN0のアナログ入力をADCで数値化(10bit 0~1023)して、その値に相当するデューティー比のPWMをP1Aに出力します。
buildし、プログラムをPICに書き込み、実際の回路でテストしました。

ボリュームを回すとLEDの明るさが変化します。OKです。
実際のPWM波形を見てみます。
Duty Cycle 50%の波形です。

Duty Cycle 約20%

Duty Cycle 約80%

周波数も測定してみました。

15.640KHzでした。設定値は、15.625KHzでしたので、誤差0.1%程度です。
以前にPWMの勉強をしましたが、仕組みや計算がけっこう面倒でした。
細かい設定をしなければ、MCCの設定だけで使えそうです。