PIC16F84電子遊戯(34) |
最終更新日:2001年7月28日 |
携帯着信ランプ(1ページ)へ (2ページ)へ (3ページ) (4ページ)へ |
|
携帯着信ランプのミラクルライト部のケースへの取り付け |
さてミラクルライト部が完成したら、ケース本体に取り付けます。
私はケースからマイクスタンドのように取り付けてみました。
ミラクルライトの軸は銅線が入っているので、フレキシブルに曲げることが可能ですので、その自由な曲げに対応出来るように、ケースにはしっかり取り付けましょう。 |
|
|
いかがでしょうか。結構しっかりと取り付けることができました。
要所は2液の透明エポキシ接着剤で補強しておきましょう。
ライト部はLEDの光が漏れないようにアクリル系塗料で黒く塗っておくと完成した後、LED表示が綺麗に見えます。 |
携帯着信ランプの完成の姿 |
まずは完成した姿を見て下さい。コンパクトなケースにまとめてみました。
皆さんも自由な発想で組み込んで下さい。レモンスカッシュのオブジェがカワイイですね。 |
|
|
LEDの電流制限用の抵抗は後で調整しやすいように、ミラクルライト部の根元の部分に配置しました。 |
携帯着信ランプの割り込み処理 |
今回の着信ランプは2種類の割り込みを使用します。
従来から使用しているタイマー割り込みと今回新しくRB4−7の状態変化割り込みを使用します。実際にはRB6,RB7を入力ポートにして割り込み入力にします。 |
main_sleep
bcf INTCON,GIE
nop
bcf INTCON,T0IE
nop
bcf INTCON,T0IF
nop
bcf INTCON,RBIF
nop
bsf INTCON,RBIE
nop
call icnt_clear
movlw 0c0h
movwf PORTB
nop
sleep
nop
bcf INTCON,RBIE
nop
call icnt_clear
bsf INTCON,GIE
nop
bsf INTCON,T0IE
nop
main_loop
;-------------------------------------- led tentou
movf led_data,0
iorlw 0c0h
movwf PORTB
;--------------------------------------
btfss int_count2,7
goto main_loop
goto main_sleep
|
では実際のソースを見ながら説明します。
まず初期設定が終わると上記の main_sleep
のところに処理が来ます。
ここで全体の割り込み許可フラグ(GIE)を禁止します。こうすると割り込みが掛かっても割り込みアドレスに飛ばなくなります。
その後にタイマー割り込み(T0IE/T0IF)を禁止します。
次にRB割り込み(RBIF/RBIE)を許可します。
さらにタイマー割り込みカウンタをクリアします。(後で説明します。)
PORTBの設定をLED全て消灯にして、SLEEPモード(低消費電力モード)にして割り込みを待ち続けます。(処理的にはここでストップします。)
割り込みが設定されているのはRB割り込みですので、今回の製作の場合RB6かRB7の入力ポートが変化すればSLEEPから起き上がり、次の命令に進みます。
最初にRB割り込みを禁止して、RBポートの変化に対して割り込みが掛からないようにします。タイマー割り込みカウンタをクリアします。
次にGIE割り込みを許可して割り込みが入ると割り込みアドレスに飛ぶようにします。
さらにタイマー割り込み(T0IE/T0IF)を許可します。
メインループではLEDの点灯処理をします。
タイマー割り込みカウンタが一定値を超えるまでメインループでLEDを点灯させます。
一定値を超えれば再びSLEEPモードに入る処理に飛びます。
いかがですか、ややこしいですが、メインやっていることは簡単です。
後はタイマー割り込み処理内で色々しています。
このタイマー割り込み内の処理も基本は以前の製作の「ミラクルライト」と同じです。
以降は「ミラクルライト」の製作と違っている部分を中心に説明します。 |
携帯着信ランプのタイマー割り込み処理 |
タイマー割り込み処理ではLEDの色が順次変化する処理をしています。
(これは「ミラクルライト」の製作記事を見て下さいね。)
ここではもうひとつの処理をしています。
着信センサーの出力でRB7割り込みが掛かりSLEEPモードから起き上がったら一定時間だけLEDを点滅したいものです。今回は約6秒間LEDを点滅します。
この6秒をカウントするのにタイマー割り込みに何回入ったかでカウントします。 |
int_count2 |
int_count1 |
タイマー割り込み時間カウント2 |
タイマー割り込み時間カウント1 |
|
このカウントに上記の2バイトを用意しました。
このカウント値を調べれば時間の経過を知ることが出来ます。
あまり詳細な時間をチェックすると大変なので、各ビットが「1」かどうかを調べることにより時間を判断します。
各ビットが「1」になるカウント値と時間は次のようになります。 |
ビット数 |
カウント数 |
時間 |
11bit |
2048 |
393msec |
0.4秒 |
12bit |
4096 |
786msec |
0.8秒 |
13bit |
8192 |
1572msec |
1.6秒 |
14bit |
16384 |
3145msec |
3.1秒 |
15bit |
32768 |
6291msec |
6.3秒 |
|
タイマー割り込み時間カウントの15bit目が「1」になれば約6.3秒の時間が経過したことになります。(チェックビットはint_count2,7になります。) |
携帯着信ランプの色仕様 |
前回の「ミラクルライト」ではLEDの色を変えるのに、かなり強引な処理をしていました。
今回は「マトリックス」で使った retlw
命令を使用してLEDのデータをセットすることにします。
まず、LEDの色の種類を決めるRAMを用意します。 |
|
このLED色番号を順次変化させながら
retlw
命令でLEDを駆動するデータを読み出しながら色を変化させます。初期値として10hを設定しこれを順にデクリメントすることにより色を変化させます。デクリメント後「0」になれば一巡したとして初期値に戻します。 |
led_change decf color_count,1
btfsc STATUS,2
goto led_change2
return
led_change2 movlw 10h
movwf color_count
return
|
このLED番号を基にLEDにデータをセットするルーチンです。 |
led_set call set_on_red
movwf red_on
call set_off_red
movwf red_off
call set_on_green
movwf green_on
call set_off_green
movwf green_off
call set_on_blue
movwf blue_on
call set_off_blue
movwf blue_off
return
|
次はこのLED色番号によるLEDのデータの読み出し部のソースです。
例として赤色LEDの点灯データをセットする場合を示します。 |
set_on_red movf color_count,0
movwf taihi
movlw low(red_on_table)
addwf taihi,1
movlw high(red_on_table)
movwf PCLATH
addcf PCLATH,1
movf taihi,0
movwf PCL
red_on_table retlw 70h
retlw 20h
retlw 00h
retlw 20h
retlw 00h
retlw 20h
retlw 00h
retlw 20h
retlw 70h
retlw 70h
retlw 70h
retlw 70h
retlw 00h
retlw 70h
retlw 00h
retlw 00h
retlw 70h
|
色の変化の詳細は前回の「ミラクルライト」と同じですが、今一度示しておきます。 |
color_count |
色 |
赤 |
緑 |
青 |
16 |
赤色 |
◎ |
× |
× |
15 |
緑色 |
× |
◎ |
× |
14 |
青色 |
× |
× |
◎ |
13 |
黄色 |
◎ |
◎ |
× |
12 |
水色 |
× |
◎ |
◎ |
11 |
紫色 |
◎ |
× |
◎ |
10 |
白色 |
◎ |
◎ |
◎ |
9 |
橙色 |
◎ |
△ |
× |
8 |
桃色 |
◎ |
× |
△ |
7 |
黄緑色 |
△ |
◎ |
× |
6 |
水緑色 |
× |
◎ |
△ |
5 |
青紫色 |
△ |
× |
◎ |
4 |
薄青色 |
× |
△ |
◎ |
3 |
深黄色 |
△ |
△ |
× |
2 |
深水色 |
× |
△ |
△ |
1 |
深紫色 |
△ |
× |
△ |
|
(◎=全灯、△=半灯、×=消灯) |
それぞれのLEDに対して、全灯、半灯、消灯の設定を行います。 |
モード |
LED全灯 |
LED半灯 |
LED消灯 |
点灯時間 |
70h |
20h |
0h |
消灯時間 |
0h |
50h |
70h |
|
ということで、今回はこの辺で締めましょう。次回は全ソースリスト大公開です。
これからも益々面白くなる「PIC16F84電子遊戯」をよろしくお願いいたします。 |
|
不明点などあればメールお願いいたします。nonchansoft@nifty.com |
|
Copyright(c)2000-2001
nonchansoft |