Notes to self: PIC arduino

PIC,arduinoなど電子工作の備忘録

PIC16F84による赤外線送信回路について

2014年07月11日 | PICマイコン

 

図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

 





最新の画像もっと見る