搜索
bottom↓
回复: 20

请教各位大虾我用mega8如何测量红外脉冲的时间?

[复制链接]

出0入0汤圆

发表于 2005-8-20 16:49:43 | 显示全部楼层 |阅读模式
测量红外脉冲的高低电平的时间?问题是我在读取低电平的时间时对高电平的时间会有影响我应该怎么做呢?

出0入0汤圆

发表于 2005-8-21 08:53:47 | 显示全部楼层
说清楚些,要解码还是测电平宽度?

出0入0汤圆

 楼主| 发表于 2005-8-22 10:25:20 | 显示全部楼层
是解码,主要是做学习型的,能读大部分的遥控器的编码,并存储转发.我想用测量高低电平的宽度办法解决,请问如何解决呢?

出0入0汤圆

发表于 2005-8-23 20:17:34 | 显示全部楼层
“用测量高低电平的宽度办法解决”这种方法可以呀。

出0入0汤圆

发表于 2005-8-27 15:43:40 | 显示全部楼层
大虾们,本人是很喜欢单片机(业余的,非本专业),在广东工业大学读书,目前还不会AVR,正在学呢!

不过用8051我懂一点点,只懂一点点!不知道是否对你有所帮助?

本人的Email:89S53@163.com

8051方法如下:



/*

说明:本模块用于对6122编码格式的红外线遥控器进行解码,方法是可行的,

本人用此法成功解出了一只34键的VCD遥控器,但在发这个贴的时候只Copy

了其中的一部分代码,可能出错,自己找吧!很乱哦!没时间去做成一个像样的文档,莫怪!!



*******************************************



INT0接红外一体化接收头的DATA脚,可以用T0,T1对电平的持续的时间进行计时,用于启动和关闭定时器.

___      ____

   |    |    |

   |____|    |___________



      |<T0>|

   |<--T1--->|



由于高电平的宽度都一样0.56ms,可以不理会T0的值。

注意:本模式没有处理代码尾部的波形,可以在第35次出现低电平时就不进行保存,否则结果不对!!!

    |0x6f---------------------long型变量result---------------------0x72|

    result1                   result2         result3                 result4

    0x6f;                  0x70            0x71                   0x72

   用户码低8位         用户码高8位        键码                 键码反码

如:0000 0000           1111 1111          1000 0000            0111 1111



*/

#include <absacc.h>

#include "Atmel\REGX52.h"



#define uint unsigned int

#define uchar unsigned char  

#define ulong unsigned long

  

data uint T1_Count;   //保存T1的计数值,也就是第N个低电平到第N+1个低电平的时间,为高低电平之和

//data uint T0_Count;   //T0的计数值,这里没有用到



data ulong result _at_ 0x6f;         //保存32位码,16+8+8,和下面的地址重复

data uchar result1 _at_ 0x6f;         //用户码低8位

data uchar result2 _at_ 0x70;         //用户码高8位

data uchar result3 _at_ 0x71;         //键码

data uchar result4 _at_ 0x72;         //键码反码

uchar int_0_times=0;             //用来记录第?次从高电平到低电平,记住按完一次健就应该清零哦!!!!!





void main(void)

{//初始化设置如下:

        TMOD=0x19;         //0001 1001B 门控位GATE设为1



        IT0=1;                 //INT0为边缘触发方式

        TH0=0;TL0=0;TH1=0;TL1=0;   //T0,T1设初值

        IE=0x93;                  //1001 0011



        while(1)

        {

               //....

         }

}





INT0中断服务函数如下:

void int_0() interrupt 0 using 3

{       

        EA=0;

        TR0=0;TR1=0;

    int_0_times++;        //记录中断次数

        if (int_0_times==1)

         {       

             result=0;

         }

        else if(int_0_times>??)

          //这里??是你要从第几个下降沿开始保存T0记数值,自己根据编码来确定,本人试过6122编码格式从第3个开始保存

             //由于高电平的宽度都一样0.56ms,可以不理会T0的值,下面就省了,^_^

       {   



                T1_Count=TH1;  //读T1的高8位

                T1_Count<<=8;  //左移8位

                T1_Count=T1_Count+TL1;//加上T1的低8位



                if (T1_Count>1750) //这个1750是本人的经验值,下面那个1350也是,

                        {//是"1"

                                  result*=2; 

/*                                        result*=2;相当于将32位的二进制码左移一位

                                        本人试过用result<<1,发现结果是错的,

                                        这个long型的变量占用四个字节的空间,执行几次result<<1后,

                                        发现只在低16位移位,为什么呀??谁能告诉我(89S53@163.com)?

                                        我刚学的C,不懂!

*/

                                  result=result+1;//在最低位加上1               

                        }

                else if (T1_Count<1350)

                        {//是"0"

                                   result*=2;//同上

                                    

                        }

        }

         TH0=0;TL0=0;TH1=0;TL1=0;

         TR0=1;TR1=1;

         EA=1;

}

