搜索
bottom↓
回复: 61

菜鸟做的无线开关(PT2262遥控器,315M超再生模块,软解码)

[复制链接]

出0入0汤圆

发表于 2010-5-16 18:03:39 | 显示全部楼层 |阅读模式

(原文件名:0001.jpg)


(原文件名:0002.jpg)


(原文件名:0003.jpg)


(原文件名:0004.jpg)


#include "TYPEDEF.H"
#include "STC89C5X.H"
#include "INTRINS.H"

sfr P1M1 = 0x92;

#define ONSwitch()     P1M1 |= 0x10; P1_4 = 1
#define OFFSwitch()    P1M1 &= 0xEF; P1_4 = 0

INT8U RFLevel0;
INT8U RFLevel1;
INT8U RFStep;
INT8U RFBuf[25];
//
INT8U KeyAge;
INT8U KeyFlag;
INT8U SwitchState;
INT16U TimeOut;

//void Soft_Rst(void);
void SystemInit(void);
//INT8U  Read_Flash_Byte(INT16U addr);
//void Write_Flash_Byte(INT8U byte, INT16U addr);
//void Erase_Flash_Sector(INT16U addr);

/*
* Main function
*/
int main(void)
{
        SystemInit();
        while(1) {
                if(TF1) {
                        TF1 = 0;

                        RFLevel1 = RFLevel0;
                        RFLevel0 = P3 & 0x80;

                        if(RFStep == 0) {
                                if(RFLevel0 == 0) {
                                        RFBuf[0]++;
                                } else {
                                        if(RFBuf[0] >= 60) {
                                                RFBuf[++RFStep] = 1;
                                        } else {
                                                RFBuf[0] = 0;
                                        }
                                }
                        } else {
                                if(RFLevel0 != 0) {
                                        if(++RFBuf[RFStep] == 0) {
                                                RFStep   = 0;
                                                RFBuf[0] = 0;
                                        }
                                } else if(RFLevel1 != 0) {
                                        if(++RFStep > 24) {
                                                RFLevel0 = RFBuf[0] / 15;
                                                RFLevel1 = 0;
                                                if(RFBuf[1]  < RFLevel0) RFLevel1++;
                                                if(RFBuf[2]  > RFLevel0) RFLevel1++;
                                                if(RFBuf[3]  < RFLevel0) RFLevel1++;
                                                if(RFBuf[4]  > RFLevel0) RFLevel1++;
                                                if(RFBuf[5]  < RFLevel0) RFLevel1++;
                                                if(RFBuf[6]  > RFLevel0) RFLevel1++;
                                                if(RFBuf[7]  < RFLevel0) RFLevel1++;
                                                if(RFBuf[8]  > RFLevel0) RFLevel1++;
                                                if(RFBuf[9]  < RFLevel0) RFLevel1++;
                                                if(RFBuf[10] > RFLevel0) RFLevel1++;
                                                if(RFBuf[11] < RFLevel0) RFLevel1++;
                                                if(RFBuf[12] > RFLevel0) RFLevel1++;
                                                if(RFBuf[13] < RFLevel0) RFLevel1++;
                                                if(RFBuf[14] > RFLevel0) RFLevel1++;
                                                if(RFBuf[15] < RFLevel0) RFLevel1++;
                                                if(RFBuf[16] > RFLevel0) RFLevel1++;
                                                if(RFBuf[17] < RFLevel0) RFLevel1++;
                                                if(RFBuf[18] < RFLevel0) RFLevel1++;
                                                if(RFBuf[19] < RFLevel0) RFLevel1++;
                                                if(RFBuf[20] < RFLevel0) RFLevel1++;
                                                if(RFBuf[21] < RFLevel0) RFLevel1++;
                                                if(RFBuf[22] < RFLevel0) RFLevel1++;
                                                if(RFBuf[23] > RFLevel0) RFLevel1++;
                                                if(RFBuf[24] > RFLevel0) RFLevel1++;
                                                if(RFLevel1 >= 24) {
                                                        KeyAge++;
                                                        TimeOut  = 0;
                                                        RFStep   = 0;
                                                        RFBuf[0] = 0;
                                                        if((KeyFlag == 0) && (KeyAge >= 1)) {
                                                                KeyFlag = 1;
                                                                if(SwitchState == 0) {
                                                                        SwitchState = 1;
                                                                        ONSwitch();
                                                                } else {
                                                                        SwitchState = 0;
                                                                        OFFSwitch();
                                                                }
                                                        }
                                                }
                                        } else {
                                                RFBuf[RFStep] = 0;
                                        }
                                }
                        }
               
                        if(++TimeOut > 6000) {
                                TimeOut = 0;
                                KeyAge  = 0;
                                KeyFlag = 0;
                        }
                }
        }
}

/*
* Initializtion System
*/
void SystemInit(void)
{
        IE = 0x00;
        TMOD = 0x21;
        TH1  = 0xEC;
        TR1  = 1;
}

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

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2010-5-16 18:13:30 | 显示全部楼层
发现了STC 11和12系列中断有BUG,如果中断间隔很小,频繁中断时容易死机,不知道大家有没碰到

