单片机如何通过捕获来实现对红外遥控器解码

合集下载

单片机定时器捕获模式解码红外遥控器的方法

单片机定时器捕获模式解码红外遥控器的方法

单片机定时器捕获模式解码红外遥控器的方法何乃味【摘要】以单片机作为核心控制器的电子产品日益广泛使用,它们的操作方式主要还是由外接的键盘来完成.若在此类产品中增加红外遥控功能,将使它们的操作更加人性化.用单片机进行软件解码最普遍的方法有查询法和外部中断法,在此详细介绍一种用AT89S52单片机定时器T2捕获功能实现接收解码的新方法,给出了解码的程序流程图和相应的子程序.实践证明,该解码方法占用单片机资源少,程序代码运行稳定可靠,效率高.该解码方法可为单片机产品开发者提供一个非常实用的参考,也可为学习者提供一个典型的应用范例.%Microcontroller which is taken as a core controller in electronic products is widely used. Its operation mode is still performed by external keyboard. If the infrared remote control function is added in the electronic products, their operation will be more humanized. The most common methods for software decoding with MCU are the inquiry method and external interrupting method. A new method of realizing the receiving decoding by the capture function of AT89S52 MCU Timer2 is introduced in detail. The program flowchart of the decoding and its corresponding subroutine are given in this paper. The practice application proves that the decoding method occupies less resources of MCU, and is stable, reliable and efficient in the code operation. This decoding method can provide a very useful reference for MCU developers, and a typical application example for the learners.【期刊名称】《现代电子技术》【年(卷),期】2012(035)018【总页数】3页(P11-13)【关键词】AT89S52;红外遥控;编码;解码【作者】何乃味【作者单位】柳州职业技术学院,广西柳州 545005【正文语种】中文【中图分类】TN911-340 引言红外遥控器技术早已广泛应用于各类家用电器中,目前许多以单片机作为核心控制器的电气设备和电子产品也逐渐采用该技术,使用户的操作更加灵活方便。

利用AVR(M8)的输入捕获(ICP)对万能红外线遥控器进行解

利用AVR(M8)的输入捕获(ICP)对万能红外线遥控器进行解

利用A VR(M8)的输入捕获(ICP)对万能红外线遥控器进行解码本实例程序为自创,若转载请注明出处,谢谢!小弟不久前买了一个科朗公司出版的万能电视遥控器RM-2008,用作对设备的红外遥控,折腾了几天,今天终于弄清楚了如何对该遥控器进行解码,很开心,所以把成果与各位大虾分享,有什么错误的地方请指正。

