搜索
bottom↓
回复: 50

基于msp430的红外遥控的编码与解码实现(附源代码)

[复制链接]

出0入0汤圆

发表于 2010-11-3 17:08:41 | 显示全部楼层 |阅读模式
//编解码波形(NEC)
//________________         __  __   __
//                |        | | | |  |
//                |        | | | |  |
//                |        | | | |  |
//                |        | | | |  |
//                |        | | | |  |.....................................
//                |        | | | |  |
//                |        | | | |  |
//                |________| |_| |__|   "0"高:0.56ms+低:0.565ms=1.125ms
//|<-    9ms    ->|<-4.5ms>|"0"| "1"|   "1"高:0.56ms+低:1.69ms =2.25ms
//|<-  引导码   ->|<-起始码|<-8位地址->|<-8位地址->|8位数据->|<-数据反码->|

//占用资源:TB CCR0中断 CCR4 CCR5中断  CCR0赋值为1125 时钟1MHz
//红外输出端P2.0 32768Hz
//P2.1为红外输入端口

此编码为常见的红外遥控编码,可以完成红外遥控或红外数据的传输

主要算法:
编码: 用3278Hz频率(P2.0第二功能输出ACLK)驱动红外二极管发送数据(应为38KHz 红外接收头要求,我用的是近距离模拟的,考虑到定时器资源宝贵,暂用32K代替,经验证近距离可以完成传输,使用是可以改为由TA的P1.2输出,稍微改下程序即可:初始化TA,让P1.2口输出38K的pwm波,宏定义中的BIT_0/1改为P1.2口的第二功能开关即可)
发送时先由TB的CCR0的中断控制时间完成9ms的红外发射和4.5ms的停止  然后用CCR0和CCR4的中断完成数据的发送

解码:CCR5定时没450ms中断一次对数据进行检测发现低电平进入数据帧判断 若引导码和起始码正确则进入数据接收逻辑,完成数据段接收

附件完整源代码:红外编解码ourdev_595012TOVN5E.rar(文件大小:3K) (原文件名:红外编解码.rar)

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2010-11-4 08:56:52 | 显示全部楼层
MAKE

出0入0汤圆

 楼主| 发表于 2010-11-27 13:29:00 | 显示全部楼层
430的红外遥控,上一个程序比较复杂,编解码放一块了,而且结构不很清晰,下边要添加分开的代码
先写遥控的程序:即读取遥控器代码
自己顶下

出0入0汤圆

 楼主| 发表于 2010-11-29 16:50:12 | 显示全部楼层
分离出的红外遥控部分:
  红外遥控的代码
*      ________________         __  __   __
*                      |        | | | |  |
*                      |        | | | |  |
*                      |        | | | |  |
*                      |        | | | |  |
*                      |        | | | |  |.....................................
*                      |        | | | |  |
*                      |        | | | |  |
*                      |________| |_| |__|   "0"高:0.56ms+低:0.565ms=1.125ms
*      |<-    9ms    ->|<-4.5ms>|"0"| "1"|   "1"高:0.56ms+低:1.69ms =2.25ms
*      |<-  引导码   ->|<-起始码|<-8位地址->|<-地址反码->|8位数据->|<-数据反码->|
*  
若长摁遥控器的一个键,会发9ms的高电平,2.5ms低电平,代表这个键值被重复发送



  程序为了能和红外的发送合用以及其他合用,TBCCR0设为1125-1,1.125ms 用TBCCR5定时,每440us扫描一次,这样保证不漏掉一个每一个高低电平,又能在中断外的执行其他程序,不会阻塞其他程序的正常运行,能较好的在实时要求较高的场合下使用

程序用了状态机机制,state=0,等待数据的到来 =1,读取引导码,并作出一定判断,非正确引导码,则设state = 0,继续等待数据的到来,正确,则设state=2,进入读取数据状态,数据读完又回到state=0,等待数据。

  读取数据的算法:先等待低电平的到来,确认一位数据的到来,在等待440*2或440*3us后是否有低电平,若有,则这位数据是0,又因现在是低电平,已经确定即将是新一位的数据,则直接进入下一位读取,否则440*3us后依然是高电平,则是数据1,重新等低电平,然后继续下一位。
