搜索
bottom↓
回复: 70

EV1527解码,我也贡献一个,抗干扰,自适应.....

  [复制链接]

出0入0汤圆

发表于 2017-5-16 10:23:10 | 显示全部楼层 |阅读模式
EV1527解码,我也贡献一个,抗干扰,自适应, 经测试比买的解码成功率高,具体多少没计算,通过示波器看到;

/*
中断处理函数 、每次中断查询一下电平;
手册16个CLK(一个数据位)的时间是
最大4.24ms(4240us)/16= 265us; 最小230us/16=14us; 分频时间是4us;

同步头高电平至少4个时钟;识别同步头分2步
第一步高电平时间大于等于40us,小于265*4*1.2 = 1060*1.2=1270us;
第二步 低电平时间是高电平时间的31倍,留20%余量26倍-36倍之间;
计算电平时间 (高电平时间 + 低电平时间) / 32 ;
数据宽时间要在这个数值的 正负20% 之间

*/

INTERRUPT_HANDLER(EXTI_PORTA_IRQHandler, 3)
{
   static U16 data_h_time;  //
   static U16 data_l_time;  //
   static U16  bit_time_min;
   static U16  bit_time_max;
   static U8  decode_KEY;
   static U32 decode_ID;
   U16 temp;
   static U8  ev1527_rx_last;

  U16 ev1527_new_time;
  disableInterrupts();
  ev1527_new_time  = (uint16_t)TIM2->CNTRH << 8;
  ev1527_new_time |= (uint16_t)(TIM2->CNTRL);

  if(EV1527_RX)  //接收编码高电平
   {
      if(ev1527_rx_last==0)   //上次是低电平,有跳变
       {
         EV1527_COUNT_CLEAR;
         if(ev1527_decode_state>sync_h)
         {
          str_ev1527_data.l_data[str_ev1527_data.l_data_write] = ev1527_new_time;
          str_ev1527_data.l_data_write = (str_ev1527_data.l_data_write + 1) % EV1527_DATA_TIME_NUM;
          switch(ev1527_decode_state)
          {
           case  sync_l:{
                        temp = str_ev1527_data.l_data[str_ev1527_data.l_data_read] / str_ev1527_data.h_data[str_ev1527_data.h_data_read];
                        if((temp >= SYNC_RATIO_MIN) && (temp <= SYNC_RATIO_MAX))
                         {
                           temp = str_ev1527_data.l_data[str_ev1527_data.l_data_read] + str_ev1527_data.h_data[str_ev1527_data.h_data_read];
                           str_ev1527_data.h_data_read = (str_ev1527_data.h_data_read + 1) % EV1527_DATA_TIME_NUM;
                           str_ev1527_data.l_data_read = (str_ev1527_data.l_data_read + 1) % EV1527_DATA_TIME_NUM;
                           
                           bit_time_min = temp / 9;
                           bit_time_max = temp / 7;
                           decode_ID = 0;
                           decode_KEY = 0;
                           data_h_time = 0;
                           data_l_time = 0;                           
                           ev1527_decode_state = chipid_0l;
                         }
                        else
                         {
                           ev1527_decode_state = sync_h;
                         }
                    }break;
            case  chipid_0l:
            case  chipid_1l:
            case  chipid_2l:
            case  chipid_3l:
            case  chipid_4l:
            case  chipid_5l:
            case  chipid_6l:
            case  chipid_7l:
            case  chipid_8l:
            case  chipid_9l:
            case  chipid_10l:
            case  chipid_11l:
            case  chipid_12l:
            case  chipid_13l:
            case  chipid_14l:
            case  chipid_15l:
            case  chipid_16l:
            case  chipid_17l:
            case  chipid_18l:
            case  chipid_19l:
                     {
                         data_h_time += str_ev1527_data.h_data[str_ev1527_data.h_data_read];
                         data_l_time += str_ev1527_data.l_data[str_ev1527_data.l_data_read];
                         str_ev1527_data.l_data_read = (str_ev1527_data.l_data_read + 1) % EV1527_DATA_TIME_NUM;
                         str_ev1527_data.h_data_read = (str_ev1527_data.h_data_read + 1) % EV1527_DATA_TIME_NUM;
                         temp = data_h_time + data_l_time;                           
                         if(temp >= bit_time_min)
                          {
                            if(temp <= bit_time_max)
                              {
                                  if(data_h_time > data_l_time)
                                  {
                                    decode_ID |= 0x01;
                                  }
                                  decode_ID <<= 1;   
                                  ev1527_decode_state++;
                                  data_h_time = 0;
                                  data_l_time = 0;
                                 
                              }
                             else
                              {
                                  ev1527_decode_state = sync_h;
                              }
                          }
                  }break;

            case  data_0l:
            case  data_1l:
            case  data_2l:
            case  data_3l:
                     {
                         data_h_time += str_ev1527_data.h_data[str_ev1527_data.h_data_read];
                         data_l_time += str_ev1527_data.l_data[str_ev1527_data.l_data_read];
                         str_ev1527_data.l_data_read = (str_ev1527_data.l_data_read + 1) % EV1527_DATA_TIME_NUM;
                         str_ev1527_data.h_data_read = (str_ev1527_data.h_data_read + 1) % EV1527_DATA_TIME_NUM;
                         temp = data_h_time + data_l_time;
                         if(temp >= bit_time_min)
                             {
                               if(temp <= bit_time_max)
                                {
                                  if(data_h_time > data_l_time)
                                   {
                                    decode_KEY |= 0x08;
                                   }
                                 
                                   if(ev1527_decode_state == data_3l)
                                   {
                                     ev1527_chip_ID = decode_ID;
                                     ev1527_chip_key  = decode_KEY;
                                     ev1527_new_sms = 1;
                                     LED_ON(LED_01);
                                     ev1527_decode_state = sync_h;
                                   }
                                   else
                                   {
                                      decode_KEY >>= 1;
                                      ev1527_decode_state++;

                                   }
                                  data_h_time = 0;
                                  data_l_time = 0;
                                }
                                else
                                {
                                   ev1527_decode_state = sync_h;
                                }
                             }
                     }break;               
          }
        }
       }
      ev1527_rx_last = 1;
   }
  else        //接收编码低电平
   {
      if(ev1527_rx_last)   //上次是高电平,有跳变
      {
        EV1527_COUNT_CLEAR;
        if(ev1527_decode_state == sync_h)
        {
           if((ev1527_new_time >= SYNC_H_TIME_MIN) && (ev1527_new_time <= SYNC_H_TIME_MAX))
            {
                str_ev1527_data.l_data_read = str_ev1527_data.l_data_write=0;
                str_ev1527_data.h_data_read = str_ev1527_data.h_data_write=0;
                str_ev1527_data.h_data[str_ev1527_data.h_data_write] = ev1527_new_time;
                str_ev1527_data.h_data_write = (str_ev1527_data.h_data_write + 1) % EV1527_DATA_TIME_NUM;
                ev1527_decode_state  = sync_l;
            }
        }
        else
        {
            str_ev1527_data.h_data[str_ev1527_data.h_data_write] = ev1527_new_time;
            str_ev1527_data.h_data_write = (str_ev1527_data.h_data_write + 1) % EV1527_DATA_TIME_NUM;
        }
      }
     ev1527_rx_last = 0;
   }
  enableInterrupts();
}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

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

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

 楼主| 发表于 2017-5-16 10:34:25 | 显示全部楼层