万能遥控器在使用前一般要进行设置,针对RM-2008这款万能遥控,设置方法如下:先按住“设置”键不放,再按下“电源”(“开/关”)键,工作指示灯亮起,然后释放两键,在此时进入代码输入状态,依次键入0 0 0 指示灯熄灭,设置成功!说明一下:0 0 0 编码是日立公司初期的红外编码方式,也就是网上到处都通用的红外编码方式(如下图),另外本程序只能对此编码进行解码数据头的时间:Th=9+4.5=13.5ms数据“0”的时间:T0=0.565+0.56=1.125ms数据“1”的时间:T1=1.685+0.56=2.245ms本程序通过使用输入捕获功能(ICP)捕捉红外信号的高电平脉宽,达到解码的目的;如果捕获到的脉宽是4.5ms 则表示此信号为同步码,如果捕获到的脉宽是1.685ms 的话则表示“1”否则表示“0”测试电路如下:使用DNW 串口调试软件时的效果/////////////////////////////////只有一个文件main.c/////////////////////////////////// #include <avr/io.h>#include <avr/signal.h>#include <avr/interrupt.h>#include <avr/wdt.h>#include <util/delay.h>#include <stdio.h>/*----------------------遥控操作值--------------------*/// key code (hex)#define Key_1 0x01#define Key_2 0x02#define Key_3 0x03#define Key_4 0x04#define Key_5 0x05#define Key_6 0x06#define Key_7 0x07#define Key_8 0x08#define Key_9 0x09#define Key_0 0x00#define Menu 0x5c // 菜单#define Menu_up 0x56 // 菜单上#define Menu_down 0x57 // 菜单下#define Menu_left 0x5f // 菜单左#define Menu_right 0x5b // 菜单右#define Menu_ok 0x16 // 菜单确认#define Channel_up 0x1b // 频道+ #define Channel_down 0x1f // 频道- #define Sound_up 0x1e // 音量+ #define Sound_down 0x1a // 音量- #define Open_Close 0x12 // 开/关#define Mute 0x10 // 静音#define Pic_in_pic 0x51 //画中画#define Standard 0x58 // 制式#define Return 0x52 // 返回#define Times 0x0b // 倍数#define Screen 0x16 // 屏幕#define Audio 0x1d // 伴音#define NICAM 0x13 // 丽音#define TV_Vedio 0x0f // 电视/视频#define Sleep 0x0e //睡眠/*----------------------常用参数定义-------------------*/ #define P0 0#define P1 1#define P2 2#define P3 3#define P4 4#define P5 5#define P6 6#define P7 7#define FREQ 8 //定义单片机工作频率为8M#define uint unsigned int#define uchar unsigned char#define Start_T1 TCCR1B|=_BV(CS11);TCNT1=0//复位预计分频器并开启定时器T1#define Stop_T1 TCCR1B&=~_BV(CS11) //关闭定时器T1/*-----------------IR信号指示灯操作函数---------*/#define EN_IR_LED DDRB|=_BV(P1)#define CLR_IR_LED PORTB&=~_BV(P1)#define SET_IR_LED PORTB|=_BV(P1)/*----------------------某些端口操作-------------------*/volatile unsigned char i,j,k;volatile unsigned long IRcode; //定义一个长度为4字节的无符号long 类型变量来存储代码volatile unsigned char *IRcodePointer ; //定义一个无符号的单字节指针变量,//用此地址变量来分别读取IRCode的//4个字节其中操作码为IRcodePointer[2]//用户码为IRcodePointer[0]volatile unsigned char IRReceiveEffective=0; //IR信号接收有效当程序响应接收以后请马上清零这样才会继续接收下一IR码volatile unsigned char IRReceiveCurrentBit=0; //IR信号当前接收位0时表示第0位即同步码(4.5ms高电平)volatile unsigned int Pulse_length=0; //捕获的脉冲宽度volatile unsigned char ICP_Parity=0; //捕获中断奇偶次计数1时为偶次并在此时判断脉宽volatile unsigned char Received_Key_Temp; //红外接收操作键缓存const unsigned char String[]={"You Have Press Key : "};/*----------------------串口定义-------------------*/unsigned char SetPrintfConvertMode=0; //使用printf作其他转换,并非输出到UARTvoid Uart_Init(void);int System_putchar(char c, FILE *stream);int System_getchar(FILE *stream);FILE mystd = FDEV_SETUP_STREAM(System_putchar,System_getchar,_FDEV_SETUP_RW);/*----------------------常用函数定义------------------*/void delay_nms(unsigned int ms) //N ms延时函数{for(i=0;i<ms;i++)_delay_loop_2(FREQ*250);}/*----------------------系统初始化函数定义------------------*/void IO_INIT(void){PORTB|=_BV(P0); //设置ICP引脚内部上拉经过试验验证,上拉会提高红外接收灵敏度}ISR(TIMER1_COMPA_vect){IRReceiveCurrentBit=0;//重置IR接收位为第0位,为下次接收做准备TIMSK&=~_BV(OCIE1A); //关闭溢出中断TCCR1B|=_BV(ICES1); //设置输入捕获上升沿有效ICP_Parity=0;Stop_T1;CLR_IR_LED;}ISR(TIMER1_CAPT_vect){if(!IRReceiveEffective){if(ICP_Parity==0){ICP_Parity++;TIMSK|=_BV(OCIE1A);TCCR1B&=~_BV(ICES1); //设置输入捕获下降沿有效Start_T1 ;}else{Stop_T1;ICP_Parity=0;TCCR1B|=_BV(ICES1);//设置输入捕获上升沿有效Pulse_length=ICR1;if(IRReceiveCurrentBit==0){if(Pulse_length>=3500&&Pulse_length<5500)// 如果是引导码(4.5ms) 进入下一个bit的读取IRReceiveCurrentBit++;}else if(IRReceiveCurrentBit<33) //接收32位数据{IRcode>>=1;if(Pulse_length<1900&&Pulse_length>1400) //判断是否为1 ( 1.685 ms) IRcode|=0x80000000;IRReceiveCurrentBit++;if(IRReceiveCurrentBit==33){IRReceiveCurrentBit=0; //重置IR接收位为第0位,为下次接收做准备if(IRcodePointer[0]==(unsignedchar)(~IRcodePointer[1])&&IRcodePointer[2]==(unsignedchar)(~IRcodePointer[3])){SET_IR_LED; //开启IR信号指示灯IRReceiveEffective=1; //数据有效}delay_nms(5); //因为32位数据后面还有一个信号上跳变,所以要适当延时,延时0.65ms以上即可}}}}}/////////////////////////////////////////////////////////////////int main(void){wdt_disable();IO_INIT();Uart_Init();TCCR1B=_BV(WGM12)|_BV(CS11);//采用8分频这样的话TCNT1的计数时基为1usOCR1A=8000; //TCNT1 计数上限设置IR接收超时这里设置8msTIMSK|=_BV(TICIE1);//开启输入捕获中断TCCR1B|=_BV(ICES1);//输入捕获上升沿有效EN_IR_LED; //IR信号指示灯允许CLR_IR_LED; //关闭IR信号指示灯IRcodePointer=&IRcode;sei();while(1){if(IRReceiveEffective){Received_Key_Temp=IRcodePointer[2];//把接收到的操作键放入缓存IRReceiveEffective=0; //允许下一次接收switch(Received_Key_Temp){case Key_1 : printf("\n%sKey_1",String);break;case Key_2 : printf("\n%sKey_2",String);break;case Key_3 : printf("\n%sKey_3",String);break;case Key_4 : printf("\n%sKey_4",String);break;case Key_5 : printf("\n%sKey_5",String);break;case Key_6 : printf("\n%sKey_6",String);break;case Key_7 : printf("\n%sKey_7",String);break;case Key_8 : printf("\n%sKey_8",String);break;case Key_9 : printf("\n%sKey_9",String);break;case Key_0 : printf("\n%sKey_0",String);break;case Menu : printf("\n%sMenu",String);break;case Menu_up : printf("\n%sMenu_up",String);break;case Menu_down : printf("\n%sMenu_down",String);break;case Menu_left : printf("\n%sMenu_left",String);break;case Menu_right : printf("\n%sMenu_right",String);break;case Menu_ok : printf("\n%sMenu_ok",String);break;case Channel_up : printf("\n%sChannel+",String);break;case Channel_down : printf("\n%sChannel-",String);break;case Sound_up : printf("\n%sSound+",String);break;case Sound_down : printf("\n%sSound-",String);break;case Open_Close : printf("\n%sOpen_Close",String);break;case Mute : printf("\n%sMute",String);break;case Standard : printf("\n%sStandard",String);break;case Return : printf("\n%sReturn",String);break;case Times : printf("\n%sTimes",String);break;//case Screen : printf("\n%sScreen",String);break;//Screen 与menu_ok 值相同case Audio : printf("\n%sAudio",String);break;case NICAM : printf("\n%sNICAM" ,String);break;case TV_Vedio : printf("\n%sTV_Vedio",String);break;case Sleep : printf("\n%sSleep",String);break;case Pic_in_pic : printf("\n%sPic_in_pic",String);break;default:printf("\n%sOther Key 0x%x",String,Received_Key_Temp);break;}CLR_IR_LED; //处理完数据以后关闭IR信号指示灯}}}/*----------------------串口函数实体------------------*/void Uart_Init(void){UCSRB=_BV(RXEN)|_BV(TXEN);UBRRL=25; //8M 19200stdout=&mystd;stdin=&mystd;}int System_putchar(char c, FILE *stream){if(SetPrintfConvertMode==1){}else{if (c == '\n')System_putchar('\r', stream);loop_until_bit_is_set(UCSRA, UDRE);UDR = c;}return 0;}int System_getchar( FILE *stream){loop_until_bit_is_set(UCSRA,RXC);return UDR;}/////////////////////////////////程序结束////////////////////////////。

