|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
先上一个PT2262的发射电路原理图,一般应用 中,1脚 至 8脚做为地址编码,10脚 至 13脚做为四个按键来使用;9 _. {5 t( }. {5 h( K- \! ?' N
& {# }6 ~/ I2 O. W- c
5 o" ~3 Q( o1 S8 Y% `7 X% w3 H' Y2 z; E
网上好多此类代码和文章,其中有些地方对于刚接触的来说不甚理解,在此我对在学习此类解码程序时遇到的不解再来简要的分析一下:比如解释代码时谈到的 32a 128a是个什么意思。先看下图:, t, s6 t, E k& R) x* z2 e
![]()
. g5 i. ^. e+ r9 u5 U2 F
* N9 `3 k( ^0 t( b: d) _% H0 A![]()
7 o5 a1 J0 e/ v# @! z 从图中可以知道一个编码0(引脚接负极)、1(引脚接正极) 、F(引脚悬空)(也就是PT2262一个编码引脚的状态)占用32a,,,,a是啥,a是一个时钟周期“T” ,时钟是怎么来的? 15脚和16脚串接的OSC电阻产生的。 阻值决定了PT2262的振荡频率。厂家给出的计算公式:(频率KHZ)F=2*1000*16/Rosc(单位 K欧).
5 h$ r( v7 ^# a' t& \; G/ b3 K 利用一个简易的虚拟示波器来完成我们的实验讲解:
; h; q) F, p( e, k+ o , X0 a4 @5 |& [: q" W! C% a c+ X
得到遥控器的完整波形,见下图:
" e0 F! T) q; n/ o " P& O5 z2 ~3 b( j# N
& ?. Q* L$ Y5 n) C% m. C
图3& w! ~2 l5 C) A) v7 z4 Q9 F
是不是一下子不能看懂呢?没关系慢慢来,先说同步头,它由一个4a高电平和124a低电平组成,在代码中只对124a低电平进行判断,给这个低电平
; r7 \: z- Y# L9 M6 q2 k h! v限定一个范围,超出这个时间范围的低电平不是同步头的低电平:
- r4 T% x$ x2 C8 T3 `0 M! o. R' R- <font color="#ff00ff">if((L > 400)&&(L < 29000UL))//2360) </font> //确认是引导头(判断同步位低电平时长31a)
Q1 T! F( }4 e. ] @8 {, s: ^
( z2 [' a* L* |; U4 e5 W: q( i复制代码$ n0 w$ e$ A5 Z; d1 Z
a值怎么得到或是怎么计算呢,实际应用中,根据PT2262的OSC计算公式得到a值误差比较大,再着像SX2262,SC2262等不同型号的IC使用相同OSC电阻产生的频率也不尽相同,所以在代码中做了一个范围的判断,只要在此范围内的值就判定为正确。; `$ Y% }; H: u2 l" p) N, V
通过示波器我们来实际计算一下a的值,由同步头低电平124a 和 一个引脚编码的32a 来相互印证一下,以加深对这个点的理解:
$ V0 @. b$ I5 x# a" w4 Q![]()
3 Z8 u& Q E3 n% }9 g; |% T 首先是同步头的低电平 124a ,通过在虚拟示波器中放置X1标志位(2.66ms),X2标志位(4.92ms)......4.92-2.66=2.26ms =2260us所以124a≈2260us;. D) v" X3 ]* w
9 \6 U7 g6 M+ N( {; {2 v
然后用同样的方法得到PT2262第1脚编码脉宽32a 即X2-X1≈568us
- M( l' B' D- E; o9 u 相互印证计算:a = 568/32 ≈ 17.75 17.75*124 = 2201us 2201 ≈ 2260(同步头124a) 这里的误差在实际应用中忽略不计;, N* Y2 _3 K( k0 ]: }
8 q7 t; ~7 P$ i: S
接下来说一下,编码格式和解码思路。
! [4 n! d4 `" S& J- E- R/ @' r PT2262 地址编码(1脚 - 8脚)有三种状态:接负极 、接正极 、悬空 。它们所产生的编码状态为:00 、11、01;按键编码:只有00或11两种。: \1 K/ x+ A& J% P8 v1 W' O
完整编码的组成:同步头+地址码(16位)+按键码(8位)* e0 f7 v: C0 n0 c9 z5 T
同步头结束以后,就会有24位的脉冲;见(图3)中的P1 - P8 代表芯片的1脚到8脚的编码16个脉冲,后边的10 - 13 代表10脚 -13脚的编码8个脉冲;! ^2 y% X. `9 y3 U! H4 F
单片机解码要完成的任务是:找到同步头,然后再接收24位脉冲数据,计算出地址编码和按键状态,完成任务。
6 p- `7 K$ e7 p4 \4 T- u要完成这个任务,要用到定时器,它来负责对无线接收头送过来的高低电平进行精确计时;- q7 A# }- R$ y' J
定时器怎么来用呢?
8 G8 _; v/ e# E/ w 1、不使用定时器中断;
$ D# E u, ]5 d% E( s) \* x! m1 ` 2、初始值为0,一切从0开始;, v6 k- D' g! I: M7 D
3、电平变化时打开定时器计时,电平再次变化时停止定时器,得到定时器的计时时间;9 d- O6 P) z( s7 e( k$ }) I
* c6 q9 P4 j- G/ }! \
6 _9 z4 H0 y6 n) D6 s# ~+ N
地址编码和按键状态的计算:5 A3 W1 {2 |, \9 U
在代码中:变量yinjiao[1]接收同步头后第1-8个脉冲; (第一脚到第四脚的状态编码)
% A. \- T" w; p4 _) s: P 变量yinjiao[2]接收同步头后第9-16个脉冲; (第五脚到第八脚的状态编码)
9 }2 [4 t G* D) @: {2 V9 T 变量yinjiao[3]接收同步头后第17-24个脉冲; (第十脚到第十三脚的按键状态编码)
; v6 g; o) A6 U M% ~. Q- //计算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 脚状态! Z9 T% G `, |" W ~$ c
% g5 \5 K4 j* {! B1 w复制代码
( E4 m9 ]) a* p) n9 t% }* J- 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;
- }
3 z" K2 o, p/ m% M 5 {6 r' F$ {' M0 l
复制代码0 s4 l* Y2 I4 Z
代码流程导图:( A" d. X4 q. ?1 k
1 N3 j |5 \% K4 y) [7 b
: K d, A. x# K3 X. f3 k
P1 t/ K' S% P# |7 Y$ `
|
|