zoukankan      html  css  js  c++  java
  • DE1-SOC IR 红外发送接收案例中 IR 数据接收的代码解析——RX

    今天来分析下 友晶科技 DE1-SOC 的CD 里面的  DE1-SoC__._._.__HWrev_.rev__SystemCDDemonstrationsFPGADE1_SoC_IR 案例的IR 接收的代码。

     首先大家要先百度 了解下 NEC IR 协议。

    关于DE1-SOC IR 输出的代码解析请参考 我之前的博客:https://www.cnblogs.com/DoreenLiu/p/14313287.html

    功能框图

    首先这个案例的任务实现,手册给出了这个图:

     为了实现IR 接收的功能,IR RX Controller又可以分为三个功能小块(键码侦测器(或者是IR解码器)、移位寄存器、状态机),为了让大家理解更清楚, 我直接附上《DE2-115实战宝典》的中文说明:

    (DE1-SOC 手册也有相关说明, 但是 是英文版本的)

     

     

    参数设定

    打开 DemonstrationsFPGADE1_SoC_IRIR_RECEIVE_Terasic.v 文件,模块声明的下面是参数设定,关于IDLE_HIGH_DUR  为啥要设置成262143,这个请大家参考我之前的博客 https://www.cnblogs.com/DoreenLiu/p/14308535.html 。

    接着是引导码里面高电平和低电平的时钟周期判断,parameter GUIDE_LOW_DUR = 230000;  // 大家可能疑惑引导码的高电平是9ms时间,为啥这里是检测低电平,并且还只有  230000*0.02us = 4.60ms呢? 这是因为首先IR 接收器输出到FPGA的信号是反向的(被IRM_V538_TR1 的输出端的 三极管取反了)(截图来自IRM_V538_TR1.pdf 第5页)

    然后当我们判断引导码9ms低电平的时候只要判断比4.5ms还多一点的4.6ms就够了。

    parameter GUIDE_HIGH_DUR = 210000;// 4.5ms的高电平引导码判断情况只需判断 210000*0.02us = 4.20ms就够了,因为误差 4.5-4.2 = 0.3ms < 0.56ms就行,GUIDE_HIGH_DUR是计数器用来判断 GUIDANCE-状态------>DATAREAD状态的转变阈值。

    IR侦测器

    移位寄存器

    DATAREAD 状态,在解析IR接收到的数据。当检测的高电平持续超过0.64us, 说明接收到的数据是1,于是将data对应位赋值1,否则,对应位保持位为0

    对外输出数据

  • 相关阅读:
    python 得到请求的返回内容
    pyhton编码解码理解
    .NET数据库编程求索之路--1.引子
    (转)C#调用C函数(DLL)传递参数问题
    C# 如何在Excel 动态生成PivotTable
    高效Web开发的10个jQuery代码片段
    关于大型网站技术演进的思考(一)--存储的瓶颈(1)
    100. Same Tree
    226. Invert Binary Tree
    169. Majority Element
  • 原文地址:https://www.cnblogs.com/DoreenLiu/p/14333437.html
Copyright © 2011-2022 走看看