单片机STM32F103C8T6的红外遥控器解码系统设计

单片机STM32F103C8T6的红外遥控器解码系统设计

单片机STM32F103C8T6的红外遥控器解码系统设计一、本文概述本文旨在详细阐述基于STM32F103C8T6单片机的红外遥控器解码系统的设计和实现过程。

随着科技的不断进步和智能化设备的普及,红外遥控器作为一种常见的遥控设备,已经广泛应用于家电、安防、玩具等多个领域。

然而,红外遥控器发出的红外信号往往需要通过解码器才能被设备正确识别和执行,因此,设计一款高效、稳定、可靠的红外遥控器解码系统具有重要意义。

本文将首先介绍红外遥控器的基本原理和信号特点,然后详细阐述STM32F103C8T6单片机的性能特点和在红外遥控器解码系统中的应用优势。

接着,将详细介绍红外遥控器解码系统的硬件设计,包括红外接收头的选择、电路设计和PCB制作等。

在软件设计部分,将详细阐述如何通过STM32F103C8T6单片机的编程实现红外信号的接收、解码和处理,以及如何将解码后的数据通过串口或其他通信方式发送给主控制器。

本文还将对红外遥控器解码系统的性能进行测试和分析,包括信号接收距离、解码速度和稳定性等方面的测试。

将总结本文的主要工作和创新点,并对未来的研究方向进行展望。

通过本文的研究和实现,旨在为红外遥控器解码系统的设计提供一种新的思路和方法,同时也为相关领域的研究人员提供有益的参考和借鉴。

二、红外遥控器基础知识红外遥控器是一种常见的无线遥控设备,它利用红外光作为信息载体,通过发射和接收红外光信号实现对设备的远程控制。

这种遥控方式因其简单、低成本和无需视线连接等优点,在各类消费电子产品中得到了广泛应用,如电视机、空调、音响等。

红外遥控器的工作原理主要基于红外辐射和光电器件的检测。

遥控器内部通常包含一个或多个红外发射管,当按下按键时,发射管会发射出特定频率和编码的红外光信号。

接收端则配备有红外接收头,该接收头内部有一个光敏元件(如硅光敏三极管或光敏二极管),用于检测红外光信号并将其转换为电信号。