红外遥控源码ourdev_601188WWTOG1.rar(文件大小:2K) (原文件名:红外遥控.rar)

出0入0汤圆

 楼主| 发表于 2010-12-1 10:04:56 | 显示全部楼层
上一个红外遥控程序有一定问题,当发送的数据码是奇数的时候接收会有错误,原因是接收时,新一位数据的标志位dataFlg没有置零,导致下一个数据帧接收时,无法读取数据而仅仅读取引导码,直至下一个数据到来再读数据,且把引导码当做数据,导致数据开头1+一串0+1然后才是正常数据
程序改动地方:dataFlg改为全局变量(原来是中断中的静态变量)在读取数据函数内i==32后把其置零。
点击此处下载 ourdev_601504MZ0HP8.rar(文件大小:2K) (原文件名:红外遥控.rar)

出0入0汤圆

 楼主| 发表于 2010-12-1 16:00:06 | 显示全部楼层
分离出的红外遥控编码部分:
  这部分程序完成红外的发送,遥控需要38kHz载波,本方案用TA1的PWM波产生38KHZ的方波作为红外遥控发射的载波,程序完成初始化后P1.2口可发出38KHz方波,第二功能打开则发射,关闭则输出低电平,用P1SEL来完成红外发射:P1SEL|=BIT2,P1SEL&=~BIT2;
  用TB定时完成对时间的控制:TBCCR0=1124,1.125ms TBCCR4=560-40,加上程序运行对时间的影响,完成560us时间的定时,发射时,先发送引导码,1.125*8的时间高(发射38Khz)1.125*4ms的低(不发射38KHz),再发送560us高,准备发送数据:560us高的发射方法:P1SEL|=BIT2,清TBCCR4的中断标志位,开中断,在CCR4的中断仅P1SEL&=~BIT2;关中断 数据的560us发射相同
红外遥控编码ourdev_601577GATRDI.rar(文件大小:2K) (原文件名:红外遥控编码.rar)

出0入0汤圆

发表于 2010-12-3 23:32:35 | 显示全部楼层
有详细介绍编码的资料吗?
这个还不是很懂。。。

出0入0汤圆

发表于 2010-12-4 01:37:10 | 显示全部楼层
马克

出0入0汤圆

 楼主| 发表于 2010-12-4 09:06:44 | 显示全部楼层
回复【6楼】XMLK  

有详细介绍编码的资料吗?
这个还不是很懂。。。

-----------------------------------------------------------------------

网上有很多有关红外遥控的资料,可以去搜一下,

现在我手上的红外资料ourdev_602172T1PQNE.rar(文件大小:2.77M) (原文件名:红外.rar)

出0入0汤圆

发表于 2010-12-4 12:32:09 | 显示全部楼层
回复【8楼】Engin
回复【6楼】xmlk   
有详细介绍编码的资料吗?
这个还不是很懂。。。
-----------------------------------------------------------------------
网上有很多有关红外遥控的资料,可以去搜一下,
现在我手上的红外资料 (原文件名:红外.rar)  

-----------------------------------------------------------------------

谢谢!

出0入0汤圆

发表于 2011-4-15 12:28:18 | 显示全部楼层
mark!

出0入0汤圆

发表于 2011-4-15 12:59:40 | 显示全部楼层
标记

出0入0汤圆

发表于 2011-4-15 14:19:31 | 显示全部楼层
hao

出0入0汤圆

发表于 2011-4-15 14:19:53 | 显示全部楼层
顶一个。。。

出0入0汤圆

发表于 2011-4-15 19:02:37 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-4-16 08:51:22 | 显示全部楼层
mark!!!!!!!!!!!

出0入0汤圆

发表于 2011-5-9 16:49:25 | 显示全部楼层
打不开……

出0入0汤圆

发表于 2011-5-10 08:47:47 | 显示全部楼层
谢谢楼主分享!

出0入0汤圆

 楼主| 发表于 2011-5-11 10:27:12 | 显示全部楼层
回复【16楼】yuan90826  
-----------------------------------------------------------------------

我传的是RAR压缩包,有解压软件可以打开

出0入0汤圆

发表于 2011-5-16 17:55:53 | 显示全部楼层
可以直接采用38K的晶振~

出0入0汤圆

