Potewoのブログ

電子工作が好きな学生の書く技術系のブログです。

PIC16F18877にMCCでPWMの設定をする

目的

  • PWMでLEDの明るさを制御する
  • MCCを使って設定する
  • PIC15F18877を使う

全体の流れ

  1. PIC自身のクロックを設定する
  2. タイマーの設定をする
  3. PWMの設定をする
  4. main.cに追記する
  5. コンパイル、書き込み

やり方

PIC自身のクロックを設定する

MCCを起動したら、System Moduleタブを以下のように設定します。

MCCのクロック設定画面
MCCのクロック設定画面
僕は32MHzで動かしています。HFInternal ClockとClock Divider以外はデフォルト設定です。HFInternal ClockとClock Dividerはクロックが最大になるように設定しています。
あと、写真には写っていないのですが、Low-voltage Programming Enableのチェックも外しています。

タイマーの設定をする

Device ResourcesからTimer > TMR2を追加します。 そして以下のように設定します。

MCCのタイマー設定画面
MCCのタイマー設定画面
デフォルトから変えたのはClock SourceとTimer Periodです。この二つは参考にしたQiitaの記事でこのようになっていたので、同じように設定しました。

PWMの設定をする

Device ResourcesからPWM6を追加します。いきなり6から始まっているのはCCPが1~5まであるからです。
Select TimerがTimer 2になっていることを確認します。それ以外はデフォルトで大丈夫です。
次にPin ManagerでPWM6を有効にしたいピンのところをクリックして緑の閉じた鍵マークにします。
そしてそのピンにLEDと抵抗を直列に繋ぎます。グラウンドも配線してください。

main.cに追記する

設定が終わったらGenerateボタンを押してコードを生成します。
するとmain.cができるので、これに追記していきます。

void main(void)
{
    // initialize the device
    SYSTEM_Initialize();
    uint16_t duty = 0;
    while (1)
    {
        for (duty = 1; duty < 1024; duty++) {
            PWM6_LoadDutyValue(duty);
            __delay_ms(3);
        }
        for (duty=1023; duty>0; duty--) {
            PWM6_LoadDutyValue(duty);
            __delay_ms(3);
        }
        
    }
}

このようにしました、前後のコメント部分は省略しました。
ゆっくり明るくなったり暗くなったりするプログラムです。
PWM6_LoadDutyValue関数に0~1023の数を渡すとPWMのdutyがそのようになります。
参考にしたQiitaの記事ではこの関数の後にいくつか関数を付け加えていたのですが、僕の場合は必要ないようでした。おそらくバージョンの違いだと思います。

コンパイル、書き込み

ここまでできたら、コンパイルして書き込みをして終了です。
ゆっくりLEDが点滅すると思います。

最後に

読んでくださり、ありがとうございました。もし間違いや改善点がありましたらコメントなどで教えてください。