[PIC®/AVR®/dsPIC®产品]

MCU 外设应用 – SMT外设测反应速度

[复制链接]
864|3
手机看帖
扫描二维码
随时随地手机跟帖
oxygenzz|  楼主 | 2019-4-10 18:05 | 显示全部楼层 |阅读模式
本帖最后由 oxygenzz 于 2019-10-28 11:02 编辑

据说正常人清醒状态下的反应时间是0.15s到0.4s,每个人的反应时间都不尽相同,有的快一些,有的慢一些。我们可以使用下面这个单片机实验,简单测量一下自己的反应时间。

外设应用实验:看到Led亮起,立即按下按键,使用SMT外设测量操作者的反应时间。

SMT 全称是Signal Measurement Timer信号测量定时器,是一款24 位计数器,在很多8位PIC单片机上都有配备。SMT 经正确配置后,既可以在没有CPU干预的情况下,自主的对数字信号各种参数进行测量,例如脉冲宽度、频率和占空比,渡越时间(Time Of Flight / TOF)等。SMT更多的使用信息,请参考这个帖子:https://bbs.21ic.com/icview-2736896-1-1.html

设计举例

1.     硬件采用 PIC16F18446 Curiosity Nano 。板上正好有一个LED灯和一个按键,分别连到RA2 和 RC2 上。


834605cadbd5999682.png

2.     使用的PIC16F18446 片上外设:TMR2,CLC1,SMT1, EUSART1


107845cadbdc46e63b.png

TMR2:产生周期为2s的定时信号,这个定时信号的正脉冲只有一个时钟周期宽度
CLC1:将TMR2信号2分频,产生周期4s,DutyCyle 为50%的周期方波信号。这个方波信号从RA2输出,用以驱动LED
SMT1:采用TOF(Time Of Flight)测量模式。TOF模式需要两个信号作为输入,一个是发送信号,一个是回波信号。在这个应用中,CLC1输出信号作为发送信号,按键(RC2)信号作为回波信号。SMT1用来检测CLC1的下降沿到RC2引脚按键信号下降沿之间的时间。
EUSART1 用来将测量结果上报。

3.      使用MCC对外设进行配置

693785cadbdf6e1c2f.png

346535cadbe02e9375.png

344795cadbe0c5e946.png

505585cadbe1795ddb.png

412925cadbe20eb7ce.png

852695cadbe29a522c.png

4.     在MCC生成的代码工程中,添加少量代码

红色为新添加或修改的代码



在smt1.c 中,

extern bool bTof; //外部变量,标示出是否测量到结果
void SMT1_PR_ACQ_ISR(void)
{

   // Disabling SMT1 period acquisition interrupt flag bit.
   PIR8bits.SMT1PRAIF = 0;
    bTof = true; //标志设为true
}

在 main.c中,

boolbTof = false;//定义bTof变量

voidmain (void)
{
    // initialize the device
    SYSTEM_Initialize();

    // When using interrupts, you need to setthe Global and Peripheral Interrupt Enable bits
    // Use the following macros to:

    // Enable the Global Interrupts
   INTERRUPT_GlobalInterruptEnable();

    // Enable the Peripheral Interrupts
   INTERRUPT_PeripheralInterruptEnable();

    // Disable the Global Interrupts
    //INTERRUPT_GlobalInterruptDisable();

    // Disable the Peripheral Interrupts
    //INTERRUPT_PeripheralInterruptDisable();

    while (1)
    {
        // Add your application code
        if(bTof){
            bTof =false;
            uint32_ttemp = SMT1_GetCapturedPeriod();
            temp = temp>> 11;
           printf("Your reaction time this round: %u ms \r\n", temp);
        }
    }
}



5.     测试

200805cadbeb884cbd.png


通道1:CLC1输出
通道2:按键信号


我们使用Data Visualizer 中的串口界面来接收测量结果信息:


18345cadbf169ec1f.png


6.    源代码






PIC16F18446_SMT_reaction_time.zip

263.86 KB

使用特权

评论回复
CoolSilicon| | 2019-4-11 08:12 | 显示全部楼层
好奇板+Data Visualizer 这个操作6啊~~~~666666666666666

使用特权

评论回复
mzb2012| | 2019-4-11 09:25 | 显示全部楼层
这个外设很强大

使用特权

评论回复
xuanhuanzi| | 2019-4-11 15:56 | 显示全部楼层
玩具。。。抢他器。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

46

主题

190

帖子

11

粉丝