1/6一种用单片机代替2272解码的算法孔六二kongliuer@gmail.com摘要:2272是一款用以解码的芯片,编码芯片2262发出的编码信号由:地址码、数据码、同步码组成一个完整的码字,解码芯片2272接收到信号后,其地址码经过两次比较核对后,VT脚才输出高电平,与此同时相应的数据脚也输出高电平。本文我们用单片机来模拟代替2272,并以C语言程序来实现。关键字:电子密钥2272AVR单片机C语言一引言2262/2272是一种CMOS工艺制造的低功耗低价位通用编解码电路,2262/2272最多可有12位(A0-A11)三态地址端管脚(悬空,接高电平,接低电平),任意组合可提供531441地址码,2262最多可有6位(D0-D5)数据端管脚,设定的地址码和数据码从DOUT脚串行输出,可用于无线遥控发射电路。编码芯片2262的编码信号是由地址码、数据码、同步码组成一个完整的码字,从DOUT脚输出到射频发射模块的数据输入端发射出去。射频接收模块接收后送到解码芯片2272,其地址码经过两次比较核对后,2272的VT脚才输出高电平,与此同时与2262相应的数据脚也输出高电平,如果2262连续发送编码信号,2272的VT脚和相应的数据脚便连续输出高电平。2262停止发送编码信号,2272的VT端恢复为低电平状态。高频发射电路完全受控于2262的DOUT脚输出的数字信号,从而对高频电路完成幅度键控(ASK调制)相当于调制度为100%的调幅。用单片机代替2272的算法早就实现,其原理是利用延时来处理数据帧。这样的处理方式造成信号的抗噪声能力差,对于扰码不能正常剔除,并不能真正应用。Atmel公司的AVR单片机是第一个真正的8位RISC型单片机,该单片机进入市场后深受用户喜爱。Atmel公司产品的优秀品质主要表现在产品性能卓越、性价比高、可靠性好、低功耗及灵活多样的封装形式等。AVR单片机的关键技术在于片内控制器采用流水线操作和等长指令码的体系结构,使得MCU在执行本条指令的同时,FLASH存储器就能够根据PC中的字地址取得MCU下条要执行的指令码。AVR单片机内部还集成了32个通用快速工作寄存器,进一步提高单片机的运算速度和代码效率。在AVR单片机系列中,大部分器件内部都集成有FLASH、EEPROM和SRAM等不同性质和用途的存储器。相对于出现较早也较为成熟的51系列单片机,AVR系列单片机片内资源更为丰富,接口也更为强大。因此,本文利用低端AVR单片机来代替2272。二2272解码原理编码芯片2262的编码信号是由地址码、数据码、同步码组成一个完整的码字,从DOUT脚输出到射频发射模块的数据输入端发射出去。每组字码(即一帧)之间有同步码隔开,如果用单片机软件解码时,程序只要判断出同步码,然后对后面的字码进行脉冲宽度识别即可。一个字码由12位AD码(地址码加上数据码)组成,每个AD位用两个脉冲来代表:两个窄脉冲表示“0”;两个宽脉冲表示“1”;2/6一个窄脉冲和一个宽脉冲表示“F”也就是地址码的“悬空”。接收到2262发射字码的同时,2272串行输入本地地址码与之进行比较匹配。2272只有在连续两次检测到相同的地址码加数据码后才会把数据码中的“1”驱动相应的数据输出端为高电平和驱动VT端同步为高电平;且2272只有在连续两次检测到不相同的地址码加数据码才会把所有数据输出端和驱动VT端变为低电平。或者2272在长时间没有下一帧数据时,VT端也会变为低电平。图Fig2.1为2262的一位AD码编码,OSC为2262的振荡器频率。为了保证2272解码成功,2272的频率必须是2262的2.5~8倍之间。其中最低倍数时候其数字滤波特性决定,最高倍数由内部计数器最大值决定。对于BIT0,其两个窄脉冲的高电平宽度都为4α,低电平的宽度都为12α。对于BIT1,其两个窄脉冲的高电平宽度都为12α,低电平的宽度都为4α。对于BITf,其第一个脉冲的高电平宽度为4α,低电平宽度为12α;第二个脉冲的高电平宽度为12α,低电平宽度为4α。这样在计算时,可以根据脉冲高低电平的宽度来确定输入数据的值。图Fig2.2为同步码波形,在12个AD码之后紧接着就是同步码。同步码是一个窄脉冲加一段很长的低电平。Fig2.1一位AD码Fig2.2同步码波形三软件算法实现在这里我们用市场上工业级单片机AVR来代替2272,用C语言程序来模拟2272的解码过程,其2272的地址位已经烧录在AVR的flash存储器里面。2272数据输入端DIN、数据输出端DO5~DO0、VT端都用普通IO来代替。软件算法的主要核心就是通过计算输入脉冲的高低电平宽度来确定输入值的大小。由图Fig2.1可知,每个标准的AD位用两个脉冲来代表:两个窄脉冲表示“0”;两个宽3/6脉冲表示“1”;一个窄脉冲和一个宽脉冲表示“F”也就是地址码的“悬空”;且窄脉冲和宽脉冲的理想比值为1:3。为了完全模拟2272AD码的特性,我们做如下设定:窄脉冲定义为“0”,宽脉冲定义为“1”。那么2272的BIT0可以定义为{0,0},BIT1为{1,1},BITf定义为{0,1},{1,0}认为是错误码。如图Fig3.1所示,对于每个AD位通过以下方式来标记,把其中一个脉冲的高电平宽度记为TH,低电平宽度记为TL,每个脉冲宽度记为TP,我们以BIT0作为说明:THTLTPBIT0Fig3.1BIT“0”编码在AD码数据采样进入单片机时,单片机分别用计数器CH和CP分别计算TH和TP宽度。假如计数器的值CP2*CH,那么输入的脉冲为窄脉冲,即为“0”;反正若计数器的值CP2*CH,那么输入脉冲为宽脉冲,即为“1”。计数器CL用来计算脉冲的低电平宽度,CL的值可以用来timeout复位。如果在一帧停止位结束后长时间不来下一帧,那么CL就会计数溢出使得内部所有电路复位。CL的最大值我们可以设定为同步位的长度加上完整一组字码的长度,这样可以使得我们在本次解码完成之后,只需等待完整一组字码时间无信号输入时就可以认为输入悬空或输入错误,并且复位所有的电路。如果脉冲高电平过长,CH的值也会计数溢出,使得内部所有电路复位。这样可以保证在过长高电平或低电平宽度的错误码下,立即把VT端和所有数据端变为低电平。根据CP和CH的关系,只要脉冲的占空比小于50%,输入为“0”,脉冲占空比大于50%的为“1”。对于BIT0两个脉冲的计算值都为“0”,故BIT0可以用{0,0}来表示。当每一个AD码的上升沿时,CH、CP和CL同时复位,并在下一个系统时钟的上升沿开始计数。单片机内部计数器CR用来计数AD码上升沿个数,CR计数器的值用来串行读取内部地址位并与实际输入地址位做比较。CR计数器的最大计数值为25,对应每帧数据码共有25个上升沿。每帧数据有12个AD码和一个同步码,每个AD码有两个上升沿,同步码有一个上升沿,故共有12*2+1=25个上升沿。CR计数器计数溢出后,产生复位信号,复位CR计数器。当下一帧数据的第一个AD码上升沿开始时,CR开始计数。由单片机解码出来的“0”或“1”序列与实际内部地址码序列做比较,若相等则输出一个高电平并存储在AVR单片机的移位寄存器中。如果连续两次比较结果都为高电平,那么VT才能输出高电平,且与2262相对于的数据端也输出高电平。如果连续两次输出低电平,那么VT和所有数据端才能输出低电平。图Fig3.2为序列比较原理图,通过移位寄存器和简单逻辑门的运算就可以实现必须保证连续两次比较结果一致才能输出相应的VT值:Fig3.2序列比较原理计数器计数上升边沿、计数脉冲高点电平宽度,并通过相应的算法来提取实际AD码实际的值。这样在每个AD码占空比不相等的情况下,可以正确的解码成功。外部串行编码数据输入单片机,经过内部算法解码提取地址位。如果输入脉冲的高低电单片机解码序列00010101110011011101111100单片机存储AD码序列00010101110011011101111100实际一组AD码值0fff101f1f110同或比较,相同输出为1,相异输出为0移位寄存器Q3Q2Q1Q0输出到VTQ1Q0Q1Q2Q3Q2Q04/6平宽度小于6个系统时钟,内部数字滤波电路会认为输入是毛刺而直接滤除。当连续两次地址匹配后,相应的数据端和VT变为高电平。图Fig3.3为连续两次正确匹配后,VT变为高电平的仿真波形。当连续两次地址不匹配时,才能把所有数据端和VT变为低电平。这样可以有效的避免扰码,提高解码的容错率。Fig3.3VT变为高电平图Fig3.4为数字滤波电路原理图。由图可知,只有当Q2、Q1和Q0同时为低电平时,即QN2、QN1和QN0同时为高电平,数据DataIn为低电平;只有当Q2、Q1和Q0同时为高电平时,即QN2、QN1和QN0同时为低电平,数据DataIn为高电平。每两个系统时钟采样一次数据,想要三次采样结果一致,那么脉冲宽度至少需要保持六个时钟周期。移位寄存器DINfosc/2Q2Q1Q0QN2QN1QN0DateInQ0Q1Q2QN0QN1QN2Fig3.4数字滤波原理图具体实现流程见图Fig3.4算法流程图,具体程序请参考网站:四总结及典型应用单片机实现编解码芯片给编解码芯片应用商提供了新的解决方案,给编解码芯片和单片机的综合应用提供了一种新的选择方案。经测试,上述单片机实现的2272完全达到了原芯片所有的功能。单片机实现的2272具有更高的灵活可动性,并与单片机紧密结合实现各种功能。单片机在解码的同时,也可以控制其他外设来完成相应的功能;既完成了2272的解5/6码功能,也实现了MCU的控制功能。用单个单片机来完成解码和控制所有的外设,有助于系统的协调一致。图Fig4.1为一典型应用原理图,以市场常见到的PT2272和SYN480R作为例子。SYN480R是单芯片的ASK/OOK射频接收芯片,PT2272是通用解码芯片。VSSANTVDDCTHREFOSCCAGCSHUTDOA0A1A2A3A4A5A6A7VSSVTOSC1OSC2DIND0D1D2D3VCCROSCCodeBit0CodeBit1SYN480RPT2272PB5PB3PB4GNDVCCPB2PB1PB0RESETAtiny13CodeBit1VTVSSANTVDDCTHREFOSCCAGCSHUTDOSYN480RVCCVCCVCCVCCCodeBit0Fig4.1SYN480R与PT2272典型应用图Fig4.1中下图为用MCU代替了PT2272的应用原理图。在节省了PCB面积的前提下,可以有效提高系统的协调一致性。6/6数据采样,若高低电平宽度小于6个系统时钟,数字滤波剔除毛刺上电复位内部复位重新启动本次地址与内部地址是否匹配?当连续两次地址不匹配时,数据数据端拉为低,VT拉为低。内部计数器计算每个脉冲位高低电平宽度,判断CH与CP的关系。CH和CL是否溢出?提取地址位存储本次地址匹配结果再次读取下一次地址下一次地址与内部地址是否匹配?连续两次地址匹配后,相应数据数据端为高,VT输出为高。下一次地址与内部地址是否匹配?启动DataInNOYESYESYESNONOYESNO下一次地址与内部地址是否匹配?YESNONOFig3.4算法流程图参考文献:[1]PrincetonTechnologyCorp.。[2]ATMEL.[2]胡汉才。《高档AVR单片机原理及应用》清华大学出版社,2008年2月。[3]杨颂华,冯毛官。《数字电子技术基础》西安电子科技大学出版社,2009年8月。作者简介:孔六二,男,汉族,1986年6月出生,2008年毕业于西安电子科技大学。毕业后就职于上海圣景科技,从事电子电路咨询及单片机开发等工作。通信地址:上海市杨浦区国定路700弄8号503,15001901442。Email:kongliuer@gmail.com