Re: IR remote control confused.....
|
||||
---|---|---|---|---|
版主
|
IR的接收最後會變成一個Hi-Lo凖位的變化,你要看你的發射是用那一種方式編碼,針對不同的編碼方式有不同的偵測IR訊號方式。
發表於: 2007/3/9 17:21
|
|||
|
Re: IR remote control confused.....
|
||||
---|---|---|---|---|
新會員
|
我自己也寫了一個解HT-12E 的程式,不過我是用組合語言寫的
,雖然IC DATA 手冊寫的不錯,不過我是用示波器測量後再動手, 沒用TIME0計時,而是另外寫一個計時LOOP 來算每一個波型時間,為了要抓住第一個波型,一開始做了很多確認,當確認是第一個以後就只要CALL LOOP 判段是0或1算是古板的寫法,能用就好! 給你加加油.
發表於: 2007/2/3 23:14
|
|||
|
Re: IR remote control confused.....
|
||||
---|---|---|---|---|
中級會員
|
這個是我在測試跑一次TIMER0需要多少時間的東西
if(INTCONbits.TMR0IF==1) { INTCONbits.TMR0IF=1; } 我再真正測試程式時已經把TIMER0中斷關掉了 所以沒有跑那一個 = =" 抱歉沒有說清楚 我把他拿掉免得造成大大的困惑。 還有我發現我上面那一段程式的問題了,這樣的語法判斷太多。 而且會造成少判斷一個PULSE,這也是我資料不正確的原因。 正在改變寫法中....
發表於: 2007/2/2 17:31
|
|||
|
Re: IR remote control confused.....
|
||||
---|---|---|---|---|
資深會員
|
if(INTCONbits.TMR0IF==1)
{ INTCONbits.TMR0IF=1; } ============================ 上面那段就已經怪怪的說 重整一下在重po一次吧 不然程式一直跑timer0中斷, 主程式大概就沒辦法動了吧
發表於: 2007/2/2 13:35
|
|||
|
Re: IR remote control confused.....
|
||||
---|---|---|---|---|
中級會員
|
我所取IR資料的中斷如下
我利用TIMER0來讀取兩個PULSE的時間,現在的問題是最高位元讀取怪怪的,我不曉得是哪邊的錯誤,還有CODE的值會是對的但是ADDRESS的卻沒有反向,這讓我覺得很奇怪 不曉得是哪邊沒有考慮到,可以請有經驗的大大幫忙看一下嗎? 所使用的MCU 為18F452 16MHZ 利用 PORTB1來接收資料 #pragma interrupt isr_high //#pragma interrupt isr_high nosave=TBLPTR, TABLAT ,section(".tmpdata") #pragma interrupt isr_high nosave=section(".tmpdata") void isr_high(void) { if(INTCON3bits.INT1IF==1) { INTCON3bits.INT1IF=0; if(Myfg.IR_Data_get) { if(Myfg.IR_T_lo) { T_lo=ReadTimer0(); WriteTimer0(0); Myfg.IR_T_hi=1; Myfg.IR_T_lo=0; OpenRB1INT( PORTB_CHANGE_INT_ON & //FALLING_EDGE_INT & RISING_EDGE_INT & PORTB_PULLUPS_OFF); } else { if(Myfg.IR_T_hi) { T_hi=ReadTimer0(); WriteTimer0(0); Myfg.IR_T_hi=0; Myfg.IR_T_lo=1; IRTemp.Bits.IRbit7=1; if((T_lo-T_hi)>=5000) { IRTemp.Bits.IRbit7 |= 1; IRTemp.IRtemp >>= 1; } else { IRTemp.Bits.IRbit7 &= 0; IRTemp.IRtemp >>= 1; } /*if((T_hi-T_lo)>=4000) { IRTemp.Bits.IRbit7 |= 1; // IRTemp.IRtemp >>= 1; } else { IRTemp.Bits.IRbit7 &= 0; // IRTemp.IRtemp >>= 1; }*/ IRct++; if(IRct%8 ==0) { IRData.IRdata[IRDct] = IRTemp.IRtemp; IRTemp.IRtemp=0; IRDct++; } if(IRct>=33) { IRDct=0; IRct=0; IRTemp.IRtemp=0xff; Myfg.IR_Data_get=0; } OpenRB1INT( PORTB_CHANGE_INT_ON & FALLING_EDGE_INT & //RISING_EDGE_INT & PORTB_PULLUPS_OFF); } } } else { //Myfg.IR_Data_get=1; // if(!Myfg.IR_DeBounce) // { if(Myfg.IR_T_lo) { T_lo=ReadTimer0(); WriteTimer0(0); Myfg.IR_T_hi=1; Myfg.IR_T_lo=0; //Myfg.IR_DeBounce=1; OpenRB1INT( PORTB_CHANGE_INT_ON & //FALLING_EDGE_INT & RISING_EDGE_INT & PORTB_PULLUPS_OFF); } else { if(Myfg.IR_T_hi) { T_hi=ReadTimer0(); WriteTimer0(0); //T_sub=T_hi-T_lo; if(T_lo>T_hi) { Myfg.IR_Data_get=1; Myfg.IR_DeBounce=0; } Myfg.IR_T_hi=0; Myfg.IR_T_lo=1; OpenRB1INT( PORTB_CHANGE_INT_ON & FALLING_EDGE_INT & //RISING_EDGE_INT & PORTB_PULLUPS_OFF); } } //} } }//if(INTCON3bits.INT1IF==1)
發表於: 2007/2/2 9:54
|
|||
|
Re: IR remote control confused.....
|
||||
---|---|---|---|---|
中級會員
|
我是以C來撰寫的,我想這個問題會不會是因為中斷的時候COMPLIER會自己PUSH一些內定的暫存器,造成我IR的資料MISS了。
如果是這樣,我記得有一個命令可以強制要一些暫存器不做處理。 只是奇怪的是,一時熊熊沒找到該命令,等試玩在跟大家分享結果。
發表於: 2007/1/30 11:30
|
|||
|
Re: IR remote control confused.....
|
||||
---|---|---|---|---|
高級會員
|
右邊
範例程式 20 利用PIC12C508A 接收NEC Code type的IR遙控器所發射的訊號。
發表於: 2007/1/29 21:20
|
|||
IWC
IWC JL Rolex PP 有點距離 越來越遠 |
||||
|
Re: IR remote control confused.....
|
||||
---|---|---|---|---|
資深會員
|
可以貼code出來看嗎?
發表於: 2007/1/29 18:20
|
|||
|
IR remote control confused.....
|
||||
---|---|---|---|---|
中級會員
|
想請教各位大大
我想要撰寫一個程式來借收NEC IR的訊號。 我看了廠商給我的訊號規格,他是利用LOW訊號的時間來決定來的值是"0"或者"1"。 我有想到的方法是利用讀時間的方式來給定值,但是我遇到一個問題就是當IR中斷產生後,再利用讀計時器的方式來讀時間。 但是這種方法會造成IR訊號來的中斷沒有足夠,理論上會中斷33次,但是我看了我的中斷計數器,只有三次 想請教有經驗的大大我該如何撰寫此程式。 感激不盡
發表於: 2007/1/29 14:52
|
|||
|