极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 18198|回复: 5

请教一个毫秒级计时的方式问题

[复制链接]
发表于 2016-10-7 16:17:37 | 显示全部楼层 |阅读模式
想做一个计时器,用于机器人巡线竞赛。
以前看过用于轮滑50米速滑的硬件,不过那个因为距离比较远,用了无线,我只要做个有线的就行了。

硬件方案是这样的:
触发就用激光发射,接收,镜子(这个是直道,起点和终点大概5米的样子。如果是环道,就直接发射和接收就行了)
显示是用4位数码管,显示精确到0.01秒就可以了。
用四片595,可以节省一点端口。如果考虑显示速度的话,可以整数用两片,小数用两片,毕竟整数更新得不快。

代码方案的话,就不是太清楚的了。
1、delay肯定不准吧。delayMicroseconds虽然是微秒级的,应该也是不准吧。
我觉得写595的时间要去掉。
如果是delay(1),写595刷新显示……应该是显示的时间会比实际的时间要短吧。

2、Millis(),和if的组合

3、用PulseIn()

4、用外中断

不知道哪个更好一些。

还有就是刷新数码管的显示,是直接用millis(),还是用if和millis组合好呢,还是用计时器中断呢?
回复

使用道具 举报

发表于 2016-10-8 09:20:04 | 显示全部楼层
用中断会精确一些,中断结合mills应该是可以的,另外,4位数码管,两片595就可以啊。delay都是软件延时,计时最好就是定时器,可以单独开个定时器也可以。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-8 18:53:51 | 显示全部楼层
164335413 发表于 2016-10-8 09:20
用中断会精确一些,中断结合mills应该是可以的,另外,4位数码管,两片595就可以啊。delay都是软件延时,计 ...

记得谁说过,中断的时候计时器是停止工作的。也就是说不管delay,millis,如果期间有过中断,那结果都是不准的。

那么问题来了,如果我又要使用中断,又要精确计时,该怎么办呢?
回复 支持 反对

使用道具 举报

发表于 2016-10-9 17:40:06 | 显示全部楼层
pumpitup 发表于 2016-10-8 18:53
记得谁说过,中断的时候计时器是停止工作的。也就是说不管delay,millis,如果期间有过中断,那结果都是不 ...

第一 毫秒级的要求,中断中只要没有delay或者较长的程序,对你没有影响,中断的执行都在毫秒级以下。
就算是340线的码盘在马达上旋转引起的中断,也不会影响太多。何况你的中断一点都不频繁。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-11 23:14:09 | 显示全部楼层
164335413 发表于 2016-10-9 17:40
第一 毫秒级的要求,中断中只要没有delay或者较长的程序,对你没有影响,中断的执行都在毫秒级以下。
就 ...

http://v.youku.com/v_show/id_XMTQwODcxMzQyOA==.html

好的,谢谢 。

其实我要做的是这个东东!
回复 支持 反对

使用道具 举报

发表于 2016-10-20 21:54:34 | 显示全部楼层
pumpitup 发表于 2016-10-11 23:14
http://v.youku.com/v_show/id_XMTQwODcxMzQyOA==.html

好的,谢谢 。

小车做的不错,小巧。如果单纯的计时,完全可以用定时器,精度10ms的 mills也可以。一般外部中断对计时的影响不会超过ms。
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-14 00:11 , Processed in 0.088802 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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