pt2264解碼心得
最近閒暇時間在琢磨無線rf解碼程式,正好在數碼之家論壇中翻出大佬的解碼程式(於是乎,慢慢學習2264解碼程式,正好用上之前買的邏輯分析儀,帶看波形,帶看程式,琢磨了兩天,程式已可完美解碼,在此來總結下心得。
一、管腳如下圖所示:
osc1和osc2為振盪電阻管腳,常用有4.7m、3.3m等,a0-a7位2264位址位管腳,可設定為懸空(f)、高(1)、低(0)三態;d0-d3為四位資料位;
振盪頻率 f=2x1000x16/rosc(kω) ,rosc為振盪電阻阻值,單位為kω;例:rosc=4.7mω;則,f=6.8khz,則振盪週期為trosc=1/f=147us;
二、pt2264編碼格式如下:
1.位值格式(1、0、f)(長脈衝(3a)是短脈衝(a)的3倍)
窄高+寬低+窄高+寬低=0 寬高+窄低+寬高+窄低=1 窄高+寬低+寬高+窄低=f
2.時序圖
同步碼低電平(l)是窄脈衝(a)的31倍,即,a=l/31
上圖中osc表示振盪電阻週期 trosc,則上圖時序t=2xtrosc
3.資料結構
三、解碼思路
1、首先識別出幀與幀,依據同步碼區分開來,同步碼低電平時長為31t;
2、再依據識別出的同步碼,判斷計算出窄電平時間t,則寬電平時間為3t;(判斷窄電平思路,窄電平的誤差範圍為正(t+t/4)負(t-t/4)乙個振盪週期a=t/4;寬電平的誤差範圍為正(t * 3 + t / 2)負(t * 3 - t / 2) 兩個振盪週期2a=t/2)
3.依據寬窄電平組合即可解出遙控器碼值。
四、程式如下所示,借鑑數碼之家各位大佬程式再結合自己理解
1//自適應頻率的2262解碼** 晶振11.0592
2 #include //
stc15f104w標頭檔案
3 #include //
左移右移函式標頭檔案
4#define uchar unsigned char
5#define uint unsigned int
6 sbit wuxian_in =p3^3; //
外部中斷1,rf模組data訊號輸入管腳
7 sbit ok_led =p3^0; //
解碼成功
8 sbit d0=p3^1; //
資料位1000
9 sbit d1=p3^2; //
資料位0100
10 sbit d2=p3^4; //
資料位0010
11 sbit d3=p3^5; //
資料位0001
12void
init()
1323
24void
main()
2534
35void ex0(void) interrupt 2
//外部中斷1入口函式
36
57while(wuxian_in == 0); //
如果為0一直等待,等待高電平出現
58while(i < 24) //
共接收24位
5972
else
//不符合規則(出錯)
7378}79
else
80
102}
103while(wuxian_in == 1); //
等待低電平到來
104 th =th0;
105 tl =tl0;
106 th0 = tl0 = 0
;107 l =th;
108 l = ((l << 8) + tl); //
將計時器的高低8位合併
109/*
以下語句即判斷是窄電平是否合格(4.7m的振盪電阻時窄電平時長為492us即4a)
*/110
if(((l > (m - m / 4)) && (l < (m + m / 4))))//
如果此時為4a則本位為0 短492us
111
115/*
以下語句即判斷寬電平是否合格(4.7m的振盪電阻時寬電平時長為1488us即12a)
*/116
else
if(((l > (m * 3 - m / 2)) && (l < (m * 3 + m / 2))))///
/如果此時為12a則本位為1 長1488us
117
122else
//已不是4a也不是12a則不符合規表示出錯
123129
if(i == 8
)130
134if(i == 16
)135
140if(i == 24) //
24位已收完則解碼結束
141159
}160 ok_led = !ok_led; //
解碼正確後取反一次
161 timecount =20000; //
pt2262每按一次會發出4組相同的編碼防止按鍵沒放開直在取反,保證按1次只做1次處理
162}
163}
164 tr0 = th0 = tl0 = 0; //
關閉定時器t0,並重置th0、tl0
165 ex1 = 1; //
開啟外部中斷1
166}
167168
169//
void timer0(void) interrupt 1
//***********定時器t0中斷子函式**************
170//