历史上的今天
返回首页

历史上的今天

今天是:2025年03月16日(星期日)

正在发生

2020年03月16日 | MSP430(f149)学习笔记——红外遥控发射

2020-03-16 来源:eefocus

最近由于项目需求,研究了一下MSP430,总体感觉MSP430还是非常不错的单片机,不亏是TI的产品。项目中用MSP430实现了红外遥控功能,下面我们先来分析一下红外的发送原理。


红外发送原理

红外发送实际上是按照一定的时间间隔,断断续续的发送红外射线来进行数据传输,为了提高数据传输的准确定和降低功耗,红外一般是采用38K的红外调制信号,其中,38K允许上下浮动1K以内的误差。红外发送的开头需要一个引导位,引导位是发送9ms,然后停止4.5ms,如果发送完一个数据之后还需要再发数据的话还需要连发码,连发码是先发送9ms,然后停止4.5ms。引导码和连发码的波形如下:

引导码和连发码之后是32位数据位,这32位数据位实际上是一个字节,其中,前16位是用户自定义地址码,用来区分红外是发给谁的,比如,电视的红外遥控是不能操作冰箱或空调的,剩下的16位是传输的数据,其中前8位是要传送的一个字节,后8位是这个字节的反码,用来校验数据传输的是否正确的,数据位无非就是0或1,其中0是先发送560us红外,然后停止565us,1是先发送560us然后停止1685us,0和1的波形如下:

每次传输实际上就是一个引导码加32位数据位或者一个连发码加32位数据位,整体的波形如下:

注意,你上所有的波形都是接收时的波形,由于红外接收头,如HS0038B,在采集到38K红外线时输出低电平,在采集不到38K红外线时输出高电平,所以,当发送红外线时在波形中为低电平,停止发送时反而为高电平。


实现电路

熟习了原理以后,再来设计电路图就非常简单了,用两个三极管停止串联,其中一个的基极(无论是PNP还是NPN,都是旁边那个脚)接到38K方波上,另一个的基极接到发送控制引脚上,我这里没有自己来绘制原理图,采用了一个网上的原理图,具体如下:

代码设计

下面的原理部分都理通了,下面,我们用MSP430来实现设计,其中P2.3口是MSP430的PWM输出引脚,这里是输出38K方波,P2.2口为发送停止控制引脚。具体代码如下:


#include 

 

static unsigned int cnt = 0;

 

void delay_ms(unsigned int ms){

  cnt = ms;

  

  TBCCR0 = 1000;

  TBCTL = CNTL_0 + TASSEL_2 + MC_1 + ID_3;

  TBCCTL0 = CCIE;

  

  while(cnt != 0);

  

  TBCTL = MC_0;

}

 

void delay_us(unsigned int us){

  cnt = 1;

  

  TBCCR0 = us;

  TBCTL = CNTL_0 + TASSEL_2 + MC_1 + ID_3;

  TBCCTL0 = CCIE;

  

  while(cnt != 0);

  

  TBCTL = MC_0;

}

 

void ir_open(){

  P2DIR |= BIT2 | BIT3;//P2.2, P2.3输出

  P2SEL |= BIT3; //P2.2:IO P2.3:TA0

  P2OUT &= ~(BIT2 | BIT3);

  

  //38K->P2.3

  CCR0 = (int)(26.3*8 + 0.5);

  CCTL1 = OUTMOD_6;

  CCR1 = (int)(13.15*8 + 0.5);

 

  TACTL = TASSEL_2 + MC_1;

}

 

void ir_start(){

  P2OUT |= BIT2;

  delay_us(9000);

  

  P2OUT &= ~BIT2;

  delay_us(4500);

}

 

void ir_next(){

  P2OUT |= BIT2;

  delay_us(9000);

  

  P2OUT &= ~BIT2;

  delay_us(2250);

}

 

void ir_send_byte(unsigned char c){

  unsigned char i;

  

  for(i = 0; i != 8; ++i){

    P2OUT |= BIT2;

    delay_us(560);

    

    P2OUT &= ~BIT2;

    if(c&0x01){

      delay_us(1685);

    }

    else{

      delay_us(565);

    }

    

    c >>= 1;

  }

}

 

void ir_end(){

  P2OUT |= BIT2;

  delay_us(300);

  P2OUT &= ~BIT2;

}

 

void ir_put(unsigned char c){

  ir_start();

  ir_send_byte(0x00);

  ir_send_byte(0xff);

  ir_send_byte(c);

  ir_send_byte(~c);

  ir_end();

}

 

void ir_close(){

  P2SEL &- ~BIT3;

  P2DIR |= BIT3;

  P2OUT &= ~BIT3;

  TACTL = TACLR;

}

 

void main(void)

{

  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT

  

  BCSCTL1&=~XT2OFF;  //使能XT2

  do

  {

    IFG1&=~OFIFG;        //清除XT2标志

    _NOP();    

  } 

  while((IFG1&OFIFG));   // 等待外部晶振稳定  即寄存器IFGI的OFIFG位等于0

  BCSCTL2|=SELM_2;       //将MCLK配置为XT2

  BCSCTL2|=SELS;  //将SMCLK配置1/2XT2 即4M 

  

  _EINT();

         

  ir_open();

  //ir_close();//关闭红外函数,这里不用

  

  while(1){

    delay_ms(1000);

    //P2OUT ^= BIT2;

    ir_put(0x83);

  }

}

 

#pragma vector=TIMERB0_VECTOR

__interrupt void timerb_handler(){

  --cnt;

}

推荐阅读

史海拾趣