发表于 2011-6-24 11:07:32 | 显示全部楼层
很好!

出0入0汤圆

发表于 2011-6-24 13:40:31 | 显示全部楼层
这个东西必须要好好学!!!

出0入0汤圆

发表于 2011-6-25 15:01:03 | 显示全部楼层
资料很好,谢谢楼主分享

出0入0汤圆

 楼主| 发表于 2011-6-28 14:16:38 | 显示全部楼层
谢谢大家支持了啊

出0入0汤圆

发表于 2011-7-2 20:02:17 | 显示全部楼层
接收是用查询吗??
能否用中断接收????
那样的话在平时可以继续工作。

出0入0汤圆

 楼主| 发表于 2011-7-3 09:10:07 | 显示全部楼层
回复【24楼】yanrz  yanrz
接收是用查询吗??
能否用中断接收????
那样的话在平时可以继续工作。
-----------------------------------------------------------------------

这个程序用中断接收的,TB的CCR5,每440ms中断一次,接收判断;不过有点问题,就是我的这个发送和接收并行会有问题,接收的时候做其他工作没有为题

出0入0汤圆

发表于 2011-7-13 11:10:50 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-7-14 00:18:20 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-8-4 18:26:20 | 显示全部楼层
好东西

出0入0汤圆

发表于 2011-8-6 11:30:11 | 显示全部楼层
这个必须MARK

出0入0汤圆

发表于 2011-8-26 20:55:10 | 显示全部楼层
很好的资料啊,精神支持楼主!

出0入0汤圆

发表于 2011-10-27 21:05:22 | 显示全部楼层
楼主用的430哪一型号的

出0入0汤圆

发表于 2011-11-11 13:15:34 | 显示全部楼层
Thank

出0入0汤圆

 楼主| 发表于 2011-11-13 18:23:25 | 显示全部楼层
回复【32楼】mxm2060  
-----------------------------------------------------------------------

我用的是msp430f149 和msp430f169 这两种型号

出0入0汤圆

发表于 2011-11-13 19:09:18 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-11-13 20:37:22 | 显示全部楼层
mark!!!!!!!

出0入127汤圆

发表于 2011-11-13 21:01:38 | 显示全部楼层
谢谢楼主分享

出0入4汤圆

发表于 2011-11-13 21:12:18 | 显示全部楼层
谢谢,mark红外遥控编码

出0入0汤圆

发表于 2011-11-15 16:08:49 | 显示全部楼层
很好很强大!!!!

出0入0汤圆

发表于 2012-8-13 15:06:20 | 显示全部楼层
楼主,我想问你QQ是多少啊?

出0入0汤圆

 楼主| 发表于 2012-8-28 13:33:10 | 显示全部楼层
wrr891208 发表于 2012-8-13 15:06
楼主,我想问你QQ是多少啊?

刚看到,qq:1039297108

出0入0汤圆

发表于 2012-8-29 09:42:37 | 显示全部楼层
谢谢分享,正在做这个东东,有参考,太好了.
顶!

出0入0汤圆

发表于 2013-5-29 15:47:15 | 显示全部楼层
Engin 发表于 2010-12-4 09:06
回复【6楼】XMLK  

有详细介绍编码的资料吗?

非常好的红外遥控器的资料

出0入0汤圆

发表于 2013-5-30 12:31:23 | 显示全部楼层
其实可以利用MCLK,然后通过PWM来实现几乎精确的38K,连PWM的占空比都可以和标准一致。

出0入0汤圆

发表于 2013-6-1 17:57:45 | 显示全部楼层
你的资料非常好~~~~~~~~~~~~~

出0入0汤圆

发表于 2013-8-12 09:40:59 来自手机 | 显示全部楼层
mark……
顶一个…

出0入0汤圆

发表于 2013-8-14 19:36:02 | 显示全部楼层
mark
.........

出0入0汤圆

发表于 2013-8-17 15:13:50 | 显示全部楼层
顶一个  

出0入0汤圆

发表于 2014-8-11 09:07:11 | 显示全部楼层
mark一下,继续努力!

出0入0汤圆

发表于 2014-8-13 16:23:19 | 显示全部楼层
这个不错,很好的资料,谢谢分享!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-26 03:15

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表