目次>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に書き込んで動かしてみて下さい。
	仕様通りに動作しましたか? 
  |    
  |