搜索
bottom↓
12
返回列表 发新帖
楼主: lonelynw

红外遥控的输入捕捉实现~~~~搞一个周刚成功!发个给同我一样的初学者

[复制链接]

出0入0汤圆

发表于 2009-6-6 15:32:00 | 显示全部楼层
我用的是ATMEGA 32单片机, 4M 晶振,T1工作在输入捕获模式,下降沿解发,,全部源代码如下:
//ICC-AVR application builder : 2007-10-22 20:27:27
// Target : M32
// Crystal: 4.0000Mhz
/*数据头的时间:   Th=9+4.5=13.5ms
  数据“0”的时间:T0=0.565+0.56=1.125ms
  数据“1”的时间:T1=1.685+0.56=2.245ms
  */
#include <iom32v.h>
#include <macros.h>
#define  uint    unsigned int
#define  uchar   unsigned char  
unsigned int value=0,oldFall=0,temp=0,newFall=0,shuu=0;
unsigned int data1,data0,bitcnt;
unsigned char jia=0,JS_OK=0;
unsigned int shuju[40]={0},pj=0;
void port_init(void)
{
PORTA = 0x00;
DDRA  = 0x00;
PORTB = 0x00;
DDRB  = 0x00;
PORTC = 0x00;
DDRC  = 0x00;
PORTD = 0x40;
DDRD  = 0x00;
}

/*//TIMER1 initialize - prescale:1
// desired value: 1mSec
// actual value:  1.000mSec (0.0%)
void timer1_init(void)
{
TCCR1B = 0x00; //stop
TCNT1H = 0xF0; //setup
TCNT1L = 0x60;
OCR1AH = 0x0F;
OCR1AL = 0xA0;
OCR1BH = 0x0F;
OCR1BL = 0xA0;
ICR1H  = 0x0F;
ICR1L  = 0xA0;
TCCR1A = 0x00;
TCCR1B = 0x01; //start Timer
}*/
//TIMER1 initialize - prescale:1
// desired value: 1uSec
// actual value:  1.000uSec (0.0%)


//TIMER1 initialize - prescale:1
// desired value: 1uSec
// actual value:  1.000uSec (0.0%)
void timer1_init(void)
{
TCCR1B = 0x00; //stop
TCNT1H = 0xFF; //setup
TCNT1L = 0xFC;
OCR1AH = 0x00;
OCR1AL = 0x04;
OCR1BH = 0x00;
OCR1BL = 0x04;
ICR1H  = 0x00;
ICR1L  = 0x04;
TCCR1A = 0x00;
TCCR1B = 0x01; //start Timer
}
#pragma interrupt_handler timer1_capt_isr:7
void timer1_capt_isr(void)
{
      uchar i;
          
      newFall=ICR1;
      temp=newFall-oldFall; //计算脉冲加间隔的时间
      oldFall=newFall;
          
          
       if(temp>1024 && temp<1225) // "0"信号
                  {
                  temp=0;
                  }
      else if(temp>2145 && temp<2345) //“1”信号
                  {
                  temp=1;
                  }
      else if(temp>13400 && temp<13600) //header信号
                  {
                  bitcnt=0;
                  data0=0;
                  data1=0;
                  return; //返回,等待下次开始接收
                  }
      else ///干扰信号
                  {
                          return;
                  }
      
      bitcnt++;
      if(bitcnt<16) //开始接收前16位
         {
                  data0=data0|(uint)temp;
                  data0=data0<<1;
         }
      else if(bitcnt==16)
                  {
                  data0=data0|(uint)temp;
                  }
      else if(bitcnt<32) //开始接收后16位
                  {
                  data1=data1|(uint)temp;
                  data1=data1<<1;
                  }
      else if(bitcnt==32) //接收完最后一位
                  {
                  data1=data1|(uint)temp;
               
                  bitcnt=0;
                  data0=0;
                  data1=0;
               
                 JS_OK=1;
                  
                  
                  }
      
}


