【发布时间】:2016-04-09 09:44:10
【问题描述】:
在我的项目中,我需要 Atmega328p 和 BTM-222 之间的最高可用 UART 波特率,因此我必须使用 18.432.000 Mhz 晶体来实现 460.8 kbps 的无错误传输。
但同时我需要高精度的时间测量。 以前当我使用 16Mhz 晶体时,我使用的是这种方法: Timer0 带有 64/ 预分频器。所以增加计数器寄存器需要 4us。
(1/16000000)*64 = 4us
4us 是我的测量分辨率 溢出计数:每1024us发生一次计数器溢出
4us * 256 = 1024us
那么要接收在我们身上缩放的时间,有一个等式:
time(uint32) = current_counter * 4 + overvlow_counter * 1024
一切都很简单,因为 x4 和 x1024 相乘是位移。 我使用的是长整数,所以我可以测量的最长时间是
2^32 * 1ms = 71 分钟。
太棒了!
然后当我使用 18432000 MHz 晶体时 (1/18432000)*64 = 3,47(2) 所以它不能用我以前的代码来计算。
也许你有一些想法我能做什么? 我有一个:使用来自晶体的 1MHz timer0 外部时钟源。 我的问题是:如何将 1MHz 晶振连接到 T0 引脚并为 timer0 提供时钟源?
【问题讨论】:
标签: timer serial-port avr uart atmega