OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5256|回复: 13

如何使用一个定时器,分别统计两个输入值的输入时间?

[复制链接]

12

主题

36

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2394
金钱
2394
注册时间
2016-4-14
在线时间
225 小时
发表于 2017-4-7 22:35:01 | 显示全部楼层 |阅读模式
5金钱
假设MCU只有一个100ms中断一次的定时器可以使用,现在有两个输入信号single1,single2同时进行输入,每个输入值的取值为0或1
现在的问题:
1.对于每个输入,当输入值为1时开始计时,统计10s内输入值为1的个数?
2.对于每个输入,检测到输入值为1时开始计时,10s后打印一句话至串口,同时停止计时。
对于上述两个问题,应该如何处理?不使用实时操作系统。


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

50

主题

1805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6662
金钱
6662
注册时间
2016-5-29
在线时间
910 小时
发表于 2017-4-7 23:06:57 | 显示全部楼层
回复

使用道具 举报

12

主题

36

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2394
金钱
2394
注册时间
2016-4-14
在线时间
225 小时
 楼主| 发表于 2017-4-8 14:24:05 | 显示全部楼层

那就慢慢说啊,真是一点思路都没有。
回复

使用道具 举报

17

主题

344

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1280
金钱
1280
注册时间
2013-12-14
在线时间
567 小时
发表于 2017-4-8 15:16:38 | 显示全部楼层
想了一下,楼主要检测的,其实不是10s内输入1的个数,应该是10s内signal出现上升沿的个数,这个检测方式,可以用状态机的方式。

感觉不好做,主要是因为100ms作为时钟节拍,误差太大,因为无法知道外部信号什么时候来,所以,实际检测到的signal上升沿的个数,应该在10s到10s+100ms,这个时间范围内,而不是10s,楼主有啥问题,可以继续跟帖讨论,我对这个题目,也挺感兴趣。
半导体->模拟电路->数字电路->单片机->汇编->C->操作系统->java
回复

使用道具 举报

50

主题

1805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6662
金钱
6662
注册时间
2016-5-29
在线时间
910 小时
发表于 2017-4-8 20:33:03 | 显示全部楼层
实际上还是很简单的.只是一两句话说不清楚.先开一个定时器,不管他是定时多少毫秒.反正想办法能计时就行了.精度100MS内. 两个信号中任何一个发出有效动作启动计时器.开始计时,在计时期间,分别累计两个信号的有效信号次数.(可能要用到外部中断功能).计时达到规定时间时.停止定时器计时,打印出 两个信号的 出现次数.这样子的程序应该算简单的.做不出来.对不起金牌会员这四个字呀.呵呵..
回复

使用道具 举报

12

主题

36

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2394
金钱
2394
注册时间
2016-4-14
在线时间
225 小时
 楼主| 发表于 2017-4-8 21:21:56 | 显示全部楼层
东北小辉辉 发表于 2017-4-8 15:16
想了一下,楼主要检测的,其实不是10s内输入1的个数,应该是10s内signal出现上升沿的个数,这个检测方式, ...

其实情况是这样:
一个串口会周期100ms发送两个信号值至MCU,一个信号值如果收到的值为1,那么开始计时,如果10s内这个信号值一直为1,那么输入一个控制信号;另外一个信号值如果收到的值为1,那么开始计时,统计5s内这个信号值为1的次数,并打印;
因为现在只有一个定时器可以使用,定时周期为100ms,统计允许有误差。这两个信号值是需要一直监控的,所以这个定时器不能由某个信号独占,
回复

使用道具 举报

12

主题

36

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2394
金钱
2394
注册时间
2016-4-14
在线时间
225 小时
 楼主| 发表于 2017-4-8 21:28:49 | 显示全部楼层
操作系统 发表于 2017-4-8 20:33
实际上还是很简单的.只是一两句话说不清楚.先开一个定时器,不管他是定时多少毫秒.反正想办法能计时就行了. ...

可能我问题描述的不是太清楚吧,我其实是想找到,如何在只是用一个定时器的情况下,满足多个功能对计时的需求,比如一个功能不需要时刻计时,只是在收到触发的情况下计时一段时间;另外一功能,需要利用定时器做周期的工作;还有一个功能,收到触发信号后开始倒计时。
回复

使用道具 举报

50

主题

1805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6662
金钱
6662
注册时间
2016-5-29
在线时间
910 小时
发表于 2017-4-9 11:03:56 | 显示全部楼层
用一个定时器,做出多个软件定时器,定时精确度1毫秒.你想怎么玩都行.
回复

使用道具 举报

12

主题

36

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2394
金钱
2394
注册时间
2016-4-14
在线时间
225 小时
 楼主| 发表于 2017-4-9 14:50:41 | 显示全部楼层
操作系统 发表于 2017-4-9 11:03
用一个定时器,做出多个软件定时器,定时精确度1毫秒.你想怎么玩都行.

应该怎么做?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-4-9 18:47:22 | 显示全部楼层
不知道你信号 的频率是多少,而且定时器只能定时100ms中断一次,使用限制比较大。另外,你定时器到底支不支持输入捕获?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-4-9 18:47:31 | 显示全部楼层
太多未知条件,很**。
回复

使用道具 举报

12

主题

36

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2394
金钱
2394
注册时间
2016-4-14
在线时间
225 小时
 楼主| 发表于 2017-4-9 19:06:42 | 显示全部楼层
正点原子 发表于 2017-4-9 18:47
不知道你信号 的频率是多少,而且定时器只能定时100ms中断一次,使用限制比较大。另外,你定时器到底支不支 ...

定时器是支持输入捕获的,其实我是想知道如何只使用一个定时器,做成可以满足其他功能需要的软件定时器。
回复

使用道具 举报

50

主题

1805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6662
金钱
6662
注册时间
2016-5-29
在线时间
910 小时
发表于 2017-4-10 00:05:26 | 显示全部楼层
本帖最后由 操作系统 于 2017-4-10 00:06 编辑

软定时器,很多的OS里面都会有的呀.
startOsTimer(1000,function,1);
意思是 定时 1000毫秒后,执行function,只执行一次.有了它,你再也不用愁定时器不够用了.我就是这么干的.呵呵..
回复

使用道具 举报

17

主题

344

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1280
金钱
1280
注册时间
2013-12-14
在线时间
567 小时
发表于 2017-4-10 08:42:00 | 显示全部楼层
楼上正解,一个硬件定时器可以模拟出多路软件定时器的,楼主没有用过的话,可以百度一下,这个问题并不难解决,不知道是否有思路了?
半导体->模拟电路->数字电路->单片机->汇编->C->操作系统->java
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-8-22 07:11

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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