网上公布的代码我下了几个测试了,这些代码基本都是通过延时读高电平宽度的;我测试 这些解码思路的解码成功率比我对比测试的买的解码芯片成功率低一些,后来还是自己写一个,就是这个 版本,经测试解码成功率比购买的解码芯片成功率高;购买的解码芯片我估计也是用通过延时读高电平宽度的方法解码的,因为我换了一个RC振荡电阻后,就不能解码了,做不到自适应频率;

出0入0汤圆

发表于 2017-5-16 10:46:33 | 显示全部楼层
楼主的写代码风格很好,支持!

出100入101汤圆

发表于 2017-5-16 11:10:18 | 显示全部楼层
时序要求严格么?中断是否不能被打断?

出10入18汤圆

发表于 2017-5-16 11:15:04 | 显示全部楼层
哈哈 看了一下,几乎和我写的一样。楼主好样的

出0入4汤圆

发表于 2017-5-16 11:19:54 | 显示全部楼层
网上流传的不也是定时器中断去查询io电平吗 - -!

我找着网上的改了改,效果还不错。

出10入18汤圆

发表于 2017-5-16 11:35:20 来自手机 | 显示全部楼层
定时中断来查阅IO的也不错,很好用

出0入0汤圆

 楼主| 发表于 2017-5-16 15:16:17 | 显示全部楼层
