你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

红外解码波形,感觉不对求指导

[复制链接]
黑皮男 提问时间:2015-7-31 15:15 /
我用示波器采集了红外接收头的波形,如附件,但是波形感觉不对啊,请各位指教一下
QQ图片20150731151305.jpg
QQ图片20150731151311.jpg
收藏 评论20 发布时间:2015-7-31 15:15

举报

20个回答
黑皮男 回答时间:2015-7-31 15:22:21
源码,使用捕获的时候,每次采集的数据都不一样,而且在编译时会有警告,dval没有使用过。

int main(void)
{

  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration----------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* Configure the system clock */
  SystemClock_Config();

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_TIM4_Init();

  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
  /* USER CODE END WHILE */

  /* USER CODE BEGIN 3 */

  }
  /* USER CODE END 3 */

}

/** System Clock Configuration
*/
void SystemClock_Config(void)
{

  RCC_OscInitTypeDef RCC_OscInitStruct;
  RCC_ClkInitTypeDef RCC_ClkInitStruct;
  RCC_PeriphCLKInitTypeDef PeriphClkInit;



  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
  RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  RCC_OscInitStruct.HSICalibrationValue = 16;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
  RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL8;
  RCC_OscInitStruct.PLL.PREDIV = RCC_PREDIV_DIV1;
  HAL_RCC_OscConfig(&RCC_OscInitStruct);

  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1;
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
  HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2);

  PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_TIM34;
  PeriphClkInit.Tim34ClockSelection = RCC_TIM34CLK_HCLK;
  HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit);

  __SYSCFG_CLK_ENABLE();

}

/* TIM4 init function */
void MX_TIM4_Init(void)
{

  TIM_ClockConfigTypeDef sClockSourceConfig;
  TIM_MasterConfigTypeDef sMasterConfig;
  TIM_IC_InitTypeDef sConfigIC;

        HAL_NVIC_SetPriority(TIM4_IRQn, 0x0D, 0x00);
        HAL_NVIC_EnableIRQ(TIM4_IRQn);

  htim4.Instance = TIM4;
  htim4.Init.Prescaler = 64-1;
  htim4.Init.CounterMode = TIM_COUNTERMODE_UP;
  htim4.Init.Period = 10000;
  htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  HAL_TIM_Base_Init(&htim4);

  sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
  HAL_TIM_ConfigClockSource(&htim4, &sClockSourceConfig);

  HAL_TIM_IC_Init(&htim4);

  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  HAL_TIMEx_MasterConfigSynchronization(&htim4, &sMasterConfig);

  sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_RISING;
  sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI;
  sConfigIC.ICPrescaler = TIM_ICPSC_DIV1;
  sConfigIC.ICFilter = 0;
  HAL_TIM_IC_ConfigChannel(&htim4, &sConfigIC, TIM_CHANNEL_1);

          HAL_TIM_Base_Start_IT(&htim4);
        HAL_TIM_IC_Start_IT(&htim4, TIM_CHANNEL_1);

}

/** Pinout Configuration
*/
void MX_GPIO_Init(void)
{

  /* GPIO Ports Clock Enable */
  __GPIOB_CLK_ENABLE();

}


/********************************************************************************************************/

__weak void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
  /* NOTE : This function Should not be modified, when the callback is needed,
            the __HAL_TIM_IC_CaptureCallback could be implemented in the user file
   */
   uint16_t tmpccer;
    uint32_t dval;
  tmpccer = htim->Instance->CCER;
        if(tmpccer&(uint16_t)0x0002==0x00)
        {

                                tmpccer &=  (uint16_t)~((uint16_t)0x0002);
                                 tmpccer |= (uint16_t)0x0002;
                                 htim->Instance->CCER = tmpccer;
                                __HAL_TIM_SetCounter(htim,0);
                                 
        }
        else
        {
                        dval = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1);
       
                                tmpccer &=  (uint16_t)~((uint16_t)TIM_CCER_CC1P);
                                tmpccer |= (uint16_t)(TIM_ICPOLARITY_RISING);
                                htim->Instance->CCER = tmpccer;
                               
                                 
        }
}

zhuoyemp4 回答时间:2015-7-31 16:50:27
从示波器波形来看,应该是你一直按着不松开遥控器时采集的,是遥控器发出的重复码,但又感觉时间太短,一般重复码周期都大于40ms的。
红外协议有很多种:
1、ITT 协议,如IRT1250 和IRT1260发送芯片。
2、Nokia NRC17 协议,生产厂家Nokia CE。
3、Sharp 协议,主要应用于Sharp 的VCR 中。4、NEC 协议,如HS6221/6222、HT6221/6222 是采用NEC 协议的通用红外遥控发射芯片,亚洲主要用这个。
5、Philips RC-5 协议,发送芯片有:SAA3006、SAA3010、SAA3027
6、还有Philips RC-6 协议,Philips RECS-80 协议,以及Sony SIRC 协议等
单片机解码要看你遥控器发出的码遵循哪种协议(把遥控器拆开看看用的发送芯片是什么型号,查数据手册)。祝你好运!
yushan210 回答时间:2015-8-6 09:47:19
感觉你捕捉的不太对,我前些日子做过一个红外解码的  好像是TCL的  协议不清楚,一开始也没测波形,根据经验测红外就是计算出他的高低电平是多少  然后判断哪个组合是1哪个组合是0就行了,用定时器捕捉一下
http://www.xiaovdiy.cn/?post=138这篇文章能帮助你
wu1169668869 回答时间:2015-7-31 16:21:25
总觉得你那个波形是长按某个按钮的信号
试试单次触发看波形吧
mark0668 回答时间:2015-7-31 16:47:13
应该是抓到长按的信号来的.
黑皮男 回答时间:2015-7-31 17:07:52
zhuoyemp4 发表于 2015-7-31 16:50
从示波器波形来看,应该是你一直按着不松开遥控器时采集的,是遥控器发出的重复码,但又感觉时间太短,一般 ...

我是用的示波器的捕获模式采集的,这样不会采集到红外的起始码吗
你好我好大家好! 回答时间:2015-7-31 17:10:22
      帮顶
zhuoyemp4 回答时间:2015-7-31 17:16:40
黑皮男 发表于 2015-7-31 17:07
我是用的示波器的捕获模式采集的,这样不会采集到红外的起始码吗

跟你用什么方式关系不太大,正常采集就可以
JackieLaura 回答时间:2015-8-1 09:42:55
来学习的。。。。
294479435@qq.co 回答时间:2015-8-1 10:04:18
首先你要知道红外发码的编码,在解码吧
黑皮男 回答时间:2015-8-5 16:36:32
其实是遥控器没电了
黑皮男 回答时间:2015-8-5 16:36:50
多谢大家的热心回答
黑皮男 回答时间:2015-8-6 10:04:15
yushan210 发表于 2015-8-6 09:47
感觉你捕捉的不太对,我前些日子做过一个红外解码的  好像是TCL的  协议不清楚,一开始也没测波形,根据经 ...

非常感谢,我开始就是不知道我设置的定时器对不对
cos12a-21701 回答时间:2015-8-7 13:12:37
用示波器CH2测发射的编码,看看与CH1接收的编码一样么?
12下一页

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版