前段时间应客户要求给他作一个万能学习型红外遥控开关。要求是能接收任意红外遥控器的信号并学习之。
一开始谈时客户就有说其实这个产品现在已经有面市的了,只不过还远远达不到所说的万能学习型,只能有效使用1种或几种红外遥控器。说这个的时候我就有种预想:应该是可行的。
现在的同类产品在方法上一般都采用记录高低电平的宽度并保存。这样的后果就是数据量较大,对于一些资源欠缺的廉价单片机来说,就转存不过来了:接收1位保存1位时间不够,这是由于在写EEPROM时到少得要毫秒级的延时,这就耽误了信号的接收;如果要接收完了再保存又没有这么大的RAM空间。
我拼弃了这两种方法,采用自己的方式,完成了这个案子:
首先,我并不需要去研究什么样的红外信号格式,只需知道当下的红外信号格式不外乎就是用不同的高低电平宽度来表示所要发出的数据。我并不需要完全复原所接收的数据。
接下来就是去掉同步头,直接从数据处开始接收,从低电平开始接收,到高平结束时为1位并在接下来的低电平里处理这位数据(00或01或10或11),这里我把它的1位变成2位是为了能完整接收有可能使用的曼彻斯特编。经过这样处理后,基本上所有遥控器信号都能有效接收。真正做到万能学习。
最终思想:不管要接收的数据是什么格式,我只按我的方法来处理就行。就像中国太极一样,不管你的招式多么变化莫测,我只管划圈圈就成。
用户1235095 2008-6-29 16:52
用户1048319 2008-5-28 11:48