它是一种电磁波,可以实现数据的无线传输

它的波长范围为760nm ~ 1mm,不为人眼所见

紫外光波长为10-400nm

红外与蓝牙

红外:对准、直接、0-10米,单对单

蓝牙:10米左右,加强信号后最高可达100米,可以绕弯,可以不对准,可以不在同一间房间,链接最大数目可达7个,同时区分硬件

红外线系统的组成

红外线系统一般由红外发射装置和红外接收设备两大部分组成

红外发射装置又可由键盘电路、红外编码芯片、电源和红外发射电路组成

红外接收设备可由红外接收电路、红外解码芯片、电源和应用电路组成

红外遥控器发射

红外遥控器是将遥控信号(二进制脉冲码)调制在38KHz的载波上,经缓冲放大后送至红外发光二极管,转化为红外信号发射出去的



开发红外接收设备,一定要知道红外遥控器的编码方式和载波频率

红外线接收

大多都采用成品红外接收头。均有三只引脚,即电源正(VDD)、电源负(GND)和数据输出(VOUT)



用时注意成品红外接收头的载波频率

数据格式

数据格式包括了引导码、用户码、数据码和数据码反码,编码总占32位

数据反码是数据码反相后的编码,编码时可用于对数据的纠错



第二段的用户码也可以在遥控应用电路中被设置成第一段用户码的反码

位定义

用户码或数据码中的每一个位可以是位‘1’ ,也可以是位‘0’

区分‘0’和‘1’是利用脉冲的时间间隔来区分,这种编码方式称为脉冲位置调制方式



时间间隔取一个中间值(高电平时间1秒)

举例

sbit IRIN = P3 ^ 2;

void IrInit()
{
IT0 = 1; //下降沿触发
EX0 = 1; //打开中断0允许
EA = 1; //打开总中断 IRIN = 1; //初始化端口
} void ReadIr() interrupt 0
{
u8 j, k;
u16 err;
Time = 0;
delay(700); //7ms
if(IRIN == 0) //确认是否真的接收到正确的信号
{
err = 1000; //1000 * 10us = 10ms, 超过说明接收到错误的信号
/*当两个条件都为真是循环,如果有一个条件为假的时候跳出循环,免得程序出错的时
侯,程序死在这里*/
while((IRIN == 0) && (err > 0)) //等待前面9ms的低电平过去
{
delay(1);
err--;
}
if(IRIN == 1) //如果正确等到9ms低电平
{
err = 500;
while((IRIN == 1) && (err > 0)) //等待4.5ms的起始高电平过去
{
delay(1);
err--;
} for(k = 0; k < 4; k++) //共有4组数据
{
for(j = 0; j < 8; j++) //接收一组数据
{
err = 60;
while((IRIN == 0) && (err > 0)) //等待信号前面的560us低电平过去
{
delay(1);
err--;
}
err=500;
while((IRIN == 1) && (err > 0)) //计算高电平的时间长度
{
delay(10); //0.1ms
Time++;
err--;
if(Time > 30)
{
return;
}
}
IrValue[k] >>= 1; //k表示第几组数据
if(Time >= 8) //如果高电平出现大于565us,那么是1
{
IrValue[k] |= 0x80;
}
Time = 0; //用完时间要重新赋值
}
}
} if(IrValue[2] != ~IrValue[3]) //用户码是否匹配
{
return;
}
}
}

使用逻辑分析仪分析遥控器协议



抓取的二进制值:0b00000000 – 0b11111111 – 0b00110000 – 0b11001111

因为红外接收是反相的,低位在前,高位在后。

所以解码完的数据应该是:0b00001100 = 0x0c

