红外通信时序问题

一、其他红外协议时序解码(软件)
1、配置使能高级定时器相应通道输出38kHZ的PWM方波(占空比自定,例如1/3);
timer_channel_output_pulse_value_config(TIMERx, TIMER_CH_0, TIMERx_PERIOD * DUTY_CYCLE_HIGH); //配置方波的频率
#define TIMERx_PERIOD SystemCoreClock/INFRARED_FREQUENCY
#define INFRARED_FREQUENCY 38000
#define DUTY_CYCLE_HIGH 1/3
2、控制发送和关闭,例如:定时器1使能通道(复用的GPIO脚)发射端发射红外信号加载至频率38KHz,占空比约33%的PWM方波时,接收端识别为逻辑低电平,否则识别为逻辑高电平(关闭发送,在帧头尾之间才识别为高电平);
3、发送方:
例如:发送处理函数IR_send基于1ms时基(时间片),收发双方约定时序方便接收方识别逻辑高/低;
例如GD32底层通道发送开/关: timer_channel_output_state_config(TIMER_PERIHP[t_infrared], CHANNEL[t_infrared], TIMER_CCX_ENABLE/TIMER_CCX_DISABLE); //使能对应通道,输出信号;
Infrared_on; 开
Infrared_off; 关
严格按照协议约定的开关时间(例如识别1byte数据)赋值到一个数组;
然后再该数组(执行的约定时间下)依次执行,控制Infrared_on/Infrared_off 开/关顺序(时序),示波器抖出来正确的波形即可;
协议内容:
2 2 3 1 1 3 3 1 1 3 3 1 1 3 3 1 1 3 10
4ms一个bit位,3ms打开PWM方波1ms关闭 规定为 逻辑0;
3ms关闭PWM方波1ms打开(3ms高1ms低) 规定为 逻辑1;
2 2属于帧头期间(第一个4ms),10属于帧尾期间(最后10ms);

4、接收方:
待更新。。。

二、NEC协议(疑似小日本协议)
1、NEC码定义:
参考:https://www.codenong.com/cs106955570/ 红外.码农家园
发送端的波形:
位: 一个脉冲对应560us的连续载波+一段低电平
一个逻辑1传输需要带2.25ms(560us脉冲+1680低电平)
一个逻辑0的传输需要1.125ms(560us脉冲+560低电平)
在这里插入图片描述

接收端的真实波形:
脉冲→低电平 无脉冲→高电平 这个是硬件侧真实的表象;
在这里插入图片描述
在这里插入图片描述
【注意】NEC协议中,接收端解码为逻辑1还是0 是依据高电平的时间;
2、软件解码
在这里插入图片描述
nec协议如何解码:接收端的红外集成一体化接收头的数据输出引脚连接muc相应引脚,无信号传输时,硬件对该引脚一般加上拉电阻默认输出高电平,单有信号时,从引导码开始红外发射端输出方波,红外接收端接收到低电平(会有下降沿),从该下降沿为start基准开始计时;
【注意】采用外部中断内死等类/delay干等类逻辑不可取


```c
exit_interrupt_IRQ()
{
	 //使能为下降沿触发外部中断
	 if(确认触发外部中断)
	 清中断标志位;
	 //外部中断set 开始计时标志,拿到定时器ISR里;
	 //定时器中断计时Cnt值 ,该定时器的中断优先级高于该外部中断,
	 //if()
// 采用外部中断内死等类逻辑不可取,
// 不可取

for(i=0;i<4;++i)
{
	for(j=0;j<8;++j)
	{
		while(); // 等待高或低电平,等待delay时间到达
		while();
		while();
		IR_DATA[i]>>= 1;
		if(high_level_time > 560us)
			IR_DATA[i] |= 0x80 //从最高位往低位移动,根据波形实际信号情况从低位开始接收;
		high_level_time = 0;
	}
}

if(IR_DATA[2] != ~IR_DATA[2])
{
	for(i=0;i<4;++i)
	{
		IR_DATA[i] = 0;//清0
	}
}
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SUR0608

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值