R8C/1BでPWM


概要

タイマZのプログラマブル波形発生モードと、タイマCのアウトプットコンペアモードが使えるようだ。つまり、2個PWMを吐ける。ついでに、アウトプットコンペアモードは逆位相の出力も可能。

タイマZ: プログラマブル波形発生モード

2つのリロードレジスタの値を、カウンタに交互にリロードし、アンダーフローするたびに出力を反転させるモード。リロードレジスタ(8bit)の値の偏りによって、PWM出来る。
関係するレジスタの使用するビット
こんな感じ
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 = 0b10000000;
tcc1 = 0b11101100;
tcout = 0b00000001;
tm0 = 4;
tm1 = 8;
p1_0 = 1;
tcc0 = 0b10000001;
    
p1_0の出力は8クロック周期の、High幅4 = 50%のPWM