madswan 发表于 2012-8-22 16:15:52

仿制“红外线遥控逻辑分析器”中遇到问题,BXAK 大侠请进

本帖最后由 madswan 于 2012-8-22 16:55 编辑

原帖地址在这里http://www.amobbs.com/forum.php?mod=viewthread&tid=3664236&highlight=%E7%BA%A2%E5%A4%96%2B%E5%88%86%E6%9E%90,我用1T单片机,11.0592M晶振,下位机用的51楼的第2个,电脑上用USB转成了com3,由于45楼的两个程序只能用COM1或者com2,所以找了可以改串口的版本。电路搭好之后,没法得到红外波形。请大家帮我分析什么原因

靠,现在上不了附件

madswan 发表于 2012-8-22 16:20:29

说简单一点,我是1Tcpu+11.0592M晶振+com3,有没有支持上面几个条件的上位机软件?

BXAK 发表于 2012-8-22 19:04:13

可能你找到的上位机 与 51楼下位机的程序 不兼容,
我有改版的上位机,不知你电脑屏幕的分辨率是多少(因为视觉需要,我把上位机的界面弄得很宽,捕捉分辨率也由原来的20点多us改成了12us)


说说你:
电脑屏幕的分辨率
单片机型号
晶振

marshallemon 发表于 2012-8-22 19:37:47

搞什么串口啊,搞个红外接收头,接到声卡的MIC输入,用录音软件来分析更方便,例如cooledit

wkman 发表于 2012-8-22 19:59:26

marshallemon 发表于 2012-8-22 19:37 static/image/common/back.gif
搞什么串口啊,搞个红外接收头,接到声卡的MIC输入,用录音软件来分析更方便,例如cooledit ...

记得很多年前玩过个 声卡 Line-IN输入的,叫   声卡示波器   {:handshake:}

madswan 发表于 2012-8-22 21:17:58

