摘自:http://blog.youkuaiyun.com/feilusia/article/details/53305956
其中,红外协议采用为最常见的NEC协议,38K信号由定时器产生。
库函数版本:STM8L_STMTouch_Lib_V1.1.0
原文地址:http://blog.csdn.NET/feilusia
上图的蓝色部分为红外发射部分,R2为红外距离调节的电阻,阻值越小、距离越远。
答:红外是红外线的简称。红外是一种波长范围为760nm~ 1mm的电磁波,可以实现数据的无线传输,距离大概十几米以内,且需要对准接收端进行发射。
红外的成本比其它无线设备要低的多,所以家电遥控器大多采用红外控制。常见的红外设备:电视遥控器、空调遥控器等。
遥控器的基带通信协议有很多,大概有几十种。常见的红外协议: ITT 协议、NEC 协议(最常见)、Sharp 协议、Philips RC-5 协议、Sony SIRC 协议等。
答:NEC协议的数据格式:引导码、用户码、用户反码、键码、键码反码、停止位。
1)上图黑色部分为一定频率(如38K)的载波,并不是长时间的高电平。该载波可通过定时器定时翻转IO口或PWM来产生。
2)上图为发射端的信号波形,由于接收端空闲时为高电平、接收到载波时为低电平,因此接收端的信号波形与发射端信号波形完全相反,接收端信号波形如下图
①引导码:9ms 的载波+4.5ms 的空闲。
②比特值“0”:560us 的载波+560us 的空闲。
③比特值“1”:560us 的载波+1.68ms 的空闲。
⑥停止位。
所以解析出来的红外键值为:0x00FF30CF(4个字节)。
1)使用定时器2产生一个13us的定时中断(当13us翻转一次IO,产生的就是38K的频率)。
2)当需要发送红外键值时,按上图的NEC时序依次发送:引导码、用户码、用户反码、键码、键码反码、停止位。
1、《STM8L之timer2》:http://blog.youkuaiyun.com/feilusia/article/details/53167211
1、修改定时器产生中断的时间(替换GUA_Timer2.c中的GUA_Timer2_Init)
由于香瓜使用的是内部晶振导致定时器不准,并且定时器产生13us时会影响代码正常运行,因此香瓜实测代码中设置为9us时能产生17us的红外载波。
1)写一个驱动GUA_Infrared_Send.c(存放在工程的USER文件夹中)
由于定时器产生的中断不准,因此实际的时序需要根据逻辑分析仪上的实测波形来修改。
2)写一个驱动头文件GUA_Infrared_Send.h(存放在工程的USER文件夹中)
3)工程中添加GUA_Infrared_Send.c
注意USER文件夹是与“Project”等文件夹同级的自定义文件,用于存放香瓜写的代码。
2)修改定时器2中断服务函数
2)初始化(main.c的main函数中)
3)添加测试代码(main.c的main函数中)
在这里发送键值0x00FF00FF。
利用与发射端相匹配的红外接收头将红外信号接收下来,同时使用逻辑分析仪抓取信号,如下图:
经解析此接收到的键值即为发射端发射的0x00FF00FF键值。
不开低功耗的正常运行时,功耗为2.5mA,发射红外信号时功耗为3.5mA。
当前实测红外调节距离的阻值为51欧姆,场地有限实测3~4米没问题。