huarana 发表于 2017-5-16 11:19
网上流传的不也是定时器中断去查询io电平吗 - -!

我找着网上的改了改,效果还不错。  ...

这个是通过测量中断时间来计算的,测出导码的时间,再去测量每位比特的时间,期间过滤掉时间不符合每位比特跳变的波,从理论来见只有跳变时正负10%的时间窗口的干扰可以进入影响结果;
网上的定时器查电平的方法,好像都是固定时间查询的,对自适应频率支持不好;
我改写了定时器查电平的的程序,通过测导码的时间,计算查询时间,结果不如意,没有买的芯片解码效果好,后来用这种方法测出的效果比买的芯片解码效果好;

出0入4汤圆

发表于 2017-5-16 15:40:35 | 显示全部楼层
chinaboy25 发表于 2017-5-16 15:16
这个是通过测量中断时间来计算的,测出导码的时间,再去测量每位比特的时间,期间过滤掉时间不符合每位比 ...

我不知道你是怎么测试得出解码效果的。

你的收发器是什么?

我是用的凌承芯的收发小模块 。    其实解码原理都一样,都是判断高低电平的时间。  根据发送的编码特点,我采用了200us的中断作为基准。

我的讨论在这个帖子里  https://www.amobbs.com/thread-4367286-1-1.html

出0入0汤圆

 楼主| 发表于 2017-5-16 16:23:27 | 显示全部楼层
huarana 发表于 2017-5-16 15:40
我不知道你是怎么测试得出解码效果的。

你的收发器是什么?

你这个我写之前看了下,没有自适应频率,没有抗干扰,所以没用你的,自己重写;

出0入0汤圆

 楼主| 发表于 2017-5-16 16:32:01 | 显示全部楼层
huarana 发表于 2017-5-16 15:40
我不知道你是怎么测试得出解码效果的。

你的收发器是什么?


测解码效果,把接收模块的选频的匹配电感取下,这样处理后,接收的信号会出现杂波,如果没有杂波,基本每次都解码都能成功,抗干扰效果 测不出来;然后看示波器一路接模块信号输出一路接解码输出,信号输出分2路一路到对比的解码模块,解码模块输出也接示波器;最后对比2路解码输出如果解码不成功输出的波形会有缺失,比较这两个缺的谁的少,说明解码成功率高;

出0入4汤圆

发表于 2017-5-16 16:47:44 | 显示全部楼层
杂波都会有的  - -! 而且还不少。

出0入0汤圆

发表于 2017-7-21 07:30:33 | 显示全部楼层
有没有完整的?????

出0入0汤圆

 楼主| 发表于 2017-7-21 08:31:32 | 显示全部楼层
retome 发表于 2017-7-21 07:30
有没有完整的?????


开解码IO口的,高变低,和低变高电平中断,  ev1527_chip_ID ;ev1527_chip_key; ev1527_new_sms;这三个是解码后输出;

出0入0汤圆

发表于 2017-7-23 12:38:01 | 显示全部楼层
chinaboy25 发表于 2017-7-21 08:31
开解码IO口的,高变低,和低变高电平中断,  ev1527_chip_ID ;ev1527_chip_key; ev1527_new_sms;这三个是 ...

看你那段代码,看得不是很明白。有很多变量不知道在哪里定义的

出0入0汤圆

 楼主| 发表于 2017-7-23 12:46:23 | 显示全部楼层
retome 发表于 2017-7-23 12:38
看你那段代码,看得不是很明白。有很多变量不知道在哪里定义的

确实有几个变量,我把整个模块上传吧;



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2017-7-23 12:47:12 | 显示全部楼层
retome 发表于 2017-7-23 12:38
看你那段代码,看得不是很明白。有很多变量不知道在哪里定义的

整个工程还要些东西不便公开,就只上传模块了

出0入0汤圆

发表于 2017-7-23 12:56:45 | 显示全部楼层
chinaboy25 发表于 2017-7-23 12:47
整个工程还要些东西不便公开,就只上传模块了

