RL78/G13でPWM出力を出してみる

インターバル・タイマーの次は、PWM出力。

少し悩んだのは、少し構成が複雑になるので、どのようなAPIにするのが良いのか
・・・

RL78では、PWMを使う場合、マスターと、スレーブの2つのチャネルを組み合
わせる必要がある点が、少し厄介な為で、結局、PWMの設定関数は、テンプレート
関数とした、テンプレートの引数は、マスターチャネルのTAUを使う。

typedef device::tau_io<device::TAU00> master;
master master_;
device::tau_io pwm1_;
device::tau_io pwm2_;

bool init_pwm_()
{
    uint8_t intr_level = 0;
    if(!master_.start_interval(100000, intr_level)) {
        return false;
    }
    if(!pwm1_.start_pwm<master::tau_type>(0, intr_level)) {
        return false;
		}
    if(!pwm2_.start_pwm<master::tau_type>(0, intr_level)) {
        return false;
    }
    return true;
}

このサンプルでは、TAU01、TAU02をそれぞれPWM出力としている。
PWMの周期は、TAU0を使い、サンプルでは、100KHzとしている。
「TAU01」は、TO01(P16)40番ピン
「TAU02」は、TO02(P17)39番ピン

    auto val = master_.get_value();  // マスターチャネルのカウント最大値
    pwm1_.set_value(val / 4);  // PWM Duty 25%
    pwm2_.set_value(val * 3 / 4);  // PWM Duty 75%

サンプルでは、それぞれ、25%と75%のディーティーとしている。

IMG_0812s

PWMサンプル