youkebing 发表于 2020-9-25 10:51:12

请教在stc中如何做到信号的精确延时?

这几天用了下stc觉得不错。
就想stc能否做一点特殊的信号处理,比如下面这个图:

我希望信号精确的延时2个节拍,用stc自带的比较器可以实现这个需要,但是比较器被我用掉了,还其他的方法可以实现吗?

饭桶 发表于 2020-9-25 11:08:41

中断定时器随便搞啊

youkebing 发表于 2020-9-25 11:16:28

饭桶 发表于 2020-9-25 11:08
中断定时器随便搞啊

比如程序中关一下中断(临界区),或者多个中断同时发生的时候,这个时候响应中断的时间其实很难保证,没法实现我要的那个功能

woshigeshuai 发表于 2020-9-25 11:22:39

加个CPLD?

wqsjob 发表于 2020-9-25 11:28:31

循环加状态机

youkebing 发表于 2020-9-25 11:33:44

woshigeshuai 发表于 2020-9-25 11:22
加个CPLD?

这个成本也太高了吧

youkebing 发表于 2020-9-25 11:34:31

wqsjob 发表于 2020-9-25 11:28
循环加状态机

如果单片机只做这一件事情,是可以的,但是我还要做其他事情啊

autolog 发表于 2020-9-25 11:37:30

多搞几个74非门串联

wqsjob 发表于 2020-9-25 11:42:40

youkebing 发表于 2020-9-25 11:34
如果单片机只做这一件事情,是可以的,但是我还要做其他事情啊

呵呵,不是有break吗?
节拍是多少?1us,1ms?1ns?

youkebing 发表于 2020-9-25 11:56:18

autolog 发表于 2020-9-25 11:37
多搞几个74非门串联

加硬件就不考虑了

youkebing 发表于 2020-9-25 11:57:07

wqsjob 发表于 2020-9-25 11:42
呵呵,不是有break吗?
节拍是多少?1us,1ms?1ns?

算100ns吧

lzg 发表于 2020-9-25 12:14:51

那你单片机真的会忙不过来

wqsjob 发表于 2020-9-25 12:15:45

youkebing 发表于 2020-9-25 11:57
算100ns吧

要实时检测?还是偶尔用一下?也就是信号发生的时间是受控的还是不受控的?

100ns基本上是STC的一个周期了,实际上STC有不少指令并不是一个周期能完成的。如果实时检测并按照你图的要求延时,不管信号频率多低,你是根本没办法做其他事情的。比较器如果能实现,不如就用比较器靠谱点。

或者可以把STC的频率做到很高,用外部中断边沿触发,汇编写代码,或许可以实现。如果频率低,进入中断的时间,可能会超过2个节拍了。


如果信号是受控的,比如说我开了灯,然后检测光电开关是不是有信号,关了灯,检测光电开关是不是没信号了,这种应用,随便写写就行了。

ps:楼主说比较器能实现?是用比较器中断?如果是,那也是不能实现的。响应中断就已经不满足你这个延时的要求了。

takashiki 发表于 2020-9-25 12:18:06

2个节拍,是指两个系统时钟节拍是吧。那软件不用考虑了,基本上无法实现,你查下STC的IO指令,输入、输出就不止2T了,进出中断都好多T了,而且你不考虑硬件方案,确定不是开玩笑?

youkebing 发表于 2020-9-25 12:42:14

wqsjob 发表于 2020-9-25 12:15
要实时检测?还是偶尔用一下?也就是信号发生的时间是受控的还是不受控的?

100ns基本上是STC的一个周期 ...

这是比较器的图,你看红框里,理论上应该可以达到我的要求

youkebing 发表于 2020-9-25 12:42:56

takashiki 发表于 2020-9-25 12:18
2个节拍,是指两个系统时钟节拍是吧。那软件不用考虑了,基本上无法实现,你查下STC的IO指令,输入、输出就 ...

你看我15楼的图

youkebing 发表于 2020-9-25 12:43:42

autolog 发表于 2020-9-25 11:37
多搞几个74非门串联

非门串联这个延迟不确定

