在我的项目中,我需要在Atmega328p和BTM-222之间获得最高可用的UART波特率,因此我必须使用18.432.000 Mhz晶体来实现460.8 kbps的传输而不会出现错误。
但同时我需要高精度的时间测量。 以前当我使用16Mhz水晶时,我使用的是这种方法: Timer0带64位/预分频器。所以花了4us来进行计数器寄存器。
(1/16000000)* 64 = 4us
4us是我的测量分辨率 溢出计数:计数器溢出每1024us
4us * 256 = 1024us
然后接收在我们中缩放的时间有等式:
时间(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提供时钟源?