出0入0汤圆

 楼主| 发表于 2005-8-30 18:01:48 | 显示全部楼层
我的要求是:接收的红外编码的引导码的时间不一定,而且接收到后在还原发射,自学习型遥控器.

出0入0汤圆

发表于 2005-8-30 20:35:55 | 显示全部楼层
M8的速度一定能做得到的,但是我没有做过。



但是按照你上次所说的思路应该可以实现,你多试验一下。

出0入0汤圆

发表于 2005-8-31 00:00:58 | 显示全部楼层
这跟速度没关系。8051的最大计数频率是XTAL/24,红外遥控也只有三四十KHz,完全够了

出0入0汤圆

发表于 2005-8-31 00:36:00 | 显示全部楼层
高电平和低电平的宽度都知道了,还有什么难啊?就是编程了!

方法应该和MCU的种类没有多大关系。

学习型的嘛,需要EEPROM来保存编码。

你要对各种编码形式分析。

你如果对各类编码不熟悉,谈所解码??

改用解码IC,一一对应遥控器算了!

出0入0汤圆

 楼主| 发表于 2005-9-1 13:33:51 | 显示全部楼层
哪位好人能给个原代码让我参考一下(avr)?急!!!!!!!!!!!!!!!!!!!

出0入0汤圆

发表于 2005-9-8 21:57:47 | 显示全部楼层
7楼的“这跟速度没关系。8051的最大计数频率是XTAL/24,红外遥控也只有三四十KHz,完全够了”



“三四十KHz”的周期是多少?难道速度很低的也能采集到数据吗?

出0入0汤圆

发表于 2005-9-9 10:37:42 | 显示全部楼层
38KHz只是载波。

红外接收头会自动去除载波,输出的是mS级的编码脉冲信号。

无论是AVR还是51来解码,速度都是够的。

出0入0汤圆

发表于 2005-9-9 21:16:37 | 显示全部楼层
如果是用滤除载波的红外接收头,输出的脉冲信号宽度还是比较大的,也有一些厂家的是400us与200us的脉冲。



所以如果用到的是普通的红外接收头,可能首先就要算载波频率,那就要求速度了。



HJJourAVR,不知我说的对不对?

出0入0汤圆

发表于 2005-9-10 12:21:13 | 显示全部楼层
提高抗干扰能力。



很少有直接接红外管的------红外干扰很多:太阳,日光灯,其他遥控器。



一般的红外遥控都是采用成品的红外接收头,提高抗干扰能力,滤除载波是同时完成的。



即便是自动水龙头,采用红外检测,也得自己调制解调----LM567集成。

出0入0汤圆

发表于 2005-9-10 21:44:53 | 显示全部楼层
“提高抗干扰能力”这我就能理解了。



多谢HJJourAVR的讲解。

出0入0汤圆

发表于 2005-9-13 08:27:55 | 显示全部楼层
参照4楼的吧, 稍微变通就可以.

出0入0汤圆

发表于 2005-9-13 17:01:37 | 显示全部楼层
有没有谁有学习型遥控器的解码程序呢(AVR,ATMEGA8)?我也要学习学习。

出0入0汤圆

发表于 2005-9-13 21:41:04 | 显示全部楼层
楼主我觉得你的这个问题已经得到解决了,这不算是技术支持差吧?



能解决的问题,不一定要马老师帮你解决吧?



所以你在别的帖子说那样的话,让我觉得……

出0入0汤圆

 楼主| 发表于 2005-9-13 21:52:45 | 显示全部楼层
c51的红外接收解码我有全系列遥控的原代码,我现在要知道的是avr的定时器的捕获功能具体的用法,而不是要在发一次的51的代码,4楼的原代码我早就有了.而是我发贴等好几天才能见到一个有用的帖子.真是气人呀.

出0入0汤圆

发表于 2005-9-14 09:24:56 | 显示全部楼层
yu-ming,既然你C51的解码都有了,那你应该参考别人的代码自己多做实验试试看。我才初学,实在没有办法帮上忙,不好意思了,呵呵。各位高手多帮帮忙吧。

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-5-2 09:51

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

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