注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
dvd1478的个人空间 https://home.eeworld.com.cn/space-uid-194541.html [收藏] [复制] [分享] [RSS]
日志

红外编码与解码——GREE格力遥控 发送

已有 2552 次阅读2015-5-22 22:27 |个人分类:NXP

在上一期上描述了红外解码,以及红外在传播过程中造成的误差,

上期回顾

[红外]02、红外编码与解码——GREE格力遥控 https://bbs.eeworld.com.cn/thread-462015-1-1.html


针对GREE格力遥控的红外编码的原则
file:///C:/Documents%20and%20Settings/Administrator/Local%20Settings/Application%20Data/YNote/data/1696933323@qq.com/43ff4fe8f4dd442c9376e4071652cbe1/clipboard.png


进行编码如下

代码如下:
void IRsend_sendGREE(long datavalue ,unsigned int greeCRC)
{
  long data = 0;
  long temp = 0;
  IRsend_enableIROut(38);
  IRsend_mark(GREE_HDR_MARK);
  IRsend_space(GREE_HDR_SPACE);
  data = (datavalue&0xffffff80)|0x0A;
  for (int i = 0; i < 32; i++){
      if (data & TOPBIT) {
      IRsend_mark(GREE_BIT_MARK);
      IRsend_space(GREE_ONE_SPACE);
    }
    else {
      IRsend_mark(GREE_BIT_MARK);
      IRsend_space(GREE_ZERO_SPACE);
    }
    data <<= 1;
  }
  data = 0x02;
  for (int i = 0; i < 3; i++){
      if (data & TOPBIT) {
      IRsend_mark(GREE_BIT_MARK);
      IRsend_space(GREE_ONE_SPACE);
    }
    else {
      IRsend_mark(GREE_BIT_MARK);
      IRsend_space(GREE_ZERO_SPACE);
    }
    data <<= 1;
  }
  
  IRsend_mark(GREE_COM_MARK);
  IRsend_space(GREE_COM_SPACE);  
  
  temp = datavalue&0x00000040;//7
  data = (temp>>6);
  data = data<<4;
  temp = datavalue&0x00000020;//6
  data = data|(temp>>5);
  data = data<<5;
  temp = datavalue&0x00000018;//5 4
  data = data|(temp>>3);
  data = ((data<<16)|0x1000)<<1;//3
  temp = datavalue&0x00000004;
  data = data|(temp>>2);
  data = (data<<5)|(greeCRC&0x000f);
  for (int i = 0; i < 32; i++){
      if (data & TOPBIT) {
      IRsend_mark(GREE_BIT_MARK);
      IRsend_space(GREE_ONE_SPACE);
    }
    else {
      IRsend_mark(GREE_BIT_MARK);
      IRsend_space(GREE_ZERO_SPACE);
    }
    data <<= 1;
  }
  
  IRsend_mark(GREE_BIT_MARK);
  IRsend_space(0);
}




IRsend_enableIROut 主要实现的功能是配置PWM波的载波频率,一般为38KHZ  1/3~1/4Duty (当然也有一些特别)


由[红外]01、红外遥控介绍与接收https://bbs.eeworld.com.cn/thread-461935-1-1.html可知

要发出红外波,就是以PWM驱动红外LED传播红外波
file:///C:/Documents%20and%20Settings/Administrator/Local%20Settings/Application%20Data/YNote/data/1696933323@qq.com/475d1bd30dec47ea8a82677c7f6337b7/clipboard.png

其代码如下:
void Sct_Pwm_Init(uint32_t PWM_RATE)
{
    /* Initialize the SCT as PWM and set frequency */
Chip_SCTPWM_Init(LPC_SCT);
Chip_SCTPWM_SetRate(LPC_SCT, PWM_RATE);
/* Setup Board specific output pin */
Chip_IOCON_PinMuxSet(LPC_IOCON, 0, 9, IOCON_FUNC2 | IOCON_MODE_INACT | IOCON_DIGITAL_EN | IOCON_INPFILT_OFF);
/* Use SCT0_OUT1 pin */
Chip_SCTPWM_SetOutPin(LPC_SCT, SCT_PWM_OUT, SCT_PWM_PIN_OUT);
/* Start with 0% duty cycle */
Chip_SCTPWM_SetDutyCycle(LPC_SCT, SCT_PWM_OUT, Chip_SCTPWM_GetTicksPerCycle(LPC_SCT) / 4);
//Chip_SCTPWM_Start(LPC_SCT);
}




void IRsend_mark(int time) {
  // Sends an IR IRsend_mark for the specified number of microseconds.
  // The IRsend_mark output is modulated at the PWM frequency.
  TIMER_ENABLE_PWM(); // Enable pin 3 PWM output
  if (time > 0) delayMicros(time);
}


/* Leave pin off for time (given in microseconds) */
void IRsend_space(int time) {
  // Sends an IR IRsend_space for the specified number of microseconds.
  // A IRsend_space is no output, so the PWM output is disabled.
  TIMER_DISABLE_PWM(); // Disable pin 3 PWM output
  if (time > 0) delayMicros(time);
}




由[红外]02、红外编码与解码——GREE格力遥控 https://bbs.eeworld.com.cn/thread-462015-1-1.html
解译出的代码
以开/关键为理
关IRsend_sendGREE(0x900400,0xa);
开IRsend_sendGREE(0X10900400,0xb);

用数据采集仪分析对比

LPC54102 发送出来
file:///C:/Documents%20and%20Settings/Administrator/Local%20Settings/Application%20Data/YNote/data/1696933323@qq.com/25105f09d6fb4f1eb6d1452cd3f70040/clipboard.png


file:///C:/Documents%20and%20Settings/Administrator/Local%20Settings/Application%20Data/YNote/data/1696933323@qq.com/13cbcd67b3f84aca9be613ffeadc10ae/clipboard.png

遥控器



file:///C:/Documents%20and%20Settings/Administrator/Local%20Settings/Application%20Data/YNote/data/1696933323@qq.com/1f6cd68b1f004a78bc7af0f0451c55a5/clipboard.png


仔细对比,校对得以上图。

最后上电测试 成功的开关空调。总结对于LPC54102的资源为 PWM 的输出,定时器(延时)。其实软件延时也可以。下图为非准确延时的图,都能实现开关机



不对资源不是很紧张或者是初调试者建议还是用定时器延时。用到的资源主要有
LPC_SCT 与LPC_TIMER2

本文来自论坛,点击查看完整帖子内容。

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章