找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2307|回复: 8
收起左侧

用单片机解码无线射频信号的相关问题

[复制链接]
ID:389488 发表于 2020-10-8 11:20 | 显示全部楼层 |阅读模式
最近在学习无线的单片机解码。
示波器测试 :有的遥控器是24位脉冲 ,有是28位脉冲 有的遥控器是32位脉冲 汽车遥控器的脉冲数更多。 同步头也不同  

使用2个接收模块 测出来的波形也不相同 有一个MPS单片机的遥控器测出来相位相反  其他ev1527  2262 其他sop14单片机做的测出来相位相同。
这2个接收模块分别是PT4302  和SYN480 芯片的

IMG_20201008_100714.jpg IMG_20201008_101456.jpg



回复

使用道具 举报

ID:389488 发表于 2020-10-8 13:23 | 显示全部楼层
本帖最后由 zzh2118 于 2020-10-8 13:29 编辑

用第三个接收模块 (τ 宝买的超再生)却根本接收不到这款的发射信号,其它的接收都正常,包括汽车遥控,滚动码,三个波形都一致。滚动码的脉冲多达95个
回复

使用道具 举报

ID:389488 发表于 2020-10-13 08:22 | 显示全部楼层
理论上可行,为什么实物却不行,请大佬帮我解惑。
  1. #include <STC89C5xRC.H>
  2. #include <intrins.h>
  3. #define u8  unsigned char
  4. #define u16 unsigned int
  5. #define u32 unsigned long

  6. //#define RES  3300//3.3M
  7. //#define a 103 //1/(32000/RES)*1000us

  8. sbit wuxian=P0^0;

  9. bit tb_flag;
  10. sbit led=P1^0;
  11. u8 wuxianma[24];
  12. u8 wxma[3];

  13. void Delay103us()                //@11.0592MHz
  14. {
  15.         unsigned char i;

  16.         _nop_();
  17.         i = 44;
  18.         while (--i);
  19. }
  20. void Delay_8a()                //@11.0592MHz
  21. {
  22.         u8 b=8;
  23.         while(b--)
  24.         {
  25.           Delay103us();
  26.         }
  27. }

  28. void Delay_100a()                //@11.0592MHz
  29. {
  30.         u8 b=100;
  31.         while(b--)
  32.         {
  33.         Delay103us();
  34.         }
  35. }
  36. void tb_ma()   //判断同步码 如果无线信号脚出现低电平,延时100个脉冲 如果还是低,可能是同步码 再延时24a 确定是同步码
  37. {
  38.         u8 cnt;
  39.         if(wuxian==0)//p0.0=0
  40. {
  41.   Delay_100a();                                        // 一共124a,先延时消耗掉100a
  42.         if (wuxian == 0)                                        // 如果不是干扰8ms后应该还是低电平
  43.         {                        
  44.                 cnt = 50;                                        // 24*10us=2ms, 超过说明接收到错误的信号
  45.                 while ((wuxian == 0) && (cnt > 0))        // 等待前面9ms的低电平过去                  
  46.                 {                        
  47.                         Delay103us();                // 每隔100us查一次,准确度很高
  48.                         cnt--;
  49.                 }

  50.                         
  51.         }
  52.         
  53.         }
  54.         tb_flag=1;
  55.         
  56. }

  57. void wuxian_ma()
  58. {
  59.         u8 i;
  60.         for(i=0;i<24;i++)    延时8个脉冲 读取无线模块引脚电平,再延时8个脉冲,下一个度数在16个脉冲的位置
  61.         {
  62.    Delay_8a();        
  63.          wuxianma[i]=wuxian;//|0x80;
  64.          Delay_8a();                        
  65.         }        

  66. }
  67. void jiema()
  68. {
  69.          u8 i,j,k,temp,wei;
  70.         for(i=0;i<3;i++)
  71.         {
  72.                   for(j=0;j<8;j++)
  73.                 {
  74.                         k=0;
  75.                           temp=wuxianma[k];
  76. //                        if(j<7)
  77.                           wei=temp<<1;
  78.                          k++;
  79.     }
  80.                 wxma[i]=wei;
  81.                 wei=0;
  82.   }
  83. }

  84. void main()
  85. {
  86.         wuxian=1;
  87.         UartInit();
  88.         while(1)
  89. {
  90.         tb_ma();
  91.         if(tb_flag)
  92.         {
  93.           tb_flag=0;
  94.                 jiema();
  95.   }
  96. }
  97. }
复制代码

回复

使用道具 举报