为了区分不同的按键操作,红外遥控器通常采用特定的编码方式对按键信号进行编码。

单片机红外的原理及应用

单片机红外的原理及应用

单片机红外的原理及应用1. 红外传感器的工作原理红外传感器是一种利用红外线进行检测和控制的电子设备。

它主要通过接收和解码红外线信号来实现对环境的感知和反馈。

红外传感器的工作原理如下:1.发射红外线信号:红外传感器内置一颗红外发射二极管,当电流流过发射二极管时,它会产生红外线信号,并向外发射。

2.接收红外线信号:红外传感器还内置有一个红外接收二极管,它可以接收外界发射过来的红外线信号。

3.解码红外线信号:接收到红外线信号后,红外传感器会将其进行解码,并根据解码结果来判断是否有外界物体存在或执行相应的控制指令。

2. 红外传感器的应用领域由于红外传感器具有非接触、反应迅速、精准度高等特点,它在许多领域都得到了广泛的应用。

以下是红外传感器常见的应用领域:•安防领域:红外传感器可以用于人体检测、入侵报警等安防系统中。

当有人进入红外传感器的感知范围时,系统会发出警报或进行相应的控制。

•智能家居领域:红外传感器可以通过接收红外遥控器发送的信号,实现对家电设备(如电视、空调、音响等)的控制。

用户只需用遥控器发出相应的指令,红外传感器就可以识别并执行相应的操作。

•自动化控制领域:红外传感器可以用于自动化控制系统中,实现对设备的自动检测和控制。

例如,在工业生产中,红外传感器可以用来检测物体的位置、温度等参数,从而实现对生产过程的监控和控制。

•运动检测领域:红外传感器可以用于运动检测设备中,如自动门、楼梯照明等。

当有人经过时,红外传感器会感知到并触发相应的装置,实现自动开门或照明的功能。

3. 单片机中红外传感器的应用在单片机中,红外传感器可以与其他模块(如LCD显示屏、蜂鸣器、按键等)结合使用,实现更复杂的功能。

以下是一些常见的单片机红外传感器的应用案例:•红外遥控器:单片机可以通过红外传感器接收外部遥控器发送的红外信号,根据不同的按键码进行相应的操作,如控制电视机、空调等家电设备。

•红外测距:单片机可以利用红外传感器接收外界发射的红外光信号,根据接收到的光强来估计物体的距离。

红外线遥控器解码程序

红外线遥控器解码程序

红外线遥控器解码程序这里我们以红外线遥控编码芯片为uPD6121G(或者是 HT622、7461等芯片)为例来说明用单片机实现红外遥控解码的详细过程,站长琢磨这个解码程序花了相当多的精力,期间几经修改逐步完善,后来还用它开发了几个小产品,希望能对网友学习单片机有所帮助。

红外线遥控是目前使用最广泛的一种通信和遥控手段。

由于红外线遥控装置具有体积小、功耗低、功能强、成本低等特点,因而,继彩电、录像机之后,在录音机、音响设备、空凋机以及玩具等其它小型电器装置上也纷纷采用红外线遥控。

工业设备中,在高压、辐射、有毒气体、粉尘等环境下,采用红外线遥控不仅完全可靠而且能有效地隔离电气干扰。

1 红外遥控系统通用红外遥控系统由发射和接收两大部分组成,应用编/解码专用集成电路芯片来进行控制操作,如图1所示。

发射部分包括键盘矩阵、编码调制、LED红外发送器;接收部分包括光、电转换放大器、解调、解码电路。

2 遥控发射器及其编码遥控发射器专用芯片很多,根据编码格式可以分成两大类,这里我们以运用比较广泛,解码比较容易的一类来加以说明,现以日本NEC的uPD6121G组成发射电路为例说明编码原理。

当发射器按键按下后,即有遥控码发出,所按的键不同遥控编码也不同。

这种遥控码具有以下特征:采用脉宽调制的串行码,以脉宽为0.565ms、间隔0.56ms、周期为1.125ms的组合表示二进制的“0”;以脉宽为0.565ms、间隔1.685ms、周期为2.25ms的组合表示二进制的“1”,其波形如图2所示。

上述“0”和“1”组成的32位二进制码经38kHz的载频进行二次调制以提高发射效率,达到降低电源功耗的目的。

然后再通过红外发射二极管产生红外线向空间发射,如图3所示。

UPD6121G产生的遥控编码是连续的32位二进制码组,其中前16位为用户识别码,能区别不同的电器设备,防止不同机种遥控码互相干扰。

该芯片的用户识别码固定为十六进制01H;后16位为8位操作码(功能码)及其反码。

所有红外遥控器的解码方法

所有红外遥控器的解码方法

