- 1、本文档共8页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
红外线遥控数据的学习和转发教程
红外线遥控数据的学习和转发(基于新唐M0单片机实现)
本文只是研发的一点心得,是产品化证明了非常实用的东西,文字组织相对不那么严谨,适合有一定经验的自动控制工程师借鉴。
红外线遥控的基础知识有不太多的阐述,目前为止我所见到的红外线遥控器基本都是基于送脉冲+停止等待的循环,所以学习红外线遥控数据主要是要获取如下参数
送出脉冲的脉冲频率(就是所谓载波)
送出脉冲的宽度
停止等待到下一个送出脉冲的宽度
采样就会有误差,实际测试过程中发现实际红外解码设备其实比较粗糙,即使有点误差也能100%动作执行单元,毕竟我们学习的过程中没有累计误差。
要采样到数据必须有合适的硬件电路,其实最简单的方法就是用一个家电用的接收管来实现,里面有现成的带通滤波器出来就是方波不过载波就没法学习了,因为家电一般都是用一个频率所以也基本可以实现,因为我们设计产品时是定位于万能遥控器,要做好就必须要采集载波,为此采用的是不过硬件带通的办法实现采集的,算法麻烦一点,但是可以实现所有红外信号的复制。
由于采样数据时数据序列是整块发下来的,有的遥控器发出来的数据比较长,所以在单片机选型时要选择内存相对大一点的,想一边接受数据一边往FLASH写是比较困难的,我觉得不太容易实现,现在单片机也不是很贵这个费用还是值得的,否则整个开发过程会很费劲。
实战中我们采用如下的硬件电路:
实现的效果如下
经过大量的验证,学习的方法可以适应所有红外遥控器,目前还没有发现学习后转发出来会有问题的设备。
下面一段代码是主程序中启动红外学习的过程,供参考
U8 learning(MENU_HEAD m_head ,CONTROL_HEAD *ctr_head , U8 Continue )
{
U16 x ,y , count ;
U8 flag ;
CONTROL_HEAD ctr_head_copy ;
IFR_IN_POWER = 0 ;
OpenInt1() ;
flag = TRUE ;
touch_flag = TOUCH_RELEASE ;
count = 0 ;
if( Continue==TRUE )
{
MY_PICTURE pic ;
ReadGD25Q16B( ctr_head-address , (U8 *)pic , sizeof(MY_PICTURE)) ;
//ShowLearning( ctr_head-x , ctr_head-y+pic.y_size+20 , 0 , 0xffff ) ;
#ifdef CHINESE
ShowString( ctr_head-x , ctr_head-y - 24 ,学习中 , 0 , 0xffff ) ;
#else
ShowString( ctr_head-x , ctr_head-y - 24 ,leaning , 0 , 0xffff ) ;
#endif
}
// while( touch_flag==TOUCH_PRESS ) ;
while( flag ) //flag为按键退出的标志
{
//IFR_LEARN_TOO_LONG:
TIMER_Reset( TIMER2 ) ;
learn_step = 0 ;
learn_count = 0 ;
memset( (U8 *)learn.InfraredBuf , 0 , MAX_BUF*2 ) ;
while(1) //等待中断中获取脉冲数据(等待 MAX_LEARN_IDLE )
{
if(learn_step1)
{
/* if(InfraredBuf[0] 30 ) //起始最小脉冲判断(去毛刺)
{
learn_step = 0 ;
continue ;
} */
if( Timer2Count MAX_LEARN_IDLE ) //空闲大于100ms退出等待
break ;
}
//if( learn_step(MAX_BUF-1))
if( learn_step get_learn_step_length(m_head.attribute ) )
{
#ifdef CHINESE
MessageBox( 学习数据太长 , 2 ) ;
#else
MessageBox(learn too long , 2 ) ;
#endif
break ;
}
if( learn_step == 0 )
{
if( GetTouchxy( x , y , TRUE) )
您可能关注的文档
- 精确清分介绍教程.docx
- 2015年3月护理质量检查情况反馈要点.doc
- 精装修工程技术规范教程.doc
- 2015年3月高二生物必修二月考卷要点.docx
- 精密测量技术1-绪论-几何测量教程.doc
- 精彩班车管理系统需求说明v0.2教程.docx
- 精轧机及其控制室灌注桩施工组织设计第二标段教程.doc
- 糕点切片机教程.doc
- 系杆拱施工方案、方法教程.doc
- 系统健康检查服务方案教程.doc
- 2023赣州市八年级上册期末数学试卷含答案 .pdf
- 2021年湖北省恩施州中考数学模拟试卷完整版有答案 .pdf
- 2021新人教版高中英新语必修第一册-4 .pdf
- 2022-2023学年福建省龙岩市莲东中学八年级上学期期中考试数学试题.pdf
- 2021年安徽省宿州市公开招聘消防员模拟三笔试卷含答案 .pdf
- 2023届湖北省十堰市化学九年级第一学期期末检测试题含解析 .pdf
- 2022-2023学年吉林省松原市前郭县七年级(上)期中数学试卷 .pdf
- 2021年四川省宜宾市公务员省考行政职业能力测验测试卷(含答案).pdf
- 2021高考政治二轮总复习 专题一 社会再生产四环节 微专题二 分配学案.pdf
- 2022学年八年级(上)期末质量检测物理试题(含答案) .pdf
文档评论(0)