PIC16F18877にMCCでPWMの設定をする
目的
- PWMでLEDの明るさを制御する
- MCCを使って設定する
- PIC15F18877を使う
全体の流れ
- PIC自身のクロックを設定する
- タイマーの設定をする
- PWMの設定をする
- main.cに追記する
- コンパイル、書き込み
やり方
PIC自身のクロックを設定する
MCCを起動したら、System Moduleタブを以下のように設定します。
僕は32MHzで動かしています。HFInternal ClockとClock Divider以外はデフォルト設定です。HFInternal ClockとClock Dividerはクロックが最大になるように設定しています。
あと、写真には写っていないのですが、Low-voltage Programming Enableのチェックも外しています。
タイマーの設定をする
Device ResourcesからTimer > TMR2を追加します。 そして以下のように設定します。 デフォルトから変えたのは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が点滅すると思います。
最後に
読んでくださり、ありがとうございました。もし間違いや改善点がありましたらコメントなどで教えてください。