明るさを変えてみる。

今まではクロックをカウンタに放り込んでそのままLEDに出力してましたが、これをPWMにしてデューティを変えてやったら輝度を調整できるんじゃないか、などという悪魔だか天使だかのささやきが。

テレビや8mmフィルムなどの映像では、昔から24Hzでコマが切り替わるようになっていました。そのくらいの速度であれば、脳がコマの切り替わりを認識できずに連続した映像だと錯覚するということなんですが、CRTの短残光モニタだと60Hzでは蛍光灯の周波数と干渉してちらつきがでたりするので、75Hz以上が普通にありました。LCDだと現在は60Hzくらいが普通です。

となると、100Hz程度あれば、フリッカーに気づかれずに細かい点滅ができるかもしれません。

100Hzだと、1周期は10msec。今回は1msecクロックを作っていますから、0msec(消灯)から10msec(点灯)までの間を1msecごとに区切れば、輝度を制御できるかもしれません。


// LED1
always @ (posedge c1kout or negedge reset) begin
    if (reset == 0)
    begin
        _out1 <= 0;
        count1 <= 0;
    end else
    if (count1 < 100 - 1)
    begin
        count1 <= count1 + 1;
    end
    else begin
        count1 <= 0;
        _out1 <= ~_out1;
    end
end

上はLED1の点滅回路部分です。
ここで周期を10msec固定にし、ON時間を0msecから10msecの間に設定できるようにレジスタを作れば、なんとなくできそうな気がします。


    reg [15:0] duty1 = 1;

// LED1
always @ (posedge c1kout or negedge reset) begin
    if (reset == 0)
    begin
        _out1 <= 0;
        count1 <= 0;
    end else
    if (count1 < 10 - 1) // 10msec周期
    begin
        count1 <= count1 + 1;
        if (count1 < duty1) // デューティ時間はONする
            _out1 <= 1;
        else
            _out1 <= 0;
    end
    else
    begin
        count1 <= 0;
    end
end

こんな感じにしてみました。
同じコトを他の7個のLEDにも行って、いざプログラム。


……。

微妙に明るさが変わっていっているのはわかりますが、あまり違いがわかりません。

なにか間違ったかなぁ。
このまま突き進んでも意味がないので、ちょっと頭を冷やしてシミュレーションしてみましょう。

0 件のコメント:

コメントを投稿

Vimの補完プラグインをインストール。その4

Vimの補完プラグインをインストール。その3 で、 ddc-tabnine が使えそうです、などと書いたのですが、早速やってみました。 まず、tabnineのバイナリを用意しないといけません。がどうにもTabNineのサイトがわかりにくいので、 tabnine-nvim にあるダ...