太感谢啦!!!!楼主高品质!!!多多指教!中国缺乏你这样的高手,大胸怀!!!

出0入95汤圆

发表于 2017-7-25 15:48:01 | 显示全部楼层
不错,参考一下

出0入0汤圆

发表于 2017-7-27 16:32:39 | 显示全部楼层
请问一下,这2个值是怎么算出来的。
#define SYNC_H_TIME_MIN 56
#define SYNC_H_TIME_MAX 530

出0入0汤圆

发表于 2017-7-27 21:29:57 | 显示全部楼层
chinaboy25 发表于 2017-7-23 12:47
整个工程还要些东西不便公开,就只上传模块了

厉害!! bit_time_min = temp / 9; bit_time_max = temp / 7;如何算的???为什么要除以9,7??

出0入0汤圆

 楼主| 发表于 2017-7-28 08:59:16 | 显示全部楼层
JJKwong 发表于 2017-7-27 16:32
请问一下,这2个值是怎么算出来的。
#define SYNC_H_TIME_MIN 56
#define SYNC_H_TIME_MAX 530 ...

/*
中断处理函数 、每次中断查询一下电平;
手册16个CLK(一个数据位)的时间是
最大4.24ms(4240us)/16= 265us; 最小230us/16=14us; 分频时间是4us;

同步头高电平至少4个时钟;识别同步头分2步
第一步高电平时间大于等于40us,小于265*4*1.2 = 1060*1.2=1270us;
第二步 低电平时间是高电平时间的31倍,留20%余量26倍-36倍之间;
计算电平时间 (高电平时间 + 低电平时间) / 32 ;
数据宽时间要在这个数值的 正负20% 之间

*/

#define SYNC_H_TIME_MIN 56
#define SYNC_H_TIME_MAX 530

这个数要与计数器时间匹配后与上面的时间的倍数关系

出0入0汤圆

发表于 2017-7-28 10:14:40 | 显示全部楼层
EV527商城有售

出0入0汤圆

发表于 2017-7-28 10:21:19 | 显示全部楼层
感谢分享  EV1527解码

出0入0汤圆

 楼主| 发表于 2017-7-28 20:03:29 | 显示全部楼层
本帖最后由 chinaboy25 于 2017-7-28 20:14 编辑
retome 发表于 2017-7-27 21:29
厉害!! bit_time_min = temp / 9; bit_time_max = temp / 7;如何算的???为什么要除以9,7?? ...


凭记忆好像是高低电平是8倍时间的关系,取7-9倍之间,,或者是同步头是高低电平时间的8倍

出0入0汤圆

发表于 2017-8-4 09:41:06 | 显示全部楼层
chinaboy25 发表于 2017-7-28 20:03
凭记忆好像是高低电平是8倍时间的关系,取7-9倍之间,,或者是同步头是高低电平时间的8倍 ...

非常感谢分享!!

出0入0汤圆

发表于 2017-8-8 10:09:39 | 显示全部楼层
时间比例法确实可以。

出0入0汤圆