红外 NEC编码的更多相关文章

  1. MicroPython TPYBoard v102 无线红外遥控舵机(基于红外解/编码模块)

    转载请注明文章来源,更多教程可自助参考docs.tpyboard.com,QQ技术交流群:157816561,公众号:MicroPython玩家汇 红外解码/编码模块介绍 模块上搭载了红外接收头.红外 ...

  2. 红外NEC协议

    注意: 用示波器在接收头抓的电平看起来和NEC协议刚好相反, 那是因为:HS0038B 这个红外一体化接收头,当收到有载波的信号的时候,会输出一个低电平,空闲的时候会输出高电平. 具体情况,具体分析. ...

  3. 红外解码编码学习----verilog

    在设计中运用红外遥控器可以很好的解决按键缺少的问题,还可以方便的控制产品. 红外发射部分: 红外发射管: 判断红外发射管的好坏 : 电路原理图: 接收部分: 传输的NEC协议: 本实验电路: veri ...

  4. 蓝牙BLE实用教程

    蓝牙BLE实用教程 Bluetooth BLE 欢迎使用 小书匠(xiaoshujiang)编辑器,您可以通过 设置 里的修改模板来改变新建文章的内容. 1.蓝牙BLE常见问答 Q: Smart Re ...

  5. 蓝牙BLE实用教程(转载)

    欢迎使用 小书匠(xiaoshujiang)编辑器,您可以通过 设置 里的修改模板来改变新建文章的内容. 1.蓝牙BLE常见问答 Q: Smart Ready 和 Smart 以及传统蓝牙之间是什么关 ...

  6. 38KHz,NEC红外模拟发送和接收程序

    /*************************************************************************************************/ ...

  7. 基于Arduino、STM32进行红外遥控信号接收

    catalogue . 遥控器原理简介 . 红外遥控原理 . 常见红外遥控器红外线信号传输协议 . 遙控器的发展 . 实验过程 . 攻击面 . 基于STM32实现红外信号解码 1. 遥控器原理简介 0 ...

  8. Android使用AudioTrack发送红外信号

    最近要做一个项目,利用手机的耳机口输出红外信号,从而把手机变成红外遥控器,信号处理的知识基本都还给老师了,刚开始真的挺头疼.找了不少资料研究了一下,总算有点心得,在这里做个备忘. 一.音频信号输出原理 ...

  9. 玩转X-CTR100 l STM32F4 l 红外遥控接收

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ]      X-CTR100控制器具有红外接收头,例程 ...

随机推荐

  1. 001-多线程-JUC集合-框架概述

    一.概述 1.1.java集合 java集合的架构,主体内容包括Collection集合和Map类:而Collection集合又可以划分为List(队列)和Set(集合). 1. List的实现类主要 ...

  2. mysql多实例搭建

    一)多实例安装 [root@mysqlmaster01 ~]# mkdir /data/mysql_data2[root@mysqlmaster01 ~]# mkdir /data/mysql_dat ...

  3. 通过举例了解java中的流

    Java流结构介绍: Java所有的流类位于java.io包中,都分别继承字以下四种抽象流类型.   字节流 字符流 输入流 InputStream Reader 输出流 OutputStream W ...

  4. 二进制安装k8s-单个master节点、两个node--修改版--有个错误:好多地方确少APISERVER

    centos7.4安装k8s-.11版本,二进制 安装 配置系统相关参数 如下操作在所有节点操作 # 临时禁用selinux # 永久关闭 修改/etc/sysconfig/selinux文件设置 s ...

  5. 剑指offer 65. 不用加减乘除做加法(Leetcode 371. Sum of Two Integers)

    剑指offer 65. 不用加减乘除做加法(Leetcode 371. Sum of Two Integers) https://leetcode.com/problems/sum-of-two-in ...

  6. 源码搭建zabbix服务

    1) 部署LNMP 1.1) cd /root tar -xf lnmp_soft.tar.gz cd lnmp_soft/ tar -xf nginx-1.10.3.tar.gz cd nginx- ...

  7. Python学习笔记——pickle 模块

    由于从文本文件中读取出来的内容都会变成字符串,且转换成列表.字典等数据类型比较困难,因此采用pickle模块存储它们 import pickle my_list = [123,3.14,'小甲鱼',[ ...

  8. IDEA使用mybatis generator自动生成代码

    主要就三步: 1.pom 文件中引入jar包并配置 build 属性 <dependencies> <!-- 自动生产mapper Begin! --> <depende ...

  9. java -io 读取文件操作

    主要分为字节读取和字符读取,字节读取可以一个一个读取和字节数组读取,字符读取同样之,字符读取适合文本读取,字节读取皆可以 这里直接上代码,读取文件的9个小demo package com.io; im ...

  10. list集合的一些小见解

    关于LIst集合 前言: 第一次写博客,有些东西可能总结的到位,发表一下自己的一些观点,欢迎大佬们点评和指教 正文: list集合可以分为ArrayLlst和LinkedList. ArrayList ...