首页 > 解决方案 > 微控制器中的定时器/预分频器

问题描述

也许这是一个愚蠢的问题:

我有内部 20 MHz 振荡器、16 位定时器和预分频器(1、2、4、8、16、32、64、128),我想产生 1 ms 延迟。我知道该怎么做 - (20 000 000 / 1) / 1000 = 20 000 -> 将此值放入 16 位寄存器,它就可以工作。

使用预分频器 2 和 4,我得到相同的结果 1ms - (20 000 000 / 2) / 1000 = 10 000 和 (20 000 000 / 4) / 1000 = 5 000

我的问题是如何确定使用哪个预分频器?也许,我必须选择预分频器 4,因为这个值 (5000) 更接近 0,我的计时器开始从 0 计数到 5000。如果我选​​择 10 000,计时器将计数 2 x 5000。

先感谢您 !

标签: embeddedmicrocontroller

解决方案


当计数器在所需时间段内不够大时,您可以使用更高的预分频器。例如,如果您想要 10 毫秒的周期,则必须使用至少4 的预分频器来获得 50000 的重载值。

导致重载小于 2 16的最小预分频器是您通常的目标。这为您提供了尽可能高的计数器分辨率,这对您将其用于 PWM 或输入捕获很有用。另一方面,如果您只是使用重新加载中断,则它并不重要。

如果您需要的周期由于 in 不是时钟周期的精确倍数而不能完全实现,那么使用较低的预分频器将最大限度地减少误差。

最后,如果你走得太低,你可能无法达到精确的时期。例如,对于您的 1ms 周期,64 的预分频器将导致重新加载 312.5,选择 312 会导致 ~1001.603ms 的周期或 313 的 ~998.403ms。

因此,通常重载值尽可能接近 65535,而不是您建议的零,这是您通常的目标。


推荐阅读