打印

用mega48软件解2262的无线遥控码

[复制链接]
2915|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hnxtqzh|  楼主 | 2009-12-21 17:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
由于以前没有弄过遥控解码方面,对其估计不足,开始用2272硬件解码的电平信号,是比较简单,但由于要有对码功能要用软件解码才行,现在不知道要怎么搞,急坏了.
有哪位大侠,做过无线解码,或用AVR做过无线解码,请指点一下.

相关帖子

沙发
xwj| | 2009-12-21 17:22 | 只看该作者
很简单啊,用mega48相当容易的。

自己再去想想、搜索搜索哦~

使用特权

评论回复
板凳
韩秋婷| | 2009-12-21 17:25 | 只看该作者
楼主想问ask软解调

使用特权

评论回复
地板
韩秋婷| | 2009-12-21 17:26 | 只看该作者
2楼说很简单,就叫2楼去做好了

使用特权

评论回复
5
xwj| | 2009-12-21 17:28 | 只看该作者
叫2楼去做可以,问题是你出多少钱。
或者4楼负责给钱?

使用特权

评论回复
6
韩秋婷| | 2009-12-21 17:30 | 只看该作者
要不楼主去贿赂一下蝴蝶妹
5楼就免费帮你做了

使用特权

评论回复
7
xwj| | 2009-12-21 17:31 | 只看该作者
而且去搜索“2262解码”随便就是几万条结果,2楼让去搜索搜索说错了吗?

3楼,谁告诉你“楼主想问ask软解调”的???

使用特权

评论回复
8
hnxtqzh|  楼主 | 2009-12-21 17:55 | 只看该作者
不是ask软解调,AVR接受的信号已经是解调后的高低电平信号

使用特权

评论回复
9
hnxtqzh|  楼主 | 2009-12-21 18:05 | 只看该作者
我是LZ,
我用的遥控频率为315M,遥控的振荡电阻为4.7M,
我推出了码头的高电平宽度16ms,低电平528us.
我采用的是1M的AVR内部机器周期
采用查询的方式
              i=0;  
               while (PINC&(1<<PC2))         
              {               
                          asm("nop");                                          
                           i++;                 
               if (i>500)   
               goto end;
                 }
通过i的大小来判断电平的长度,
哪位能帮我看一下,当i=500,时,需要多少时间?

使用特权

评论回复
10
huangqi412| | 2009-12-21 18:44 | 只看该作者
:D   跟接受红外信号一样...               这倒是个最佳办法---------贿赂蝴蝶MM

使用特权

评论回复
11
hnxtqzh|  楼主 | 2009-12-21 18:54 | 只看该作者
但是里面有很多的信号干扰

使用特权

评论回复
12
杜专| | 2009-12-21 18:57 | 只看该作者
:lol

使用特权

评论回复
13
desert_hawk| | 2009-12-21 19:42 | 只看该作者
楼主在9楼的方法不太妙。
C语言里很难根据程序语句来判断运行时间的,即使是用汇编,算起来也比较麻烦,因为AVR的指令1-4周期的都有。建议用外部中断来采集数据的跳变沿(正跳变和负跳变都采集),用一个定时器来对跳变沿之间的时间间隔进行计时,符合脉冲宽度的就是数据位,不符合的就是干扰信号了。

使用特权

评论回复
14
風神| | 2009-12-22 09:23 | 只看该作者
= =!!!一开始空载时候会很多干扰。一般都采用脉宽识别吧,一旦正式通信了,就基本上没多少干扰了。之所以,关键在于怎么样准确识别第一个同步头而已。

使用特权

评论回复
15
hnxtqzh|  楼主 | 2009-12-22 09:51 | 只看该作者
我现在在用捕获中断的方法测试,输入捕捉噪声抑制器设置了,找同步吗,结果用于测试的灯是闪个不停.分辨不出同步吗

使用特权

评论回复
16
hnxtqzh|  楼主 | 2009-12-22 17:14 | 只看该作者
在各位大侠前辈的提示下,我找了段红外线的代码修改后,用来测试

#define Start_T1 TCCR1B|=CS11;TCNT1=0//复位预计分频器并开启定时器T1
#define Stop_T1 TCCR1B&=~CS11 //关闭定时器T1

/*-----------------IR信号指示灯操作函数---------*/

#define EN_IR_LED DDRB|=P
#define CLR_IR_LED PORTB&=~P1
#define SET_IR_LED PORTB|=P1

/*----------------------某些端口操作-------------------*/

//volatile unsigned char i,j,k;

volatile unsigned long IRcode;                //定义一个长度为4字节de无符号long类型变量来存储代码

volatile unsigned char *IRcodePointer ;     //定义一个无符号de单字节指针变量,
              //用此地址变量来分别读取IRCodede
              //4个字节 其中操作码为 IRcodePointer[2]
              //用户码为 IRcodePointer[0]

volatile unsigned char IRReceiveEffective=0;     //IR信号接收有效 当程序响应接收以后请马上清零 这样才会继续接收下一IR码

volatile unsigned char IRReceiveCurrentBit=0; //IR信号当前接收位 0时表示第0位即同步码(4.5ms高电平)

volatile unsigned int Pulse_length=0;          //捕获de脉冲宽度

volatile unsigned char ICP_Parity=0;           //捕获中断奇偶次计数 1时为偶次 并在此时判断脉宽

volatile unsigned char Received_Key_Temp;      //红外接收操作键缓存if(!IRReceiveEffective)
{
   if(ICP_Parity==0)
    {
     ICP_Parity++;
     TIMSK1|=OCIE1A;
         TCCR1B|=ICNC1;
     TCCR1B&=~ICES1; //设置输入捕获 沿有效
     Start_T1 ;
         PORTD|=0X06;
    }
   else
    {
     Stop_T1;
     ICP_Parity=0;
     TCCR1B|=ICES1;//设置输入捕获 上升沿有效
         TCCR1B|=ICNC1;
     Pulse_length=ICR1;
     if(IRReceiveCurrentBit==0)
      {
       if(Pulse_length>=13000&&Pulse_length<18000)// 如果shi引导码 (16ms) 进入下一个bitde读取
        {IRReceiveCurrentBit++; IRcode=0; }
      }
     else if(IRReceiveCurrentBit<24) //接收24位数据
      {
       IRcode>>=1;
       if(Pulse_length<800&&Pulse_length>300) //判断shi否为 1 ( 0.528ms)
          
        IRcode|=0x800000;
       IRReceiveCurrentBit++;
           if(Pulse_length<300){IRcode<<=1; IRReceiveCurrentBit--;}
       if(IRReceiveCurrentBit==24)
        {//PORTD&=0XF9;delay_ms(100);
                IRcode&=0X0FFFF;//用于测试接收的地址数据是否正确
                if(IRcode==0x05555){PORTD&=0XF9;delay_ms(100);}//如果正确,发光二极管亮
         IRReceiveCurrentBit=0; //重置IR接收位为第0位,为下次接收做准备
         if(IRcodePointer[0]==(unsigned char)(~IRcodePointer[1])&&IRcodePointer[2]==(unsigned char)(~IRcodePointer[3]))
          {
           IRReceiveEffective=1; //数据有效
          }
         delay_ms(10); //因为24位数据后面还有一个信号上跳变,所以要适当延时,延时0.65ms以上即可
        }
      }
    }
}
遥控的振荡电阻4.7M,2262的地址码全为悬空,根据测试情况来看,码头是收到,但是从地址码的接受来看,接受内容和实际不一致,望高手指点

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

11

帖子

0

粉丝