78K0班(2005/08/27) PWM

LEDマトリクスの表示輝度を、PWMで制御してみます。


これまでLEDマトリクスのSTROBE端子をLowに固定していました。この端子はLowにすると点灯すべきLEDが点灯し、HighにするとLEDマトリクスが全消灯します。このHigh/Lowの比率をPWMで変えることで、表示する輝度を変化させてみます。

PWMには8ビットタイマのH0を使うことにします。タイマ出力(TOH0)端子をSTROBEにつなぎます。いったん設定を行えば、後は自動的にPWM動作を行うので、割込みハンドラ等もいらず楽ちんです。TOH0はポート1のbit5と端子を共有しているので、タイマH0だけでなくポート1の設定も行う必要があります。

マイコン基板のDIPスイッチ(ポート4)を読み出して、PWMの比率を決めています。

void main()
{
        h_initial();

        P7 = 0x10;

        TCL50 = 0x04;
        CR50  = 4;
        TMC50 = 0;
        TMIF50 = 0;
        TMMK50 = 0;
        TMPR50 = 1;

        TMHMD0 = 0x0b;

        P1.5 = 0;
        PM1.5 = 0;

        CMP00 = 255;
        CMP10 = 250;
        TOLEV0 = 1;
        TMHE0 = 1;

        EI();

        TCE50 = 1;
        for (;;) {
                CMP10 = P4 & 0xe0;
                time_wait();
        }
}

このプログラムも特殊なことは行っておらず、NECのサイトで公開されているサンプルプログラムの使用法説明書とほぼ同じになっています。

と言いながら、CMP10を設定するつもりで、誤ってCMP01の設定を行っており、なかなか気づかず苦労したのでした。


ホーム 特殊工作室 78K0班