红外遥控软件编解码简析
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
红外遥控软件编解码简析
摘要:
介绍如何用SONIX单片机实现红外编解码,并讨论SONIX系列芯片在实现红外遥控中的优势所在。
文中给出红外发射和接收硬件原理图,并给出相应程序。
关键词:Buzzer输出,外部电平变化中断
引言:
红外线遥控是目前应用最广泛的一种通信和遥控手段。
由于红外线遥控器具有体积小、功耗低、功能强、成本低等特点。
因此在家电产品中有着广泛的应用。
相比与专用的控制芯片,微控制器具有开发灵活的特点,用户可以随意制定编解码格式。
SONIX 8bit MCU中的
1、1K的ROM,48bit的RAM完全可以用来开发普通的红外遥控产品,4K的ROM,128bit
的RAM可用做高端复杂的红外遥控产品。
2、Buzzer输出功能可以方便的实现38K载波,1/2个计时计数器,上升下降沿可选的
外部中断便于灵活接收和解码。
3、5V/4MHz条件下,正常工作电流2~3mA,睡眠电流小于1uA,便于电池供电系统。
一、红外编码格式说明
用户采用红外模块时,编码格式非常灵活。
目前市场上的红外编码格式非常多,每家公司都可以自己定义一种编解码格式。
下面以一种比较常用的格式来做分析说明(示意图中高电平代表38K载波输出):
上面的波形格式包括前导码(Load Code)、身份码和身份反码(ID Code)、数据码和数据反码(Data Code)。
导航码(Load Code):导航码用来通知接受器其后为遥控数据,解码部分在接受到这个信号后就可以开始解码。
系统码(ID Code):系统码用来区分是哪一机型的数据,接收端依此来判断后续的数据是否为须执行的指令。
数据码(Data code):数据码用来区分是哪一个键被按下,接收端根据数据码做出应该执行什么动作的判断。
数据帧间的空闲时间:有用信号中两帧数据间的空闲时间。
红外遥控数据传输系统中的关键是数据传输的可靠性。
因此有些公司也会在系统码和数据码后面分别再传送一个同样的码或反码,供误码校验用。
在红外遥控编码中数据位的格式一般如下图所示,通过低电平的时间不同,来区别0和1。
在解码的时候既可以根据总的时间长度不同来解码,也可以根据低电平时间的不同来解码。
Bit 0 Bit 1
二、红外发射接收硬件电路部分
红外遥控的发射接收电路比较简单,其中接收电路可以使用集成红外接收器成品。
接收器包括红外接收管和信号处理IC。
接收器对外只有3个引脚:Vcc、GND和1个脉冲信号输出PO。
与单片机接口非常方便,如图所示。
①Vcc接系统的电源正极(+5V);
②GND接系统的地线(0V);
③脉冲信号输出接CPU的中断输入引脚。
采取这种连接方法,软件解既可工作于查询方式,也可工作于中断方式。
但需要注意的两点:一是注意发射接收管的驱动电流;二是要注意接收部分的滤波措施,上图中C2就是用做稳定输出波形,但注意C2不可太大。
三、红外编码发射接收软件实现部分
1、红外编码发射部分软件实现方法:
红外发射管需要靠38K的载波驱动,才能将信号发送出去。
有的MCU没有BUZZER
输出功能,不能靠硬件实现38K载波,就必须用软件模拟38K载波的输出。
而我们SN8P25XX,SN8P26XXS系列的BUZZER输出功能配合适当的震荡频率,可以很方便的实现38K载波的输出。
红外发射部分的软件实现一般可以分为两种:纯软件编码发射,计时器编码发射。
纯软件编码发射:根据编码格式,利用延时取得适当的时间段来控制载波的输出时间和输出间隔时间,达到编码正确发送的目的。
这种方式思路简单容易实现,但比较浪费资源,实时性不高,也不利于程序的移植。
计时器编码发射:根据编码格式,采用计时器中断取得合适的时间段来控制载波的输出时间和输出间隔时间。
这种方法充分利用了系统的资源,执行效率很高,并很容易实现程序的移植。
现采用SN8P2602A,外部晶振为3.58MHz所做的一款简单的遥控器,其编码发射流程图见图1。
图1
2、红外编码接收部分软件实现方法:
根据数据帧中不同的数据位格式和MCU中的资源,重要数据解码接收在程序设计中存在很大差别。
一般有几种情况:纯软件解码、计时器解码、外部中断和计时器配合解码等。
纯软件解码:根据数据格式采用延时方式来取得合理的采样时间,每到达一次采样时间就测电平变化以确定解码数值。
此种方法对MCU资源要求不高,无需计时器,也无需外部电平变换中断源,其实现方法也比较简单,并可以进行软件滤波处理。
但此方法在解码过程中不能并行处理其他事,所以在比较复杂的系统中不推荐应用。
计时器解码:可以有两种思路来实现解码:一种方式是根据数据位格式利用计时器取得合理的采样时间,每达到一次采样时间就检测电平变化,根据在设定的时间内检测到高电平(或低电平)的次数来确定解码数值。
另一种方法是累计电平变化的时间,计算两次电平变化之间的时间,再根据时间的长短来确定解码数值。
外部中断和计时器配合解码:利用外部中断的下降沿中断功能侦测编码信号的电平变化,利用计时器采样检测电平,累计时间以确定解码数值。
此种方式效率高,解码灵敏,可以实现各种复杂系统中的准确解码。
但在应用外部中断做信号变化侦测的时候,要注意外部干扰信号,需要在外部电路中做好滤波措施。
在SONIX的SN8P25XX,SN8P26XX系列中都有电平变化的外部中断源,因此非常适合各种编码格式的解码。
下面为采用方式三解码的程序流程图,如下图。
解码子程序主程序模块
四、红外编解码设计中的注意点
1、红外产品中遥控部分工作系统一般比较简单,并且实现准确的波形也相对比较简单。
因此在确定编码格式的时候要充分考虑到解码的方便性,准确性。
这主要要从数据码0和1的编码时间长短方面来考虑。
一般说来,时间T不宜过短,越短对解码部分MCU的工作速度要求越高,误码率也会随之增加。
但如果T的时间过长,将降低数据传输速率。
下面为NEC格式采用的编码时间,可做参考。
Bit 0 Bit 1
2、红外编码信号的发射一般是通过按键输入来发射相应的信息码。
因此,在检测到按键按下后,一般有两种处理方法:一种是在按键按下的过程中一直发送数据,按键弹起发送完最后一帧完整数据后便停止发送或直接停止发送。
这样一般不会出现误码的情况。
另一种是在检测到按键按下后,固定发送几帧数据,然后停止发射。
但此方法不能保证接收方每次都完整收码,误码率较高。