図1、赤外線LED:TLN108(左)と赤外線受光モジュール:PL-IRM2121(右)
今回行う赤外線通信の方法は、IrDAなどの規格に沿ったものでなくテレビのリモコンなどの簡素なものである.
赤外線LEDは、発光波長950nmで近赤外線を発光する。ちなみに人間の可 視光は約380nm~約780nmであるため発光を肉眼で確認することはできない.一方、赤外線受信モジュールのほうはキャリア周波数38kHzで点滅する波長950nmの赤外線に反応するように作られている。
赤外線LEDを38KHzのキャリア周波数で600μSの間点滅させたり消灯させたりすることにより赤外線受信モジュールにビットデータを送信させることができる。またビット情報は、アクティブロウのため反転受信する。
下図は送信波形と受信波形のビットイメージ図。
送受信フレームについて
1 ビットと0ビットを送信する仕組みは前述の通りだが、これを12ビットひと塊のフレームとして送信することにより、受信側のデバイスを効率よく制 御する.まず先頭のスタートビット1ビットについては、データの最初を示している.次にデバイスコードの2ビットについては受信側の機器を識別制御するた めのビット列である.今回は01の固定であるが、2ビットあるため4台の受信機をコントロールできる.次にスイッチコード4ビットについては0000から 1111まで16通りのスイッチ操作が可能であるため、LEDの点滅やモータの回転制御などに割り当てる.
最後のストップビットについては受信側でデータが一致しているかどうかの確認に使用する.一致していれば正しくデータの送受信がおこなわれたと判断し次の処理に移る. また、一致しなかった場合送受信が失敗と判断し、一連の処理を破棄し再びスタートビットの到着を待つ.
リモコン送信プログラムフローチャート
赤外線送信のテストプログラムを作成する.
ボタン1を押すとスイッチコード0001をボタン2を押すとスイッチコード0010を送信するアセンブラプログラムを作成する.以下はそのフローチャート.
赤外線送信アセンブラプログラム
上記フローチャートに基づく、スイッチコード0001と0010をボタン押下による送信プログラムを掲載する.
;*****************************
; 赤外線送信テストプログラム
;*****************************
LIST P=PIC16F84;
INCLUDE P16F84.INC;
MEM_1 EQU 0CH
MEM_2 EQU 0DH
MEM_3 EQU 0EH
MEM_4 EQU 0FH
MEM_5 EQU 010H
ORG 0
GOTO START
;*****************************
;メインルーチン
;*****************************
START
BSF STATUS,RP0
CLRF TRISA
MOVLW 07FH
MOVWF TRISB
BCF OPTION_REG,7
BCF STATUS,RP0
LOOP
BTFSS PORTB,1
GOTO Bit0001
BTFSS PORTB,2
GOTO Bit0010
GOTO LOOP
;*****************************
; 送信ビット列 1 01 0001 10101
;*****************************
Bit0001
CALL Bit1
CALL Bit0
CALL Bit1
CALL Bit0
CALL Bit0
CALL Bit0
CALL Bit1
CALL Bit1
CALL Bit0
CALL Bit1
CALL Bit0
CALL Bit1
CALL TIM20
GOTO LOOP
;*****************************
; 送信ビット列 1 01 0010 10101
;*****************************
Bit0010
CALL Bit1
CALL Bit0
CALL Bit1
CALL Bit0
CALL Bit0
CALL Bit1
CALL Bit0
CALL Bit1
CALL Bit0
CALL Bit1
CALL Bit0
CALL Bit1
CALL TIM20
GOTO LOOP
;*****************************
; 0 ビットを作る
;*****************************
Bit0
MOVLW 0FH
MOVWF PORTA
MOVLW 030H
MOVWF MEM_4
LOOP1 CALL TIM011
DECFSZ MEM_4,F
GOTO LOOP1
RETURN
;*****************************
; 1 ビットを作る
;*****************************
Bit1
MOVLW 017H
MOVWF MEM_5
LOOP2 CLRF PORTA
CALL TIM011
MOVLW 0FH
MOVWF PORTA
CALL TIM011
DECFSZ MEM_5
GOTO LOOP2
RETURN
;*****************************
;11μsを作る (クロック周波数 10MHzの場合)
;*****************************
TIM011
MOVLW 08H
MOVWF MEM_1
NOP
TIMLP1 DECFSZ MEM_1,F
GOTO TIMLP1
RETURN
;*****************************
;0.4msを作る (クロック周波数 10MHzの場合)
;*****************************
TIM04
MOVLW 0F9H
MOVWF MEM_2
TIMLP2 NOP
DECFSZ MEM_2,F
GOTO TIMLP2
RETURN
;*****************************
;20msを作る (クロック周波数 10MHzの場合)
;*****************************
TIM20
MOVLW 032H
MOVWF MEM_3
TIMLP3 CALL TIM04
DECFSZ MEM_3,F
GOTO TIMLP3
RETURN
END