|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
先上一个PT2262的发射电路原理图,一般应用 中,1脚 至 8脚做为地址编码,10脚 至 13脚做为四个按键来使用;
5 }2 W4 n7 O9 u+ Q' F Y- U* ] + Y z! s3 P) L( C: z
: P5 B2 X" @% X* e7 B7 w* a
网上好多此类代码和文章,其中有些地方对于刚接触的来说不甚理解,在此我对在学习此类解码程序时遇到的不解再来简要的分析一下:比如解释代码时谈到的 32a 128a是个什么意思。先看下图:
% B1 k. v4 j+ N- f( I: D6 H. o 0 O- f- M- M: c" w
8 l, F( H. o9 s3 M
![]()
5 Y. n5 t7 w! ]- O5 [ 从图中可以知道一个编码0(引脚接负极)、1(引脚接正极) 、F(引脚悬空)(也就是PT2262一个编码引脚的状态)占用32a,,,,a是啥,a是一个时钟周期“T” ,时钟是怎么来的? 15脚和16脚串接的OSC电阻产生的。 阻值决定了PT2262的振荡频率。厂家给出的计算公式:(频率KHZ)F=2*1000*16/Rosc(单位 K欧).
: v9 c2 L, u) R1 @8 {; [8 T& n 利用一个简易的虚拟示波器来完成我们的实验讲解:+ x0 G" ~" [$ f* ?" e0 X
" [9 V4 [( \! a8 U6 {5 ]8 g$ R! F
得到遥控器的完整波形,见下图:
' N5 I/ U& |# ?3 C* A* C4 t![]()
& O( t: v% d! s9 @) H( ~
T% \% D3 u+ i% O3 i q 图3
% U/ K) c" I9 o6 W' X 是不是一下子不能看懂呢?没关系慢慢来,先说同步头,它由一个4a高电平和124a低电平组成,在代码中只对124a低电平进行判断,给这个低电平% n; }1 g' w" n& k0 O; H
限定一个范围,超出这个时间范围的低电平不是同步头的低电平:
! Y7 d! `- o, K0 G* H- <font color="#ff00ff">if((L > 400)&&(L < 29000UL))//2360) </font> //确认是引导头(判断同步位低电平时长31a)" T g& @( u# J* d. X7 @
4 P8 K6 {1 A7 [+ `, }
复制代码
1 ?- \& T2 N7 E a值怎么得到或是怎么计算呢,实际应用中,根据PT2262的OSC计算公式得到a值误差比较大,再着像SX2262,SC2262等不同型号的IC使用相同OSC电阻产生的频率也不尽相同,所以在代码中做了一个范围的判断,只要在此范围内的值就判定为正确。' f% f2 O+ T5 g/ j' e
通过示波器我们来实际计算一下a的值,由同步头低电平124a 和 一个引脚编码的32a 来相互印证一下,以加深对这个点的理解:
6 {- U1 ]1 H- E7 ]+ x" x 5 n5 w/ y; D- Q( w
首先是同步头的低电平 124a ,通过在虚拟示波器中放置X1标志位(2.66ms),X2标志位(4.92ms)......4.92-2.66=2.26ms =2260us所以124a≈2260us;
1 o; F6 f7 u6 `' P5 n5 y, V- O![]()
; { B: k. P* H: L8 ?. R. @7 a 然后用同样的方法得到PT2262第1脚编码脉宽32a 即X2-X1≈568us / K" m! q I' |" ?% N0 I$ C- O
相互印证计算:a = 568/32 ≈ 17.75 17.75*124 = 2201us 2201 ≈ 2260(同步头124a) 这里的误差在实际应用中忽略不计;
! E# f) c. k( C( C& S2 s/ ~4 I: t5 i
; ]0 J+ [" V; z* u5 ] 接下来说一下,编码格式和解码思路。
: S$ \& _, z2 F PT2262 地址编码(1脚 - 8脚)有三种状态:接负极 、接正极 、悬空 。它们所产生的编码状态为:00 、11、01;按键编码:只有00或11两种。
P; n# S5 i* [& k" D 完整编码的组成:同步头+地址码(16位)+按键码(8位)
; Y, q( J8 }0 f5 v# h 同步头结束以后,就会有24位的脉冲;见(图3)中的P1 - P8 代表芯片的1脚到8脚的编码16个脉冲,后边的10 - 13 代表10脚 -13脚的编码8个脉冲;
7 U4 O9 `* {/ z/ D 单片机解码要完成的任务是:找到同步头,然后再接收24位脉冲数据,计算出地址编码和按键状态,完成任务。
. x) T- g& U4 @; O/ f% d; g要完成这个任务,要用到定时器,它来负责对无线接收头送过来的高低电平进行精确计时;- c) y! g, k0 w/ e% ]. K q- f
定时器怎么来用呢?
5 I* B0 o) S& a7 T! |/ K" ` 1、不使用定时器中断;6 E$ _6 [/ \2 k6 G
2、初始值为0,一切从0开始;2 V$ N0 S# m# Y( _/ H/ S1 [
3、电平变化时打开定时器计时,电平再次变化时停止定时器,得到定时器的计时时间;
, o! M! B. b @ J# D, w9 } r, C( Z {* e
# L+ G. m9 L# k T) F
地址编码和按键状态的计算:
9 L6 k; e: n$ x; | 在代码中:变量yinjiao[1]接收同步头后第1-8个脉冲; (第一脚到第四脚的状态编码). C2 A5 t9 L1 {% q7 k8 b4 ^) v
变量yinjiao[2]接收同步头后第9-16个脉冲; (第五脚到第八脚的状态编码)
/ x9 ~6 c" i1 {6 d' a- ] 变量yinjiao[3]接收同步头后第17-24个脉冲; (第十脚到第十三脚的按键状态编码)
5 y6 H. j( D+ L) K5 w& Y. p- //计算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 脚状态- d' [) Y/ z8 B5 m7 Y( g
7 S; `, g, m: q# c
复制代码
: G1 W5 k8 N( a- 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;
- }( B: d2 b8 ~/ J1 q4 ?
- V- B: h& H2 B h0 g& ^& f9 J复制代码0 _5 }- x$ I+ k3 ~+ r" U& T {
代码流程导图:' S/ @0 s2 r. Q
: e; P5 l! f: X" k) Y# f \( E, f
% T# f$ m2 p# j, b# i9 y9 S, r0 \
P J Z5 I9 R+ \- y% `
|
|