ATMEGA328P使用内部8MRC振荡器(2015-07-05 19:50:49)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ATMEGA328P使用内部8MRC振荡器(2015-07-05 19:50:49)相关的知识,希望对你有一定的参考价值。

参考技术A 计划做个蓝牙的接收机,用来控制四轴的飞控板。

使用的是ATMEAGE328P,不想再自己实现PWM了,它自带了6通道的PWM。为了能轻一点,没有设计外置晶振,打算用内部的。

板已经打好了,回来一对蓝牙控制板就吐血了,脚画错了。

没办法,只能先试试程序了。为了能让Ardunio开发环境支持,参照这个网页,在Ardunio 1.0.4下测试成功

http://forum.arduino.cc/index.php?topic=124879.0

首先用文本编辑器打开arduino-1.0.4\hardware\arduino\bootloaders\optiboot下的Makefile文件,在标准的atmega328p这段后面,加入下面这段配置:

# Standard atmega328, only at 38,400 baud for closer clock accuracy AND using 8Mhz internal RC oscillator

#

atmega328_384_8: TARGET = atmega328

atmega328_384_8: MCU_TARGET = atmega328p

atmega328_384_8: CFLAGS += '-DLED_START_FLASHES=3' '-DBAUD_RATE=38400'

atmega328_384_8: AVR_FREQ = 8000000L

atmega328_384_8: LDSECTIONS= -Wl,--section-start=.text=0x7e00 -Wl,--section-start=.version=0x7ffe

atmega328_384_8: $(PROGRAM)_atmega328_384_8.hex

atmega328_384_8: $(PROGRAM)_atmega328_384_8.lst

atmega328_384_8_isp: atmega328

atmega328_384_8_isp: TARGET = atmega328

atmega328_384_8_isp: MCU_TARGET = atmega328p

# 512 byte boot, SPIEN

atmega328_384_8_isp: HFUSE = DE

# Int. RC Osc. 8MHz, slowly rising power-65ms

atmega328_384_8_isp: LFUSE = E2

# 2.7V brownout

atmega328_384_8_isp: EFUSE = 05

atmega328_384_8_isp: isp

然后打开windows的控制台程序,进入hardware\arduino\bootloaders\optiboot文件下

在控制台中输入并回车

omakeatmega328_384_8

这个atmega328_384_8参数指的就是上面定义的支持内部8M RC的HEX文件。

编译完成后,atmega328_384_8.hex就生成好了。

现在用文本编辑器打开arduino-1.0.4\hardware\arduino下的board.txt文件,并添加下面这段文字

##############################################################

atmega328_384_8.name=ATmega328 Optiboot @ 38,400baud w/ 8MHz Int. RC Osc.

atmega328_384_8.upload.protocol=arduino

atmega328_384_8.upload.maximum_size=30720

atmega328_384_8.upload.speed=38400

atmega328_384_8.bootloader.low_fuses=0xE2

atmega328_384_8.bootloader.high_fuses=0xDE

atmega328_384_8.bootloader.extended_fuses=0x05

atmega328_384_8.bootloader.path=optiboot

atmega328_384_8.bootloader.file=optiboot_atmega328_384_8.hex

atmega328_384_8.bootloader.unlock_bits=0x3F

atmega328_384_8.bootloader.lock_bits=0x0F

atmega328_384_8.build.mcu=atmega328p

atmega328_384_8.build.f_cpu=8000000L

atmega328_384_8.build.core=arduino

atmega328_384_8.build.variant=standard

这样就定好了一个新的板子了。关掉ardunio IDE,再打开,板子列表里面就多了ATmega328 Optiboot @ 38,400baud w/ 8MHz Int. RC Osc.这一项。

选中后测试下烧入bootloader完全没有问题。

至于自己设计的板子,又得重打样了。

晶振为什么不封装进芯片内部?

关注、星标公众,不错过精彩内容

有一些电子设备需要频率高度稳定的交流信号,而LC振荡器稳定性较差,频率容易漂移(即产生的交流信号频率容易变化)。