发表于 2017-8-8 22:00:37 | 显示全部楼层
chinaboy25 发表于 2017-7-28 08:59
/*
中断处理函数 、每次中断查询一下电平;
手册16个CLK(一个数据位)的时间是

怎么区分长按遥控键和短按遥控器。

出0入0汤圆

发表于 2017-9-3 08:48:23 | 显示全部楼层
解码思路很好,支持

出0入0汤圆

发表于 2017-9-25 17:53:16 | 显示全部楼层
需要,下载,谢了

出0入0汤圆

发表于 2017-10-5 00:06:01 | 显示全部楼层
我把这个移植到51上面,没有成功,,你的定时器分频时间是4us,,51没法分频那就是1us(12M晶振),所以后面  ev1527_new_time>>2,,但还是不成功.
另外:你的是不是遥控器最少要发4位才能解码成功?如果短按一下,是不是不行?

出0入0汤圆

 楼主| 发表于 2017-10-5 20:32:46 | 显示全部楼层
15813191501 发表于 2017-10-5 00:06
我把这个移植到51上面,没有成功,,你的定时器分频时间是4us,,51没法分频那就是1us(12M晶振),所以后面  ev152 ...

短按和长按是软件应用层处理,在硬件上层没不同,

出0入4汤圆

发表于 2017-10-5 23:23:36 | 显示全部楼层
试了下 也没成功   没有按键按下的时候也频繁进中断   

出0入0汤圆

发表于 2017-10-31 13:02:42 | 显示全部楼层
本帖最后由 LBQ691477940 于 2017-10-31 13:05 编辑
chinaboy25 发表于 2017-7-28 08:59
/*
中断处理函数 、每次中断查询一下电平;
手册16个CLK(一个数据位)的时间是


第一步高电平时间大于等于40us???  #define SYNC_H_TIME_MIN  56 应该是#define SYNC_H_TIME_MIN 10 才是吧 ?T2计数是 1/16M 4uS

好像楼主的程序也没有进行二次校验

好几十行的语句没几个注释这种风格不好.过几天自己回看都不知咋回事了

出0入0汤圆

 楼主| 发表于 2017-11-1 08:39:25 | 显示全部楼层
本帖最后由 chinaboy25 于 2017-11-1 08:44 编辑
LBQ691477940 发表于 2017-10-31 13:02
第一步高电平时间大于等于40us???  #define SYNC_H_TIME_MIN  56 应该是#define SYNC_H_TIME_MIN 10 才是 ...


注释的时候是4us,后面改了分频 2us ,让时间精度高一点,对性能无影响,那个 SYNC_H_TIME_MAX  530 就是 1060us/2us 得来的;

二次校验是指什么,是指延时电压读取吗?防抖动吗?

已经通过时间累加,然后判断电平时间来校验数据合法,

出0入0汤圆

发表于 2017-11-5 00:24:46 | 显示全部楼层
15813191501 发表于 2017-10-5 00:06
我把这个移植到51上面,没有成功,,你的定时器分频时间是4us,,51没法分频那就是1us(12M晶振),所以后面  ev152 ...

这得看你用哪款 51了要有上下沿都能外部中断才行吧

出0入0汤圆

发表于 2017-11-5 00:27:25 | 显示全部楼层
本帖最后由 LBQ691477940 于 2017-11-5 00:48 编辑
chinaboy25 发表于 2017-11-1 08:39
注释的时候是4us,后面改了分频 2us ,让时间精度高一点,对性能无影响,那个 SYNC_H_TIME_MAX  530 就是 ...

你给的函数也是TIM2_TimeBaseInit(TIM2_PRESCALER_64, 0xFFFF);  64分频的
没看清你这接收多少帧数据才算成功呢?很多都是接收完二帧数据并二次的数据对比是否一样如果一样才当解码成功

出0入0汤圆

 楼主| 发表于 2017-11-6 08:55:47 | 显示全部楼层
LBQ691477940 发表于 2017-11-5 00:27
你给的函数也是TIM2_TimeBaseInit(TIM2_PRESCALER_64, 0xFFFF);  64分频的
没看清你这接收多少 ...

64分频要看主频来的;
这个在应用里面实现,实现长按端按,甚至双击,

出0入0汤圆

发表于 2017-11-6 15:50:27 | 显示全部楼层
chinaboy25 发表于 2017-11-6 08:55
64分频要看主频来的;
这个在应用里面实现,实现长按端按,甚至双击,


长按及双击有无例程分享下谢谢
头像被屏蔽

出0入0汤圆

发表于 2017-11-6 15:59:09 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入0汤圆

发表于 2017-11-12 09:26:20 | 显示全部楼层
chinaboy25 发表于 2017-11-1 08:39
注释的时候是4us,后面改了分频 2us ,让时间精度高一点,对性能无影响,那个 SYNC_H_TIME_MAX  530 就是 ...

注释的时候是4us,后面改了分频 2us ,让时间精度高一点,对性能无影响,那个 SYNC_H_TIME_MAX  530 就是 1060us/2us 得来的;

按照这样的计算, SYNC_H_TIME_MIN   最小230us/16=14us; 分频时间是2us; 应该是14*4/2=28,  

而代码中是#define SYNC_H_TIME_MIN  56           搞不明白,

出0入0汤圆

 楼主| 发表于 2017-11-12 13:44:09 | 显示全部楼层
hanweng2012 发表于 2017-11-12 09:26
注释的时候是4us,后面改了分频 2us ,让时间精度高一点,对性能无影响,那个 SYNC_H_TIME_MAX  530 就是 ...

最小的没改,230/4 = 57.5

出0入0汤圆

发表于 2017-11-12 15:35:33 | 显示全部楼层
楼主这个是学习型的么

出0入0汤圆

发表于 2018-5-26 08:15:18 | 显示全部楼层
chinaboy25 发表于 2017-11-12 13:44
最小的没改,230/4 = 57.5

有点不明白了。Timer2的定时间隔是在2US和4US不停切换?
而不是初始化就设定好的?

出0入0汤圆

 楼主| 发表于 2018-5-26 11:35:18 | 显示全部楼层
hanweng2012 发表于 2018-5-26 08:15
有点不明白了。Timer2的定时间隔是在2US和4US不停切换?
而不是初始化就设定好的? ...

这个取值只是判断的范围,假设同步头是100us,我判断同步头的其中一个条件可以是80-120,也可是80-110,也可以90-120,随意的,主要是没去研究取多少合适,看效果来吧,

出0入8汤圆

发表于 2018-5-26 12:18:46 | 显示全部楼层
无线传输难免有信噪比差的时候。通过单片机的智能判决确实可以使硬件解码器不能识别的信号获得解码,延长了通讯距离。这个我几年前做过,大量用过。

出0入0汤圆

发表于 2018-5-27 08:56:30 | 显示全部楼层
chinaboy25 发表于 2018-5-26 11:35
这个取值只是判断的范围,假设同步头是100us,我判断同步头的其中一个条件可以是80-120,也可是80-110, ...

多谢楼主的耐心解答,看的大体明白了。
还有一个
EV1527_DATA_TIME_NUM,为什么这个参数越大,效果越好?或者说这个参数的选择依据是???

出0入0汤圆

发表于 2018-5-27 10:19:23 | 显示全部楼层
谢谢分享

出0入0汤圆

 楼主| 发表于 2018-5-28 08:52:41 | 显示全部楼层
hanweng2012 发表于 2018-5-27 08:56
多谢楼主的耐心解答,看的大体明白了。
还有一个
EV1527_DATA_TIME_NUM,为什么这个参数越大,效果越好? ...

过滤干扰的个数,太大了浪费内存和CPU

出0入0汤圆

发表于 2018-8-4 15:31:04 | 显示全部楼层
谢谢分享,学习了。

出0入0汤圆

发表于 2018-8-5 03:45:06 | 显示全部楼层
EV1527 mark一下,谢谢楼主

出0入0汤圆

发表于 2018-8-15 10:39:39 | 显示全部楼层
最近EV1527软解出现个别匹配不上的问题,感谢楼主提供的新思路

出0入0汤圆

发表于 2018-9-29 09:24:21 | 显示全部楼层
楼主,这个代码是基于哪个无线接收芯片的呀SYN?

出0入0汤圆

发表于 2019-1-12 20:03:26 | 显示全部楼层
我移植到了STM32上,不知道为什么,解不出来。我用的H3V4F接收模块,这家伙没信号的时候那干扰,简直了,示波器上没法看。

出0入0汤圆

 楼主| 发表于 2019-1-13 13:42:15 | 显示全部楼层
ahe 发表于 2019-1-12 20:03
我移植到了STM32上,不知道为什么,解不出来。我用的H3V4F接收模块,这家伙没信号的时候那干扰,简直了,示 ...

这个很占中断的,解码后,单片机的资源只适合做简单逻辑控制;适合替代解码芯片+单片机简单逻辑控制的方案;在没收到信号是无线模块一般是输出很多杂波,几乎几十us就进一次中断

出0入0汤圆

发表于 2019-2-14 06:52:08 | 显示全部楼层
chinaboy25 发表于 2019-1-13 13:42
这个很占中断的,解码后,单片机的资源只适合做简单逻辑控制;适合替代解码芯片+单片机简单逻辑控制的方 ...

是这样。是否所有的接收模块都是这个特点?

出0入0汤圆

发表于 2019-2-14 09:17:09 | 显示全部楼层
EV1527解码 Mark

出0入0汤圆

发表于 2019-2-14 16:22:53 | 显示全部楼层

EV1527解码 MarK

出0入0汤圆

发表于 2019-2-15 01:50:21 | 显示全部楼层
学习了,谢谢分享

出0入0汤圆

发表于 2019-2-15 10:48:18 | 显示全部楼层
个人觉得最好不要用网上别人经常用的方式——定时中断后,去读IO的电平,来判断是1还是0。这个情况下,杂波是有可能也会触发解码成功(即便数据头把关比较严格)。我曾经用这种解码方式测试:只要解码成功,且接收的码等于我设定的值,就让一个LED亮起来,最后这个模块连续上电1天多,就撞到设定的值了。总的来说这种解码方式确实成功率很高,但由于灵敏度太高,有可能会误判。

出0入0汤圆

发表于 2019-6-12 16:57:31 | 显示全部楼层
EV1527同步脉冲是4个CLK的低电平和124CLK的高电平,里面写着一个CLK=8个SOC CLOCK。那一个SOC CLOCK究竟是多少呢?搞不明白?我的无线频率是433Mhz。

出0入0汤圆

 楼主| 发表于 2019-6-13 08:41:53 | 显示全部楼层
纪泽江 发表于 2019-6-12 16:57
EV1527同步脉冲是4个CLK的低电平和124CLK的高电平,里面写着一个CLK=8个SOC CLOCK。那一个SOC CLOCK究竟是 ...

高低电平时间各算一个时间窗

出0入0汤圆

发表于 2019-6-13 20:15:27 | 显示全部楼层
感谢楼主还在更新。看了很多遍,最后有一个地方看不懂:
-----------------------
case  chipid_18l:
                                        case  chipid_19l:                //21
                                        {
                                                data_h_time += str_ev1527_data.h_data[str_ev1527_data.h_data_read];
                                                data_l_time += str_ev1527_data.l_data[str_ev1527_data.l_data_read];
                                                str_ev1527_data.l_data_read = ( str_ev1527_data.l_data_read + 1 ) % EV1527_DATA_TIME_NUM;
                                                str_ev1527_data.h_data_read = ( str_ev1527_data.h_data_read + 1 ) % EV1527_DATA_TIME_NUM;
                                                temp = data_h_time + data_l_time;
                                                if ( temp >= bit_time_min )
                                                {
                                                        if ( temp <= bit_time_max )
                                                        {
                                                                if ( data_h_time > data_l_time )
                                                                {
                                                                        decode_ID |= 0x01;        //识别为1,否则维持原来的0
                                                                }
                                                                decode_ID <<= 1;
                                                                ev1527_decode_state++;
                                                                data_h_time = 0;
                                                                data_l_time = 0;

                                                        }
                                                        else
                                                        {
                                                                ev1527_decode_state = sync_h;
                                                        }
                                                }
                                                break;
                                        }

--------------------

data_h_time += 这句不懂
#define EV1527_DATA_TIME_NUM  4 //时间个数,个数越多抗干扰次数越多 ,原理不懂
能否帮忙解释一下?

出0入0汤圆

发表于 2019-6-13 20:29:05 | 显示全部楼层
data_h_time += 这句大概明白了。
当一个正常位周期插入了一个干扰,导致 bit_time < bit_time_min  时,可忽略这个周期,相当于滤波。
#define EV1527_DATA_TIME_NUM  4 //时间个数,个数越多抗干扰次数越多 ,原理还是不懂。
不理解 EV1527_DATA_TIME_NUM 在哪个阶段起作用

出0入0汤圆

发表于 2019-9-23 21:01:34 | 显示全部楼层
mark一下 看看思路 感谢楼主

出0入0汤圆

发表于 2020-6-18 09:52:48 | 显示全部楼层
感谢楼主,下载下来研究研究,有可能会用到

出130入30汤圆

发表于 2020-6-18 11:02:12 | 显示全部楼层
楼主,你好,接收部分的原理图可以传上来参考下吗?

出100入101汤圆

发表于 2020-8-11 15:24:26 | 显示全部楼层
很详细,学习了

出0入0汤圆

发表于 2020-8-12 23:45:18 | 显示全部楼层
楼主项目工程是不是做的自学习拷贝遥控器?

出0入0汤圆

发表于 2021-11-11 18:16:21 | 显示全部楼层
感谢楼主,移植到STM32成功,。

出0入0汤圆

发表于 2023-11-6 14:53:15 | 显示全部楼层
huangweida 发表于 2021-11-11 18:16
感谢楼主,移植到STM32成功,。
(引用自70楼)

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

本版积分规则

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

GMT+8, 2024-4-26 06:47

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

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