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 ——
推荐好文 点击蓝色字体即可跳转
欢迎转发、留言、点赞、分享给你的朋友,感谢您的支持!
长按识别二维码关注我
你点的每个好看,我都认真当成了喜欢
以上是关于ATMEGA328P使用内部8MRC振荡器(2015-07-05 19:50:49)的主要内容,如果未能解决你的问题,请参考以下文章