如何用PIC做紅外線遙控接收? ============================ 先用20106之類的片子解調(diào)后,你用示波器掛在20106的輸出端就可以查看遙控波形。 ============================= NEC遙控接收第一次正常,以后就不行了(附遙控子程序)請(qǐng)指正。 不才是PIC領(lǐng)域的新手,最近寫了一個(gè)關(guān)于NEC遙控接收解碼的測(cè)試程序,下面是此程序的遙控解碼部分但是它只能第一次正確判斷出接收碼,以后就不行了請(qǐng)高手指點(diǎn)》 我知道遙控碼的連發(fā)情況,但我已經(jīng)設(shè)置了32位接收碼的計(jì)數(shù)器,應(yīng)該不會(huì)有問題的 我判斷0(1.125ms)和1(2.25ms) 由于我用的是C57,只能通過查詢方式來確定.通過高電平的時(shí)間(以下程序中延時(shí)0.9MS)不同來決定0或1的。 ;NEC格式遙控碼的接收與解碼子程序 ;本程序中采用PORTA 0口接收紅外遙控,地址碼為00H,高位FFH,數(shù)據(jù)碼為00H,反碼為FFH,接收到的依次存放到 25H ADD8L, 26H ADD8H,DAT8 27H ,28H DAT8F寄存器中。 ;第一次接收到此信號(hào)即關(guān)機(jī). ;==================================== REMOTE_RECEIVER CLRF 20H ;設(shè)定遙控接收正確與否標(biāo)志位。若20H的第0位為1, BTFSC PORTA,0 ;遙控接收無效。 GOTO BACK ;判斷9MS低電平和4.5MS高電平。 ;----5ms delay---------------- MOVLW 06H ;防止抖動(dòng),延時(shí)5ms MOVWF 30H LOOP4 MOVLW 0FFH MOVWF 31H LOOP5 DECFSZ 31H,1 GOTO LOOP5 DECFSZ 30H,1 GOTO LOOP4 ;----------------------------- BTFSC PORTA,0 GOTO BACK ;遙控接收無效。 LOOP0 BTFSS PORTA,0 ;遙控接收,等待高電平出現(xiàn),約9-5ms GOTO LOOP0 ;------------------------------以下是接收代碼的步子 STEP MOVLW D''32'' ;設(shè)置32位接收碼的計(jì)數(shù)器. MOVWF BIT32 STEP1 BTFSC PORTA,0 ;等待4.5ms GOTO STEP1 STEP2 BTFSS PORTA,0 GOTO STEP2 ;測(cè)一個(gè)脈沖, MOVLW D''180'' ;延時(shí)0.9ms,測(cè)試高電平的脈寬。 MOVWF 29H BCF STATUS,C WAIT NOP NOP DECFSZ 29H,1 GOTO WAIT BTFSS PORTA,0 ;PA0 TO C GOTO C0 GOTO C1 C0 BCF STATUS,C GOTO STEP3 C1 BSF STATUS,C STEP3 MOVLW D''4'' MOVWF 2AH MOVLW 28H ;28H是DAT8F的地址 MOVWF FSR ;利用FSR進(jìn)行間接尋址。 STEP4 RLF INDF,1 DECF FSR,1 DECFSZ 2AH,1 GOTO STEP4 DECFSZ BIT32,1 GOTO STEP1 MOVF ADD8L,0 XORLW 00H BTFSS STATUS,Z GOTO BACK ;低8位地址碼不對(duì),返回 MOVF ADD8H,0 XORLW 0FFH BTFSS STATUS,Z GOTO BACK MOVF DAT8,0 ;8位數(shù)據(jù)碼不對(duì),返回 XORLW 00H BTFSS STATUS,Z GOTO BACK MOVF DAT8F,0 ;8位數(shù)據(jù)反碼不對(duì),返回 XORLW 0FFH BTFSS STATUS,Z GOTO BACK GOTO REM_OK ;代碼接收正確 BACK BSF 20H,0 REM_OK RETURN 回復(fù) 先清32位數(shù)據(jù)再接收. 然后每接收完8位后,RAM要清0 如;**************RAM移位*************************** j1 incf jsp1 ;8位計(jì)數(shù)寄存器 incf jsp2 ;32位數(shù),計(jì)存器. btfss jsp1,3 ;是否有8位 goto js clrf jsp1 MOVf sj,0 ;移8位數(shù)到W MOVwf ** ;W到DATA incf f ;RAM地址加1 clrf sj ;注意這里!!!!!!!!!!!!!!! ;***************************** btfss jsp2,5 ;檢測(cè)是否接收完32位. goto js ;否,再檢測(cè). 這是6122和6121 IC的接收程序. 發(fā)表于:2003-03-04 17:34:51 小寶:很高興看到你的提示,不過我的程序不是按照每8位接收后經(jīng)過RAM放入寄存器中,而是每位都經(jīng)過4次循環(huán)移位后直接放入存放數(shù)據(jù)的寄存器中(參見接收程序中的STEP4),所以不可能按昭你所說的那樣清0。 可能是接收程序與你所說的流程不同。請(qǐng)問你能把你完整的接收程序發(fā)給我嗎?萬分感激!我的EMAIL是tanga08@sina.com 你的程序單獨(dú)看是沒有問題的。我想關(guān)鍵在于發(fā)射編碼究竟如何?你所謂“第一次可以,以后就不行了”,是不是每次復(fù)位后的第一次發(fā)射和接受是正常的?如果是這樣的,說明還是連發(fā)的處理不是很合適。發(fā)生連發(fā)時(shí),應(yīng)該將25H-28H清空。否則第二次發(fā)射時(shí),25H-28H已經(jīng)有了部分不完整的數(shù)據(jù),造成移位過程中的錯(cuò)誤數(shù)據(jù),接受失敗。 我的意見不一定正確,僅供參考。 NEC遙控接收問題 NEC遙控接收問題出錯(cuò)在位接收上。 我看程序有點(diǎn)問題,主要是在接收位上,應(yīng)該是每接受8位后才把FSR-1,在回到接受程序上。如此進(jìn)行4次可以接受32位的數(shù)據(jù)。 發(fā)表于:2003-03-04 20:46:38 并不是位接收問題 我那程序的位接收問題不是先接收8位再保存的,那個(gè)4次循環(huán)指的是每接收一位后即改變STATUS標(biāo)志位C,同時(shí)4個(gè)接收寄存器依次帶C位移位,等到接收32位后(即第1位移位32次后恰好保存到了第一個(gè)接收寄存器的第7位,第2位移到了第6位)你可以自己演示一下,這樣32位正好保存到了4個(gè)寄存器中。 可以參見我那段程序的STEP3,STEP4。 很感謝有這么多熱心的朋友關(guān)心這個(gè)問題! ========================= 紅外線遙控編碼有幾種類型 類型不知道,但格式有上千種 我要做個(gè)通用型的紅外接收器, 就是不管遙控器發(fā)送什么碼,反正照收不誤, 然后按原樣把它發(fā)送出去, 我想用PIC做,你看要用哪種型號(hào)的控制器做較好! 發(fā)表于:2003-08-26 17:26:08 既然是轉(zhuǎn)發(fā)你管他格式干什么? 你又不解碼,只要檢測(cè)聯(lián)接紅外管的PIC的I/O口的電壓變化就行了,再在另一個(gè)腳把他發(fā)送出去。送你一個(gè)檢測(cè)紅外的小程序。只不過要自己做一點(diǎn)電路。點(diǎn)擊瀏覽該文件 我用他做過東西,不是十分精確,但是如果是誤碼是可以看出來的,有時(shí)連續(xù)測(cè)量的話他會(huì)誤操作,所以我一般只看前面的十來次,要精確還是用示波器看好,不知到有人在網(wǎng)上推銷的叫電腦示波器的東西什么樣好不好使? 最后一位數(shù)據(jù)位的寬度如何檢測(cè)!! 以紅外接收器為準(zhǔn),如果沒有遙控信號(hào)的情況下,接收器的輸出端是不是高電平,如果是,最后一位碼,0.56ms低電平過后,接著是出現(xiàn)高電平對(duì)吧,那高電平的寬度如何確定就不好辦了 如何用PIC做紅外線遙控接收? ============================ 先用20106之類的片子解調(diào)后,你用示波器掛在20106的輸出端就可以查看遙控波形。 ============================= NEC遙控接收第一次正常,以后就不行了(附遙控子程序)請(qǐng)指正。 不才是PIC領(lǐng)域的新手,最近寫了一個(gè)關(guān)于NEC遙控接收解碼的測(cè)試程序,下面是此程序的遙控解碼部分但是它只能第一次正確判斷出接收碼,以后就不行了請(qǐng)高手指點(diǎn)》 我知道遙控碼的連發(fā)情況,但我已經(jīng)設(shè)置了32位接收碼的計(jì)數(shù)器,應(yīng)該不會(huì)有問題的 我判斷0(1.125ms)和1(2.25ms) 由于我用的是C57,只能通過查詢方式來確定.通過高電平的時(shí)間(以下程序中延時(shí)0.9MS)不同來決定0或1的。 ;NEC格式遙控碼的接收與解碼子程序 ;本程序中采用PORTA 0口接收紅外遙控,地址碼為00H,高位FFH,數(shù)據(jù)碼為00H,反碼為FFH,接收到的依次存放到 25H ADD8L, 26H ADD8H,DAT8 27H ,28H DAT8F寄存器中。 ;第一次接收到此信號(hào)即關(guān)機(jī). ;==================================== REMOTE_RECEIVER CLRF 20H ;設(shè)定遙控接收正確與否標(biāo)志位。若20H的第0位為1, BTFSC PORTA,0 ;遙控接收無效。 GOTO BACK ;判斷9MS低電平和4.5MS高電平。 ;----5ms delay---------------- MOVLW 06H ;防止抖動(dòng),延時(shí)5ms MOVWF 30H LOOP4 MOVLW 0FFH MOVWF 31H LOOP5 DECFSZ 31H,1 GOTO LOOP5 DECFSZ 30H,1 GOTO LOOP4 ;----------------------------- BTFSC PORTA,0 GOTO BACK ;遙控接收無效。 LOOP0 BTFSS PORTA,0 ;遙控接收,等待高電平出現(xiàn),約9-5ms GOTO LOOP0 ;------------------------------以下是接收代碼的步子 STEP MOVLW D''32'' ;設(shè)置32位接收碼的計(jì)數(shù)器. MOVWF BIT32 STEP1 BTFSC PORTA,0 ;等待4.5ms GOTO STEP1 STEP2 BTFSS PORTA,0 GOTO STEP2 ;測(cè)一個(gè)脈沖, MOVLW D''180'' ;延時(shí)0.9ms,測(cè)試高電平的脈寬。 MOVWF 29H BCF STATUS,C WAIT NOP NOP DECFSZ 29H,1 GOTO WAIT BTFSS PORTA,0 ;PA0 TO C GOTO C0 GOTO C1 C0 BCF STATUS,C GOTO STEP3 C1 BSF STATUS,C STEP3 MOVLW D''4'' MOVWF 2AH MOVLW 28H ;28H是DAT8F的地址 MOVWF FSR ;利用FSR進(jìn)行間接尋址。 STEP4 RLF INDF,1 DECF FSR,1 DECFSZ 2AH,1 GOTO STEP4 DECFSZ BIT32,1 GOTO STEP1 MOVF ADD8L,0 XORLW 00H BTFSS STATUS,Z GOTO BACK ;低8位地址碼不對(duì),返回 MOVF ADD8H,0 XORLW 0FFH BTFSS STATUS,Z GOTO BACK MOVF DAT8,0 ;8位數(shù)據(jù)碼不對(duì),返回 XORLW 00H BTFSS STATUS,Z GOTO BACK MOVF DAT8F,0 ;8位數(shù)據(jù)反碼不對(duì),返回 XORLW 0FFH BTFSS STATUS,Z GOTO BACK GOTO REM_OK ;代碼接收正確 BACK BSF 20H,0 REM_OK RETURN 回復(fù) 先清32位數(shù)據(jù)再接收. 然后每接收完8位后,RAM要清0 如;**************RAM移位*************************** j1 incf jsp1 ;8位計(jì)數(shù)寄存器 incf jsp2 ;32位數(shù),計(jì)存器. btfss jsp1,3 ;是否有8位 goto js clrf jsp1 MOVf sj,0 ;移8位數(shù)到W MOVwf ** ;W到DATA incf f ;RAM地址加1 clrf sj ;注意這里!!!!!!!!!!!!!!! ;***************************** btfss jsp2,5 ;檢測(cè)是否接收完32位. goto js ;否,再檢測(cè). 這是6122和6121 IC的接收程序. 發(fā)表于:2003-03-04 17:34:51 小寶:很高興看到你的提示,不過我的程序不是按照每8位接收后經(jīng)過RAM放入寄存器中,而是每位都經(jīng)過4次循環(huán)移位后直接放入存放數(shù)據(jù)的寄存器中(參見接收程序中的STEP4),所以不可能按昭你所說的那樣清0。 可能是接收程序與你所說的流程不同。請(qǐng)問你能把你完整的接收程序發(fā)給我嗎?萬分感激!我的EMAIL是tanga08@sina.com 你的程序單獨(dú)看是沒有問題的。我想關(guān)鍵在于發(fā)射編碼究竟如何?你所謂“第一次可以,以后就不行了”,是不是每次復(fù)位后的第一次發(fā)射和接受是正常的?如果是這樣的,說明還是連發(fā)的處理不是很合適。發(fā)生連發(fā)時(shí),應(yīng)該將25H-28H清空。否則第二次發(fā)射時(shí),25H-28H已經(jīng)有了部分不完整的數(shù)據(jù),造成移位過程中的錯(cuò)誤數(shù)據(jù),接受失敗。 我的意見不一定正確,僅供參考。 NEC遙控接收問題 NEC遙控接收問題出錯(cuò)在位接收上。 我看程序有點(diǎn)問題,主要是在接收位上,應(yīng)該是每接受8位后才把FSR-1,在回到接受程序上。如此進(jìn)行4次可以接受32位的數(shù)據(jù)。 發(fā)表于:2003-03-04 20:46:38 并不是位接收問題 我那程序的位接收問題不是先接收8位再保存的,那個(gè)4次循環(huán)指的是每接收一位后即改變STATUS標(biāo)志位C,同時(shí)4個(gè)接收寄存器依次帶C位移位,等到接收32位后(即第1位移位32次后恰好保存到了第一個(gè)接收寄存器的第7位,第2位移到了第6位)你可以自己演示一下,這樣32位正好保存到了4個(gè)寄存器中。 可以參見我那段程序的STEP3,STEP4。 很感謝有這么多熱心的朋友關(guān)心這個(gè)問題! ========================= 紅外線遙控編碼有幾種類型 類型不知道,但格式有上千種 我要做個(gè)通用型的紅外接收器, 就是不管遙控器發(fā)送什么碼,反正照收不誤, 然后按原樣把它發(fā)送出去, 我想用PIC做,你看要用哪種型號(hào)的控制器做較好! 發(fā)表于:2003-08-26 17:26:08 既然是轉(zhuǎn)發(fā)你管他格式干什么? 你又不解碼,只要檢測(cè)聯(lián)接紅外管的PIC的I/O口的電壓變化就行了,再在另一個(gè)腳把他發(fā)送出去。送你一個(gè)檢測(cè)紅外的小程序。只不過要自己做一點(diǎn)電路。點(diǎn)擊瀏覽該文件 我用他做過東西,不是十分精確,但是如果是誤碼是可以看出來的,有時(shí)連續(xù)測(cè)量的話他會(huì)誤操作,所以我一般只看前面的十來次,要精確還是用示波器看好,不知到有人在網(wǎng)上推銷的叫電腦示波器的東西什么樣好不好使? 最后一位數(shù)據(jù)位的寬度如何檢測(cè)!! 以紅外接收器為準(zhǔn),如果沒有遙控信號(hào)的情況下,接收器的輸出端是不是高電平,如果是,最后一位碼,0.56ms低電平過后,接著是出現(xiàn)高電平對(duì)吧,那高電平的寬度如何確定就不好辦了 紅外接收目前用的比較多的有三種方法.
1,查詢法,既軟件不停地查詢是否為低(遙控信號(hào))然后通過精確延時(shí)讀頭碼.和 數(shù)據(jù)0或1碼. 2,讀到有信號(hào)輸入時(shí)開打開定時(shí)計(jì)數(shù)器,然后通過讀定時(shí)器的中斷次數(shù),來判定頭碼和0,1的. 3 RB0或RB4-RB7加定時(shí)器(或軟件延時(shí))利用輸入中斷的好處是可做實(shí)時(shí)控制.
如下: ;***發(fā)射為6221,把接收到的碼值送到ICD的PORTC口顯示****** ;**************** *************** org 0000h nop goto start org 0004h goto serv ;************************************************** start bsf status,rp0 ;體1 MOVlw 0000h MOVwf trisc ;C口輸出 MOVlw 0ffh ;B口RB0輸入 MOVwf trisb MOVlw B''00000100'' ;1:64 MOVwf option_reg ;TMR0定時(shí)器 bcf status,rp0 ;體0 clrf intcon ;10010000 bsf intcon,7 ;開放INT下降沿中斷 bsf intcon,4 bcf intcon,1 clrf portc loop sleep nop goto loop ;*************現(xiàn)場(chǎng)保護(hù)******************************** serv MOVwf w_temp swapf status,0 clrf status MOVwf status_temp MOVf pclath,0 MOVwf pclath_temp clrf pclath ;***************遙控處理.******************************
bcf intcon,1 btfsc portb,0 ;檢測(cè)RB0是否為0. goto zdhh ;RB0不為0,誤中斷.反回 call delay8 ;調(diào)用8MS延時(shí).頭碼檢測(cè). btfsc portb,0 ;檢測(cè)頭碼 goto zdhh ;不是中斷反回 call delay5 ;延時(shí)5MS后進(jìn)行數(shù)據(jù)檢測(cè). btfss portb,0 ;檢測(cè)RB0是否為高電平. goto zdhh ;不是繼續(xù)檢測(cè). ;********************************************* clrf data1 ;20H clrf data2 ;21H clrf data3 ;22H clrf data4 ;24H clrf jsp2 ;32位計(jì)數(shù)器 clrf sj ;接收的數(shù)據(jù)寄存器 clrf jsp1 ;8位計(jì)數(shù)器 MOVlw 0x20 ;20H寄存器送W MOVwf fsr ;由W送20H到FSR jc btfsc portb,0 ;檢測(cè)RB0是否為低電平. goto jc ;不是繼續(xù)檢測(cè). ;**************0和1數(shù)據(jù)檢測(cè)**************************** js call delay1 ;延時(shí)1.3MS btfsc portb,0 ;檢測(cè)頭碼過后是0還是1, goto s1 ;檢測(cè)的數(shù)據(jù)不"1" ;*************0數(shù)據(jù)處理***************************** bcf sj,c ;數(shù)據(jù)是"0" rrf sj,1 ;0數(shù)據(jù)右移到SJ寄存器 goto j1 ;**************1數(shù)據(jù)處理.************************* s1 bsf sj,c rrf sj,1 ddp btfsc portb,0 goto ddp ;**************RAM移位*************************** j1 incf jsp1 ;8位計(jì)數(shù)寄存器 incf jsp2 ;32位數(shù),計(jì)存器. btfss jsp1,3 ;是否有8位 goto js clrf jsp1 MOVf sj,0 ;移8位數(shù)到W MOVwf indf ;W到DATA incf fsr ;RAM地址加1 clrf sj ;***************************** btfss jsp2,5 ;檢測(cè)是否接收完32位. goto js ;否,再檢測(cè). MOVlw B''10001111'' ;送IC高8位碼 xorwf data1,0 ;相減(Z:1=結(jié)果為0;0=結(jié)果不為0) btfss status,2 ;結(jié)果為0則下一步. goto zdhh ;相減結(jié)果不為0中斷返回 MOVlw B''101010101'' ;低8位IC碼檢測(cè) xorwf data2,0 btfss status,2 goto zdhh ;comf data4,0 ;數(shù)據(jù)反碼檢測(cè).暫不用. ;subwf data3,0 ;btfss status,2 ;goto zdhh MOVf data3,0 ;送數(shù)碼到C口 MOVwf portc goto zdhh ;接收完32位則中斷返回 ;****************zdhh中斷返回程序********************* zdhh MOVf pclath_temp,0 MOVwf pclath swapf status_temp,0 ;交換STATUS與W內(nèi)容,將體選還原. MOVwf status ;將W內(nèi)容送STATUS寄存器 swapf w_temp,1 ;交換w_temp swapf w_temp,0 ;交換w_temp與w內(nèi)容,將w_temp內(nèi)? bcf intcon,1 retfie ;中斷返回,
;****************8ms********************************* delay8 bcf intcon,5 bcf intcon,2 MOVlw D''15'' MOVwf tmr0 loop1 btfss intcon,2 goto loop1 return ;****************5ms********************************* delay5 bcf intcon,5 bcf intcon,2 MOVlw D''120'' MOVwf tmr0 loop2 btfss intcon,2 goto loop2 return ;****************1.3ms******************************* delay1 bcf intcon,5 bcf intcon,2 MOVlw D''240'' MOVwf tmr0 loop3 btfss intcon,2 goto loop3 return ;************* end
錯(cuò)碼的可能有兩種 一個(gè)是字頭對(duì)不好 一個(gè)是數(shù)據(jù)傳輸有錯(cuò)誤 特別是時(shí)序錯(cuò)誤 后面的可以用軟件校驗(yàn) 字頭不好確認(rèn) 最好可以在軟件規(guī)定上連續(xù)多發(fā)幾個(gè) 然后用移位方法判斷有多次連續(xù)相同子頭出現(xiàn) 對(duì)齊字頭 比如連續(xù)出現(xiàn)20個(gè)1 0轉(zhuǎn)換后 表示準(zhǔn)備發(fā)送數(shù)據(jù) 然后等待1 0 傳輸結(jié)束后 跟著有一個(gè)字頭 如11110000 這樣 后面就可以接數(shù)據(jù)了 A 我在外面買了一個(gè)萬能遙控器,他就是用pic16c57c作的,那就說明它是沒有中斷的,我真搞不懂他是怎么做的,它是沒有解碼芯片的,請(qǐng)問有誰知道,我現(xiàn)在也在做這個(gè),有誰能提示一下,謝謝。
B 這很容易 上次我用兩片PIC16C57C作了一個(gè)發(fā)射與一個(gè)接收的小模塊。有效控制,沒能出現(xiàn)亂碼,但有一缺點(diǎn)就是會(huì)受到其它紅外線產(chǎn)品的干擾!
C 紅外接受 用外中斷,加定時(shí),即可檢測(cè)出編碼,非常準(zhǔn)確。我用的是PIC16F72芯片。
D 我使用紅外線接受管加兩級(jí)放大,看紅外線的輸出波形,用長虹的遙控器當(dāng)信號(hào)源,在示波器上要打到10ms才能看到完整的信號(hào)波形,像個(gè)穩(wěn)壓后的波形一樣的東西,我看了有關(guān)方面的書說,紅外線信號(hào)時(shí)調(diào)制在38khz的信號(hào)上的,那我將示波器打到50ns上為什么看不到波形,這樣的話程序不是沒有辦法編了,望哪位高人幫幫我,謝謝
E 可以用CCP中的input capture(輸入捕捉)功能,很好用的,仔細(xì)閱讀一下input capture有關(guān)內(nèi)容,很容易的 在CCP的引腳上若有事件發(fā)生(可設(shè)置為上升沿,下降沿或其他方式),TMR1的內(nèi)容背記錄,這樣很準(zhǔn)確的,即使中斷響應(yīng)較慢也沒問題的,這樣的功能來做紅外遙控最恰當(dāng)不過。
F 回復(fù)紅外定時(shí)接收原理 用RB0做中斷(FIRST:RISING TRIG,SECOND:FALLING TRIG),同時(shí)啟動(dòng)TIMER2定時(shí)100US)計(jì)數(shù).當(dāng)下一個(gè)中斷來臨時(shí),由TIMER2有88個(gè)數(shù),9MS就檢測(cè)出來。其余時(shí)間, 類推。注意,RBO的中斷沿,要根據(jù)時(shí)序,來改變。據(jù)此原理,很容易編出代碼。 還有一個(gè)地方值得注意 ; 紅外信號(hào)的衰減很厲害的,所以一定要考慮它的接受范圍的選擇 其實(shí)用那種方法都可以,在接收數(shù)據(jù)時(shí)時(shí)間方面留夠余量,這樣對(duì)正確接收數(shù)據(jù)有好處 關(guān)于紅外線接收的一點(diǎn)思路 我現(xiàn)在在做電視機(jī)紅外線接受,發(fā)射器,看了一些書,書上說信號(hào)被調(diào)制在38khz的調(diào)制信號(hào)上,但我通過一顆紅外接收管加兩級(jí)放大后看紅外線波形,示波器要打到10ms檔上才能看到完整波形,照書上說的話應(yīng)該打到50us檔上就能看到波形了,而且這個(gè)波形像梯形波,請(qǐng)問這是怎么一回是,我用的紅外線源就是長虹電視機(jī)的遙控器,這樣的話我的接收程序怎么寫呢?
你不用管他怎么調(diào)制的,你只需要用一個(gè)接收頭就可以了,出來的就是方波,根據(jù)兩個(gè)下降沿來判斷信號(hào)就行了(空閑狀態(tài)為高電平),我當(dāng)初用示波器觀察了一天才了解是怎么回事
那如果有人一直按著遙控器,單片機(jī)不是會(huì)當(dāng)一個(gè)信號(hào)并記錄下來,而且我用的是pic16c57的片子,沒有中斷的,兩個(gè)下降沿的時(shí)常如何判斷,而且如何確定一個(gè)信號(hào)已經(jīng)結(jié)束了呢,
如果你沒做過紅外遙控接受,建議你先用帶中斷的片子來搞,用57是有一定難度的
看了你寫的紅外線接收的程序,有點(diǎn)問題 你寫的接收程序第二條就用goto轉(zhuǎn)跳到rf1,而在rf1上用了retlw 0這個(gè)指令,但這個(gè)指令不是要使用call指令返回時(shí)才用的嗎,如果goto指令用了retlw 0,那返回到哪里去, 這個(gè)和遙控器使用的芯片有關(guān),你可以了解一下有關(guān)這個(gè)遙控器按鍵的定義,也可用示波器觀察。最好你先寫一段程序來讀碼,觀察一下按鍵定義和規(guī)律。
如果要求不高的話可以用紅外的編碼、解碼芯片 如果想要誤碼率小的話最好自己編發(fā)射和接收(再加上解碼)的程序
1.從紅外線發(fā)射出來的是什么?接收倒的又是什么?一些高低電平嗎? 2.我們?cè)趺礃觼韺?duì)這些進(jìn)行解碼?所謂的碼是什么代碼?是0.1碼嗎?還是什么? 問題好多,一切在于沒有經(jīng)驗(yàn),謝謝大家?guī)兔饣蟆?BR>
你學(xué)過高頻嗎?學(xué)過會(huì)容易理解一點(diǎn) 紅外傳輸一般分為兩種: 1。有載波:就是把基帶信號(hào)(就是“0”,“1”)調(diào)制到38k的載波上去,由紅外發(fā)光管發(fā)射(同發(fā)光二極管)出去; 然后在接收端用紅外光敏二極管(或三極管)或者紅外一體化接收頭接收。 用光敏二極管或三極管接收需要用程序或ic(如:cx20106等)解調(diào)。然后再對(duì)基帶信號(hào)進(jìn)行處理。這種方法主要用于載波需要有多種頻率的場(chǎng)合。 用一體化接收頭的靈敏度比較高,體積相對(duì)比較小,內(nèi)部集成了38k解調(diào)、低通濾波和其他一些抗干擾電路。這種接收頭使用比較簡(jiǎn)單,不過據(jù)我使用過的情況來看,靈敏度越高抗干擾性能就越差,常常伴有脈沖干擾,用程序還是可以解決的。 基帶信號(hào)最好使用編碼、調(diào)整占空比等以加強(qiáng)抗干擾性能。
2。直接用0,1信號(hào)發(fā)送:在距離比較近(cm級(jí)別),環(huán)境干擾比較小的情況下使用。 我的想法是直接將遙控器的信號(hào)經(jīng)過兩級(jí)放大,是三極管放大后輸出,但我現(xiàn)在就是不知道,38khz的信號(hào)如何記入單片機(jī),我想不用解碼芯片
好呀,發(fā)射一個(gè)9013就夠了,假如買不到距離不夠而且買不到大功率發(fā)射管的話可以把兩個(gè)發(fā)射管串聯(lián)起來。
為什么要把38k信號(hào)輸入單片機(jī)呢?你用紅外光敏三極管接收?成本倒是低了好多。工藝要求就比較高了。 |
|