搜索
bottom↓
回复: 12

红外线反射式ST188接收部分遇到的问题

[复制链接]

出0入0汤圆

发表于 2012-11-21 11:07:00 | 显示全部楼层 |阅读模式
模仿http://bbs.mydigit.cn/read.php?tid=300653里面的手势控制,在ST188接收部分遇到了一些问题;不知道是原理错了,还是程序有问题??、
原帖的ST188原理图是这样的:

说实话,接收部分有点小不懂,就按自己理解接了一个,如图

BJT换了一个,原理是9013,现在换成9014,都是NPN,没影响吧。

接收部分根本没什么电阻,,这样能行吗??
进行调试时,ST188顺利发出红外线,手机拍到了,可是当我进行打开串口,收到了的全是0X80,遮住传感器也无反应;也就是说ADC结果都是0x80;不解啊 ;贴上测试程序:
#include <STC12C2052AD.H>//单片机头文件
#include <intrins.h>        //51基本运算(包括_nop_空函数)
/*********************************************************************************************
函数名:毫秒级CPU延时函数
备  注:22.1184M-1T
/*********************************************************************************************/
void DELAY_MS (unsigned int a){
        unsigned int i;
        while( a-- != 0){
                for(i = 0; i < 150; i++);
        }
}

/*********************************************************************************************
函数名:UART串口初始化函数
备  注:振荡晶体为22.1184MHz,PC串口端设置 [ 4800,8,无,1,无 ]
/**********************************************************************************************/
void UART_init (void){
        //EA = 1; //允许总中断(如不使用中断,可用//屏蔽)
        //ES = 1; //允许UART串口的中断

        TMOD = 0x20;        //定时器T/C1工作方式2
        SCON = 0x50;        //串口工作方式1,允许串口接收(SCON = 0x40 时禁止串口接收)
        TH1 = 0x3c;        //定时器初值高8位设置
        TL1 = 0xb0;        //定时器初值低8位设置
        PCON = 0x80;        //波特率倍频(屏蔽本句波特率为2400)
        TR1 = 1;        //定时器启动   
}

/*********************************************************************************************
函数名:UART串口发送函数
/**********************************************************************************************/
void UART_T (unsigned char UART_data){ //定义串口发送数据变量
        SBUF = UART_data;        //将接收的数据发送回去
        while(TI == 0);                //检查发送中断标志位
        TI = 0;                        //令发送中断标志位为0(软件清零)
}

/*********************************************************************************************
函数名:8位A/D转换初始化函数
/**********************************************************************************************/
void Read_init (unsigned char CHA){
        unsigned char AD_FIN=0; //存储A/D转换标志
    CHA &= 0x07;            //选择ADC的8个接口中的一个(0000 0111 清0高5位)
    ADC_CONTR = 0x02;                //ADC转换的速度(0XX0 0000 其中XX控制速度,请根据数据手册设置)
    _nop_();
    ADC_CONTR |= CHA;       //选择A/D当前通道
    _nop_();
    ADC_CONTR |= 0x80;      //启动A/D电源
    DELAY_MS(1);            //使输入电压达到稳定(1ms即可)
}

/*********************************************************************************************
函数名:8位A/D转换函数
/**********************************************************************************************/
unsigned char Read (void){
        unsigned char AD_FIN=0; //存储A/D转换标志
    ADC_CONTR |= 0x08;      //启动A/D转换(0000 1000 令ADCS = 1)
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    while (AD_FIN ==0){     //等待A/D转换结束
        AD_FIN = (ADC_CONTR & 0x10); //0001 0000测试A/D转换结束否
    }
    ADC_CONTR &= 0xE7;      //1111 0111 清ADC_FLAG位, 关闭A/D转换,
return (ADC_DATA);          //返回A/D转换结果(8位)
}

/*********************************************************************************************
函数名:主函数
/**********************************************************************************************/
void main (void){
        unsigned char R;
        UART_init();//串口初始程序
        Read_init(0);//ADC初始化
        P1M0 = 0x01; //P1.7~.0:0000 0001(高阻)
        P1M1 = 0x00; //P1.7~.0:0000 0000(强推)
        while(1){
                P1=0x20;                 //0010 0000 P1^5 NPN基极,置高打开ST188发射端
            R = Read ();
            UART_T (R); //串口小秘书,将ADC读出值送入串口显示
        }
}

望各位大虾指正
25号,我要上交项目了,有点紧,这个关系到我能不能去竞争选拔赛名额

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

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

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

出0入0汤圆

 楼主| 发表于 2012-11-21 11:28:02 | 显示全部楼层
keil 调试时,左边的寄存器sec的单位是0.1秒吧,用延时软件产生的延时函数,放在KEIL里跑,老是差一个数量单位

出0入0汤圆

发表于 2012-11-21 11:37:59 | 显示全部楼层
这是我验证过可以用的电路图,我感觉你的接受电路有点问题。参考一下我的电路吧,不需要AD采集,直接读取引脚电平就可以了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2012-11-21 13:11:54 | 显示全部楼层
sgzzour 发表于 2012-11-21 11:37
这是我验证过可以用的电路图,我感觉你的接受电路有点问题。参考一下我的电路吧,不需要AD采集,直接读取引 ...

这个是可以,但是不能通过软件去除外界干扰啊。。。。普通灯光都能产生动作,谈何手势控制啊!亲

出0入0汤圆

发表于 2012-11-21 13:20:58 来自手机 | 显示全部楼层
看到  

出0入0汤圆

 楼主| 发表于 2012-11-21 14:19:18 | 显示全部楼层
hncjs 发表于 2012-11-21 13:20
看到

看到什么????

出0入0汤圆

发表于 2012-11-21 14:33:25 | 显示全部楼层
驱动电路有问题,用NPN管的话,发射LED要接c极-Vcc

出0入0汤圆

 楼主| 发表于 2012-11-21 23:22:34 | 显示全部楼层
NeverStop 发表于 2012-11-21 14:33
驱动电路有问题,用NPN管的话,发射LED要接c极-Vcc

不会的,BTJ发射极跟集电极电流基本相等,电流是从集电极流向发射极的。而且我都用手机拍到红外 是接收部分有点问题吧

出0入0汤圆

 楼主| 发表于 2012-11-22 09:25:39 | 显示全部楼层
搜索ST188,论坛就此贴啦。看来没什么人弄188

出0入0汤圆

发表于 2012-11-22 10:13:55 来自手机 | 显示全部楼层
不是吧,我记得调节电位器就可以解决干扰的问题,那你就把324去掉,采用ad采集就行了~~

出0入0汤圆

 楼主| 发表于 2012-11-22 12:45:01 | 显示全部楼层
sgzzour 发表于 2012-11-22 10:13
不是吧,我记得调节电位器就可以解决干扰的问题,那你就把324去掉,采用ad采集就行了~~ ...

你的电路图以后在研究,现在我的硬件都焊好了,不能再做大的修改了。明天就好拿去评选啦》。完全没底

出0入0汤圆

 楼主| 发表于 2012-11-22 12:52:39 | 显示全部楼层
sgzzour 发表于 2012-11-22 10:13
不是吧,我记得调节电位器就可以解决干扰的问题,那你就把324去掉,采用ad采集就行了~~ ...

杜洋这个硬件更简单,不过那家伙从来都是把源码拿去卖。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2014-8-30 08:48:47 | 显示全部楼层
Playboy_xixi 发表于 2012-11-22 12:52
杜洋这个硬件更简单,不过那家伙从来都是把源码拿去卖。

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

本版积分规则

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

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

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

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