目次>5章 第2ステップ(色々な実験)>(3)LEDの明るさを序所に変える
LEDの明るさを序所に変える
更新日2005.9.5
「
(1)LEDを点滅させる」を改造して、緑のLEDの明るさを序所に変えるプログラムを作ってみます。
実験回路
|
| 実験回路は今まで使っていたものをそのまま使用します。
ただし、今回は緑のLED(RB0)のみ使用します。
|
LEDの明るさを変えるには
|
| LEDは非常に高速にON(点灯)/OFF(消灯)できると言う特徴があります。
そして、人間の目には残像現象と言う特性があります。
この2つを組み合わせる事で、明るさが変わったように見せかけます。
具体的には、以下の図のようになります。
明るい |
| 暗い |
|
- オンとオフの時間の割合を変えることで明るさを変化できます。
- ・オンの割合が大きい ・・ 明るい
- ・オフの割合が大きい ・・ 暗い
LEDの明るさを序所に変えるには(PWM方式)
| | オンとオフの割合を序所に変えることで明るさを変化させます。
とは言っても、アナログ的に変えることはできませんので、以下のように特定のパターンを繰り返すことになります。
(1)明るい |
| | ↓
| (2)薄明るい |
| | ↓
| (3)中間 |
| | ↓
| (4)薄暗い |
| | ↓
| (5)暗い |
|
このようにパルスの幅を変える方式を、PWM(Pulse Width Modulation:パルス幅変調)と言います。
では、プログラムをどのように作成すれば良いでしょう?
プログラムでは、次のようにON/OFFの時間を制御します。
-
1サイクルを12mSとし、
ON/OFFの判断は0.4mS毎に行います。
ここで言う「サイクル」は、1命令を実行するサイクルでは無く、一般的なサイクル(ONになる所から次にONになるまで)です。
この制御のために以下の3つのカウンタを使用します。
カウンタ | カウンタの用途
| t_cycle | 1サイクルをカウントする(0〜30) 0.4mS毎に+1し、30になったら0に戻す 0に戻す時にRB0をONにする
| t_width | RB0をONにしている時間(0〜30) 値が大きい程明るくなる t_cycleが0に戻る時+1し、30になったら0に戻す
| t_count | 0.4mS毎に+1し、t_widthと等しくなったらRB0をOFFにする t_cycleが0に戻る時、t_countも0にする
|
プログラムのフローは以下の通りです。
0.4mS待つには、LEDを点滅させるで作成した、「0.4mS待つ」サブルーチンを使用します。
| プログラム全体
| | 上記の処理を組み込んだプログラムはこちらです。
メモ帳などのテキストエディタに取り込んで、LED4.ASMという名で保存し、MPLABでアセンブル&PICライタでPICに書き込んで動かしてみて下さい。
仕様通りに動作しましたか?
|
|