|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
先上一个PT2262的发射电路原理图,一般应用 中,1脚 至 8脚做为地址编码,10脚 至 13脚做为四个按键来使用;, N& R, H+ u7 Z, H/ y; n
% }2 `" ]; k$ `7 l* _$ r$ I: L7 f
1 \, P M F! M# @网上好多此类代码和文章,其中有些地方对于刚接触的来说不甚理解,在此我对在学习此类解码程序时遇到的不解再来简要的分析一下:比如解释代码时谈到的 32a 128a是个什么意思。先看下图:/ h9 T- z! f3 X1 X) r
![]()
" j/ }6 X: C' V3 N2 Y
3 v8 x$ X. |8 L% b8 [4 {0 m% S 4 u! A i+ l4 Y& K! j8 m# s
从图中可以知道一个编码0(引脚接负极)、1(引脚接正极) 、F(引脚悬空)(也就是PT2262一个编码引脚的状态)占用32a,,,,a是啥,a是一个时钟周期“T” ,时钟是怎么来的? 15脚和16脚串接的OSC电阻产生的。 阻值决定了PT2262的振荡频率。厂家给出的计算公式:(频率KHZ)F=2*1000*16/Rosc(单位 K欧).
# d$ B, ], @. A L" p6 q4 A 利用一个简易的虚拟示波器来完成我们的实验讲解:
3 t# n: P4 x- \ d 7 s; K( R3 p- g5 Y. ~! X0 J
得到遥控器的完整波形,见下图:
+ Q ^0 Z+ B2 j! d' g; p* R. J! R& c![]()
* ?. d% }4 w1 v( d& ^8 h
& U. K& O6 u3 f2 X- F# b 图3: U, K1 \& e) M0 {
是不是一下子不能看懂呢?没关系慢慢来,先说同步头,它由一个4a高电平和124a低电平组成,在代码中只对124a低电平进行判断,给这个低电平5 p. ~$ k$ o( g/ B% i
限定一个范围,超出这个时间范围的低电平不是同步头的低电平:5 x8 y U8 r- N8 s1 _6 E& b
- <font color="#ff00ff">if((L > 400)&&(L < 29000UL))//2360) </font> //确认是引导头(判断同步位低电平时长31a)
# G2 V; v' Y' O5 K. c. M& D 1 p h3 o' Y9 u( S& t3 a
复制代码
6 \' z5 M2 @% {9 p W a值怎么得到或是怎么计算呢,实际应用中,根据PT2262的OSC计算公式得到a值误差比较大,再着像SX2262,SC2262等不同型号的IC使用相同OSC电阻产生的频率也不尽相同,所以在代码中做了一个范围的判断,只要在此范围内的值就判定为正确。6 N; \6 [1 x2 p4 L$ J" K2 W# [
通过示波器我们来实际计算一下a的值,由同步头低电平124a 和 一个引脚编码的32a 来相互印证一下,以加深对这个点的理解:
& }8 \. B6 ]% [5 J( g( _ 9 n8 B8 T* S3 ?" [
首先是同步头的低电平 124a ,通过在虚拟示波器中放置X1标志位(2.66ms),X2标志位(4.92ms)......4.92-2.66=2.26ms =2260us所以124a≈2260us;
* L6 q! S/ w: u" D% Y3 A![]()
+ P( i7 Z0 u' U. J6 q; _; p) c- I 然后用同样的方法得到PT2262第1脚编码脉宽32a 即X2-X1≈568us
q# q- r6 o- t% ` 相互印证计算:a = 568/32 ≈ 17.75 17.75*124 = 2201us 2201 ≈ 2260(同步头124a) 这里的误差在实际应用中忽略不计;% o1 {; s8 ~) i5 Q$ D y
" P3 v9 C7 T4 k" y3 r A
接下来说一下,编码格式和解码思路。7 x/ m( U! }( |4 {2 R& W
PT2262 地址编码(1脚 - 8脚)有三种状态:接负极 、接正极 、悬空 。它们所产生的编码状态为:00 、11、01;按键编码:只有00或11两种。
- G2 L. j! w* K. f" u8 L, J9 t 完整编码的组成:同步头+地址码(16位)+按键码(8位)0 o8 C: [# J+ G/ t
同步头结束以后,就会有24位的脉冲;见(图3)中的P1 - P8 代表芯片的1脚到8脚的编码16个脉冲,后边的10 - 13 代表10脚 -13脚的编码8个脉冲;
! D3 c( ~/ u3 f6 E 单片机解码要完成的任务是:找到同步头,然后再接收24位脉冲数据,计算出地址编码和按键状态,完成任务。
- W2 T4 R5 N! ^% u要完成这个任务,要用到定时器,它来负责对无线接收头送过来的高低电平进行精确计时;
: I2 k4 a* j2 O* _2 s: A 定时器怎么来用呢?
! L9 E/ C1 ]7 g 1、不使用定时器中断;3 D/ K r7 p: L- c/ D) r
2、初始值为0,一切从0开始;
1 B; _& ~, l: U$ W) ?* b. O+ ^2 N 3、电平变化时打开定时器计时,电平再次变化时停止定时器,得到定时器的计时时间;
+ s! F% G7 a2 m, I$ q
# @! v- a! p8 R" _) N: g8 q
0 U8 p9 w& I) a* O& N 地址编码和按键状态的计算:# K7 G% O$ B, I2 ?
在代码中:变量yinjiao[1]接收同步头后第1-8个脉冲; (第一脚到第四脚的状态编码)
( g% W. q" a, _; j" V4 B( | 变量yinjiao[2]接收同步头后第9-16个脉冲; (第五脚到第八脚的状态编码)
2 r* ~- C* Q* k: ?% G1 x/ q# d& ]2 K 变量yinjiao[3]接收同步头后第17-24个脉冲; (第十脚到第十三脚的按键状态编码)
: ]( H7 E4 s+ |$ ~9 n- //计算2262 加密脚电平
- abc[0]=yinjiao[2]&0xc0; //pt2262 第 8 脚状态
- abc[1]=yinjiao[2]&0x30; //pt2262 第 7 脚状态
- abc[2]=yinjiao[2]&0x0C;
- abc[3]=yinjiao[2]&0x03;
- abc[4]=yinjiao[1]&0xC0;
- abc[5]=yinjiao[1]&0x30;
- abc[6]=yinjiao[1]&0x0C;
- abc[7]=yinjiao[1]&0x03; //pt2262 第 1 脚状态: B, F" s1 R. G! W* n6 E
) g6 \4 F7 |* u' h; S4 d! Y- J& l" t
复制代码
7 w+ E2 M, p. f& y! \- switch(yinjiao[0])//键值码
- {
- case 0xC0: //PT2262的10脚按键按下时
- yinjiao[3]=10;
- break;
- case 0x30: //PT2262的11脚按键按下时
- yinjiao[3]=11;
- break;
- case 0x0C: //PT2262的12脚按键按下时
- yinjiao[3]=12;
- break;
- case 0x03: //PT2262的13脚按键按下时
- yinjiao[3]=13;
- break;
- }
) A' K0 p- ^3 e: }# V3 V , e7 u7 I" ^/ n
复制代码
0 Z! H5 ?7 v. d6 A代码流程导图:7 f) ~0 S$ o; M/ U5 ?
![]()
& h. L3 i" F" q! s0 x8 k: b( z/ S6 ~* R0 S1 Y
P$ s7 I- j0 _3 u* G
|
|