在振荡器中采用一个特殊的元件——石英晶体,可以产生高度稳定的信号,这种采用石英晶体的振荡器称为晶体振荡器。

电子元器件的小型化趋势,有力促进了当下社会的发展进步,电子元器件越小,为主板节约的空间越大,因此,有人异想天开,如果能将晶振电路封装到IC芯片(如时钟芯片)内部将是多么wan美,就如同有源晶振在无源晶振的基础内置振动芯片,就无需外部的电容电阻等元器件了。

但实际出于各种原因,晶振并没有内置到IC芯片中。这究竟是为什么呢?

原因1、早些年,芯片的生产制作工艺也许还不能够将晶振做进芯片内部,但是现在可以了。这个问题主要还是实用性和成本决定的。

有源晶振.jpg

原因2、芯片和晶振的材料是不同的,芯片 (集成电路) 的材料是硅,而晶体则是石英 (二氧化硅),没法做在一起,但是可以封装在一起,目前已经可以实现了,但是成本就比较高了。

原因3、晶振一旦封装进芯片内部,频率也固定死了,想再更换频率的话,基本也是不可能的了,而放在外面, 就可以自由的更换晶振来给芯片提供不同的频率。

有人说,芯片内部有 PLL,管它晶振频率是多少,用 PLL 倍频/分频不就可以了,那么这有回到成本的问题上来了,100M 的晶振集成到芯片里, 但我用不了那么高的频率,我只想用 10M 的频率,那我为何要去买你集成了 100M 晶振的芯片呢,又贵又浪费。

我们通常所说的 "片内时钟", 是不是实际上片内根本没有晶振, 是有RC 振荡电路。


由图可以看出系统时钟的供给可以有3种方式,HSI,HSE,PLL。如果选用内部时钟作为系统时钟,其倍频达不到72Mhz,最多也就8Mhz/2*16 = 64Mhz。

如果使用内部RC振荡器而不使用外部晶振,请按照如下方法处理:

1)对于100脚或144脚的产品,OSC_IN应接地,OSC_OUT应悬空。

2)对于少于100脚的产品,有2种接法:

i)OSC_IN和OSC_OUT分别通过10K电阻接地。此方法可提高EMC性能。

ii)分别重映射OSC_IN和OSC_OUT至PD0和PD1,再配置PD0和PD1为推挽输出并输出'0'。此方法可以减小功耗并(相对上面i)节省2个外部电阻。

STM32时钟系统结构图

时钟是STM32单片机的脉搏,是单片机的驱动源。使用任何一个外设都必须打开相应的时钟。这样的好处就是,如果不使用一个外设的时候,就把它的时钟关掉,从而可以降低系统的功耗,达到节能,实现低功耗的效果。

STM32单片机的时钟可以由以下3个时钟源提供:

1、HSI:高速内部时钟信号STM32单片机内带的时钟 (8M频率), 精度较差。

2、HSE:高速外部时钟信号,精度高。

来源:i. HSE外部晶体/陶瓷谐振器(晶振);ii.HSE用户外部时钟         

3、LSE:低速外部晶体 32.768kHz 主要提供一个精确的时钟源 一般作为RTC时钟使用。

本文来自网络,如涉及作品版权问题,请与我联系删除。

—— The End ——

推荐好文  点击蓝色字体即可跳转

 没想到靠股市,我差点成功逆袭

☞ 分享一下嵌入式 HarmonyOS 的学习思路 

☞ 推荐一款我私藏已久的串口示波神器

☞ 一位老电子工程师的十年职场感悟

☞ 优雅地用宏实现环形缓冲区

欢迎转发、留言、点赞、分享给你的朋友,感谢您的支持!

长按识别二维码关注我

你点的每个好看,我都认真当成了喜欢

以上是关于ATMEGA328P使用内部8MRC振荡器(2015-07-05 19:50:49)的主要内容,如果未能解决你的问题,请参考以下文章

Arduino独立

Atmega328P 中的奇怪延迟行为

ATMEGA328P引脚定义图

328p芯片引脚间距

SPI 在 atmega328p 上不起作用

使用 UDRE 和 ATmega328P 的中断驱动 USART