所有红外遥控器的解码方法已经完成了DS1302,18B20,RS232通讯,24C02存储,红外遥控等.现只将红外遥控的解码方法贴出,希望能与大家交流,起到抛砖引玉的作用.我的开发环境是IAR FOR AVR 5.11, CPU为M8,晶振 11.0592.红外遥控解码原理是通过AVR的输入捕获功能,捕获信号后进行宽度判断,并通过串口在电脑中显示出来.下面是捕获的程序,数据未经处理,只是捕获后进行编码的解码.通过这个捕获程序,原则上能解所有线外遥控编码,我已经解了格力和中星九B的遥控编码,代码未优化,只是测试.#include <iom8.h>#include "MyDelay.h" //在此未提供我的延时程序,如果有需要的我再贴出#include "MyUSART.h"//在此未提供我的串口配置程序,如果有需要的我再贴出#ifndef uchar#define uchar unsigned char#endif#ifndef uint#define uint unsigned int#endifvoid ini(void){//配置输入捕获TCCR1A = 0x00;//普通端口模式,OC1A/B未连接TCCR1B = 0x81;//位7与位6是输入捕获允许和触发方式,BIT2-0,分频选择TCNT1H = 0x00;//计数器起始值高8位TCNT1L = 0x00;//计数器起始值低8位ICR1 = 0x0000;//输入捕获发生时,将该值写入TCNTTIMSK |= 0x20;//输入捕捉中断使能 BIT5 =1TIFR &= 0xdf;//输入捕捉标志,外部引脚 ICP1 出现捕捉事件时 ICF1置位}#pragma vector = TIMER1_CAPT_vect //定时器0溢出中断入口__interrupt void TimeINT0(void){uint r;uchar h,l;r = ICR1;//接收时序if(TCCR1B &= 0x40) //更改触发方式TCCR1B = 0x81; //下降沿触发elseTCCR1B = 0xc1;//上升沿触发TCNT1H = 0x00;//计数器起始值高8位TCNT1L = 0x00;//计数器起始值低8位TIFR |= 0x20;//输入捕捉标志,外部引脚 ICP1 出现捕捉事件时 ICF1置位h = (uchar)(r>>8);l = (uchar)r;USART_Send(h); //串口显示高八位USART_Send(l);//串口显示低八位}void main(void){ini();}以下是由串口调试助手显示的数据.说明:1.时间未用,我的程序也通过串口显示了,2.前两个字节无意义,是因为捕获到低电平后,16位计数器一直在计数,所以,前面的计数值无用.3.编码原理不管是曼彻斯特_码/日立的通用红外编码/PT2272码等,差不多都由(异步) 码头+引导+编码+停止位组成,大同小异,所以根据这个原理,解出了上述数据的码头,引导和键编码.再根据解出的码画出频率图.4.计算时要将显示的数据转换成10进制再计算.5.未知部分估计是停止位,不过只要能检测到码头,引导和编码就可以了.6.解码后,可以将该数据进行处理, 这时,这个遥控器就可以赋与功能,和开发板互动了.呵呵,7.为什么选中九B,因为中9B的遥控器不用花钱,中9老是升级,好多客户都不用了,所以又省了10元钱,一块敷铜板的钱,哈哈哈.8.题外话,中9想升级的可以和我交流,我已经升了很多了.9.好,希望该方法可以帮助需要的朋友.。

【精品】用单片机解码红外遥控器

【精品】用单片机解码红外遥控器

用单片机解码红外遥控器用单片机解码红外遥控器遥控器使用方便,功能多.目前已广泛应用在电视机、VCD、DVD、空调等各种家用电器中,且价格便宜,市场上非常容易买到。

如果能将遥控器上许多的按键解码出来.用作单片机系统的输入.则解决了常规矩阵键盘线路板过大、布线复杂、占用I/O口过多的弊病。

而且通过使用遥控器,操作时可实现人与设备的分离,从而更加方便使用.下面以TC9012编码芯片的遥控器为例.谈谈如何用常用的51系统单片机进行遥控的解码。

一、编码格式1、0和1的编码遥控器发射的信号由一串O和1的二进制代码组成.不同的芯片对0和1的编码有所不同.通常有曼彻斯特编码和脉冲宽度编码.TC9012的O和1采用PWM方法编码,即脉冲宽度调制,其O码和1码如图1所示(以遥控接收输出的波形为例)。

O码由O.56ms低电平和0.56ms高电平组合而成.脉冲宽度为1.12ms.1码由0.56ms低电平和1.69ms高电平组合而成.脉冲宽度为2.25ms。

在编写解码程序时.通过判断脉冲的宽度,即可得到0或1。

2、按键的编码当我们按下遥控器的按键时,遥控器将发出如图2的一串二进制代码,我们称它为一帧数据。

根据各部分的功能。

可将它们分为5部分,分别为引导码、地址码、地址码、数据码、数据反码。

遥控器发射代码时.均是低位在前。

高位在后。

由图2分析可以得到.引导码高电平为4.5ms,低电平为4.5ms.当接收到此码时.表示一帧数据的开始.单片机可以准备接收下面的数据。

