|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
先上一个PT2262的发射电路原理图,一般应用 中,1脚 至 8脚做为地址编码,10脚 至 13脚做为四个按键来使用;3 |4 G, Y+ p" p7 t# N" g+ i% p
2 L6 o" w/ L+ F; p% E+ ?$ y& Y4 o
$ q8 S% A; `( h& a: I, p) S2 B网上好多此类代码和文章,其中有些地方对于刚接触的来说不甚理解,在此我对在学习此类解码程序时遇到的不解再来简要的分析一下:比如解释代码时谈到的 32a 128a是个什么意思。先看下图:
7 n0 N: ?8 G1 _ `8 |![]()
$ q2 Y0 e# R, t) _0 G, Q2 o- r' }$ C$ d( w; `3 o) O
![]()
7 H Q! d5 {& x& x 从图中可以知道一个编码0(引脚接负极)、1(引脚接正极) 、F(引脚悬空)(也就是PT2262一个编码引脚的状态)占用32a,,,,a是啥,a是一个时钟周期“T” ,时钟是怎么来的? 15脚和16脚串接的OSC电阻产生的。 阻值决定了PT2262的振荡频率。厂家给出的计算公式:(频率KHZ)F=2*1000*16/Rosc(单位 K欧).) ?2 W6 A( i: t" J" G1 E
利用一个简易的虚拟示波器来完成我们的实验讲解:. g7 t* b0 l- L; C. \
, ^' m3 C1 i: W5 ^' B' W" r+ @* e. o
得到遥控器的完整波形,见下图:4 r! S E& l& W
![]()
/ @) X( m; R: g1 Z. I6 ~: H; z1 X# Z5 C0 i) [! Z* l: O0 i
图3
% q# Z& i2 l& l1 E6 r 是不是一下子不能看懂呢?没关系慢慢来,先说同步头,它由一个4a高电平和124a低电平组成,在代码中只对124a低电平进行判断,给这个低电平5 H9 f: y+ w+ z# J4 ?* T' P
限定一个范围,超出这个时间范围的低电平不是同步头的低电平:
' l+ d9 _1 g$ j4 \: }2 c- <font color="#ff00ff">if((L > 400)&&(L < 29000UL))//2360) </font> //确认是引导头(判断同步位低电平时长31a)6 A: f; B' O; V+ f# B* ?2 u. y9 _
" G, ?6 Z# D) s
复制代码* J$ I" x! Z, ~9 Q
a值怎么得到或是怎么计算呢,实际应用中,根据PT2262的OSC计算公式得到a值误差比较大,再着像SX2262,SC2262等不同型号的IC使用相同OSC电阻产生的频率也不尽相同,所以在代码中做了一个范围的判断,只要在此范围内的值就判定为正确。
& ]- A) s' R" {- v 通过示波器我们来实际计算一下a的值,由同步头低电平124a 和 一个引脚编码的32a 来相互印证一下,以加深对这个点的理解:
5 o8 i" G2 a7 a# e) F. t$ B![]()
$ V# w# v f8 I' n 首先是同步头的低电平 124a ,通过在虚拟示波器中放置X1标志位(2.66ms),X2标志位(4.92ms)......4.92-2.66=2.26ms =2260us所以124a≈2260us;; E& E% s& x2 n, G% q9 t
B- ]; E, {" j1 ^4 A% V9 B
然后用同样的方法得到PT2262第1脚编码脉宽32a 即X2-X1≈568us ; l5 Y% N- u/ j/ R
相互印证计算:a = 568/32 ≈ 17.75 17.75*124 = 2201us 2201 ≈ 2260(同步头124a) 这里的误差在实际应用中忽略不计;" }/ V* K0 J- k% v! d4 u
3 e6 B5 V t8 Z3 i! z; v# T: N p 接下来说一下,编码格式和解码思路。" g5 Z7 r' B! b
PT2262 地址编码(1脚 - 8脚)有三种状态:接负极 、接正极 、悬空 。它们所产生的编码状态为:00 、11、01;按键编码:只有00或11两种。$ N; Z. p3 o) F
完整编码的组成:同步头+地址码(16位)+按键码(8位)9 `, b/ C, P5 Q
同步头结束以后,就会有24位的脉冲;见(图3)中的P1 - P8 代表芯片的1脚到8脚的编码16个脉冲,后边的10 - 13 代表10脚 -13脚的编码8个脉冲;7 ^/ v4 k' c0 Y* ~* E9 w) v
单片机解码要完成的任务是:找到同步头,然后再接收24位脉冲数据,计算出地址编码和按键状态,完成任务。- A- @4 X) K% Z
要完成这个任务,要用到定时器,它来负责对无线接收头送过来的高低电平进行精确计时;
- y. }) g- C! |' c& l3 A% H 定时器怎么来用呢?
+ d* d1 B/ X% B& ]2 ]/ m2 n$ T 1、不使用定时器中断;
; Y( `* [ C$ m8 F% |, x( K 2、初始值为0,一切从0开始;7 }- @" P. ^5 `; F# Z+ [% C
3、电平变化时打开定时器计时,电平再次变化时停止定时器,得到定时器的计时时间;* c- T( W i8 h, H+ l! L( e4 b
- n" a; T4 [# X" m/ \: u
" C! b* W i# ~0 B+ n8 R$ ^ 地址编码和按键状态的计算:3 P, A9 c+ m8 n- P o
在代码中:变量yinjiao[1]接收同步头后第1-8个脉冲; (第一脚到第四脚的状态编码)
" M/ {0 M, v( Q" a. a 变量yinjiao[2]接收同步头后第9-16个脉冲; (第五脚到第八脚的状态编码)
" }+ b9 q! r x 变量yinjiao[3]接收同步头后第17-24个脉冲; (第十脚到第十三脚的按键状态编码)
2 F3 R q3 Z0 }3 X# G/ z1 ^- //计算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 脚状态6 Y# U# x; g1 F" `. V3 ]
: Z- B! f" \' y, m
复制代码2 k# h# u6 I3 B7 g* z4 u& u
- 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;
- }
: [6 q7 ]( m8 i- l/ e
2 ^$ p. m' ]/ k: b' }# B% }' y% }; ~复制代码# S& J) V4 O# q, s J/ f
代码流程导图:
# F5 Y1 x8 |, E$ x1 J0 a7 p![]()
f. r, Y _6 O( K Y9 N
& S, [- G6 u6 ?5 xP
" F z7 v5 \- V" [: q& F8 B7 v& O, p |
|