PIC16F84電子遊戯(19)
最終更新日:2001年4月13日
ミラクルライト特別編(1ページ) (2ページ)へ

ミラクルライト特別編を作ろう
今回はミラクルライトと回路図を同じでソフトを変更して色が徐々に変わるものを作りましょう。題して「ミラクルライト特別編」です。
まずは回路図を見て下さい。SWが付いていないだけでミラクルライトと全く同じです。
(ミラクルライト特別編の回路図)
回路はミラクルライトと同じなので説明はしません。ただソフトの基本も同じにしていますので、SWが付いていたところにはそのまま抵抗を付けておきます。
今回は特別ケースに超高密度実装を行います。マイコンの足に直接部品をハンダ付けして組み込みます。では完成予想(?)写真を見て下さい。
(ミラクルライト特別編の雄姿)
ミラクルライト特別編の基本仕様
特別編として次の基本仕様を考えます。
1)ミラクルライトの色を徐々に切り換えて表示する。その色数はなんと56色!!
今回はこの仕様のみとします。
ミラクルライト特別編のポート割付、方向・初期設定、タイマー割り込み設定
ポート割付、ポート方向設定、ポート初期設定、タイマー割り込み設定はミラクルライトの時と全く同一です。詳しい説明はそちらを参照して下さい。
ミラクルライト特別編のLED制御
各LEDはミラクルライトの時と同じく約200usecの割り込みを基準クロックにしてON/OFFすることによって、輝度を変化させます。各LEDはそれぞれ8つのパターンで点灯させます。
200usecの割り込みを何回カウントするかで、時間を決定します。
モード 点灯0 点灯1 点灯2 点灯3 点灯4 点灯5 点灯6 点灯7
点灯時間 0h 10h 20h 30h 40h 50h 60h 70h
消灯時間 70h 60h 50h 40h 30h 20h 10h 00h
(8パターンの割り込みカウント設定値)
モード 点灯0 点灯1 点灯2 点灯3 点灯4 点灯5 点灯6 点灯7
点灯時間 0ms 3.1ms 6.1ms 9.2ms 12.3ms 15.4ms 18.4ms 21.5m
消灯時間 21.5ms 18.4ms 15.4ms 12.3ms 9.2ms 6.1ms 3.1ms 0ms
(8パターンの設定時間)
点灯・消灯時間を細かく制御して8パターンの輝度を用意しました。
これらの組み合わせで色が徐々に変化していく効果を出しましょう。
LED制御そのものはミラクルライトと全く同じですので、LED設定時間RAM、時間ワークRAM、LED出力イメージRAMも全く同じです。各々のLEDに対するプログラムも同じですので、詳細はミラクルライトの記事を参照下さい。
ミラクルライト特別編の色変更処理
前回のミラクルライトは2バイト分のRAMのうち9bit分を使用して16色の切り換えを行いましたが、今回は2バイトで56色の切り換えを行います。
auto_count1
7 6 5 4 3 2 1 0
色(黒) 色(白) 色(紫) 色(青) 色(水) 色(緑) 色(黄) 色(赤)
(色切り換えRAM)
auto_count2
7 6 5 4 3 2 1 0
輝度(7) 輝度(6) 輝度(5) 輝度(4) 輝度(3) 輝度(2) 輝度(1) 輝度(0)
(色切り換えサブRAM)
色変更ルーチン
led_next		btfss	auto_count2,7
		goto	led_next2
		btfss	auto_count1,7
		goto	led_next3
		movlw	01h
		movwf	auto_count2
		movwf	auto_count1
led_nexte		call	led_set
		return
led_next3		rlf	auto_count1,1
		bcf	auto_count1,0
		movlw	01h
		movwf	auto_count2
		goto	led_nexte
led_next2		rlf	auto_count2,1
		bcf	auto_count2,0
		goto	led_nexte
1)色切り換えサブRAM(auto_count2)の7bit目が「1」か調べて、そうでないときは色切り換えサブRAM(auto_count2)を左回転します。このとき0bit目には「0」を入れます。
2)色切り換えサブRAM(auto_count2)の7bit目が「1」のときは色切り換えRAM(auto_count1)の7bit目が「1」か調べて、そうでないときは色切り換えRAM(auto_count1)を左回転します。このとき0bit目には「0」を入れます。
同時に色切り換えサブRAM(auto_count2)を「1」=輝度(0)にします。
3)色切り換えRAM(auto_count1)の7bit目が「1」のときは色切り換えRAM(auto_count1)を「1」=色(赤)、色切り換えサブRAM(auto_count2)を「1」=輝度(0)にします。
4)上記設定が済めば実際に各LEDの点灯・消灯時間を設定するルーチンに行きます。
ミラクルライト特別編の色仕様
今回のミラクルライト特別編で設定した色を説明します。
  auto_count2  
ビット位置 0 1 2 3 4 5 6 7 変化
auto_count1 R G B R G B R G B R G B R G B R G B R G B R G B  
0 0 0 0 1 0 0 2 0 0 3 0 0 4 0 0 5 0 0 6 0 0 7 0 0 無-赤
1 7 0 0 7 1 0 7 2 0 7 3 0 7 4 0 7 5 0 7 6 0 7 7 0 赤-黄
2 7 7 0 6 7 0 5 7 0 4 7 0 3 7 0 2 7 0 1 7 0 0 7 0 黄-緑
3 0 7 0 0 7 1 0 7 2 0 7 3 0 7 4 0 7 5 0 7 6 0 7 7 緑-水
4 0 7 7 0 6 7 0 5 7 0 4 7 0 3 7 0 2 7 0 1 7 0 0 7 水-青
5 0 0 7 1 0 7 2 0 7 3 0 7 4 0 7 5 0 7 6 0 7 7 0 7 青-紫
6 7 0 7 7 1 7 7 2 7 7 3 7 7 4 7 7 5 7 7 6 7 7 7 7 紫-白
7 7 7 7 6 6 6 5 5 5 4 4 4 3 3 3 2 2 2 1 1 1 0 0 0 白-無
(56色設定内容)
実際の処理については余にも長い(私が未熟?)のであとでソースをじっくり見て下さい。
ミラクルライト特別編の色変化時間処理
ビット数 カウント数 時間
13bit 8192 1572msec 1.6秒
(カウント数と時間)
ミラクルライトと同様の処理で色を切り換える時間を決めます。
ミラクルライトの時と同じ2バイトのRAMを用意して割り込みごとにカウントUPします。
色を変化するタイミングはこのRAMの指定する位置にビットが立ったかで判断します。
特別編では約1.6秒ごとに色(輝度)が変化します。
色変化時間処理
		movlw	01h
		addwf	auto_sub,1
		btfsc	STATUS,0
		incf	auto_sub2
		btfss	auto_sub2,5
		goto	red_leds
		call	led_next
		movlw	00h
		movwf	auto_sub
		movwf	auto_sub2
		;-----------------------
red_leds
1)オート時間カウント1(auto_sub)をインクリメントする。桁が繰り上がる時はオート時間カウント2(auto_sub2)をインクリメントします。
2)オート時間カウント2(auto_sub2)の5bit目が「1」か調べる。「1」でなかったら次の処理へ行く。「1」だったら各LEDの点灯・消灯時間を設定するルーチンへ飛びます。
3)オート時間カウント1(auto_sub)、オート時間カウント2(auto_sub2)をリセットします。
ということで、今回はこのあたりまでにしておきます。
次回はいきなり完成します。それでは、お楽しみに。
今後も「PIC16F84電子遊戯」をよろしくです。
この続きは(2ページ)へ

不明点などあればメールお願いいたします。nonchansoft@nifty.com