地址码由8位二进制组成,共256种.图中地址码重发了一次.主要是加强遥控器的可靠性.如果两次地址码不相同.则说明本帧数据有错.应丢弃。

不同的设备可以拥有不同的地址码.因此。

同种编码的遥控器只要设置地址码不同,也不会相互干扰。

图中的地址码为十六进制的0EH(注意低位在前)。

在同一个遥控器中.所有按键发出的地址码都是相同的。

数据码为8位,可编码256种状态,代表实际所按下的键。

单片机的红外遥控器编码原理与实现

单片机的红外遥控器编码原理与实现

单片机的红外遥控器编码原理与实现红外遥控器是我们日常生活中常见的一种设备,用于控制电器设备的开关、音量调节等操作。

而单片机作为一种重要的电子元器件,可以通过编程来实现红外遥控器的功能。

本文将介绍单片机的红外遥控器编码原理和实现过程。

一、红外编码原理红外遥控器通过发送红外信号来控制电器设备的开关。

而红外编码原理是指在红外遥控器中,将按键的信息编码成红外信号发送出去。

在遥控器中,每个按键对应一个特定的红外编码。

当按下某个按键时,遥控器会将该按键的特定编码发送出去。

接收器设备会解码接收到的红外信号,并根据解码结果来执行相应的操作。

二、红外编码实现步骤1. 硬件准备实现红外遥控器编码,首先需要准备以下硬件设备:- 单片机模块- 红外发射模块- 按键模块- 电源供应模块2. 硬件连接将单片机模块、红外发射模块、按键模块和电源供应模块按照电路图进行连接。

确保连接正确并固定好各个模块。

3. 软件编程使用单片机的编程语言(如C语言)进行编程,实现红外遥控器的功能。

具体的编程步骤如下:- 初始化相关的引脚和中断,包括红外发射引脚和按键引脚。

- 设置红外编码的格式和协议,如NEC编码、SONY编码等。

- 通过按键模块检测按键是否被按下,如果按键被按下,则执行相应的红外编码发送操作。

- 根据按键的不同,发送不同的红外编码信号。

4. 红外编码发送编写代码实现红外编码信号的发送。

根据选择的编码协议和格式,在编程中设置相应的红外编码参数,并通过红外发射模块将编码信号发送出去。

5. 测试和调试完成编程后,进行测试和调试。

将红外编码器面对接收器设备,按下遥控器的按键,观察接收器设备是否成功接收到信号并执行相应的操作。

通过以上步骤,就可以实现单片机的红外遥控器编码功能。

三、红外编码的应用红外遥控器的编码原理可以应用于各种控制场景,例如家电控制、智能家居系统、工业自动化等。

通过编程,可以实现不同按键对应不同设备的控制,提高生活和工作的便利性。

pwm输入捕获红外线的原理

pwm输入捕获红外线的原理

pwm输入捕获红外线的原理
PWM(脉冲宽度调制)输入捕获红外线的原理是利用红外线传感
器接收到的红外线信号的变化来改变PWM信号的占空比,从而实现
对红外线信号的捕获和测量。

首先,红外线传感器接收到红外线信号后会产生相应的电信号。

这个电信号的变化会被转换成数字信号,然后通过微控制器或者单
片机的输入捕获功能来捕获这个信号的变化。

在输入捕获模式下,
微控制器或者单片机可以测量PWM信号的高电平或低电平持续的时间,从而计算出红外线信号的频率或者占空比。

接着,根据捕获到的PWM信号的变化,可以得出红外线信号的
频率和占空比。

这些数据可以用来判断红外线信号的强度、距离、
遮挡程度等信息。

通过对PWM信号的捕获和分析,可以实现对红外
线信号的精确测量和控制。

此外,PWM输入捕获红外线的原理也可以应用在红外线遥控器、红外线测距模块、红外线传感器等领域,实现对红外线信号的接收
和处理。

总之,PWM输入捕获红外线的原理是利用红外线传感器接收到的信号来改变PWM信号的占空比,通过微控制器或者单片机的输入捕获功能来捕获和分析这个变化,从而实现对红外线信号的测量和控制。

单片机实现红外接收解码

单片机实现红外接收解码

单片机实现红外接收解码摘要:接收到红外遥控器的脉冲波形,并通过解析其波形得到红外遥控器的相应解码,实习对相应设备的控制。

本文详细接受红外遥控技术原理并如何通过C51单片机实现红外遥控。

关键字:单片机,红外遥控,解码1.引言遥控器相信大家不会陌生,日常生活中会使用到各种各样的遥控器,比如电视机、DVD 机、空调、机顶盒甚至音响、热水器等都用到遥控器,其实红外技术已经走进与人们的生活并且与人们的生活息息相关了。

红外遥控器作为设备的输入控制具有操作简便、价格便宜等诸多好处。

您可以根据您公司产品需要和遥控器提供商协商定制遥控器,包括遥控器键盘布局、每个按键的键码等。

