搜索
bottom↓
回复: 12

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

[复制链接]

出0入0汤圆

发表于 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[100];


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

interrupt [TIM1_CAPT] 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[i++]=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)
   {};
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2009-3-17 16:24:19 | 显示全部楼层
传个代码和示波器抓的的波形给你 这是以前做着玩的 用的是定时器解码 没有采用ICP功能
点击此处下载 ourdev_426101.rar(文件大小:892K) (原文件名:infrared remote control.rar)

出0入0汤圆

 楼主| 发表于 2009-3-17 16:35:29 | 显示全部楼层
谢谢,SAA3010用51解出来了,我现在想用AVR来学习红外码

出0入0汤圆

 楼主| 发表于 2009-3-17 19:27:00 | 显示全部楼层
出现上面的问题是不是我程序....
晚上再找找原因,

出0入0汤圆

 楼主| 发表于 2009-3-17 23:28:07 | 显示全部楼层
还是有问题,郁闷。继续调试,路过的大哥给点帮助了

出0入0汤圆

 楼主| 发表于 2009-3-18 17:36:49 | 显示全部楼层
再顶一下

出0入0汤圆

 楼主| 发表于 2009-3-19 09:34:06 | 显示全部楼层
没有人做过吗?

出0入0汤圆

发表于 2009-3-19 13:46:09 | 显示全部楼层
我做过,不过不是用AVR写的,用的是台湾仿PIC芯片(成本二元左右).接收也不用接收头,是用电路接收的.若用AVR,那成本太高了.

出0入0汤圆

发表于 2009-3-21 17:14:32 | 显示全部楼层
记号  希望楼主能做出来

出0入0汤圆

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

出0入0汤圆

发表于 2009-3-22 07:54:04 | 显示全部楼层
jh

出0入0汤圆

发表于 2009-5-31 13:44:53 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-1-20 23:42:07 | 显示全部楼层
mark
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-20 15:23

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表