Arduino红外遥控系列教程2013——红外协议之NEC[译文]

在开始之前,先推荐本系列的前三篇教程。

Arduino红外遥控系列教程2013——发射与接收[链接]

Arduino红外遥控系列教程2013——红外转码[链接]

Arduino红外遥控系列教程2013——红外转码扩展应用1[链接]



本系列教程包含两篇翻译文章,这是第一篇,向大家介绍目前最主流的遥控器协议之一——NEC。之所以要翻译这篇文章,主要是为了更好的学习和应用红外协议。但考虑到现有的红外技术资料介绍已经很多了,而这篇文章的作者写的也很详尽,与其说自己再写一篇,倒不如直接翻译的好。本译文遵循CC协议,只要求署名和著名转载出处即可。CC协议详见[链接]



原文[链接]

PS:在作者的主页里面还有很多有意思的项目,例如用电脑RS232接口构建的支持125个设备的SB-Bus总线协议。



译文正文



红外协议之NEC

据我所知,我在这里描述的协议是由NEC开发的。我已经在互联网上见过非常类似的协议说明,该协议被称为日本格式。 我承认我并不知道到底是谁开发的它。只知道我在Fisher公司旗下购买过的那个过时的三洋录像机(VCR)就用了这个由NEC制造的遥控器芯片IC。这个说明来自录像机的服务手册。要知道那时服务手册上的内容对我来说可非常有用!



功能

8位地址和8位指令长度

地址和命令被传输两次以加强可靠性

脉冲距离调制

载波频率38KHZ

位时间为1.125ms或2.25ms



调制

01.necmodulation.gif

2013-3-5 20:21 上传
(2.49 KB)



NEC协议采用脉冲距离编码的位。每个脉冲长度是560μs的38kHz载波脉冲(约发射21次高电平,通常调制于455kHz载波频率的 1/12,即37.9kHz)。一个逻辑“1”的传输时间是2.25ms,而逻辑“0”只用了其一半,即1.125ms。载波占空比推荐为1/3或1/4(假设频率F=37.92kHz,采用1/3占空比,则高电平的时长为8.79us,低电平时长17.58us)。



协议

02.nectrain.gif

2013-3-5 20:21 上传
(3.69 KB)



上面的图片显示了一个典型的脉冲序列NEC协议。根据本协议LSB首先被发送。因此传输的是地址$59和命令$16。一条消息,开始由一个9ms的AGC同步脉冲串,这是用来设定早期红外接收器的增益。接着是4.5ms的空格,随后就是地址和命令。地址和命令被传输两次。第二次所有的二进制位被取反,用于验证所接收到消息的正确性。总的传输时间是恒定的,因为每个位被重复发送其取反的长度。如果你对这种可靠性没兴趣,也可以忽略取反的值。或者可以扩展16位的地址和16位的命令!

03.necrepeat.gif

2013-3-5 20:21 上传
(1.31 KB)



即使在遥控器上的按键一直被按下时,命令也只发送一次。只要按键被一直按下,每110ms会发送一次重复编码。重复编码是一个简单的9ms的AGC同步脉冲,然后接着一个2.25ms的空格和560μs脉冲。

04.necsequence.gif

2013-3-5 20:21 上传
(2.56 KB)





扩展NEC协议

NEC协议的应用极为广泛,很快所有可能的地址都被用光了。通过牺牲的地址的冗余地址可以把范围扩展至256个有效地址,约65000个不同的值。通过这种方式,地址范围从8位扩展到16位,而无需改变协议其他任何部分。

通过扩展地址范围会导致信息的总时间不再是固定值。现在它取决于位1和位0在消息中的总数。如果你想保持总的时间为常数,你必须确保位1在地址字段中出现8次(这样位0的数量也会是8)。这将不同地址的最大数量减少到约13000。

冗余的命令仍然保留。因此,每个地址还可以处理256个不同的命令。

05.necexttrain.gif

2013-3-5 20:21 上传
(3.7 KB)



请记住当低字节与高字节是完全相反时,它不是一个有效的扩展地址,而256个地址的扩展协议也是无效的,因为他们其实已变成了正常NEC协议地址。



扩展链接

NEC电子[链接]



命令示例

下表列出了我那过时的Fisher 530录像机的遥控器发送编码(那可是用了20年之久呢)。

06.code.png

2013-3-6 14:06 上传
(7.82 KB)







结束语

本文作为红外的基础知识对使用和调试红外应用都非常有帮助,在此推荐给大家,希望看到更多的Maker做出红外应用。不过由于本人水平有限,部分词汇翻译可能有些晦涩难懂,欢迎大家指正!最后感谢Google的翻译工具[链接]和金山词霸[链接]

via - 极客工坊

标签: Arduino教程