JH7UBCブログ

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

PIC16F18326 MCC PWMテスト(ICSP)

2024-01-20 14:17:59 | MPLAB X MCC
 PIC16F18326のPWMのテストをします。
 環境は、MPLAB X(v6.15) XC8(v2.45) MCC(v5.3.7)です。 

 テストした回路です。ライターはPICKit3を使い、ICSPでテストをしました。



 MPLAB Xでprojectを作成し、MCCを立ち上げ、各種設定をします。

 まず、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から供給しています。