テレビや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 件のコメント:
コメントを投稿