中环(Central)公司的发展小趣事

中环公司一直致力于技术创新和研发。在太阳能单晶硅制造领域,公司不断推出新的技术和产品,以满足市场的不断变化。2009年,公司在内蒙古投资建设了太阳能级单晶硅工厂,开始进行太阳能级单晶硅产品的规模生产,并成功研发和应用了金刚线DW切割工艺。这一创新技术大大提高了生产效率和产品质量,使中环在行业中取得了领先地位。

Corsair Memory Inc公司的发展小趣事

Corsair Memory Inc公司,由Don Lieberman、John Beekley与Andy Paul于1994年在美国加州佛利蒙创立。起初,公司专注于为英特尔系统生产Cache-On-A-Stick (COAST)模组。然而,随着英特尔将快取内存由主板移至处理器晶体中,Corsair迅速调整战略,将注意力转向电脑内存市场。这一转变不仅使Corsair避开了潜在的市场风险,更为其后续的内存业务奠定了坚实的基础。

Bivar公司的发展小趣事

在电子行业的竞争中,Bivar公司意识到单打独斗难以取得长久的成功。因此,公司积极寻求与其他企业的合作机会,共同开发新产品、拓展市场。通过与上下游企业的紧密合作,Bivar不仅降低了成本、提高了效率,还获得了更多的资源和支持,进一步巩固了市场地位。

FRIWO公司的发展小趣事

作为全球化的技术型企业,FRIWO在全球范围内设立了研发、生产和营销部门,以满足不同市场的需求。FRIWO的电源解决方案业务部(FPS)专注于为客户量身订做电源解决方案,其客户群遍布医疗科技、IT通讯、家用电器、移动工具以及工业应用等多个领域。为了更好地服务本地客户,FRIWO在不同地区设立了分支机构,确保能够快速响应客户需求并提供专业的技术支持和服务。这种全球化布局与本地化服务的策略,使得FRIWO在激烈的市场竞争中保持了强劲的竞争力。

EMLSI公司的发展小趣事

随着环保意识的不断提高,电子行业也开始面临环保压力。EMLSI公司积极响应环保号召,致力于开发绿色环保产品。公司投入大量资源进行环保技术研发,成功推出了一系列低能耗、低排放的电子产品。这些产品不仅满足了客户的需求,也为公司赢得了良好的社会声誉。

C&D公司的发展小趣事

随着国内市场的逐渐饱和,C&D公司开始积极拓展海外市场。公司制定了国际化战略,通过参加国际展会、建立海外销售网络等方式,不断开拓国际市场。同时,C&D公司还针对不同地区的市场需求,推出定制化的产品和服务,进一步提升了其在国际市场中的竞争力。

问答坊 | AI 解惑

用过新华龙C8051F020开发板的进

我用的适配器是EC2,接口是USB的,安装了CP120X的驱动,在SILICON lab ide 里选择连接COM3,然后下载程序(一个简单程序,点亮那个P1.6的LED灯),但是一点动静都没有,是什么问题?还有就是我第一次在线调试程序时连接时显示“The serial adapter mus ...…

查看全部问答>

为什么RegDeleteKey()删除不了注册表项了

我用RegCreateKeyEx()生成了一个新的注册表项,但是紧接着调用RegDeleteKey()却删除不了了,我是写的一个小程序试的,不知道是不是不能紧接着删. 另人诧异的是当关掉程序后,再启动,进入程序就可以直接删除了,不知道这是为什么,有碰到这种事儿的吗, ...…

查看全部问答>

protel DXP2004 如何批量修改标识符?

如图 我想把图片上面的 DS107 108 109 尺寸弄小  请问怎么批量把这些标识符修改啊…

查看全部问答>

求助

请高手指点下为什么程序单步运行可以但快速运行不行?…

查看全部问答>

无源干扰设备二线检测维修的测试诊断系统

 基于PXI总线和LabVIEW技术,构建了无源干扰设备测试诊断系统,可完成无源干扰设备各种功能、性能参数快速、准确地测试,并依据测试结果,进行故障诊断,给出维修策略。硬件平台基于高性价比的PXI,测试程序采用LabVIEW开发,故障诊断程序采用 ...…

查看全部问答>

80C51单片机片内RAM低128个存储单元划分为哪4个主要部分?各部分主要功能是什么?

80C51单片机片内RAM低128个存储单元划分为哪4个主要部分?各部分主要功能是什么?…

查看全部问答>

配置寄存器

编写程序的时候怎么依据datasheet的内容配置寄存器啊,datasheet的配置原理我觉得有些难懂,跪求高手指导。。。…

查看全部问答>

DSP28335+AIC23能收发数据,但数据貌似不对,听起来全是噪声,请教是否硬件问题

我现在使用的硬件是研旭的开发板,软件是TI给的Interfacing the TMS320F2833x to the AIC23B Stereo Audio Codec.zip,改一下控制接口和数据接口。 通过控制接口改变采样率,经过示波器测试,控制接口正常;MCBSP的接收和发送中断都能进去,数据接 ...…

查看全部问答>

关于pic的IIC通信写地址问题

本人利用主机给从机发送数据,如何利用主机给从机写地址…

查看全部问答>

[转] 大牛给你介绍《信号与系统》

第一课 什么是卷积 卷积有什么用 什么是傅利叶变换 什么是拉普拉斯变换 引子很多朋友和我一样,工科电子类专业,学了一堆信号方面的课,什么都没学懂,背了公式考了试,然后毕业了。    先说\"卷积有什么用\"这个问题。(有人抢答,\"卷 ...…

查看全部问答>