|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
先上一个PT2262的发射电路原理图,一般应用 中,1脚 至 8脚做为地址编码,10脚 至 13脚做为四个按键来使用;
( o0 K/ w0 B( f![]()
3 n6 v" A0 H, [7 G% d5 L8 k, u( w+ f) v, ]7 x* C6 s
网上好多此类代码和文章,其中有些地方对于刚接触的来说不甚理解,在此我对在学习此类解码程序时遇到的不解再来简要的分析一下:比如解释代码时谈到的 32a 128a是个什么意思。先看下图:
1 a3 J) Y+ _) L6 |![]()
# ]) v. n5 z7 s0 D! N, k& @+ P0 U6 `2 x6 l6 y4 C! `
" X; q) Z1 [$ X5 v- L4 ?
从图中可以知道一个编码0(引脚接负极)、1(引脚接正极) 、F(引脚悬空)(也就是PT2262一个编码引脚的状态)占用32a,,,,a是啥,a是一个时钟周期“T” ,时钟是怎么来的? 15脚和16脚串接的OSC电阻产生的。 阻值决定了PT2262的振荡频率。厂家给出的计算公式:(频率KHZ)F=2*1000*16/Rosc(单位 K欧).* {$ \; |0 @8 e' D, w
利用一个简易的虚拟示波器来完成我们的实验讲解:% Z; ^! c+ v: r6 M
![]()
" l) a0 h3 D# |* @ 得到遥控器的完整波形,见下图:9 A- {3 V' ^. {; ~ R; f
7 {( Q. v) e A* b
) r2 f7 B/ C6 \
图3
; P9 o6 f3 Y) J& E8 N 是不是一下子不能看懂呢?没关系慢慢来,先说同步头,它由一个4a高电平和124a低电平组成,在代码中只对124a低电平进行判断,给这个低电平
5 }& L# n. R A+ _, I$ {, e限定一个范围,超出这个时间范围的低电平不是同步头的低电平:3 T: b: B, b3 N5 q: j; f6 v
- <font color="#ff00ff">if((L > 400)&&(L < 29000UL))//2360) </font> //确认是引导头(判断同步位低电平时长31a)
4 L" U9 F: }% r& ~: y
6 w" `% R4 v& d9 K. f5 G/ S7 D# _7 ^复制代码. F) [+ k6 i4 c6 @) G2 X+ E
a值怎么得到或是怎么计算呢,实际应用中,根据PT2262的OSC计算公式得到a值误差比较大,再着像SX2262,SC2262等不同型号的IC使用相同OSC电阻产生的频率也不尽相同,所以在代码中做了一个范围的判断,只要在此范围内的值就判定为正确。
2 s9 R) v8 c! h5 r3 \$ \; ]4 j9 e$ Z 通过示波器我们来实际计算一下a的值,由同步头低电平124a 和 一个引脚编码的32a 来相互印证一下,以加深对这个点的理解:
& f, B6 ^* y h# U . F, b4 _1 G; }; ~ n U6 a/ @7 M& m
首先是同步头的低电平 124a ,通过在虚拟示波器中放置X1标志位(2.66ms),X2标志位(4.92ms)......4.92-2.66=2.26ms =2260us所以124a≈2260us;
5 `2 O2 o5 t" K( w1 E/ f![]()
* o# U9 B9 Z) F8 o" N* a- H 然后用同样的方法得到PT2262第1脚编码脉宽32a 即X2-X1≈568us ; B; p: `! I$ D! {$ S+ ]
相互印证计算:a = 568/32 ≈ 17.75 17.75*124 = 2201us 2201 ≈ 2260(同步头124a) 这里的误差在实际应用中忽略不计;8 [ [! s! @) ^
! J" {' c0 Z; k, X* _1 r( v# \, g4 U 接下来说一下,编码格式和解码思路。
' Q' {4 l& A1 g1 }" h PT2262 地址编码(1脚 - 8脚)有三种状态:接负极 、接正极 、悬空 。它们所产生的编码状态为:00 、11、01;按键编码:只有00或11两种。
6 F3 i: R' a3 y* q# Q6 o, r 完整编码的组成:同步头+地址码(16位)+按键码(8位): [( ]5 M5 g9 [4 u" M/ I$ ]
同步头结束以后,就会有24位的脉冲;见(图3)中的P1 - P8 代表芯片的1脚到8脚的编码16个脉冲,后边的10 - 13 代表10脚 -13脚的编码8个脉冲;) S2 n' L$ O+ z, W9 P
单片机解码要完成的任务是:找到同步头,然后再接收24位脉冲数据,计算出地址编码和按键状态,完成任务。
" g+ r1 u: |' F& J要完成这个任务,要用到定时器,它来负责对无线接收头送过来的高低电平进行精确计时;9 U! E4 t! S5 F4 j ~
定时器怎么来用呢?
6 v5 d$ l! F: l d5 H 1、不使用定时器中断;
/ x) i, x7 C" {& Z# m5 ^ 2、初始值为0,一切从0开始;! i9 F/ p/ g+ C2 q# M" }
3、电平变化时打开定时器计时,电平再次变化时停止定时器,得到定时器的计时时间;, w) g4 k; m. R
/ p X4 v$ A% s, S5 ~
" l2 a# i, t3 q0 x# i. K9 P' X
地址编码和按键状态的计算:
- h+ O1 T8 } `% C+ m, c g! z) e 在代码中:变量yinjiao[1]接收同步头后第1-8个脉冲; (第一脚到第四脚的状态编码)
. t8 z' Q- T/ y# [/ K 变量yinjiao[2]接收同步头后第9-16个脉冲; (第五脚到第八脚的状态编码)
/ h! d* I; S) t" h2 i8 e 变量yinjiao[3]接收同步头后第17-24个脉冲; (第十脚到第十三脚的按键状态编码)( w$ E' ]8 Y% ]' f) X5 F
- //计算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 脚状态
8 c1 w" R/ [. {" L% Y* S " g3 U9 j0 }7 B9 D
复制代码, M; q4 r/ F& w a9 ` h- \+ a( f
- 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;
- }; |$ F) n* e) O! d; Z9 u
) w! n5 }& S C. T" q
复制代码6 H( c3 S5 e: r- a$ n( o. e1 S
代码流程导图:3 D {# S! u# [
1 A) x) Y2 C+ E9 X+ E
2 u8 _! \' B. [, y2 p
P
( W* y2 c, l. R3 b |
|