出0入0汤圆

发表于 2010-5-16 21:06:20 | 显示全部楼层
我一直在用啊,没有发现问题啊

出0入0汤圆

发表于 2010-5-16 21:16:44 | 显示全部楼层
mark,请教下楼主定时中断多长时间比较合适?以前试过好像不能同时兼容多种遥控

出0入0汤圆

 楼主| 发表于 2010-5-16 23:45:38 | 显示全部楼层
回复【3楼】Jason022
-----------------------------------------------------------------------

我用中断,结果上电工作几分钟就死机了,后来只好放在main函数了,你说的多种遥控应该是指数据速率不一样的吧?要兼容,采集速率要做成动态的,根据同步头的长度动态调整采集速率。我用的是内部时钟,精度很差,1L的代码就是动态决定采集速率的

出0入0汤圆

 楼主| 发表于 2010-5-16 23:54:56 | 显示全部楼层
回复【2楼】cmyldd
-----------------------------------------------------------------------

有个产品,串口中断很频繁(最快时大概1MS中断一次),用89C54,从未发现过问题,换成11F16,非常容易死机,原因至今没找到,晶体用的是32.768M的

出0入0汤圆

发表于 2010-5-17 00:45:25 | 显示全部楼层
1MS中断一次?BAUD是多少?9600的话那基本上一直在处理串口中断?CPU还有时间做其它事情?

出0入0汤圆

 楼主| 发表于 2010-5-17 10:24:09 | 显示全部楼层
回复【6楼】xnliuxiwen
-----------------------------------------------------------------------

是9600,每接收一个字节中断一次,当然有时间做其它事。Fosc = 32.768M,双倍速

出0入0汤圆

发表于 2010-8-12 14:34:32 | 显示全部楼层
1楼,发现了STC 11和12系列中断有BUG,如果中断间隔很小,频繁中断时容易死机,不知道大家有没碰到
-------------------------------------------

我用STC12C5204做上电唤醒,发现有程序跑飞,或换不醒。。

STC有没有技术支持论坛啊??他们那个姚永平普通话不行。

出0入0汤圆

发表于 2010-8-30 15:17:18 | 显示全部楼层
MARK

出0入0汤圆

发表于 2010-9-21 16:04:03 | 显示全部楼层
mark!

出0入70汤圆

发表于 2010-9-21 17:38:09 | 显示全部楼层
你那模块什么样的(来个高清图看看), 好像我也有一块,上面主要就LM358, 一处接天线, 输出也是三脚..

出0入0汤圆

