Pic12C509使用赤外線リモコン受信器


概略

  テレビ及びビデオ用赤外線リモコンの送信器から送信される、コードを判定し制御
  端子を、on、off、及び反転することが出来ます。
  家電製品協会ホーマットに準拠している送信器であれば、殆ど動作可能にしてあり
  ます、当方でソニー製マルチリモコン送信器で確認を行ったメーカーは、松下、日
  立、東芝、NEC、サンヨー、ビクター、パイオニアのテレビリモコンが動作しま
  した、ソニー、三菱、シャープはホーマットが少し違うため動作しません。ただし
  動作したメーカーの純正リモコンで確認はしていません。また、一つのメーカーの
  リモコンにもホーマットに幾つかの種類が有るため、必ずうまく動作するとは限り
  ません。




  Pic12c509にしていますが、プログラムステップが半分の12c508で
  かまいません。ただし、コードを学習記憶する機能は有りませんからソースプログ
  ラムに受信判定のコードを記述する必要が有るため、リモコン送信器を変える場合
  は、ソースプログラムを変更しなければなりません。その為コード解析器が無いと
  変更が出来ません。


回路図

  サンプルプログラムでは、日立製のテレビリモコンのチャンネルUPKeyと音量
  UPkeyを受信して2ch の出力端子をトグル動作を行うように書いて有ります。
  日立製のリモコンコードにしたのは、リモコンパルスの時間が比較的長く判定がし
  やすく安定動作が期待出来そうだったからです。ただし、日立製のテレビリモコン
  に2種類有るようなので注意が必要です。
   コンフィグレーションレジスタの設定で、MCLRは内部Vcc接続、OSCは内
  部RC発信器でテストを行ってあります。
  一応内部クロックで動かす事を考えて、エラーチェックを甘くしてありますが、
  温度変化に対する安定性を考えると4MHzのセラロックにしたほうが良いと思
   います。


変更方法

   使用目的に合わせて変更を行う場合は、ソースファイルの4カ所の ;*****  で囲
  まれた部分を変更します。なお、変更箇所はソースファイルの先頭部分にまとめて
  有ります。


 1・リモコン受信コード設定

    リモコンのコードを調べて、コード解析器の表示した16進コードに書き替えます
  サンプルでは2個しか使用していませんが最大3個まで出来ます。ソースファイル
  の10行目からの以下の部分を変更します。

;-----------------------------------------------------------
; --- リモコン受信コード設定 ---
; ********************************

vr_code0_0	equ	0x50		; _code0 最上位(コード解読機の左端)
vr_code0_1	equ	0xaf
vr_code0_2	equ	0x12
vr_code0_3	equ	0xed

vr_code1_0	equ	0x50		; _code1 最上位(コード解読機の左端)
vr_code1_1	equ	0xaf
vr_code1_2	equ	0x19
vr_code1_3	equ	0xe6

vr_code2_0	equ	0xff		; _code2 最上位(コード解読機の左端)
vr_code2_1	equ	0xff
vr_code2_2	equ	0xff
vr_code2_3	equ	0xff

; ********************************




 2・出力ピンの変更及び追加

  出力ピンを変更、追加を行う場合はその宣言と初期化を行う必要が有ります。
  サンプルプログラムでは、GPIO−0を赤外線センサーの入力、GPIO−1と
  2をリモコン出力にしてあります。そうして初期化プログラムで電源をonした時
  に、Highになるようにしてあります。
  Vccと出力ピンの間にホトリレー(SSR)を接続しAC電源を制御するように
  予定で、リモコン受信器の電源をonした時に負荷がoffになるようにしてあり
  ます、もし負荷として照明器具をしようするので有れば負荷がonになるようにし
  ておくほうが良いと思います。そうしないとリモコン送信器が壊れた時に照明を点
  灯する事が出来なくなります。それには、GNDと出力ピンの間にSSRを接続す
  るか、初期化プログラムを変更します。ソースファイルの40行目からの以下の部
  分を変更します。


;---------------------------------------------------------------
;      入出力ポートの宣言と初期化      
;---------------------------------------

;	_gpio: gpioポートの操作するビット名設定    注意 ( gp-3 は入力のみ)
; ********************************

_Rcnin		equ	0		; リモコン入力(このラベル名の変更禁止)
_out0		equ	1		; リモコン出力0
_out1		equ	2		; リモコン出力1

; ********************************



; --- 入出力ポートの初期化( gp-0,1,3 プルアップ済み ) ----
set_gpio:	macro
; ********************************

	movlw	b'00001001'		; gp-0,3(in)   gp-1,2,4,5(out)
	tris	_gpio
	movlw	b'00000110'		; gp-1,2(High)
	movwf	_gpio

; ********************************
		endm




 3・出力動作の変更

  コード照合して合致した場合は _code0 であれば、_buff1 レジスタの bit0 がH
  ighになります、また _code1 であれば、_buff1 レジスタの bit1 がHigh
  になります、また _code2 であれば、_buff1 レジスタの bit2 がHighになり
  ますから、それらのビットをチェックして出力ピンを制御するプログラムを作成し
  てください。サンプルはトグル動作を行います。ソースファイルの77行目からの
  以下の部分です。


;------------------------------------------------------------------------
;         ***       コード照合した時の出力制御     *******
; _buff1のbit0(_code0)とbit1(_code1)とbit2(_code2)が受信したデータで 
;  1 になります。メモリーは_buff2,_count1,_count2 は自由に使用できます
;------------------------------------------------------------------------

out_control:	macro
; ********************************

	btfss	_buff1,_code0		; コード0が1だとスキップ
	goto	o_cont_10
	btfss	_gpio,_out0		; _out0 が1だとスキップ
	goto	o_cont_01
	bcf	_gpio,_out0		; _out0 を0にする
	goto	o_cont_end
o_cont_01:
	bsf	_gpio,_out0		; _out0 を1にする
	goto	o_cont_end

o_cont_10:
	btfss	_buff1,_code1		; コード1が1だとスキップ
	goto	o_cont_end
	btfss	_gpio,_out1		; _out1 が1だとスキップ
	goto	o_cont_11
	bcf	_gpio,_out1		; _out1 を0にする
	goto	o_cont_end
o_cont_11:
	bsf	_gpio,_out1		; _out1 を1にする
o_cont_end:				; マクロにしたため必要になります。
	nop				; こうすると本体と独立できます

; ********************************
		endm




参考文献

	トランジスタ技術 1998年12月号


最後に

  疑問点等があればメールをください。出来る限りお答えするようにします。

  このプログラムは、フリーウェアーなので、自由に配布可能です。
  使用者自身の責任でご使用下さい。

  「このソフトによってどのような損害が出ても私は責任を負いかねます。」




* 赤外線リモコン受信器ソースファイル*−−p-rcn52.lzh ( 約13kByt )
ファイル内容

	picrcn52.asm		ソースファイル
	picrcn52.hex		Hexファイル
	picrcn52.gif		回路図
	readme.txt		説明



バージョン履歴


     Ver5.0B		99/11/03
	gp-3 が入力のみにもかかわらず出力設定になっていたのを修正(未チェック)

     Ver5.0A
	スタートバージョン







戻る