OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6737|回复: 8

无线模块 2272 2262问题

[复制链接]

9

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
93
金钱
93
注册时间
2013-4-7
在线时间
8 小时
发表于 2013-6-6 09:16:15 | 显示全部楼层 |阅读模式
新手求教
想用PT2262/2272做无线遥控,数据输出高电平,按键后变为低电平,所以我的想法是在PC 0 1 2 3口下拉输入,当输入变为高电平时返回值。
不知道我的思路有没有什么错误
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-6-6 11:44:31 | 显示全部楼层
回复 支持 反对

使用道具 举报

75

主题

458

帖子

4

精华

金牌会员

Rank: 6Rank: 6

积分
1635
金钱
1635
注册时间
2012-8-28
在线时间
71 小时
发表于 2013-6-6 12:06:44 | 显示全部楼层
回复【楼主位】a771069306:
---------------------------------
你这好像是4路遥控器。4个按钮对应4个输出
QQ750273008有好的资料记得发给我哦。。。
回复 支持 反对

使用道具 举报

9

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
93
金钱
93
注册时间
2013-4-7
在线时间
8 小时
 楼主| 发表于 2013-6-6 13:07:04 | 显示全部楼层
回复【3楼】750273008:
---------------------------------
是4路遥控器  一个按键控制一个输出
回复 支持 反对

使用道具 举报

9

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
93
金钱
93
注册时间
2013-4-7
在线时间
8 小时
 楼主| 发表于 2013-6-6 13:11:27 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
我把按键事例中的上拉改为了下拉输入 直接连接的2272的数据输出端 结果没有什么变化 是应该加中断,优先级什么的吗
回复 支持 反对

使用道具 举报

4

主题

119

帖子

0

精华

初级会员

Rank: 2

积分
169
金钱
169
注册时间
2013-4-6
在线时间
3 小时
发表于 2013-6-6 13:35:16 | 显示全部楼层
更好更省成本的作法是,   直接使用 STM32 解码 ,   只需要RF接收模块就行了.   不需要再用PT解码IC.

原子的教程改一下,  就能轻松处理 T 的编码,  还可以自适应不同的振荡电阻呢!!!!

//检测脉冲宽度
//最长脉宽为20ms
//返回值:x,代表脉宽为x*10us(x=1~2000)
u16 ulse_Width_Check(void)
{
    u16 t=0;  
    while(!RDATA)
    {  
t++;
delay_us(10);  
        if(t==2000)return t; //超时溢出
    }
    return t;
}    



void EXTI9_5_IRQHandler(void)
{       
u16 res,pulse1,pulse2;  
    u8 i;

if (DO_flag) {  //主程序允许接收RF信号时才处理
while (RDATA);              //等待低电平
    res=Pulse_Width_Check();    //量测脉宽宽度
    if(res==2000) goto RemExit;   //超时就直接退出

if(res<1400 && res>1250) {       // 同步码?(4.7M)
    for (i=1; i<=12; i++)  {     //共需解出12bits
           while (!RDATA);          //等待高电平
   while (RDATA);           //等待低电平
       pulse1=Pulse_Width_Check();        //量测脉宽宽度
       if(pulse1==2000) goto RemExit;   //超时就直接退出

           while (!RDATA);            //等待高电平
   while (RDATA);             //等待低电平
       pulse2=Pulse_Width_Check();        //量测脉宽宽度
       if(pulse2==2000) goto RemExit;   //超时就直接退出

       if ((pulse1<50 && pulse1>30) && (pulse2<50 && pulse2>30)) {
      receive<<=1;
              receive+=1;   }            //保存 1           
           else if ((pulse1<135 && pulse1>115) && (pulse2<135 && pulse2>115)) {
            receive<<=1;  }        //保存0 
   else if ((pulse1<135 && pulse1>115) && (pulse2<50 && pulse2>30)) {
            }                      //浮接状态
   else goto RemExit;      
     
     }       
         Remote_Rdy=1;  //译码完成
     goto RemEnd;
}
 
  if(res<1100 && res>900) {         //同步码?(3.3M) 
    for (i=1; i<=12; i++)  {      //共需解出12bits
           while (!RDATA);           //等待高电平
   while (RDATA);            //等待低电平
       pulse1=Pulse_Width_Check();        //量测脉宽宽度
       if(pulse1==2000) goto RemExit;   //超时就直接退出

           while (!RDATA);           //等待高电平
   while (RDATA);            //等待低电平
       pulse2=Pulse_Width_Check();        //量测脉宽宽度
       if(pulse2==2000) goto RemExit;   //超时就直接退出

       if ((pulse1<40 && pulse1>20) && (pulse2<40 && pulse2>20)) {
      receive<<=1;
              receive+=1;   }         //保存 1           
           else if ((pulse1<100 && pulse1>80) && (pulse2<100 && pulse2>80)) {
      receive<<=1;  }           //保存0 
   else if ((pulse1<100 && pulse1>80) && (pulse2<40 && pulse2>20)) {
            }                   //浮接状态
   else goto RemExit; 

         }       
         Remote_Rdy=1;  //译码完成
     goto RemEnd;
}
   
   if(res<550 && res>400) {          // 同步码?(1.5M)
    for (i=1; i<=12; i++)  {     //共需解出12bits
           while (!RDATA);           //等待高电平
   while (RDATA);            //等待低电平
       pulse1=Pulse_Width_Check();        //量测脉宽宽度
       if(pulse1==2000) goto RemExit;   //超时就直接退出

           while (!RDATA);           //等待高电平
   while (RDATA);            //等待低电平
       pulse2=Pulse_Width_Check();        //量测脉宽宽度
       if(pulse2==2000) goto RemExit;   //超时就直接退出

       if ((pulse1<15 && pulse1>5) && (pulse2<15 && pulse2>5)) {
      receive<<=1;
              receive+=1;   }         //保存 1           
           else if ((pulse1<50 && pulse1>30) && (pulse2<50 && pulse2>30)) {
      receive<<=1;  }           //保存0 
   else if ((pulse1<50 && pulse1>30) && (pulse2<15 && pulse2>5)) {
            }                   //浮接状态   
   else goto RemExit;    

         }       
         Remote_Rdy=1;  //译码完成
     goto RemEnd;
}
    }
 RemExit:
    Remote_Rdy=0; 

 RemEnd:
EXTI->R=1<<5;      //清除中断标志位   (INT5)     
}
回复 支持 反对

使用道具 举报

9

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
93
金钱
93
注册时间
2013-4-7
在线时间
8 小时
 楼主| 发表于 2013-6-6 14:28:57 | 显示全部楼层
回复【6楼】liuje:
---------------------------------
非常感谢 
因为是新手 直接用的现成的模块  只是做个比较简单的控制   
由于不太懂这个程序  只能先留着 慢慢学习了
回复 支持 反对

使用道具 举报

2

主题

12

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2014-2-27
在线时间
0 小时
发表于 2014-3-18 21:56:50 | 显示全部楼层
请问那个电路怎样搭啊·??
回复 支持 反对

使用道具 举报

3

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
127
金钱
127
注册时间
2012-10-21
在线时间
23 小时
发表于 2017-6-17 23:55:21 | 显示全部楼层
liuje 发表于 2013-6-6 13:35
更好更省成本的作法是,&nbsp;&nbsp;&nbsp;直接使用&nbsp;STM32&nbsp;解码&nbsp;,&nbsp;&nbsp;&nbsp;只需要R ...

能不能请教个问题?我现在在用你这个方式来做,但是一直收不到引导码的长低电平?不知道怎么办?
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-8-18 04:04

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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