Embedded 微控制器中的定时器/预分频器

Embedded 微控制器中的定时器/预分频器,embedded,microcontroller,Embedded,Microcontroller,也许这是个愚蠢的问题: 我有内部20兆赫振荡器,16位定时器和预分频器(1,2,4,8,16,32,64,128),我想产生1毫秒的延迟。我知道怎么做-(20000 000/1)/1000=20000->把这个值放到16位寄存器,它就工作了 对于预分频器2和4,我得到了相同的结果1ms-(20000/2)/1000=10000和(20000/4)/1000=5000 我的问题是如何确定使用哪个预分频器?也许,我必须选择预分频器4,因为这个值(5000)接近于0,我的计时器开始从0计数到5000。

也许这是个愚蠢的问题:

我有内部20兆赫振荡器,16位定时器和预分频器(1,2,4,8,16,32,64,128),我想产生1毫秒的延迟。我知道怎么做-(20000 000/1)/1000=20000->把这个值放到16位寄存器,它就工作了

对于预分频器2和4,我得到了相同的结果1ms-(20000/2)/1000=10000和(20000/4)/1000=5000

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


提前谢谢你

如果计数器不够大,无法满足所需的周期,则使用更高的预分频器。例如,如果您想要10毫秒的周期,则必须使用至少为4的预分频器来重新加载50000的值

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

如果由于in不是时钟周期的精确倍数,因此无法完全实现所需的周期,则使用较低的预分频器将使误差最小化

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


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

数学上,选择哪种组合没有区别

预分频器和计数器都是在硬件中实现的,您不会看到性能影响

然而,根据您的架构,您的预分频器可能会永久运行,并给您带来不准确的结果


您应该尽可能将最高频率(最低的预分频器、最精确的频率)发送到计时器/计数器。

为什么您认为接近零是一种优势?可以想象,较低的频率会导致功耗略微降低,但我怀疑它是否可以测量。结论是正确的,但我不遵循您的推理,较高的频率不会使其变得更精确,只要计算的重新加载值是一个整数。这是误导。首先你说没关系,然后你自相矛盾。例如,如果我使用的是外部8192KHz的精密振荡器,任何数量的良好的预分频器组合都可能有效,这取决于我试图达到的周期。归根结底,设计师必须考虑这一点。预分频器值和“最精确”[sic]@Clifford之间没有必要的关系:这取决于使用情况:假设您想从
main()
打开一个LED,持续时间固定。您不知道LED在时钟间隔内的确切时间点亮。在这里,您可以得到最多一个时钟周期的不准确性。@user5329483如果有那么严重,显然您应该使用计时器重新加载中断,而不是简单地轮询计数器。LED周期不是一个令人信服的论点,人类的视觉感知不会出现错误。短语“预分频器可能永久运行”需要注意,预分频器只是一个点击分隔器,而不是“运行”。无论哪种解释都是错误的或不清楚的。大多数Arduino用户并没有使用任何精确的外部振荡器,而是依赖于蹩脚的内部振荡器。。。所以你提到的微秒差异通常是学术性的。我敢打赌,在这里发帖的一千个用户中没有一个知道如何校准振荡器或连接10ppm-50ppm精密振荡器。当人们在几微秒的时间里争论不休时,我会发笑。请记住,其中一个预分频器可能会影响其他外围设备。一般来说,编写一个特殊程序只需几分钟即可完成组合并搜索出一个或多个最精确的组合(与某些MCU的波特率除数组合相同),您可能会找到并打印出具有相同总体精度的多个组合(数字不计算时钟的模拟质量)如果一个除数影响所有外设,你一定要考虑到这一点。如果有一个理想的时钟源,你需要123456789计数,一个组合可以得到123456700和123456750,只要它不会使其他外设变得更糟,你就可以使用后者。@TomServo是真的,但任务是这样的ion通常是关于微控制器的,而不是Arduino。除此之外,最好的实践应该被应用,以便在关键时刻成为一种习惯。例如,我工作的应用程序需要2ppm TCXO,与GNSS 1PPS同步精确到60ns。你可以笑,但有时它很重要。此外,它不是s暗示一个“微秒”的问题,这是一个漂移的问题。即使在下午2点,TDMA无线电应用程序在不到一分钟没有GNSS的情况下也无法满足其时隙同步要求synchronisation@MetodiAngelov是的,就是这么简单。TomServo说得对,它可能不会有什么不同,但这不是重点。一条规则/准则适用于所有人。不要错过要点我们发现,在这种情况下,预分频器的主要目的是缩放,以允许重新加载适应寄存器。