遥控器键盘上每个按键的键码是一个小于256的一个数值,按键后通过遥控器红外管产生脉冲发送出去,红外接收器接收到脉冲后,对脉冲流进行分析,提取键码值,并按照键码值实现其遥控目的。

2.红外接收原理红外遥控信号接收:红外接收电路可以使用集成接收器,接收器包括红外接收管及信号处理IC,接收器对外只有三个引脚,一个接电源的Vcc脚、一个接地的GND脚、一个脉冲信号输出脚,当然脉冲信号输出脚直接接单片机的某个可以使用的IO脚就可以了。

3.脉冲波形分析:每次按键,红外接收器这边会收到一串脉冲宽度不等的脉冲波形流,其脉冲流由35个脉冲波形构成:前导码:第1个脉冲波形用户码1:第2到第9个脉冲波形用户码2:第10到第17个脉冲波形键码:第18到第25个脉冲波形键码反码:第26到第33个脉冲波形连续按键脉冲:第34和第35个脉冲为结束脉冲(也即连续按键脉冲),在每次按键结束后会有两个结束脉冲,如果一直按键不放的话,会一直发送连续按键脉冲,并可以认为在收到10个连续按键脉冲后是下一个按键。

注意:不同的遥控器产生的用户码值可能不一样,笔者碰到两种不同的用户码:0x00,0xFF及0x04,0x7F。

脉冲流中有四种不同的脉冲波形宽度:其中前导码脉宽为:40(4ms) < 脉冲宽度< 50(5ms)连续按键脉宽为: 21(2.1ms) < 脉冲宽度 < 25(2.5ms)bit "0" 脉宽为: 3(0.3ms) < 脉冲宽度 < 7(0.7ms)bit "1" 脉宽为: 14(1.4ms) < 脉冲宽度 < 19(1.9ms)在收到一串脉冲流后,就要对其进行分析,先要检测第一个脉冲波形是不是前导码,如果不是,则继续检测前导码,如果是则检测如下32个脉冲波形:用户码1为1字节,由8个脉冲波形组成(其中一个脉冲波形表示字节中1 bit );用户码2为1字节; 键值为1字节;键值反码为1字节,键值反码为键值取反值。

利用单片机进行红外线编、解码遥控

利用单片机进行红外线编、解码遥控
下 K ,再 按 M— e 、H— e , 则 设 置 定 时 时 刻 ; 不 按 K 4 ky ky 4,
按 M— e 、 H— e 、S k y仍 设 置 显 示 时 问 。 图 6为 其 程 序 ky ky —e 流 程 图 , 详 细 的程 序 代 码 可 参 考 本 刊 网站 。 总 之 , I 串 行 总 线 接 口 为 代 表 的 一 些 新 型 的 数 据 存 储 芯 以 2 C 片 的 出现 ,打 破 了 传 统 的 数 据 存 储 和 保 护 模 式 , 简 化 了 电 路 设 计 ,提 高 了 系 统 的 可 靠 性 。
本 文 只 介 绍 彩 电 、V D遥 控 器 常 用 的 编 码 方 式 ,而空 调 C 的遥 控 器 由 于带 有 温度 值 和 时 间等 参 数 ,码 元 非 常 长 ,本 文 不 做 介 绍 。笔 者 利 用 红 外 线 读 码 仪 检 测 了 大 量 的 彩 电 、V D遥 C 控 器 的 编 码 后 发 现 ,大 概 有 以 下 两 种 编 码 格 式 ( om t :第 F r a)
可自行 验 证 。
( )AT 4 0 2 2 C 1写 字 节 子 程 序 W R_ ye ( ) bt 略 子 程 序
为 例 来 简 单 介 绍 一 下 如 何 调 用 上 述 子 程 序 去 完 成 数 据 的 读写 。 例 :将 数 据 5 H 写 入 到 AT 4 0 0 2 C l的 0 H 地 址 区 ,断 电 l
( ) 读 任 意 地 址 区 内 容 的 子 程 序 Il一 AND ( ) 3 L9 R 略 子 程 序 中 首 先 启 动 开 始 信 号 ,按 着 发 送 器 件 地 址 和 存 储 地 址 信 息 , 随 后 调 用 R — ur 地 址 内 容 子 程 序 ,将 读 出 内 容 存 d cr 读

单片机的红外遥控器解码原理与实现

单片机的红外遥控器解码原理与实现

单片机的红外遥控器解码原理与实现红外遥控器是我们日常生活中常见的电子设备,它通过使用红外线信号与接收器进行通信。

而在这个过程中,单片机起到了解码的重要作用。

本文将介绍单片机解码红外遥控器的原理以及实现方法。

一、红外遥控器的工作原理红外遥控器是一种使用红外线进行通信的设备,它主要由发送器和接收器两部分组成。

发送器将指令数据转换为红外脉冲信号并发送出去,接收器通过接收红外线信号并将其转换为电信号,进而解码为可识别的指令。

