使用预分频器确定微控制器 (AVR) 中时钟周期的周期

Posted

技术标签:

【中文标题】使用预分频器确定微控制器 (AVR) 中时钟周期的周期【英文标题】:Use prescalor to determine the period of a clock cycle in microcontrollers (AVR) 【发布时间】:2015-05-26 01:16:07 【问题描述】:

我对 AVR 和微控制器编程很陌生。我不太了解 Timer/Counter 中的一些概念。今天看的时候发现了这个问题:

从 OC1A (PB1) 引脚生成一个占空比为 30% 的 1 KHz 高电平有效数字波形。使用轮询方法检查输出比较操作是否成功。时钟频率为 16 MHz。

给出的解决方案是这样的:

解决方案:将预分频器设置为 8,则时钟信号到 TCNT 的周期将为 0.5 微秒。信号高低的时钟周期数分别为600和1400。

我真的不明白为什么将预标量设置为 8 会使时钟信号的周期为 0.5 微秒?有人可以向我解释这里的数学吗?那么,考虑到这一点,为什么时钟周期数是 600 和 1400?这些数字从何而来?

我认为我不理解解决方案与不理解预分频器的确切概念有关。我的理解是说时钟频率是 16 MHz,如果预分频器是 8,那么输出频率就是 2 MHz。如果我错了,请纠正我。非常感谢!

【问题讨论】:

【参考方案1】:

是的,你是对的。 16MHz 上的 8 预分频器将频率降低到 2MHz。每个刻度将是 1/2,000,000 秒或 0.5 我们。

问题要求 1kHz 周期,打开 30%,关闭 70%。 1/1kHz 是 1 ms 或 1000 us 或 2000 个滴答声。其中 30% 为 600 个滴答,其余 70% 为 1400 个滴答。

【讨论】:

非常感谢您的回答!这可能是一个愚蠢的问题,但什么是滴答声?为什么 1000 us 等于 2000 滴答?谢谢! 时钟滴答是时钟将 TCNT 寄存器加一所需的时间。使用预标量,一个滴答需要 1/2 微秒。所以 1000 微秒需要 2000 个滴答声。

以上是关于使用预分频器确定微控制器 (AVR) 中时钟周期的周期的主要内容,如果未能解决你的问题,请参考以下文章

STM32的APB时钟预分频数到底是怎么确定的?AHB的频率到底是72MH还是啥是有啥决定的?

AVR 微控制器中的 USART 数字逻辑是啥?

STM32 中 PWM 的预分频器和周期值

是否可以在 AVR 微控制器中永久保存一些数据?

有没有办法处理 AVR/Arduino 微控制器中的堆内存碎片?

使用带有 AVR 微控制器的旋转编码器