Re: 用pic如何讀取IR信號
|
||||
---|---|---|---|---|
高級會員
|
版大是不是有曼徹斯特碼或NRZ相關的格式說明...
因為目前小弟用的信號格式是上頭規定的方式 我並不清楚這是屬於哪一種編碼系統.. 想多了解一點...謝謝
發表於: 2007/7/6 8:28
|
|||
|
Re: 用pic如何讀取IR信號
|
||||
---|---|---|---|---|
資深會員
|
發表於: 2007/7/6 8:44
|
|||
|
Re: 用pic如何讀取IR信號
|
||||
---|---|---|---|---|
高級會員
|
謝謝Eigen大大..剛有看了一下..滿多格式的..謝謝
底下程式是擷取出來的..不完整.. 接收IR是用取樣的方式寫的..格式跟市售的也不太一樣 不過只要修改checkbit的部份..應該也可以相容... 有機會我再拿家裡的遙控器玩玩看.. 感謝各位提供相關寶貴的知識..又認識到滿多東西的... 傳輸碼格式 start bit hi 3.6ms/lo 1.2ms bit 0 hi 1.2ms/lo 0.6ms bit 1 hi 0.6ms/lo 1.2ms end bit hi 0.6ms hold time lo 12.6ms ; IO定義 iRcv EQU 3 ; PORTB dRange EQU D'2' ; 取樣次數正負承認範圍 dRcvBit EQU D'63' ; 63bit dResetDuty EQU '60' ; 12ms/200us = 60 (12.6ms為發射間隔時間) dStartBitA EQU D'18' ; 3.6ms/200us = 18 dStartBitB EQU D'6' ; 1.2ms/200us = 6 dBitDutyA EQU D'6' ; 1.2ms/200us = 6 dBitDutyB EQU D'3' ; 600us/200us = 3 bRcvBuf0 EQU H'70' ; Command bRcvBuf1 EQU H'71' ; bRcvBuf2 EQU H'72' ; bRcvBuf3 EQU H'73' ; bRcvBuf4 EQU H'74' ; bRcvBuf5 EQU H'75' ; bRcvBuf6 EQU H'76' ; bRcvBuf7 EQU H'77' ; CheckSum bRcvACnt EQU H'78' ; Lo 取樣次數 bRcvBCnt EQU H'79' ; Hi 取樣次數 bRcvBitCnt EQU H'7A' ; 64BIT資料位元 bTEMP EQU H'7B' FLAG_RCV EQU H'7C' fPinStatus EQU 7 ; 上一次狀態 fRcvStart EQU 6 ; fRcvBits EQU 5 fRcvEnd EQU 4 ;=======================; ; 紅外線接收取樣程式(200us) ;=======================; pRcvCode: .. BTFSS PORTB,iRcv .. GOTO RCV_A ;-----------------------------------------------; HIGH RCV_B: .. BANKSEL FLAG_RCV .. BTFSC FLAG_RCV,fPinStatus .. GOTO CHK_BCNT ;-----------------------------------------------; LO->HI .. BSF FLAG_RCV,fPinStatus ; .. BTFSC FLAG_RCV,fRcvEnd .. GOTO CLR_BCNT .. BTFSS FLAG_RCV,fRcvBits .. GOTO CLR_BCNT ;-----------------------------------------------; CHECK_END_BIT CHECK_END_BIT: .. mCheckBit bRcvACnt,dBitDutyB ; END BIT, LO->600us .. SKPNC .. GOTO ERR_BCNT .. CLRC .. CALL pShiftBit ; 移位1bit(同步資料64bit) .. CALL pCheckData ; 資料接收成功,檢查CheckSum .. SKPZ .. GOTO ERR_BCNT .. CALL pLoadData ; 資料正確,載入資料 .. BSF FLAG_RCV,fRcvEnd ; .. GOTO CLR_BCNT ;-----------------------------------------------; HI CHK_BCNT: .. MOVLW dResetDuty; CHECK RESET RCV .. SUBWF bRcvBCnt,W .. SKPC .. GOTO INC_BCNT ERR_BCNT: .. MOVLW B'10000000' .. ANDWF FLAG_RCV,F CLR_BCNT: .. CLRF bRcvBCnt INC_BCNT: .. INCF bRcvBCnt,F .. GOTO EXIT_RCV ;-----------------------------------------------; LOW RCV_A: .. BANKSEL FLAG_RCV .. BTFSS FLAG_RCV,fPinStatus .. GOTO INC_ACNT ;-----------------------------------------------; HI->LO .. BCF FLAG_RCV,fPinStatus ; .. BTFSS FLAG_RCV,fRcvStart .. GOTO CHECK_START_BIT .. BTFSS FLAG_RCV,fRcvBits .. GOTO CHECK_DATA_BIT .. GOTO CLR_ACNT ;-----------------------------------------------;CHECK_START_BIT CHECK_START_BIT: .. mCheckBit bRcvACnt,dStartBitA .. SKPNC .. GOTO CLR_ACNT .. mCheckBit bRcvBCnt,dStartBitB .. SKPNC .. GOTO CLR_ACNT .. BSF FLAG_RCV,fRcvStart .. MOVLW dRcvBit .. MOVWF bRcvBitCnt .. GOTO CLR_ACNT ;-----------------------------------------------; CHECK_DATA_BIT CHECK_DATA_BIT: .. mCheckBit bRcvACnt,dBitDutyA .. SKPNC .. GOTO _CDB10 .. mCheckBit bRcvBCnt,dBitDutyB .. SKPNC .. GOTO ERR_ACNT .. CLRC .. GOTO _CDB20 _CDB10: .. mCheckBit bRcvACnt,dBitDutyB .. SKPNC .. GOTO ERR_ACNT .. mCheckBit bRcvBCnt,dBitDutyA .. SKPNC .. GOTO ERR_ACNT .. SETC _CDB20: .. CALL pShiftBit .. DECFSZ bRcvBitCnt,F .. GOTO CLR_ACNT .. BSF FLAG_RCV,fRcvBits .. GOTO CLR_ACNT ;-----------------------------------------------; ERR_ACNT: .. MOVLW B'10000000' .. ANDWF FLAG_RCV,F CLR_ACNT: .. CLRF bRcvACnt INC_ACNT: .. INCF bRcvACnt,F EXIT_RCV: .. BANKSEL PORTB .. BCF STATUS,PA0 .. GOTO MAIN_10
發表於: 2007/7/6 12:58
|
|||
|
Re: 用pic如何讀取IR信號
|
||||
---|---|---|---|---|
中級會員
|
感謝各位提供的資料和 方向 謝謝
發表於: 2007/7/6 17:53
|
|||
|