AVR 示例代码解释请

Posted

技术标签:

【中文标题】AVR 示例代码解释请【英文标题】:AVR Samplecode Explanation please 【发布时间】:2013-01-07 08:58:36 【问题描述】:

来自

http://www.electronicsplanet.ch/mikrocontroller/source-code/ATMega16/ATmega16-ADC-Interrupt.htm

我尝试初始化mega16的AD。它有效,但是行

ADCSRA |= (1<<ADEN)|(1<<ADPS2)    // Enable ADC, set prescaler to 16
         |(1<<ADIE);              // Fadc=Fcpu/prescaler=1000000/16=62.5kHz
                                  // Fadc should be between 50kHz and 200kHz
                                  // Enable ADC conversion complete interrupt

我不清楚。 1000000是从哪里来的,又是什么意思?

谢谢!

【问题讨论】:

【参考方案1】:

预分频器是指如何对主时钟进行分频,为 ADC 提供时钟。 ADC 的时钟由主时钟提供,带有一个可选的预分频器。在示例中,1000000 表示微控制器的主时钟频率为 1 MHz。如果预分频器设置为 16,则 ADC 的频率将为 1000000/16 = 62.5kHz。

当然,如果你的主时钟不同,你必须为ADC计算自己的频率。

【讨论】:

【参考方案2】:

1000000 Hz 是设备运行的时钟频率。

默认情况下,mega's 将运行在带有 clk/8 熔丝的内部 8 MHz RC 振荡器上,默认频率为 8MHz/8 = 1MHz

因此您看到 FCPU 为 1000000。

【讨论】:

以上是关于AVR 示例代码解释请的主要内容,如果未能解决你的问题,请参考以下文章

avr中的循环计时器功能?

Arduino AVR单片机通过threadhandler库跑多线程

为啥要在 AVR 编程中校准振荡器

AVR 程序必须总是以相对跳转指令开始吗?

用于 Atmel AVR 的车辆 GPS 跟踪

AVR - 高速中断驱动的 UART 代码不工作