而单片机则负责接收并解码红外信号,将其转化为具体的操作。

二、单片机解码红外信号的原理单片机解码红外信号主要分为两个步骤:红外信号的接收和信号的解码处理。

1. 红外信号的接收单片机通过外部的红外接收器接收红外信号。

红外接收器可以通过外部电路将接收到的红外信号转换为电压信号,然后通过单片机的IO 口输入。

2. 信号的解码处理接收到的红外信号经过IO口输入后,单片机需要对信号进行解码处理。

解码的过程涉及到红外信号的标准化和解析。

对于常见的红外遥控器协议,单片机需要能够识别其编码方式,确定其协议格式。

这些协议通常包含了引导码、地址码和指令码等信息。

在解析红外信号时,单片机首先需要识别引导码。

引导码是红外信号的起始标志,通常由高、低电平组成,表示编码的开始。

单片机通过判断引导码的时间长度来确定信号的开始。

接下来,单片机需要识别地址码和指令码。

地址码是用来区分不同的红外遥控器设备,指令码则表示具体的操作指令。

单片机通过判断地址码和指令码的高、低电平时间长度来确定具体的操作。

三、单片机解码红外信号的实现方法单片机解码红外信号有多种实现方法,以下是一种简单的实现示例。

首先,需要连接红外接收器到单片机的IO口,将接收到的信号输入到单片机。

接收到的信号可以通过外部中断的方式触发单片机的中断服务程序。

然后,在中断服务程序中,单片机需要根据红外协议的规则,判断引导码、地址码和指令码的时间长度。

利用计时器或延时函数可以实现对信号时间的测量。

DMA输入捕获红外线解码

DMA输入捕获红外线解码

DMA 方式,TIM输入捕获,红外线解码
当前系统时钟为48MHz 将预分频到0.1mS 也就是除4800。

DMA 打开,设置为存储器增加。

模式可以用线性模式,更加方便。

定义一个结构体,用于存储采集的数据。

typedef union{
uint32_t data32b[32];
uint16_t data16b[64];
}unICData;
unICData ICData;
HAL_TIM_IC_Start_DMA(&htim5,TIM_CHANNEL_4,ICData.data32b,260); 采集到的数据可以从live watch看到
可以将数据导出存成文本文件。

并导入matlab或excel
将数据前后相减,就知道脉冲间距了。

Columns 1 through 18
51 12 22 23 22 11 12 11 11 12 22 23 22 11 12 11 11 12
Columns 19 through 33
11 22 23 11 11 12 11 23 22 12 11 22 23 22 23
明显:最长的是先导码,第一个51 ,11/12 长的为0码,22/23长的为1码。

所以上述指令解码为:
01110000 01110000 00110000 11001111 32位数据707030CF
一种可能的解码方法。

将TIM 通道设置为输入捕获中断。

在第一个中断时启动DMA采集。

在最后一个中断发生时,分析DMA采集的数据。

判断头部,获取数据码。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单片机如何通过捕获来实现对红外遥控器解码
一、内容提要
上讲介绍并应用了单片机动态扫描驱动数码管,并给出了实例。

这一讲将重点介绍单片机如何通过捕获来实现对红外遥控器解码。

通过该讲,读者可以掌握红外遥控器的编码原理以及如何通过单片机对遥控器进行解码。

二、原理简介
随着家用电器、视听产品的普及,红外线遥控器已被广泛使用在各种类型的家电产品上(如遥控开关、智能开关等)。

其具有体积小、抗干扰能力强、功耗低、功能强、成本低等特点,在工业设备中也得到广泛应用。

一般而言,一个通用的红外遥控系统由发射和接收两大部分组成,如图1 所示:
图1 红外遥控系统框图
其中发射部分主要包括键盘矩阵、编码调制、红外发射管;接收部分包括光、电信号的转换以及放大、解调、解码电路。

举例来说,通常我们家电遥控器信号的发射,就是将相应按键所对应的控制指令和系统码(由0 和1 组成的序列),调制在32~56kHz 范围内的载波上,然后经放大、驱动红外发射管将信号发射出去。

此外,现在流行的控制方法是应用编/ 解码专用集成电路芯片来实现(如下文提到的SAA3010 红外编码芯片和HS0038 红外接收头)。

不同公司的遥控芯片,采用的遥控码格式也不一样。

在此介绍目前广泛使用较普遍的两种,一种是NEC Protocol 的PWM(脉冲宽度调制)标准,一种是Philips RC-5 Protocol 的PPM(脉冲位置调制)标准。

NEC 标准:遥控载波的频率为38kHz(占空比为1:3);当某个按键按下时,系统首先发射一个完整的全码,然后经延时再发射一系列简码,直到按键松开即停止发射。

简码重复为延时108ms,即两个引导脉冲上升沿之间的间隔都是108ms。

一个完整的全码如图2所示。

相关文档
最新文档