2010年8月29日日曜日

PAV-MP1再生停止の赤外線信号をつくる


上が付属リモコンの再生停止ボタンの信号。
下が本日の成果。
何とか停止させることができしました。

あとはACC電源をモニタして主電源を遅延してOFFする部分を作らないといけないな。

試行錯誤で疲れました。
またそのうちに続きをやります。
誰か、まともなハードとソフトを作ってくれないかなぁ・・・・。
て、イウかプリンストンさん、なんとかしてよ~。
参考にしたというか、ソースの主要部分をいただきました。
http://www.picfun.com/equipj31.html
ありがとうございます。

とりあえずの汚いソースメモ。

;******************************************************************:
; This program is installed in the RFID transimitter.
; 37.9kHz modulated IrDa
; This program is installed in the PIC which drives with 4MHz clock.
;******************************************************************
;
LIST P=PIC16F84A
INCLUDE "P16F84A.INC"
;*******************************************
; Define variables
;*******************************************
SDATA EQU 0CH ;Send data
CNT1 EQU 0EH ;Counter
CNT2 EQU 0FH ;Counter
CNT3 EQU 10H ;Counter
BITCNT EQU 11H ;Bit counter
WCNT EQU 12H ;counter for 37.9kHz
W6CNT EQU 13H ;counter for 600usec
WORK EQU 14H ;work area

;*******************************************
; Jump vector
;*******************************************
ORG 0 ;reset
GOTO MAIN
ORG 4 ;interrupt(not use)
GOTO MAIN

ORG 8
;*******************************************
; MAIN routine
;*******************************************
MAIN
BCF INTCON,GIE ;Inhibit interrupt
CALL PORT_INI ;initialize
;******* main loop **********
LOOP
CALL SCAN ;key scan and return key code
CALL LEED ;send leed phase
CALL SEND ;send data
CALL SEND ;send same data twice
CALL WAIT ;300MSEC timer start
GOTO LOOP ;endless loop

;*******************************************
;************ Subroutines ****************
;*******************************************

;*******************************************
;**** send leed phase ****
;*******************************************
LEED
MOVLW 10 ;reset bit counter
MOVWF BITCNT
LDLP
CALL BIT1 ;send 1 data
DECFSZ BITCNT,F ;test end
GOTO LDLP ;continue

MOVLW 7 ;reset bit counter
MOVWF BITCNT
LDLP2
CALL BIT0 ;send 1 data
DECFSZ BITCNT,F ;test end
GOTO LDLP2

CALL BIT1
RETURN

;*******************************************
;**** send data PAV-MP1 stop ****
;*******************************************
SEND
CALL SEND0
CALL SEND1
CALL SEND0
CALL SEND0
CALL SEND0
CALL SEND0
CALL SEND0
CALL SEND0
CALL SEND1
CALL SEND0
CALL SEND1
CALL SEND1
CALL SEND1
CALL SEND1
CALL SEND1
CALL SEND1
CALL SEND0
CALL SEND0
CALL SEND1
CALL SEND1
CALL SEND0
CALL SEND0
CALL SEND0
CALL SEND0
CALL SEND1
CALL SEND1
CALL SEND0
CALL SEND0
CALL SEND1
CALL SEND1
CALL SEND1
CALL SEND1
CALL WAIT


RETURN

;*******************************************
; Send data 0 subroutine
;*******************************************
SEND0
CALL BIT0
CALL BIT1
RETURN
;*******************************************
; Send data 1 subroutine
;*******************************************
SEND1
CALL BIT0
CALL BIT0
CALL BIT0
CALL BIT1
RETURN


;*******************************************
; Send BIT 0 subroutine
;*******************************************
BIT0
MOVLW 01FH ;output all 1
MOVWF PORTA
MOVLW 0CH ;get counter for 600usec
MOVWF W6CNT
BT01LP
MOVLW 0FH ;15 get for 37.9kHz
MOVWF WCNT
BT00LP
DECFSZ WCNT,F
GOTO BT00LP ;3*15-1+2=46
;***
NOP
DECFSZ W6CNT,F
GOTO BT01LP ;(46+4)*12-1+5=604USEC
RETURN

;*******************************************
; Send BIT 1 subroutine
; "1" :13usec "0":13usec = 37.9kHz
;*******************************************
BIT1
MOVLW 017H ;get counter for 600usec
MOVWF W6CNT
MOVLW 07H ;set on data
;**** low output for 37.9kHz ****
BTLOOP
MOVWF PORTA ;on LED
NOP
NOP
NOP
NOP
NOP ;during 13 step
NOP
NOP
NOP
NOP
NOP
NOP
;**** high output for 37.9kHz ****
MOVLW 01FH ;set port
MOVWF PORTA ;off LED
NOP
NOP
NOP
NOP
NOP
NOP ;during 13 step
NOP
NOP
MOVLW 07H ;set on data for next
;**** end test for 600usec ****
DECFSZ W6CNT,F
GOTO BTLOOP
RETURN ;26*23-1+4=601usec


;*******************************************
; Dynamic key scan subroutine
;*******************************************
SCAN
MOVF PORTB,W ;input PORTB
MOVWF WORK ;temp
COMF WORK,F ;complement
MOVF WORK,W ;set Z flag
BSF PORTA,0 ;reset
BTFSS STATUS,Z ;if data is none
GOTO EXIST ;exist key input
GOTO SCAN ;loop next scan

;******* fined key,convert to key code ********
EXIST
RETURN ;exit to main

;*******************************************
; 300msec timer subroutine
;*******************************************
WAIT
MOVLW 0AH ;10
MOVWF CNT3
WTLP3
MOVLW 063H ;99
MOVWF CNT2
WTLP2
MOVLW 064H ;100
MOVWF CNT1
WTLP1
DECFSZ CNT1,F
GOTO WTLP1 ;3*100-1+2=301usec
;**
DECFSZ CNT2,F
GOTO WTLP2 ;(301+3)*99-1+3=30098
;**
DECFSZ CNT3,F
GOTO WTLP3 ;(30098+3)*10-1+3=301msec
RETURN


;*******************************************
; PORT initial setup subroutine
; PORTA: all output
; RA3,RA4 drive LED
; RA0TORA2 used for dynamic key scan
; PORTB: all input(key input)
;*******************************************
PORT_INI
BSF STATUS,RP0 ;Set page 1
MOVLW 0FFH ;all PORTB is input
MOVWF TRISB ;PortB set all input
CLRF TRISA ;PortA set all output
BCF OPTION_REG,7 ;PORTB pull up enable
BCF STATUS,RP0 ;Set Page 0
MOVLW 01FH ;output all 1
MOVWF PORTA ;Off LED
RETURN

END

0 件のコメント:

コメントを投稿