END12345678 发表于 2009-3-17 15:38:00

看看我的红外捕捉学习遥控器,有问题请教

下面是我写的一个测试程序,测试的遥控器是SAA3010(资料上说是使用RC-5编码)。
多少现在我按同一个键,比喻数字键“1”,串口得到48个数据,并且么此按数字“1”或者其他相同按键,得到的着48个数据都不一样。
所以就有了下面的问题。
1,SAA3310的数据格式如下,应该是32位。怎么串口会收到48个数据呢?.
   SAA3010是使用RC-5编码,有2位起始位、1位控制位、系统码占5位、指令码占6位,
一帧数据共占14位。在第一次按下遥控按键后芯片要经过16位的防抖动时间和2位的扫描时
间才会发送第一帧数据。
2,为什么按同一个键,每次串口收到的数据不一样呢?
3,程序中putchar(pulse_clocks);//串口发送脉冲宽度*/ ,这里发送的宽度是实际时间吗?
请教大家,谢谢了,由于手上没有示波器,另外对于学习型的遥控器,接受和发送思路的理解还有点问题。
谢谢,下面是我写的接收的测试程序,我想用数组IR[]将所有高低电平的时间宽度保存下来。



#include <mega16.h>
#include <stdio.h>                                // 使用CVAVR的标准 Input/Output 函数
#include <delay.h>                                // 使用CVAVR的延时函数
#define ICP1      PIND.6                        //脉冲输入由ICP1(Pind.6)输入
sfrw ICR1=0x26;                                 //补充定义16位寄存器ICR1地址为0X26(mega16.h中未定义)
unsigned char ov_counter;
unsigned int ICP_new,ICP_old;
unsigned long pulse_clocks;
unsigned int IR;


interrupt void timer1_ovf_isr(void)       // T/C1溢出中断
{
      ov_counter++;                              //记录溢出次数
}

interrupt void timer1_capt_isr(void)      // T/C1捕捉中断
{       unsigned char i=0;
      ICP_old = ICR1;
      TCCR1B = TCCR1B ^ 0x40;   //改变触发方向
      pulse_clocks = (unsigned long)ICP_old - (unsigned long)ICP_new + (unsigned long)ov_counter * 0x10000 / 500;//计算脉冲宽度ms
      IR=pulse_clocks;//只记录脉冲维持的宽度,单位MS
      if(i==79)i=0;
      ICP_new=ICP_old ;
      putchar(pulse_clocks);//串口发送脉冲宽度*/ 请问这里发送的宽度是实际时间吗?
}

void main(void)
{   unsigned char j;
    UCSRA=0x00;                // USART initialization
    UCSRB=0x18;                // Communication Parameters: 8 Data, 1 Stop, No Parity
    UCSRC=0x86;                // USART Receiver: On,USART Transmitter: On
    UBRRH=0x00;                // USART Mode: Asynchronous        ,USART Baud Rate: 9600
    UBRRL=0x19;
    //TCCR1B=0x42;//初始化T/C1,1/8分频,上升沿触发捕捉
    TCCR1B=0x02;    //初始化T/C1,1/8分频,下降沿触发
    TIMSK=0x24;   //允许T/C1溢出和捕捉中断
    #asm("sei")
    while (1)
   {};
}

lanshuitianxia 发表于 2009-3-17 16:24:19

传个代码和示波器抓的的波形给你 这是以前做着玩的 用的是定时器解码 没有采用ICP功能
点击此处下载 ourdev_426101.rar(文件大小:892K) (原文件名:infrared remote control.rar)

END12345678 发表于 2009-3-17 16:35:29

谢谢,SAA3010用51解出来了,我现在想用AVR来学习红外码

END12345678 发表于 2009-3-17 19:27:00

出现上面的问题是不是我程序....
晚上再找找原因,

END12345678 发表于 2009-3-17 23:28:07

还是有问题,郁闷。继续调试,路过的大哥给点帮助了

END12345678 发表于 2009-3-18 17:36:49

再顶一下

END12345678 发表于 2009-3-19 09:34:06

没有人做过吗?

realize 发表于 2009-3-19 13:46:09

我做过,不过不是用AVR写的,用的是台湾仿PIC芯片(成本二元左右).接收也不用接收头,是用电路接收的.若用AVR,那成本太高了.

ww7805 发表于 2009-3-21 17:14:32

记号希望楼主能做出来

zx962032 发表于 2009-3-22 07:40:59

应该是时间问题,我做过实验,不同的遥控器竟然接收的的编码不一样,但是都可以控制同样的电视机。我纳闷了很久的时间,后来测量才知道晶振的频率不一样,于是将两个遥控器的晶振都更换成新买的同一批次的晶振,哈哈,遥控器同步了,接收到的编码都是一样的了。
遥控解码,没有别的技巧,就是要精确控制时间,也就是你的接收和你的发射要时序相同,相差不能太大了。否则。。。。。。

ndust 发表于 2009-3-22 07:54:04

jh

bbi3014 发表于 2009-5-31 13:44:53

mark

me18923 发表于 2011-1-20 23:42:07

mark
页: [1]
查看完整版本: 看看我的红外捕捉学习遥控器,有问题请教