//call this routine to initialize all peripherals
void init_devices(void)
{
//stop errant interrupts until set up
CLI(); //disable all interrupts
port_init();
timer1_init();

MCUCR = 0x00;
GICR  = 0x00;
TIMSK = 0x20; //timer interrupt sources
SEI(); //re-enable interrupts
//all peripherals are now initialized
}



//
void main(void)
{
unsigned char i;
init_devices();
DDRC|=0x80;
PORTC|=0x80; // 一开如测试小灯不亮


while(1)
{
   if(JS_OK==1) //接收完32们数据后,灯亮
      PORTC&=~0x80;
   NOP();
}
}

出0入0汤圆

发表于 2009-6-6 15:38:19 | 显示全部楼层
根本就不能捕获到13.5ms的引导码,32位数据就更不用说了!当点一下,摇控器按钮时,读出temp  约为9000 ,应该是9 ms 的低电平,可是我明明设置的是下降沿触发,为什么不能捕获到13.5ms的引导码呢;如果长按按键再松开,temp 值为 4500左右,真是奇了怪了,问题很多啊,希望各位高手赐教!

出0入0汤圆

发表于 2009-6-7 10:20:45 | 显示全部楼层
mark 以前想搞,但没有搞到,现在记号下,然后回再学习!

出0入0汤圆

发表于 2009-6-7 11:00:00 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-6-9 00:07:45 | 显示全部楼层
好东西,正在学,mark

出0入0汤圆

发表于 2009-6-18 11:06:40 | 显示全部楼层
恩 很好。 这个6121编码是PWM。 有没有PPM的。PPM的解码比这个复杂啊,搞半天没搞出来。

出0入0汤圆

发表于 2009-7-7 09:11:27 | 显示全部楼层
做个记号

出10入10汤圆

发表于 2009-7-7 20:07:27 | 显示全部楼层
曾经的梦想。

出0入0汤圆

发表于 2009-7-8 09:05:41 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-7-10 11:18:01 | 显示全部楼层
先记号一下,回头再看看你的和我的有什么区别。

出0入0汤圆

发表于 2009-7-10 12:40:23 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-7-12 09:39:20 | 显示全部楼层
谢谢楼主

出0入0汤圆

发表于 2009-7-12 11:30:42 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-7-27 17:42:20 | 显示全部楼层
hao

出0入0汤圆

发表于 2009-7-27 20:33:04 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-7-28 20:00:51 | 显示全部楼层
谢谢!已实现红外解码

出0入0汤圆

发表于 2009-8-23 16:07:41 | 显示全部楼层
强!

出0入4汤圆

发表于 2009-8-23 21:06:53 | 显示全部楼层
跟贴学习!顶

出0入0汤圆

发表于 2009-12-7 13:10:57 | 显示全部楼层
先MRAK  慢慢看

出0入0汤圆

发表于 2009-12-9 18:42:16 | 显示全部楼层
mark以后有机会学习学习

出0入0汤圆

发表于 2009-12-10 12:11:32 | 显示全部楼层
谢谢

出0入0汤圆

发表于 2010-1-14 13:00:50 | 显示全部楼层
最近再搞!强贴!

出0入0汤圆

发表于 2010-1-14 19:26:02 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-1-14 22:49:22 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-1-15 17:34:22 | 显示全部楼层
签收

出0入0汤圆

发表于 2010-1-15 17:45:36 | 显示全部楼层
领了,谢谢

出0入0汤圆

发表于 2010-1-22 15:03:02 | 显示全部楼层
这种方法通用性不好,占用资源太多,很多地方不适用,

出0入0汤圆

发表于 2010-1-23 20:20:37 | 显示全部楼层
囧,刚刚发现了一个可以GPS定位手机位置的网站,真不可思议!可以去看看
http://hd.qu365.com/?P346086

出0入0汤圆

发表于 2010-8-19 17:53:18 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-8-19 18:11:22 | 显示全部楼层
学习ing。。。

出0入0汤圆

