(最新)热转印自制了一个红外线遥控逻辑分析器

2020-01-18 18:44发布

照磁动力论坛里的原理图,自制了一个红外线遥控逻辑分析器,感觉还蛮不错的,上传上来跟大家分享一下。玩遥控实验,这下可以很容易就可以进行解码了。
原文出处:http://www.cdle.net/bbs/dispbbs.asp?boardid=11&id=2796&page=1&star=1
此电路是用AT89C2051+MAX232制成。在这里,特别感谢软件、硬件的原作者。
我是用DXP 2004制的版,可能有的朋友没装,我把原理图、PCB版图转成了PDF文件。

整个工程文件ourdev_496299.rar(文件大小:409K) (原文件名:红外线遥控逻辑分析器.rar)


图1 (原文件名:PA260022.jpg)


图2 (原文件名:PA260014.jpg)


图3 (原文件名:PA260016.jpg)


红外数据采集中 (原文件名:data_1.jpg)


脉宽测量 (原文件名:data_2.jpg)
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
100条回答
BXAK
2020-01-25 16:22
回复【49楼】yufei8051
-----------------------------------------------------------------------

用串口通信115200bps的那个 采集速度很快,如果条件允许建议用那个,

如果你不习惯反码,想让 波形 和 发射端电平 一致,可以在红外接收头加一个NPN三极管进行反相就OK。


/***********************************************************************************
主控: STC 1T@11.0592MHz       
说明: 此程序也适合12T MCU

红外线编码分析器(57600bps型)说明:
①串口通信:57600bps。
②每40.148us采集一次电位。
③每采够8次发送一次数据。
④共采集19.8秒时长数据。
***********************************************************************************/
#define uchar unsigned char
#define uint  unsigned int
#include <STC12C5410AD.H>

sbit   IR  = P2^0;                //采样引脚
sbit   LED = P2^2;                //指示灯

bit     b_n= 0;
uchar   i,n,dat;
uint    t  = 0;

void JS_Init()                        //接收初始化
{
   t   = 0;
   i   = 0;
   TR0 = 0;
   TF0 = 0;
   TL0=TH0 = (256-37);                            
   LED = 0;                                //指示灯开
}
void main()
{                                                //57600bps@11.0592MHz
    PCON |= 0x80;                //使能波特率倍速位SMOD
        SCON = 0x50;                //8位数据,可变波特率
        AUXR &= 0xbf;                //定时器1时钟为Fosc/12,即12T
        AUXR &= 0xfe;                //串口1选择定时器1为波特率发生器
        TMOD  = 0x22;                //设定定时器0、1为8位自动重装方式
        TL1 = 0xFF;                    //设定定时初值
        TH1 = 0xFF;                    //设定定时器重装值
        ET1 = 0;                    //禁止定时器1中断
        TR1 = 1;                    //启动定时器1

    JS_Init();

        EA    = 1;
    ET0   = 1;                
       
        while(1)
        {
                if(IR==0)
                {
                        TR0 = 1;     //启动定时器0,采样开始
                        LED = 1;
                }

                if(b_n)            
                {
                          b_n=0;
                        if(++t>2400)JS_Init(); //约24秒(10ms * 2400),即每次采集完,过4秒(24S-19.8S)后重新工作       
                }                  
    }
}

void TT0() interrupt 1 using 1         
{       
        if(IR)dat |= 0x01;   
       
        if(++i==8)                     //每采集8次发送一次
        {
          TI=0;
          SBUF=dat;
          i=0;
          }
        dat <<= 1;

        if(++n==0)b_n=1;   //约10ms置1一次
}













/***********************************************************************************
主控: STC 1T@11.0592MHz
说明:此程序只适合 1T STC

红外线编码分析器(115200bps型)说明:
①串口通信:115200bps。
②每20.074us采集一次电位。
③每采够8次发送一次数据。
④共采集12.6秒时长数据。
***********************************************************************************/
#define uchar unsigned char
#define uint  unsigned int
#include <STC12C5410AD.H>

sbit   IR  = P2^0;                //采样引脚
sbit   LED = P2^2;                //指示灯

bit     b_n= 0;
uchar   i,n,dat;
uint    t  = 0;

void JS_Init()                        //接收初始化
{
   t   = 0;
   i   = 0;
   TR0 = 0;
   TF0 = 0;
   TL0=TH0 = (256-222);                            
   LED = 0;                                //指示灯开
}
void main()
{                                                //115200bps@11.0592MHz
    PCON &= 0x7f;                //波特率不倍速
        SCON = 0x50;                //8位数据,可变波特率
        AUXR |= 0xC0;                //定时器0、1时钟为Fosc,即1T
        AUXR &= 0xfe;                //串口1选择定时器1为波特率发生器
        TMOD = 0x22;                //设定定时器0、1为8位自动重装方式
        TL1  = 0xFD;                //设定定时初值
        TH1  = 0xFD;                //设定定时器重装值
        ET1   = 0;                    //禁止定时器1中断
        TR1   = 1;                    //启动定时器1

    JS_Init();

        EA    = 1;
    ET0   = 1;                
       
        while(1)
        {
                if(IR==0)
                {
                        TR0 = 1;     //启动定时器0,采样开始
                        LED = 1;
                }

                if(b_n)            
                {
                          b_n=0;
                        if(++t>3320)JS_Init(); //约16.6秒(5ms * 3320),即每次采集完,过4秒(16.6S-12.6S)后重新工作       
                }                  
    }
}

void TT0() interrupt 1 using 1         
{       
        if(IR)dat |= 0x01;   
       
        if(++i==8)                     //每采集8次发送一次
        {
          TI=0;
          SBUF=dat;
          i=0;
          }
        dat <<= 1;

        if(++n==0)b_n=1;   //约5ms置1一次
}

一周热门 更多>