ARMVSAVR 发表于 2014-7-6 17:18:26

ATMEGA128解码PT2262,捕捉ICP3

本帖最后由 ARMVSAVR 于 2014-7-6 17:21 编辑

         用ATMEGA128的捕捉功能解码软件PT2262遇到一些问题!帧头使能准确的判断出来!可以当工作一段时间约几分钟的样子,捕捉功能失效,过了一会,又可以!
我在主循环里面做了一个LED翻转的代码,发现当捕捉还能失效的时候主循环工作正常,证明代码没有跑飞!
      PT2262与ICP3的(PF7脚)连接,平时没有发送遥控码的时候,杂波还是挺多的!
       是不是频繁进入中断,把捕捉中断功能累坏啦,他也需要休息吗!
       搞过的朋友支招指点一下!
      不知道大家怎么软件解码PT2262的,这几天被这个事情折腾啦!

这个是初始化的代码:
void ICP3_int(void)
{
TCCR3B=0x00;
TCCR3B|=(1<<ICNC3)|(1<<ICES3)|(1<<CS31);//使能捕捉噪声抑制功能,上升沿捕捉
ETIMSK|=(1<<TICIE3);//使能外部捕捉中断
}
这个是中断的带码:
#pragma interrupt_handler capture: 26
void capture(void)
{
if(RF_DATA)
{ //上升沿中断
pulse_count++;
rising_edge = ICR3; //记录上升沿开始时间
TCCR3B&=~(1<<ICES3);//下降沿捕捉
if((pulse_count>1)&&((pulse_count-1)%2==0)){//计算低电平的持续时间
    pulse_clock_low=rising_edge-falling_edge;
if((pulse_clock_low>5000)&&(pulse_clock_low<5900)&&(pulse_start==1))//判断出起始位
{ pulse_start=pulse_startA=2;ICR3=0;//K1_ON; K2_OFF;
   }
else {pulse_start=0;//K2_ON; K1_OFF;ICR3=0;
}
} }
else
{ //下降沿中断
pulse_count++;
falling_edge = ICR3; //记录下降沿时间
TCCR3B|=(1<<ICES3);
if(rising_edge<falling_edge){//计算高电平的持续时间
pulse_clock_high=falling_edge-rising_edge;
if((pulse_clock_high>170)&&(pulse_clock_high<220)&&(pulse_start!=2)){pulse_start=1;}
/////////////////////
if(pulse_start==2){
switch(pulse_num){
case 0:
if((pulse_clock_high))
break;

}


}
   


}

}
/////////////////////////////

}

zyw19987 发表于 2014-7-7 07:39:02

全被这个中断给占用了,就算做出来也没法与其他任务共存。你看看模块输出脚在没按键时波形是怎么样的。
推荐思路,定时采样+普通IO

Mr_zheng 发表于 2014-7-7 07:58:44

{:lol:}直接用Pt2272解码芯片好啊,自己用软件解码,很不稳定的

ARMVSAVR 发表于 2014-7-7 08:48:10

zyw19987 发表于 2014-7-7 07:39
全被这个中断给占用了,就算做出来也没法与其他任务共存。你看看模块输出脚在没按键时波形是怎么样的。
推 ...

嗯!~确实是的!定时器+普通IO给个成熟的思路!AVR在外部4MHZ的晶振下,最短的定时器周期为62US,望交流一下!我昨天也用这种方法试了!没有成功!

ARMVSAVR 发表于 2014-7-7 15:41:29

zyw19987 发表于 2014-7-7 07:39
全被这个中断给占用了,就算做出来也没法与其他任务共存。你看看模块输出脚在没按键时波形是怎么样的。
推 ...

定时器+通用IO的方式,初有成效!码头成功解出来!

zyw19987 发表于 2014-7-7 16:23:02

中断只记录IO状态,形成状态记录的数据队列。任务去对这个数据流进行解析。在满足采样定理的前提下,这个思路满足所有单IO通信红外遥控,RFID等,缺点费RAM,优点通用。

ARMVSAVR 发表于 2014-7-8 09:05:31

zyw19987 发表于 2014-7-7 16:23
中断只记录IO状态,形成状态记录的数据队列。任务去对这个数据流进行解析。在满足采样定理的前提下,这个思 ...

不错!找到合适的方法,解决问题还是很快的!谢谢!

ARMVSAVR 发表于 2014-9-13 11:23:45

经过一段时间折腾,用单片机的IO口+定时器解码433MHZ的代码完美的完成,当初试过ICP扑捉,外部中断等,都不是很理想,因为来时进入中断,别的事情没有办法干。
总结一下:
1 IO口+定时器(150uS间隔)完全可以解码遥控数据。
2 在MAIN循环里面,注意执行的效率,如果在一个循环里面别的程序占用的周期过长,即使你的解码段程序没有错误,也可能造成解码出错,这个问题我是遇到了。
3 并不是每个遥控头的数据都能很快的解码出来,因为有些遥控头频率可能呢个出现了偏差。
4 解码出来的数据需要2次比对,如果连续2次的数据一样,认为解码成功。

ARMVSAVR 发表于 2014-9-13 11:27:54

至于那些说软件解码不稳定的说法,我觉得他们没有亲自做过,很大一部分是听别人说的!
页: [1]
查看完整版本: ATMEGA128解码PT2262,捕捉ICP3