红外编码格式


转自:http://www.cublog.cn/u3/105675/showart_2420421.html

转自AS1250 红外遥控器芯片说明

最近在研究的在S3C6410的上的IRM3638 红外接收器件。发现其中红外编码采用PT2222编码,进一步研究发现,红外编码是有好几种编码.特的将编码格式取出来放在这里.

一.TC9028、TC9012、TC9243 编码方式

   TC9028、 TC9012和TC9243这三者的编码方式是完全一致的, 该码型的一帧数据中含有32  位, 
即 8  位用户编码,8 位用户编码的重复码,8  位键数据编码(D0~D7)以及他的反码。用户码和键 
数据码的发送均是低位在前,高位在后。

   如上图 1 所示:一帧完整的发射码有引导码、用户编码和键数据码三部分组成。引导码由一个 4.5ms 
高电平脉冲及 4.5ms 的低电平脉冲组成;八位用户编码,被连续发送两次:八位的键数据码也被连续 
发送两次,第一次发送的是键数据码的原码,第二次发送的是键数据码的反码。  “1”和“0”的区 
分取决于脉冲之间的时间,称之为脉冲位置调制方式(PPM) 。波形如图 4。 
    当 SEL接 DRV0 脚时,选中的 8 位用户编码为(C7-C0:00001110(0EH)) ,该码型的输出波形 
如图 2所示,重复码波形如图 3所示,“1”和“0”的波形如图 4所示,载波波形如图 5所示:

  “1”和“0”的区分取决与脉冲之间的时间,称之为脉冲位置调制方式(PPM) ,如图 4所示。

发射端输出高电平时按图 5的载波波形发送:  频率:38KHz;占空比:1/3。

2、UPD6122 和 PT2222 编码方式: 
   PT2222与 upd6122 的编码方式完全一致,该码型所发射的一帧码含有一个引导码,8 位的用户 
编码(例如 C7~C0=14H)及其反码,8  位的键数据码及其反码。下图给出了这一帧码的结构。

   如上图 6所示,引导码由一个 9ms 的载波波形和 4.5ms 的关断时间构成,它作为随后发射的码 
的引导。在发重复码时,引导码由一个 9ms 的载波波形和 2.25ms 的关断时间构成。每次 8  位的码被 
传送的同时,它们的反码也被传送。 
   当 SEL 接 DRV6 脚时,选中的 8 位用户编码为(C7~C0=14H) ,其输出波形如图 7,图 8,图 
9所示:

编码采用脉冲位置调制方式(PPM) ,利用之间的时间间隔来区分“0”和“1” ,其波形同图 10。

发射端输出高电平时按图 11的载波波形发送。频率:38KHz;占空比:1/3。

3、LC7461 和 LC7462 编码方式: 
  LC7461 和 LC7462 的编码方式完全一致,该码型所发送的一帧数据中含有 42  位码,包含一引 
导码、13 位用户码和 8  位数据码以及它们的反码。这样很大程度上减少了误码率。发射码的格式如 
下图 12所示:

   引导码有 9ms 的载波和 4.5ms 的载波关断波形所构成,以作为用户码、键数据码以及它们的反 
码的先导。 
    当 SEL 接 DRV2 脚时, 选中的 13 位用户编码为(C12  —C0:  0000100010111 (0117H)), LC 7461的输出波形如图 13,图 14所示:

“1”和“0”的区分取决与脉冲之间的时间,称之为脉冲位置调制方式(PPM) ,如图 15所示。

  发射端输出高电平时按图 16的载波波形发送,  频率:38KHz;占空比:1/3。

### 3.1 使用红外接收模块捕获信号 要确定空调遥控器使用的红外编码格式,可以通过红外接收模块(如 VS1838B 或 TSOP1838)与 Arduino 开发板配合使用,捕获遥控器发射的红外信号。将红外接收模块的 VCC 引脚连接到 Arduino 的 5V 引脚,GND 引脚连接到 Arduino 的 GND 引脚,OUT 引脚连接到 Arduino 的数字引脚(如 11 号引脚)[^1]。 ### 3.2 使用 IRremote 库进行解码 在 Arduino IDE 中安装 IRremote 库(版本 3.3.0 或 2.2.3),该库可以简化红外信号的接收和解码过程。通过调用 `IRrecv` 类和 `decode_results` 结构体,可以读取红外信号并将其转换为可识别的十六进制编码。以下是一个用于捕获和打印红外信号的示例代码: ```cpp #include <IRremote.h> int RECV_PIN = 11; // 定义RECV_PIN为11号引脚 IRrecv irrecv(RECV_PIN); // 红外接收信号脚连接11号引脚 decode_results results; // 检查是否接收到编码 void setup() { Serial.begin(9600); // 串口波特率为9600 irrecv.enableIRIn(); // 开始接收 } void loop() { if (irrecv.decode(&results)) { // 如果检测到接收到红外编码 Serial.println(results.value, HEX); // 串口以十六进制的形式输出 irrecv.resume(); // 接收下一个编码 } delay(1000); // 延时1秒 } ``` ### 3.3 分析红外信号格式 运行上述代码后,按下空调遥控器上的不同按钮,Arduino 会通过串口监视器输出对应的十六进制编码。通过观察这些编码的结构和变化,可以判断遥控器使用的红外编码格式。常见的红外编码格式包括 NEC、Sony SIRC、RC5、RC6 等。例如,NEC 编码通常由 32 位组成,包含地址码、命令码及其反码,而 Sony SIRC 则使用 12 位或 20 位编码[^4]。 此外,可以通过观察信号的脉冲宽度、周期和调制频率来进一步分析编码格式红外接收模块通常使用 38kHz 的载波频率,不同编码格式的位宽和帧结构会有所不同。使用逻辑分析仪或示波器可以更精确地捕获和分析红外信号的物理特性。 ### 3.4 使用 IRremote 库发送信号 一旦确定了空调遥控器使用的红外编码格式,就可以使用 IRremote 库中的 `IRsend` 类来发送相同的红外信号。例如,若遥控器使用 NEC 编码,可以使用以下代码发送红外信号: ```cpp #include <IRremote.h> IRsend irsend; void setup() { // 初始化 } void loop() { // 发送NEC编码的信号,假设地址为0x2FD827D,命令为0x01 irsend.sendNEC(0x2FD827D, 0x01); delay(5000); // 每5秒发送一次 } ``` 确保红外发射二极管正确连接,并提供足够的驱动电流,以保证信号能够被空调接收并正确解析。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值