查看: 6017|回复: 13

[原创] 【LPC800项目】红外分析仪(1)

[复制链接]
  • TA的每日心情
    奋斗
    2017-5-3 11:19
  • 签到天数: 10 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    50

    主题

    1万

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    14090
    最后登录
    2024-4-19
    发表于 2016-10-27 00:37:32 | 显示全部楼层 |阅读模式
    本帖最后由 党国特派员 于 2016-12-8 17:25 编辑

    拿到这个板子有一段时间了,这几天一直在研究这个,把这几天的成果汇报下。
    要红外分析仪,那必须要有红外的接收头,这个在网上买的HS0038一体化接收头塑封红外接收头红外接收管,这东西很便宜。
    0038一共三个引脚,脚位排列(正面):
    脚1:OUT
    脚2:GND
    脚3:VCC
    接收范围:12-13米
    电压范围:2.7V-5.5V
    QQ图片20161026225029.png
    红外协议我就不再这里罗嗦了,感兴趣的同学可以自己去百度。
    电路连接图就比较简单了,脚1去LPC824breakout的PIO0_18引脚,原理图如下:
    QQ图片20161027002511.png
    解码思想:
    使用PIO0_18外部中断,上升沿和下降沿里用定时器进行测量,测量出高低电平的时间,然后放入一个数组里。测量完成后,把数据通过串口发送给上位机,上位机收到数据后,根据测量时间画出红外的波形,然后分析出红外数据的值来。
    代码如下:
    1. #include "mbed.h"
    2. #include "main.h"

    3. //全局变量
    4. DigitalOut GreenLed(P0_16);
    5. DigitalOut RedLed(P0_15);
    6. InterruptIn InfraRed(P0_18);
    7. Timer IrTimer;
    8. Serial pc(USBTX,USBRX);

    9. IrDataType IrDt = {
    10.     .datBuffer1 = {0},
    11.     .datBuffer2 = {0},
    12.     .pRecvBuf = NULL,
    13.     .pSendBuf = NULL,
    14.     .i = 0
    15. };


    16. int main()
    17. {
    18.         //串口设置
    19.     pc.baud(460800);
    20.         //设置Timer.
    21.     IrTimer.reset();
    22.     IrTimer.start();
    23.         //设置红外的上升沿和下降沿中断
    24.     InfraRed.mode(PullNone);
    25.     InfraRed.fall(&_fall);
    26.     InfraRed.rise(&_rise);

    27.         //主循环
    28.     while(1)
    29.     {
    30.         if(IrDt.pSendBuf != NULL)
    31.         {
    32.             while(*IrDt.pSendBuf != 0x0)
    33.             {
    34.                 uint8_t* pp = (uint8_t*)IrDt.pSendBuf;
    35.                 pp += 3;
    36.                 pc.putc(*pp--);
    37.                 pc.putc(*pp--);
    38.                 pc.putc(*pp--);
    39.                 pc.putc(*pp--);

    40.                 *IrDt.pSendBuf = 0;
    41.                 IrDt.pSendBuf++;
    42.             }
    43.             IrDt.pSendBuf = NULL;
    44.         }
    45.                 //Blink LED
    46.         RED_LED_ON;
    47.         wait(0.1);
    48.         RED_LED_OFF;
    49.         wait(0.1);
    50.     }
    51. }


    52. //下降沿处理
    53. void _fall()
    54. {
    55.     //低电平最高位置1
    56.     uint32_t us = IrTimer.read_us() | 0x80000000;
    57.     IrTimer.reset();
    58.     //判断是否为有效的红外信号
    59.     if(us > (IRTIMEOUT|0x80000000))
    60.     {
    61.         if(IrDt.pRecvBuf == NULL)
    62.         {
    63.             IrDt.pRecvBuf = IrDt.datBuffer1;
    64.             IrDt.pSendBuf = NULL;
    65.         }
    66.         else if(IrDt.pRecvBuf == IrDt.datBuffer1)
    67.         {
    68.             IrDt.pRecvBuf = IrDt.datBuffer2;
    69.             IrDt.pSendBuf = IrDt.datBuffer1;
    70.         }
    71.         else
    72.         {
    73.             IrDt.pRecvBuf = IrDt.datBuffer1;
    74.             IrDt.pSendBuf = IrDt.datBuffer2;
    75.         }
    76.         IrDt.i = 0;
    77.     }

    78.     if(IrDt.i >= IRBUF_LEN)
    79.         IrDt.i = 0;
    80.     IrDt.pRecvBuf[IrDt.i] = us;
    81.     IrDt.i++;
    82.     GREEN_LED_ON;
    83. }

    84. //上升沿处理
    85. void _rise()
    86. {
    87.     uint32_t us = IrTimer.read_us() & 0x7FFFFFFF;
    88.     IrTimer.reset();
    89.     if(IrDt.i >= IRBUF_LEN)
    90.         IrDt.i=0;
    91.     IrDt.pRecvBuf[IrDt.i] = us;
    92.     IrDt.i++;
    93.     GREEN_LED_OFF;
    94. }

    复制代码
    下位机代码比较简单,就是发送数据的时候,有个字节序的问题。这个一定要注意。
    硬件电路连接好后,以上代码编译下载至单片机,用遥控试下,如果绿色LED闪烁,表明接收到信号,打开串口可以收到接收到的数据。
    今天就先到这里。上位机代码也在编写中。。。
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2019-2-14 16:49
  • 签到天数: 296 天

    连续签到: 1 天

    [LV.8]以坛为家I

    241

    主题

    2239

    帖子

    6

    金牌会员

    Rank: 6Rank: 6

    积分
    4473
    最后登录
    2020-4-14
    发表于 2016-10-27 07:03:32 | 显示全部楼层
    赞!很好的设计,期待下一步下一步,...
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-12-19 17:41
  • 签到天数: 15 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    1

    主题

    58

    帖子

    0

    注册会员

    Rank: 2

    积分
    117
    最后登录
    2016-12-20
    发表于 2016-10-27 07:53:52 | 显示全部楼层
    原来 mbed是这样的语法!完全屏蔽的寄存器,赞一个!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2020-6-18 08:45
  • 签到天数: 812 天

    连续签到: 1 天

    [LV.10]以坛为家III

    66

    主题

    4899

    帖子

    64

    金牌会员

    Rank: 6Rank: 6

    积分
    6321
    最后登录
    2025-7-15
    发表于 2016-10-27 08:08:44 | 显示全部楼层
    这个名字不对吧,“红外分析仪”,就是普通红外发射管,误导人
    开心
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2017-1-25 11:43
  • 签到天数: 28 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    1

    主题

    248

    帖子

    0

    高级会员

    Rank: 4

    积分
    660
    最后登录
    2020-2-12
    发表于 2016-10-27 08:17:41 | 显示全部楼层
    不错不错,赞一个!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2017-2-13 08:29
  • 签到天数: 20 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    531

    主题

    2048

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    210
    最后登录
    2018-8-14
    发表于 2016-10-27 09:08:36 | 显示全部楼层
    赞一个
    签到 签到
    回复

    使用道具 举报

  • TA的每日心情
    无聊
    2017-1-24 08:47
  • 签到天数: 49 天

    连续签到: 1 天

    [LV.5]常住居民I

    0

    主题

    524

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1267
    最后登录
    2017-4-19
    发表于 2016-10-27 09:40:59 | 显示全部楼层
    支持原创                           
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-10-28 08:29
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    3

    主题

    15

    帖子

    0

    新手上路

    Rank: 1

    积分
    47
    最后登录
    2016-10-31
    发表于 2016-10-27 09:49:42 | 显示全部楼层
    不错  激发了我的斗志
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-3-21 22:51
  • 签到天数: 369 天

    连续签到: 1 天

    [LV.9]以坛为家II

    7

    主题

    2716

    帖子

    7

    金牌会员

    Rank: 6Rank: 6

    积分
    1824
    最后登录
    2019-3-21
    发表于 2016-10-27 09:57:46 | 显示全部楼层
    这是C++写的么?
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-10-26 15:10
  • 签到天数: 269 天

    连续签到: 1 天

    [LV.8]以坛为家I

    0

    主题

    481

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1051
    最后登录
    2018-10-26
    发表于 2016-10-27 10:09:02 | 显示全部楼层
    支持原创!!
    哎...今天够累的,签到来了~
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-21 03:37 , Processed in 0.107441 second(s), 29 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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