R8C/1BでPWM
概要
タイマZのプログラマブル波形発生モードと、タイマCのアウトプットコンペアモードが使えるようだ。つまり、2個PWMを吐ける。ついでに、アウトプットコンペアモードは逆位相の出力も可能。
タイマZ: プログラマブル波形発生モード
2つのリロードレジスタの値を、カウンタに交互にリロードし、アンダーフローするたびに出力を反転させるモード。リロードレジスタ(8bit)の値の偏りによって、PWM出来る。
関係するレジスタの使用するビット
-
TZMR: タイマZモードレジスタ
カウント開始,終了と、モードの設定に使う。
bit4-5(TZMOD0-1): モード選択(01でプログラマブル波形出力)
bit7(TZS): タイマZカウント開始フラグ
-
PREZ, TZSC, TZPR: それぞれ、プリスケーラ,タイマZ{セカンダリ,プライマリ}レジスタ
セカンダリ,プライマリレジスタでHIGH, LOWの時間を設定でき、プリスケーラでその時間を何倍にするか設定する。
例: PREZ=3, TZSC=4, TZPR=2 なら、セカンダリ期間は12クロック, プライマリ期間は6クロック。
-
TZOC: タイマZ出力制御レジスタ
ポートを波形出力に使うように設定するために使用。
bit2(TZOCNT): 0にするとP1_3が波形出力になる
-
PUM: タイマZ波形出力制御レジスタ
プライマリ期間とセカンダリ期間、どちらで出力をHIGHにするか選択する。
bit5(TZOPL): 0だとプライマリ期間だけHighになる。1だと逆。
-
TCSS: タイマカウントソース選択レジスタ
タイマのカウントソース(=何をカウントするか)を選択する。つまり、どのクロックをPWMの出力に使うかが決まる。タイマXと共有ているので注意。
bit4-5(TZCK0-1): カウントソースの選択{f1,f8,タイマXアンダフロー,f2}
こんな感じ
tzmr = 0b01010000; //プログラマブル波形発生モードにする
tzoc = 0b00000000; //P1_3の出力をプログラマブル波形出力に。
pum = 0b00000000; //プライマリ期間にHigh出力
tcss = 0b00000000; //カウントソースはf1=システムクロックの分周なし
prez = 0; //プリスケーラの値0 = カウントソースを分周せず使用
tzsc = 4; //セカンダリ期間4クロック
tzpr = 8; //プライマリ期間は8クロック
tzmr = 0b11010000; //カウント開始:波形出力開始
この例では、プライマリ期間でHigh, プライマリ期間がセカンダリ期間の2倍なので、66.6666...%のPWMが出る。はず。
タイマC: アウトプットコンペアモード
タイマCのアウトプットコンペアモードを使ってもPWMできます。
アウトプットコンペアモードは、16bitのカウンタ1つと、2個のコンペアレジスタを使って、一定のペースでカウントアップするカウンタの値がコンペアレジスタと一致したときにポートをHIGHとかLOWに変化させる事ができます。
関係するレジスタ
-
TCC0: タイマC制御レジスタ0
カウントソースの選択と、タイマの開始/停止制御
bit0: カウント開始ビット(1でカウント開始)
bit1-2: カウントソース選択{f1,f8,f32,fRING-fast}
-
TCC1: タイマC制御レジスタ1
bit2: 1にするとコンペア1一致時にカウンタリセット(PWMの周期がコンペア1になる)
bit3: アウトプットコンペアモードでは1
bit4-5: コンペア0一致時に{なにもしない,出力反転,Low出力,High出力}
bit6-7: コンペア1一致時に{なにもしない,出力反転,Low出力,High出力}
-
TCOUT: タイマC出力制御レジスタ
bit0-2: CMP0_0-2出力許可ビット(1だと許可)
bit3-5: CMP1_0-2出力許可ビット(1だと許可)
bit6: CMP0出力は、反転出力(1だと反転)
bit7: CMP1出力は、反転出力(1だと反転)
-
TM0,1: コンペア0,1レジスタ
タイマCとの比較値。一致時にTCC1で設定したことが起こる。
TM0はTCC1のbit3が1の時のみ書き込める。
-
P1,3: 対応するポートのポートレジスタ
対応するピンの出力をHighにしておかないとなぜか動かない。そう言う仕様。
こんなかんじ
tcc0 = 0b10000000;
tcc1 = 0b11101100;
tcout = 0b00000001;
tm0 = 4;
tm1 = 8;
p1_0 = 1;
tcc0 = 0b10000001;
p1_0の出力は8クロック周期の、High幅4 = 50%のPWM