BXAK 发表于 2012-8-22 19:04 static/image/common/back.gif
可能你找到的上位机 与 51楼下位机的程序 不兼容,
我有改版的上位机,不知你电脑屏幕的分辨率是多少(因为 ...

我电脑分辨率是1600*900
                单片机想用STC15F104E(或者STC89C52,或者STC12C5A60S2)
               晶振只有11.0592的(如果STC15系列的话,可以用22.xxMhz)
如果可能的话,麻烦把上/下位机程序都给我,谢谢

BXAK 发表于 2012-8-22 23:19:00

madswan 发表于 2012-8-22 21:17 static/image/common/back.gif
我电脑分辨率是1600*900
                单片机想用STC15F104E(或者STC89C52,或者STC12C5A60S2)
       ...

那就用STC15F104E,
准备休息了,明天再上传

BXAK 发表于 2012-8-23 11:47:40

madswan 发表于 2012-8-22 21:17 static/image/common/back.gif
我电脑分辨率是1600*900
                单片机想用STC15F104E(或者STC89C52,或者STC12C5A60S2)
       ...

如果会VB程序,希望进一步改善共享
//此程序只适合STC 15系列 @ 22.1184MHz

typedefunsigned charuint8;
typedefunsigned int   uint16;
#include <REG51.H>

sfr AUXR = 0x8E;

#defineCPU_FOSC22118400UL



sbit TXB   = P3^1;
sbit LED   = P3^2;
sbit IO_in = P3^5;       //采样引脚

uint8   BIT8,cnt,Dat;
uint16stemp;

uint8 TBUF;        //发送缓存
uint8 TDAT;        //发送数据
uint8 TBIT;        //发送比特数
bit   TING;        //开始发送标志
bit   TEND;        //发送完成标志

/*****************************************************
函数: 延时ms毫秒(STC 1T系列自适应 1MHz ~ 45MHz )
*****************************************************/
void ys_ms( uint16 ms )
{
   uint16 n;
      
        do{
         n = CPU_FOSC*64/896750;
         while( --n );   
   }while( --ms );
}

void Analyzer_Init()               
{
        TR1 = 0;
        TF1 = 0;
       
        stemp = 0;
        BIT8 = 8;
        LED = 0;               //指示灯开
}

void main()
{
        static bit mirror;
       
        ys_ms(400);
       
        TMOD = 0x00;          //T0、T1:16位自动重装模式
        AUXR = 0xC0;          //T0、T1:1T模式
        TL0 = (65536-CPU_FOSC/115200);                 
        TH0 = (65536-CPU_FOSC/115200)>>8;      // 115200bps       
        TL1 = (65536-14*CPU_FOSC/1000000);             // 14us
        TH1 = (65536-14*CPU_FOSC/1000000)>>8;
        ET0 = 1;
        PT0 = 1;             //提高T0的中断优先级       
        ET1 = 1;
        EA= 1;
   
        Analyzer_Init();
        TING = 0;                 //串口初始化
        TEND = 1;                 //串口初始化
        TR0 = 1;   

        while (1)
        {
                if (!IO_in &&(IO_in != mirror))
                {
                        TR1 = 1;    //采样开始
                        LED = 1;
                }
                mirror = IO_in;
               
                if (cnt == 0)
                {
                        cnt = 255;
                        if (++stemp > 4000)Analyzer_Init();   //采样完成后,等待几秒重新开始
                }
        }
}

void TIME0() interrupt 1 using 1
{
        if (TING)                  //判断是否发送
        {
                if (TBIT == 0)
                {
                        TXB = 0;         //发送起始位
                        TDAT = TBUF;       //加载数据从TBUF至TDAT
                        TBIT = 9;          //初化始发送比特数(8位数据位+1个停止位)
                }
                else
                {
                        TDAT >>= 1;      //位移数据至CY
                        if (--TBIT == 0)
                        {
                                TXB = 1;
                                TING = 0;       //停止发送
                                TEND = 1;       //设置发送完成标志
                        }
                        else
                        {
                                TXB = CY;       //写CY至TX端口
                        }
                }
        }
}

void TIME1() interrupt 3      
{                                                  
        if (IO_in) Dat |= 0x01;   
        if ( --BIT8 == 0 )                    //每采集8次发送一次
        {
                TBUF = Dat;       
                TING = 1;
                BIT8 = 8;             
           }
        Dat <<= 1;
        if (cnt) cnt--;            //约3ms                       
}

madswan 发表于 2012-8-23 14:45:25

x谢谢,用这个程序终于能采集到波形了。
不过还有个疑问,看程序led亮的时候表示单片机初始化完成,可以进行采集,开始采集的时候LED就灭了。
为什么实际中,我没有开始采集,LED自动在哪里一会亮一会灭的?

BXAK 发表于 2012-8-23 18:46:14

madswan 发表于 2012-8-23 14:45 static/image/common/back.gif
x谢谢,用这个程序终于能采集到波形了。
不过还有个疑问,看程序led亮的时候表示单片机初始化完成,可以进 ...

???
我这边没这样的情况

madswan 发表于 2012-8-24 09:47:39

BXAK 发表于 2012-8-23 18:46 static/image/common/back.gif
???
我这边没这样的情况

今天试了一下,还是不行,没给他遥控信号,他也自己灭灯。
现在只能趁他亮灯的时候抓紧时间采样。
我led脚(P3.2)接LED管负极,5V直接接LED正极,这个没有影响吧

madswan 发表于 2012-8-24 10:03:49

用纸把红外接收管包起来,也没有改善。
刚才试了一下,断开38khz接收管输出端到P3.5的连线,灯就不会自己灭。
我不按红外遥控器键的时候,用串口助手看,也能接收到CF DF DE DF C8这样一些随机的数字,只是速率很慢

BXAK 发表于 2012-8-24 11:20:09

LED加限流电阻;
接收引脚加5K左右的上拉电阻;
换另一型号的一体化接收管;

有些接收管在白天(或者黑暗)环境下无红外信号时,输出端久不久也会有杂乱的信号输出,你自己检查是否是这一原因

madswan 发表于 2012-8-24 12:17:00

按您说的加了电阻,换了接收管,现在有改善,基本上很少自动闪了
页: [1]
查看完整版本: 仿制“红外线遥控逻辑分析器”中遇到问题,BXAK 大侠请进