ID:389488 发表于 2020-10-13 08:31 | 显示全部楼层
这份是从网上找的,试过了也不行啊,程序中没有同步码解码  

#include<reg52.h>                 //库文件
#include< stdio.h>
#define uchar unsigned char//宏定义无符号字符型
#define uint unsigned int  //宏定义无符号整型

uint addr,key;
uchar cntint;//外部中断0计数


void eint0(void) interrupt 0//外部中断0
{
        static uint tempaddr;//接收地址缓存
        static uint tempkey;//接收数据缓存
        uint timecnt;
        timecnt=TH0*256+TL0;
        TH0=0;
        TL0=0;
        if(cntint<16)//接收地址码
        {
                tempaddr=tempaddr<<1;//将接收的到最低位移到最高位
                if(timecnt>1000)//210为宽脉冲与低脉冲界线,当振荡电阻为1M时,窄脉冲为110uS,宽脉冲为320uS
                {
                tempaddr|=1;//宽脉冲为1
                }
                cntint++;//中断次数加1
        }
        else if(cntint<24)//接收数据码
        {
                tempkey=tempkey<<1;
                if(timecnt>1000)
                {
                tempkey|=1;
                }
                cntint++;
        }
        else//cntint大于24也就是中断了25次时,关闭外部中断0,等待同步码
        {
                TMOD&=0xf0;//设定时器0为定时方式
                TMOD|=0x01;
                TH0=0xf9;
                TL0=0x66;
                cntint=0;
                EX0=0;//关外部中断0
                addr=tempaddr;
                key=tempkey;
                tempaddr=0;
                tempkey=0;
        }
        
}
void timer0(void) interrupt 1//定时器0中断,只有初始化时,空闲时和同步码到来时才中断
{
        TMOD&=0xf0;//将定时器0的工作方式设为门控定时,用以检测脉宽。
        TMOD|=0x09;
        cntint=0;//外部中断0中断次数设为0
        TH0=0;//设定时器0定时初值为0
        TL0=0;
        EX0=1;//允许外部中断0
        IE0=0;//清除外部中断0标志
}
void main(void)
{
       // void sendd(unsigned int intnum);
        unsigned int i;
        TMOD=0x21;//设定定时器0和定时器1,定时器1用来驱动串口
        TH0=0xf9;//设定定时器的初始值,这个值必小于同步码
        TL0=0x66;
//        TH1=243;//12M晶振时,串口波特率为2400
//        TL1=243;
                TH1=0xdc;//11.0592M晶振时,串口波特率为9600
          TL1=0xdc;
        SCON=0x50;//设定串口工作方式
        TI=1;//要用printf就将其设为1
        EA=1;//开所有中断
        ET0=1;//开定时器0中断
        EX0=0;//关外部中断0,在Timer0中断里面将其打开
        IT0=1;//外部中断0设为跳变触发
        TR0=1;//定时器0启动
        TR1=1;//定时器1启动
        while(1)
        {
//                P2=key;
//                P0=key>>8;
             printf("%u\n",addr);//输出解码地址
            printf("%u\n\n",key);//输出解码数据
                for(i=0;i<65500;i++);//这个用来防止串口不同步
        }
        
}

        
/********************************************************************
                              结束
*********************************************************************/
回复

使用道具 举报

ID:389488 发表于 2020-10-15 15:06 | 显示全部楼层
无线解码程序已搞定,现在测试了4个遥控器都可以,分别是PT2262 震荡电阻3.3M 和4.7M 任意地址都可以。另外2个是单片机写的20按键和21按键,时序和2262芯片基本一致。
回复

使用道具 举报

ID:389488 发表于 2020-10-15 15:07 | 显示全部楼层

谢谢关注
回复

使用道具 举报

ID:389488 发表于 2020-10-16 11:09 | 显示全部楼层
PT2262的按键可以扩展到31个以上  (地址码保留的情况下)
回复

使用道具 举报

ID:389488 发表于 2020-10-18 20:49 | 显示全部楼层
在主机上电10秒内 按压遥控器指定按键 实现配对功能  这个又是怎么实现的呢? 目前还是不懂
回复

使用道具 举报

ID:389488 发表于 2020-10-28 08:51 | 显示全部楼层
zzh2118 发表于 2020-10-18 20:49
在主机上电10秒内 按压遥控器指定按键 实现配对功能  这个又是怎么实现的呢? 目前还是不懂

遥控器配对功能已实现,但目前不是在10秒内  而是在整个期间按指定键实现。。还需要优化
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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