PWMの基本プログラムコード
My-CDC-Basic\My-CDC-Basic.Xには全てのプログラムコードが記載されていますが、
多くはUSB通信に関するコードでありPWM関連コードは僅かです。
(1)main.c MAIN_RETURN main(void)のPWM関連コード
TRISC = 0b00110000; //D-,D+(USB用)RC4とRC5を入力に設定、RC2出力設定
TRISD = 0b00000000;//RD5出力設定
LATC = 0b00000000;//ラッチ無し
LATD = 0b00000000;
// CCPのモードをPWM mode: P1A, P1C active-low; P1B, P1D active-highに設定
CCP1CONbits.CCP1M3=1;
CCP1CONbits.CCP1M2=1;
CCP1CONbits.CCP1M2=1;
CCP1CONbits.CCP1M0=0;
//10 = Half-bridge output: P1A, P1B modulated with dead-band control; P1C, P1D assigned as port pins
CCP1CONbits.P1M1=1;
CCP1CONbits.P1M0=0;
(2)app_device_cdc_basic.cのヘッダ部
void SetPWM(unsigned char N);
unsigned char V_T2CKPS0[13]={1,1,1,1,1,1,1,1,1,1,0,0,0};
unsigned char V_T2CKPS1[13]={1,1,1,1,1,1,1,1,0,0,0,0,0};
unsigned char V_PR2[13]={255,127,63,31,15,7,3,1,3,1,3,1,0};
unsigned char V_DC1B1[13]={0,0,0,0,0,0,0,0,0,0,0,0,1};
unsigned char V_CCPR1L[13]={128,64,32,16,8,4,2,1,2,1,2,1,0};
(3)void SetPWM(unsigned char N)の呼び出し
SetPWM(N);//指定の周波数にPWMを設定、デバッグ用
(4)PWM設定関数
void SetPWM(unsigned char N)
{
T2CONbits.TMR2ON=0;// タイマ2停止
PR2 = V_PR2[N];//周期を設定(設定 + 1)=1/(48MHz*(設定+1))
CCP1CONbits.DC1B1=V_DC1B1[N];//H時間の1/2の単位設定
CCP1CONbits.DC1B0=0;//H時間の1/4の単位設定
CCPR1L =V_CCPR1L[N];//Hの時間設定=1/(48MHz*設定)
T2CONbits.T2CKPS1=V_T2CKPS1[N];//タイマ2プリスケーラ値設定
T2CONbits.T2CKPS0=V_T2CKPS0[N];//タイマ2プリスケーラ値設定
TMR2 = 0;// TMR2レジスタをクリア
T2CONbits.TMR2ON=1;// タイマ2起動
}