发表于 2010-9-22 18:11:47 | 显示全部楼层
我想学习。。。无线开关(PT2262遥控器,315M超再生模块,软解码   楼主 可以提供点PDF 资料吗

出0入0汤圆

发表于 2010-9-22 18:25:37 | 显示全部楼层
怎样对码的?没看懂,请楼主指教一二。

出0入0汤圆

发表于 2010-9-24 22:59:29 | 显示全部楼层
mark~不错

出0入0汤圆

发表于 2010-9-28 23:11:34 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-9-30 10:06:20 | 显示全部楼层
楼主,接收电路怎么做呢,新手想学学

出0入0汤圆

发表于 2010-9-30 15:01:53 | 显示全部楼层
mark!

出0入0汤圆

发表于 2010-10-22 22:37:54 | 显示全部楼层
回复【楼主位】Clinging 哆拉C梦
-----------------------------------------------------------------------

楼主 无线开关(PT2262遥控器,315M超再生模块,软解码   楼主 可以提供点 资料吗

出0入0汤圆

发表于 2010-10-30 10:44:02 | 显示全部楼层
楼主,请问如何提高接收距离啊?
我也做了个无线软解码的,可是距离只有12m左右吧!
有什么办法可以提高距离的么?

出0入0汤圆

发表于 2010-10-30 16:56:27 | 显示全部楼层
学习学习

出0入0汤圆

发表于 2010-11-2 10:52:53 | 显示全部楼层
记得无限开关纯数字就可以的,以前做过,用2262和2272加继电器

出0入0汤圆

发表于 2010-12-28 11:27:57 | 显示全部楼层
回复【19楼】skay_mcu
-----------------------------------------------------------------------

加入信号放大电路

出0入0汤圆

发表于 2010-12-28 13:21:52 | 显示全部楼层
楼主用那么高的晶振啊!

出0入0汤圆

 楼主| 发表于 2010-12-28 23:16:38 | 显示全部楼层
回复【23楼】xiaobendan  仲跻东
-----------------------------------------------------------------------

内部RC

出0入0汤圆

发表于 2010-12-28 23:36:30 | 显示全部楼层
不错

出0入0汤圆

发表于 2011-1-1 10:46:17 | 显示全部楼层
回复【24楼】Clinging 哆拉C梦
-----------------------------------------------------------------------

内部RC没那么高吧??我用的12C5620内部RC一般是5-6M左右,你的怎么能达到32.768M????32.768K??
另外楼主能否讲解一下原理呀?最近也在研究这玩意.

出0入0汤圆

 楼主| 发表于 2011-1-5 16:15:29 | 显示全部楼层
回复【26楼】muzheyun  
-----------------------------------------------------------------------

不好意思,是我没说清楚,32.768M是别的东西(请看5、6L),这个开关用的是内部RC

原理不知道怎么说,知道了PT2262的编码方式难道还不会解码么

出0入0汤圆

发表于 2011-3-3 22:25:14 | 显示全部楼层
#include "TYPEDEF.H"
楼主能否把头文件也给出来?谢谢!

出0入0汤圆

发表于 2011-3-3 23:52:37 | 显示全部楼层
mark.慢慢看!

出0入0汤圆

发表于 2011-8-10 23:02:41 | 显示全部楼层
你的电源电路好危险哦

出0入0汤圆

发表于 2011-9-11 16:29:08 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-9-11 18:23:17 | 显示全部楼层
我也比照做一个无线软解码试试

出0入0汤圆

发表于 2011-9-17 14:56:32 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-12-6 17:18:55 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-12-10 00:00:28 | 显示全部楼层
菜鸟……

出0入0汤圆

发表于 2012-2-7 17:06:10 | 显示全部楼层
MARK

出0入0汤圆

发表于 2012-2-8 22:28:38 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-2-12 18:49:02 | 显示全部楼层
这东西越简单越好

出0入0汤圆

发表于 2012-2-24 14:04:56 | 显示全部楼层
红外线要简单很多。

出0入0汤圆

发表于 2012-3-6 17:24:01 | 显示全部楼层
最近正在学习无线解码,记号一下。

出0入0汤圆

发表于 2012-3-6 22:43:40 | 显示全部楼层
有点像贼的工具

出0入0汤圆

发表于 2012-5-7 22:46:36 | 显示全部楼层
学习学习了!

出0入0汤圆

发表于 2012-5-12 15:50:10 来自手机 | 显示全部楼层
skay_mcu 发表于 2010-10-30 10:44 楼主,请问如何提高接收距离啊? 我也做了个无线软解码的,可是距离只有12m左右吧! 有什么办法可以提高距离 ...

降低单片机频率试试,一般4M。

出0入0汤圆

发表于 2012-6-16 16:57:58 | 显示全部楼层
好干净 一点注释都没有

出0入0汤圆

发表于 2013-2-17 11:01:30 | 显示全部楼层
mark
mark

出0入0汤圆

发表于 2013-2-27 14:06:22 | 显示全部楼层
楼主模块的距离可以到多少????

出0入0汤圆

发表于 2013-2-27 15:02:39 | 显示全部楼层
你的RC降压上是不是少了个电阻?

出0入0汤圆

发表于 2013-3-17 20:03:51 | 显示全部楼层
遥控距离多远哈?

出0入0汤圆

发表于 2013-3-28 16:23:02 | 显示全部楼层
回帖。。楼主不错的程序。、、

出0入0汤圆

发表于 2013-3-29 12:02:54 | 显示全部楼层
学习,学习,再学习,可否详细点!!!!!

出0入0汤圆

发表于 2013-4-23 14:49:07 | 显示全部楼层

出0入0汤圆

发表于 2013-4-23 15:07:08 | 显示全部楼层
程序存下了

出0入0汤圆

发表于 2013-4-23 15:57:40 | 显示全部楼层
xiaobendan 发表于 2010-12-28 13:21
楼主用那么高的晶振啊!

315M晶振是发射无线信号用的晶振,还有433M的呢

出0入0汤圆

发表于 2013-4-23 16:13:42 | 显示全部楼层
本帖最后由 bbssilverkey 于 2013-4-23 16:15 编辑

我很喜欢楼主这种图,超帅,顺便说下:边缘距离会产生问题,处理一下可以更好

出0入46汤圆

发表于 2013-6-24 21:18:34 | 显示全部楼层
谢谢楼主!做的不错!

出0入0汤圆

发表于 2013-6-24 23:53:48 | 显示全部楼层
Clinging 发表于 2010-5-16 18:13
发现了STC 11和12系列中断有BUG,如果中断间隔很小,频繁中断时容易死机,不知道大家有没碰到 ...

STC12C5A60,频繁INT0外部中断也遇到死机问题,不过只有实验会发生这个现象,其他时候因为中断频率很低,没有遇到过。

出0入0汤圆

发表于 2013-6-26 13:44:08 | 显示全部楼层
这个不错的贴

出0入0汤圆

发表于 2014-12-27 19:41:59 | 显示全部楼层
#include "TYPEDEF.H"
楼主能否把头文件也给出来?谢谢!

出0入0汤圆

发表于 2015-2-2 18:30:48 | 显示全部楼层
学习一下

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-7-23 10:25

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

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