PWM

PWMを実現するにはTimerとCCPを組み合わせる。
Timersxのxはタイマー番号(2,4,6のいずれか)を示す。
PIC18F46K22ではTimer2/4/6、CCP1/2/3/4/5が同様に使用できる。
PIC18F14K50ではTimer2がCCP1が同様に使用できる。
カウントレジスタ:8bitアップカウント
クロック源:FOSC/4のみ
プリスケーラ: 1 4 16
カウント値とPRxの値が一致した場合、カウンタがクリアされ割り込み発生が可能。PRxで周期を設定。出力がhiになる。
CCPRxLとCCPxCONの4~3ビット目を使用して最大10bitの分解能で設定できる。 カウント値+プリスケーラ2bitが一致した時、出力がlowになる。 OpenTimerxはTCONxの設定を行う。

クロックよりPRxレジスタの設定値の計算例

 JavascriptによりPRxレジスタの値により任意の周波数で周期割り込みを発生させる場合の設定例を計算する
入力 CLK=MHz(FOSC/4)
周波数 周波数(F)=Hz

プリスケーラ(p) 1 4 16
目標周波数
f=1/t
目標分周比
d=CLK/f
分周比(dp=d/p)
PRx=255の時の周波数(Hz)
PRx
出力周波数
誤差(%)
CCPCONx(4~3):CCPxL 最大値
分解能ビット

タイマー設定例(入力条件よりXC8向けソースを表示)

条件入力

Timer= CCPx=
CLK=MHz(FOSC/4)
PRx=
プリスケーラ デューティ比=%

XC8 Cコンパイラ向けのサンプルソース