发表于 2010-8-19 21:17:58 | 显示全部楼层
记号

出0入0汤圆

发表于 2010-8-22 11:24:43 | 显示全部楼层
MARK

出0入0汤圆

发表于 2010-8-22 12:16:54 | 显示全部楼层
mark!

出0入0汤圆

发表于 2010-8-22 15:52:33 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-8-22 16:56:11 | 显示全部楼层
ding

出0入0汤圆

发表于 2010-8-22 17:36:41 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-8-30 16:00:33 | 显示全部楼层
学习·

出0入0汤圆

发表于 2010-9-1 11:49:47 | 显示全部楼层
我用这个解码程序来改成icp3的,但是不成功!不知道是何故,数据加到“else if(bitcnt==16) ”这里,就不再执行了????????????

出0入0汤圆

发表于 2010-9-4 16:30:46 | 显示全部楼层
好~~~~

出0入0汤圆

发表于 2010-9-15 16:21:40 | 显示全部楼层
先说声谢了!!!

出0入0汤圆

发表于 2010-9-15 18:16:57 | 显示全部楼层
顶一下

出0入0汤圆

发表于 2010-9-29 20:21:20 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-10-8 16:34:48 | 显示全部楼层
MARK

出0入0汤圆

发表于 2010-10-8 20:19:21 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-10-8 22:01:37 | 显示全部楼层
mark!!

出0入0汤圆

发表于 2010-11-13 13:04:02 | 显示全部楼层
谢谢楼主

出0入0汤圆

发表于 2011-3-24 16:23:40 | 显示全部楼层
真的太感谢您啦  程序可以   谢谢!!!

出0入0汤圆

发表于 2011-3-24 16:31:40 | 显示全部楼层
标志位检测,好

出0入0汤圆

发表于 2011-3-24 16:37:30 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-3-24 18:36:16 | 显示全部楼层
学习!!!!!

出0入0汤圆

发表于 2011-4-22 21:53:59 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-4-23 01:30:43 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-8-26 20:10:50 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-8-26 20:17:16 | 显示全部楼层
学习

出0入0汤圆

发表于 2011-8-26 21:16:19 | 显示全部楼层
mark!

出0入0汤圆

发表于 2011-9-2 10:44:17 | 显示全部楼层
MARK

出0入0汤圆

发表于 2011-9-27 13:51:37 | 显示全部楼层
学习了

出0入0汤圆

发表于 2011-11-1 16:35:56 | 显示全部楼层
mark,正准备做这方面的,谢谢!

出0入0汤圆

发表于 2011-11-11 11:28:03 | 显示全部楼层
帮顶

出0入0汤圆

发表于 2011-12-10 21:30:07 | 显示全部楼层
回复【楼主位】lonelynw 阿水
-----------------------------------------------------------------------

好贴,对我有很大的帮助啊。谢谢了!

出0入0汤圆

发表于 2011-12-27 16:23:20 | 显示全部楼层
mark
头像被屏蔽

出0入0汤圆

发表于 2011-12-29 15:17:29 | 显示全部楼层
好东西

出0入0汤圆

发表于 2012-6-28 23:10:53 | 显示全部楼层
学习了,哈哈

出0入0汤圆

发表于 2012-7-3 11:36:23 | 显示全部楼层
请问楼主:
数字机顶盒上的红外遥控器初始使用的时候,和电视的红外是不相匹配的.
需要将和电视匹配的遥控器进行匹配,然后就可以使用.
请问这个机顶盒遥控器和电视机遥控器匹配的过程也是个解码的过程?能详细描述下吗?

出0入0汤圆

发表于 2012-7-5 22:03:59 | 显示全部楼层

mark

出0入0汤圆

发表于 2012-7-6 08:48:04 | 显示全部楼层
啊莫终于恢复正常了!!等了n久

出0入0汤圆

发表于 2012-7-18 09:24:21 | 显示全部楼层
继续为大家贡献资料哦

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-4-29 16:22

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

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