|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
先上一个PT2262的发射电路原理图,一般应用 中,1脚 至 8脚做为地址编码,10脚 至 13脚做为四个按键来使用;
. T8 M+ h$ d2 @ |$ S: f , E5 Q# p, \/ w1 P, C. B7 d) @8 a
0 s0 m k: e; t; z. K( L网上好多此类代码和文章,其中有些地方对于刚接触的来说不甚理解,在此我对在学习此类解码程序时遇到的不解再来简要的分析一下:比如解释代码时谈到的 32a 128a是个什么意思。先看下图:
9 p' D6 m, `* `$ W 6 H+ n8 O9 O+ w$ ~
; G0 \- \1 K8 v/ {3 y
![]()
% `( A. e: T- ]- \6 r' R 从图中可以知道一个编码0(引脚接负极)、1(引脚接正极) 、F(引脚悬空)(也就是PT2262一个编码引脚的状态)占用32a,,,,a是啥,a是一个时钟周期“T” ,时钟是怎么来的? 15脚和16脚串接的OSC电阻产生的。 阻值决定了PT2262的振荡频率。厂家给出的计算公式:(频率KHZ)F=2*1000*16/Rosc(单位 K欧).5 d1 o8 e! f1 F: T" ]4 u# R
利用一个简易的虚拟示波器来完成我们的实验讲解: |! A& D6 s* g
: P+ X5 D* H5 u% d# _3 B4 O
得到遥控器的完整波形,见下图:' r: w( V3 \: ^" G/ A
![]()
% q3 p/ w4 J0 _. F7 V% a) I% {; b; i
/ J9 U6 t( @" e+ @. ? B 图3+ K- Z7 m7 ^& Y: L' c n- \
是不是一下子不能看懂呢?没关系慢慢来,先说同步头,它由一个4a高电平和124a低电平组成,在代码中只对124a低电平进行判断,给这个低电平
: r# L$ _1 h, U& t) n7 v/ f; E限定一个范围,超出这个时间范围的低电平不是同步头的低电平:6 l7 E$ q) P0 Q& u1 ~" R
- <font color="#ff00ff">if((L > 400)&&(L < 29000UL))//2360) </font> //确认是引导头(判断同步位低电平时长31a). o R2 T0 ^9 Q4 R3 @+ z
! D- |6 ^4 F2 Q, H) Q$ |+ U7 ]5 M
复制代码* x( b) [9 d# F9 |& y* ]4 ~3 o
a值怎么得到或是怎么计算呢,实际应用中,根据PT2262的OSC计算公式得到a值误差比较大,再着像SX2262,SC2262等不同型号的IC使用相同OSC电阻产生的频率也不尽相同,所以在代码中做了一个范围的判断,只要在此范围内的值就判定为正确。
8 v. \1 n% F' c7 Z m2 S4 _% b: N0 r 通过示波器我们来实际计算一下a的值,由同步头低电平124a 和 一个引脚编码的32a 来相互印证一下,以加深对这个点的理解:
: d% z1 R1 J) o J* o4 `+ u![]()
; I+ r% G% S' n3 [9 d% V4 n 首先是同步头的低电平 124a ,通过在虚拟示波器中放置X1标志位(2.66ms),X2标志位(4.92ms)......4.92-2.66=2.26ms =2260us所以124a≈2260us;- ]! z' }# W. T
; ~- V9 j4 p+ W3 P! N* p! m. A
然后用同样的方法得到PT2262第1脚编码脉宽32a 即X2-X1≈568us
/ |4 g: t, j- o+ s! c2 i2 h% T9 V 相互印证计算:a = 568/32 ≈ 17.75 17.75*124 = 2201us 2201 ≈ 2260(同步头124a) 这里的误差在实际应用中忽略不计;
8 u7 N/ M' C" @( l$ v3 s. J5 G, c6 }/ S1 o
接下来说一下,编码格式和解码思路。
0 Y* L" ]8 a* T4 B PT2262 地址编码(1脚 - 8脚)有三种状态:接负极 、接正极 、悬空 。它们所产生的编码状态为:00 、11、01;按键编码:只有00或11两种。4 i) @; U9 ?3 D' M. v
完整编码的组成:同步头+地址码(16位)+按键码(8位)3 Q" {: l" B1 f4 h
同步头结束以后,就会有24位的脉冲;见(图3)中的P1 - P8 代表芯片的1脚到8脚的编码16个脉冲,后边的10 - 13 代表10脚 -13脚的编码8个脉冲;
' k4 N: P R B1 K 单片机解码要完成的任务是:找到同步头,然后再接收24位脉冲数据,计算出地址编码和按键状态,完成任务。/ O5 `0 B8 z1 k8 Z5 D# X# ?) @
要完成这个任务,要用到定时器,它来负责对无线接收头送过来的高低电平进行精确计时;
% g* d1 t- d; w. X! }: \ 定时器怎么来用呢?7 S p2 w/ Q- }, r3 k8 Z
1、不使用定时器中断;
# Y: `+ F {" J# X& i6 i) V ^, y 2、初始值为0,一切从0开始;
+ G7 T. {! N( X- K 3、电平变化时打开定时器计时,电平再次变化时停止定时器,得到定时器的计时时间;
5 n7 w( r$ a3 `& d, G4 G
) |6 r$ x% E+ q7 ]! H& A8 w* ^, Y, i, e; m; [) X, X
地址编码和按键状态的计算:
* w8 u2 N. y$ f: g+ G( D( G$ x 在代码中:变量yinjiao[1]接收同步头后第1-8个脉冲; (第一脚到第四脚的状态编码)
$ L& ?6 ]0 X! v 变量yinjiao[2]接收同步头后第9-16个脉冲; (第五脚到第八脚的状态编码)
9 x& x) w4 i' v+ `! o% J$ d 变量yinjiao[3]接收同步头后第17-24个脉冲; (第十脚到第十三脚的按键状态编码)
1 I5 ^/ Z _# H- //计算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 脚状态5 |' c& \) r) ~0 y: G2 L* Z* J- i
0 s# z: c9 N+ w( k' N6 G复制代码
0 c1 `: b" a" s- a8 L: b# B, F) W4 k6 S- 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;
- }& Z/ W4 a6 _; d) v
7 C# D0 T+ U7 m0 I8 V5 f. l复制代码& h$ C# [4 L/ A" j% o4 a' V
代码流程导图:2 g% U# G5 k6 d0 ^3 Q3 B7 t8 A
![]()
5 K9 q1 C+ N/ l# F+ k" v2 f
5 G8 X. M: e: o5 w4 \% U' u- IP7 i6 o( W0 i: r9 ~8 {/ |
|
|