PIC16F18326のPWMのテストをします。
環境は、MPLAB X(v6.15) XC8(v2.45) MCC(v5.3.7)です。
テストした回路です。ライターはPICKit3を使い、ICSPでテストをしました。
MPLAB Xでprojectを作成し、MCCを立ち上げ、各種設定をします。
まず、system moduleでクロックの設定をします。下のように設定し、クロック4MHzとしました。
まず、system moduleでクロックの設定をします。下のように設定し、クロック4MHzとしました。
PIC16F18326ではPWM5とPWM6を使用できます。今回は、PWM5を使うことにして、PWM5を導入します。また、PWM5でタイマーとしてTimer2を使いますので、TMR2も導入します。
TMR2で、PWMの周波数を設定します。今回、下のように設定し周波数は1KHzとしました。
この状態で、GenerateしてMCCを閉じ、main.cを最小限の状態で、buildして、ICSPでPICに書き込みます。
----------------------------------------------------
#include "mcc_generated_files/mcc.h"
void main(void)
{
// initialize the device
SYSTEM_Initialize();
while (1)
{
}
}
----------------------------------------------------
プログラムには何も書いていないのですが、MCCで設定したとおり、1KHz,Duty Cycle 50%のPWM出力が得られました。
Duty比を変えるには、PWM5_LoadDutyValue()関数を使います。
PWM5モジュールの中で、Duty0 Cycle50%の時、PWMDC Valueが499ですから、Duty Cycle 20%のPWMを得るには、main()の中で、PWM5_LoadDutyValue(200);とします。その時の波形です。
これは、PWM Polarity active_hiの状態です。MCCでPWM5モジュールでPWM Polarity active_loにすると次のようになります。
PIC16F18326では、PWMの出力をRA3を除くすべてのポートに出力することができます。ポートの指定は、MCCで設定できます。また、複数のポートに出力することもできます。
LEDの明るさをPWMで明るくなったり暗くなったりするプログラムです。
------------------------------------------------------------
#include "mcc_generated_files/mcc.h"
void main(void)
{
// initialize the device
SYSTEM_Initialize();
while (1)
{
for(int i=0;i<1000;i++){
PWM5_LoadDutyValue(i);
__delay_ms(1);
}
for(int i=1000;i>0;i--){
PWM5_LoadDutyValue(i);
__delay_ms(1);
}
}
}
------------------------------------------------------------
ブレッドボードです。ICSPでプログラムを書き込み、PICの電源は、PICKit3から供給しています。