找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索

用單片機(jī)解碼無線射頻信號的相關(guān)問題

查看數(shù): 2996 | 評論數(shù): 8 | 收藏 1
關(guān)燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請稍候......
發(fā)布時間: 2020-10-8 11:20

正文摘要:

最近在學(xué)習(xí)無線的單片機(jī)解碼。 示波器測試 :有的遙控器是24位脈沖 ,有是28位脈沖 有的遙控器是32位脈沖 汽車遙控器的脈沖數(shù)更多。 同步頭也不同   使用2個接收模塊 測出來的波形也不相同 有一個MPS ...

回復(fù)

ID:389488 發(fā)表于 2020-10-28 08:51
zzh2118 發(fā)表于 2020-10-18 20:49
在主機(jī)上電10秒內(nèi) 按壓遙控器指定按鍵 實(shí)現(xiàn)配對功能  這個又是怎么實(shí)現(xiàn)的呢? 目前還是不懂

遙控器配對功能已實(shí)現(xiàn),但目前不是在10秒內(nèi)  而是在整個期間按指定鍵實(shí)現(xiàn)。。還需要優(yōu)化
ID:389488 發(fā)表于 2020-10-18 20:49
在主機(jī)上電10秒內(nèi) 按壓遙控器指定按鍵 實(shí)現(xiàn)配對功能  這個又是怎么實(shí)現(xiàn)的呢? 目前還是不懂
ID:389488 發(fā)表于 2020-10-16 11:09
PT2262的按鍵可以擴(kuò)展到31個以上  (地址碼保留的情況下)
ID:389488 發(fā)表于 2020-10-15 15:07

謝謝關(guān)注
ID:389488 發(fā)表于 2020-10-15 15:06
無線解碼程序已搞定,現(xiàn)在測試了4個遙控器都可以,分別是PT2262 震蕩電阻3.3M 和4.7M 任意地址都可以。另外2個是單片機(jī)寫的20按鍵和21按鍵,時序和2262芯片基本一致。
ID:389488 發(fā)表于 2020-10-13 08:31
這份是從網(wǎng)上找的,試過了也不行啊,程序中沒有同步碼解碼  

#include<reg52.h>                 //庫文件
#include< stdio.h>
#define uchar unsigned char//宏定義無符號字符型
#define uint unsigned int  //宏定義無符號整型

uint addr,key;
uchar cntint;//外部中斷0計(jì)數(shù)


void eint0(void) interrupt 0//外部中斷0
{
        static uint tempaddr;//接收地址緩存
        static uint tempkey;//接收數(shù)據(jù)緩存
        uint timecnt;
        timecnt=TH0*256+TL0;
        TH0=0;
        TL0=0;
        if(cntint<16)//接收地址碼
        {
                tempaddr=tempaddr<<1;//將接收的到最低位移到最高位
                if(timecnt>1000)//210為寬脈沖與低脈沖界線,當(dāng)振蕩電阻為1M時,窄脈沖為110uS,寬脈沖為320uS
                {
                tempaddr|=1;//寬脈沖為1
                }
                cntint++;//中斷次數(shù)加1
        }
        else if(cntint<24)//接收數(shù)據(jù)碼
        {
                tempkey=tempkey<<1;
                if(timecnt>1000)
                {
                tempkey|=1;
                }
                cntint++;
        }
        else//cntint大于24也就是中斷了25次時,關(guān)閉外部中斷0,等待同步碼
        {
                TMOD&=0xf0;//設(shè)定時器0為定時方式
                TMOD|=0x01;
                TH0=0xf9;
                TL0=0x66;
                cntint=0;
                EX0=0;//關(guān)外部中斷0
                addr=tempaddr;
                key=tempkey;
                tempaddr=0;
                tempkey=0;
        }
        
}
void timer0(void) interrupt 1//定時器0中斷,只有初始化時,空閑時和同步碼到來時才中斷
{
        TMOD&=0xf0;//將定時器0的工作方式設(shè)為門控定時,用以檢測脈寬。
        TMOD|=0x09;
        cntint=0;//外部中斷0中斷次數(shù)設(shè)為0
        TH0=0;//設(shè)定時器0定時初值為0
        TL0=0;
        EX0=1;//允許外部中斷0
        IE0=0;//清除外部中斷0標(biāo)志
}
void main(void)
{
       // void sendd(unsigned int intnum);
        unsigned int i;
        TMOD=0x21;//設(shè)定定時器0和定時器1,定時器1用來驅(qū)動串口
        TH0=0xf9;//設(shè)定定時器的初始值,這個值必小于同步碼
        TL0=0x66;
//        TH1=243;//12M晶振時,串口波特率為2400
//        TL1=243;
                TH1=0xdc;//11.0592M晶振時,串口波特率為9600
          TL1=0xdc;
        SCON=0x50;//設(shè)定串口工作方式
        TI=1;//要用printf就將其設(shè)為1
        EA=1;//開所有中斷
        ET0=1;//開定時器0中斷
        EX0=0;//關(guān)外部中斷0,在Timer0中斷里面將其打開
        IT0=1;//外部中斷0設(shè)為跳變觸發(fā)
        TR0=1;//定時器0啟動
        TR1=1;//定時器1啟動
        while(1)
        {
//                P2=key;
//                P0=key>>8;
             printf("%u\n",addr);//輸出解碼地址
            printf("%u\n\n",key);//輸出解碼數(shù)據(jù)
                for(i=0;i<65500;i++);//這個用來防止串口不同步
        }
        
}

        
/********************************************************************
                              結(jié)束
*********************************************************************/
ID:389488 發(fā)表于 2020-10-13 08:22
理論上可行,為什么實(shí)物卻不行,請大佬幫我解惑。
  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()   //判斷同步碼 如果無線信號腳出現(xiàn)低電平,延時100個脈沖 如果還是低,可能是同步碼 再延時24a 確定是同步碼
  37. {
  38.         u8 cnt;
  39.         if(wuxian==0)//p0.0=0
  40. {
  41.   Delay_100a();                                        // 一共124a,先延時消耗掉100a
  42.         if (wuxian == 0)                                        // 如果不是干擾8ms后應(yīng)該還是低電平
  43.         {                        
  44.                 cnt = 50;                                        // 24*10us=2ms, 超過說明接收到錯誤的信號
  45.                 while ((wuxian == 0) && (cnt > 0))        // 等待前面9ms的低電平過去                  
  46.                 {                        
  47.                         Delay103us();                // 每隔100us查一次,準(zhǔn)確度很高
  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個脈沖,下一個度數(shù)在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. }
復(fù)制代碼

ID:389488 發(fā)表于 2020-10-8 13:23
本帖最后由 zzh2118 于 2020-10-8 13:29 編輯

用第三個接收模塊 (τ 寶買的超再生)卻根本接收不到這款的發(fā)射信號,其它的接收都正常,包括汽車遙控,滾動碼,三個波形都一致。滾動碼的脈沖多達(dá)95個

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表