chenchaoting 发表于 2020-9-25 12:58:18

youkebing 发表于 2020-9-25 12:42
这是比较器的图,你看红框里,理论上应该可以达到我的要求

哪款型号

modbus 发表于 2020-9-25 13:05:33

youkebing 发表于 2020-9-25 11:57
算100ns吧

100ns就不要指望用软件实现了

youkebing 发表于 2020-9-25 13:08:47

chenchaoting 发表于 2020-9-25 12:58
哪款型号

我用的是stc15w404as

youkebing 发表于 2020-9-25 13:09:26

modbus 发表于 2020-9-25 13:05
100ns就不要指望用软件实现了

软件应该是没法处理

cloudboy 发表于 2020-9-25 15:07:09

看图标是玩XMOS的,这种精确的百ns操作还是放过MCU吧{:lol:}

sweet_136 发表于 2020-9-25 15:22:12

cloudboy 发表于 2020-9-25 15:07
看图标是玩XMOS的,这种精确的百ns操作还是放过MCU吧

同意.....

modbus 发表于 2020-9-25 17:38:44

用STC8的中断应该可以,进中断3个周期,中断里把OUT取反1个周期,总共需要4个时钟周期,肯定要用汇编了,中断入口里直接放OUT取反指令

modbus 发表于 2020-9-25 17:42:37

我以前用STC8做过一个可重触发的单稳态触发器就是这样搞的,要求输入到输出的延时越短越好

bailangcn 发表于 2020-9-25 17:53:45

nop 哈哈哈哈

wqsjob 发表于 2020-9-25 18:13:50

youkebing 发表于 2020-9-25 12:42
这是比较器的图,你看红框里,理论上应该可以达到我的要求

前边还有个100ns的滤波呢。

youkebing 发表于 2020-9-25 18:26:00

modbus 发表于 2020-9-25 17:38
用STC8的中断应该可以,进中断3个周期,中断里把OUT取反1个周期,总共需要4个时钟周期,肯定要用汇编了,中 ...

这样不行,因为还有其它中断

youkebing 发表于 2020-9-25 18:26:37

wqsjob 发表于 2020-9-25 18:13
前边还有个100ns的滤波呢。

那个可以关闭的

modbus 发表于 2020-9-25 18:52:51

youkebing 发表于 2020-9-25 18:26
这样不行,因为还有其它中断

把这个中断设置为最高优先级,如果其他中断也需要最高优先级,那你真是难为这单片机了

xuekcd 发表于 2020-9-25 19:54:34

多个定时器可以并联可以串联,可以同步触发……总有一种组合可以实现你的梦想:)

youkebing 发表于 2020-9-25 20:06:33

modbus 发表于 2020-9-25 18:52
把这个中断设置为最高优先级,如果其他中断也需要最高优先级,那你真是难为这单片机了 ...

我的倾向还是单片机里的硬件模块来实现

古调独弹 发表于 2020-9-26 00:25:36

虽然硬件不足软件补,但感觉这种需求软件是没得补,节拍太短了软件又要做其他事根本处理不过来

小李非刀 发表于 2020-9-27 16:37:22

使用定时器或PCA,就可以实现精确定时,你的晶振有多准,定时就有多准。比如我用一个温补有源晶振,额定0.1ppm,标定后1年误差在0.5ppm,以此频率做MCU的主时钟,通过PCA输出精确的秒脉冲做门控信号控制定时器对外计数,则就是频率计,其精度就是晶振的精度+-1字。如果用这个晶振做电子钟,则年误差不会超过16秒。

zhugean 发表于 2020-9-27 16:45:43

youkebing 发表于 2020-9-25 11:34
如果单片机只做这一件事情,是可以的,但是我还要做其他事情啊

中断优先级开得最高

youkebing 发表于 2020-9-28 08:43:25

小李非刀 发表于 2020-9-27 16:37
使用定时器或PCA,就可以实现精确定时,你的晶振有多准,定时就有多准。比如我用一个温补有源晶振,额定0.1 ...

我不是定时,我希望把信号延时
页: [1]
查看完整版本: 请教在stc中如何做到信号的精确延时?