原创 AVR单片机烧录和熔丝位的操作初步

2009-10-19 19:53 7847 7 8 分类: MCU/ 嵌入式
AVR单片机烧录和熔丝位的操作初步


AVR单片机由于接口丰富,功能齐全,性价比好,运用越来越广。一些朋友利用网上下载的程序烧录芯片时,由于对熔丝位的意义没搞清楚,而任意改动其设置,结果造成芯片被锁定,即不能用下载线对其读写了。(甚至会误认为芯片已坏)下面将以ATmega8(M8)为例,简单的介绍AVR单片机烧录相关知识和熔丝位的操作方法。
一。内部RC振荡器
玩51单片机的朋友知道,晶振为CPU提供时钟源,单片机没有时钟源是不可能运行的。但AVR则不同,没有晶振单片机照样运行。原因是其内部有1M,2M,4Mt和8M四种频率的RC振荡器。新购入的芯片内部RC振荡器出厂默认值为1MHz。也就是只要将程序烧录到M8中,程序即可运行。当然此时单片机时钟源由内部1MHzRC振荡器提供。
由于芯片工艺制作上的离散性,每个芯片内部RC振荡器频率有不同的误差。因此M8在只读存储器中存储了对内部RC振荡器进行校正的字节,每个芯片校正字节的参数是不同的。(当然在精度不高的场合,可以不作校正)
校正方法是:接好下载线,插入芯片后从烧录软件PonyPr0g2000菜单“命令”下的“读振荡器校正字节”即可中读取。如读取的字节为0xaa;我们只要在程序的初始化中加入
  
OSCCAL=0xaa; //校正内部RC振荡器频率,不同的芯片参数有差异
特别说明的是,使用内部RC振荡器出厂默认值为1MHz,硬件会自动将校正参数装入。只有系统在选用其它三个内部RC振荡器时,才需要将校正参数在程序中加入。
因此AVR单片机和51单片机不同的是:根据需要除可选用外部晶振作为时钟源。当然也可选用内部RC振荡器作为时钟源。

而如何设置是用内部时钟源还是用外部时钟源,AVR系列单片机是通过对熔丝位的操作来实现的。

二。熔丝位的操作  
 
熔丝位的操作主要为二个部分。熔丝位低字节(时钟及延时启动)和熔丝位高字节(引导),不能搞错,因为有些作品发布时不会附熔丝位设置图,往往只告知低字节和高字节是多少。请见下图,图中熔丝位低字节是oxe1,熔丝高字节是oxd9.有了这样二个数据,你可以方便地进行熔丝位的操作了。
其实熔丝位的操作十分简单,因为绝大部分是采用的出厂默认值。下图为M8熔丝位的设置界面。图中已用红线将其对应的功能标出。如:BODLEVEL--对应的是监测电压。你如果在BODLEVEL前的小方框内打钩,对应的功能说明区内就会有相应的说明。可以对每项都试一下,以便对熔丝位的操作功能有一定的了解。(可以不接ISP下载线只要打开软件就能试)

attachimg.gif 点击看大图
image.gif熔丝位.JPG (62.76 KB)

2008-11-16 09:56


在AVR的器件手册中,对熔丝位使用已编程(Programmed)和未编程(Unprogrammed)定义熔丝位的状态, “Unprogrammed”表示熔丝位的状态为1(禁止);“Programmed” 表示熔丝位的状态为0(允许)。因此,配置 熔丝位的过程实际上是“配置熔丝位成为未编程状态1或成为已编程状态0”。   新的AVR芯片在使用前,应先查看它的熔丝位的配置情况,建议在没有高压并行编程器的情况下,最好将各个熔丝位的状态记录备案。再根据实际需要进行熔丝位的配置。



对熔丝位低字节部分操作
由主要是时钟部分,启动延时二部分
启动延时部分可设置一中等启动时间或采用保留黙认值。要设置的是时钟部分 。
Atmega8有4个不同时钟来源:
外部晶振或谐振器;
外部低频率晶振;
外部RC振荡器或被校准的内部RC振荡器;
外部时钟来源。
由CKSEL0, CKSEL1, CKSEL2, CKSEL3组合决定。祥细配置见下表,
attachimg.gif 20081116_1ced2e9907c78c452b6ecaf9JNQKWsU9.jpg



其中 外RC振荡器用的不多,如图 图中: f="1/"(3RC)

attachimg.gif 20081116_7a58ce1123ad10171903d6VhElWsWb61.jpg


image.gifimage013.jpg (3.78 KB)

2008-11-16 20:03


对熔丝位高字节部分操作
这部分主要涉及对看门狗定时器,晶振幅度,EEPROM的操作,这不难理解,也容易设置。没涉及这些内容时可使用黙认值。


3.AVR芯片烧录和熔丝位的操作实例
以烧录一简单的程序为例:
将AVR下载线插入目标板上,上电,打开软件,在时钟延时启动和引导部分按读键,即可了解当前芯片熔丝位的配置状态。
如当前读出的熔丝位芯片时钟为内1MHz,现要写入芯片时钟的是内8MHz,操作如下图示。


attachimg.gif 点击看大图
image.gif熔丝2.JPG (114.59 KB)

2008-11-16 20:06


要说明的是:
如当前读出的熔丝位芯片时钟和现要写入芯片时钟一致时,可以不按《熔丝》键。直接写入。要更改芯片时钟源一定要按《熔丝》键,有的朋友在更换芯片程序写入后,发现显示出现显示闪烁等状态,不妨查一下是否更改了时钟设置。
在用选择外部时钟时,目标板一定要有晶振,因为你选择外部晶振,目标板上又不接晶振,程序无法写入运行,芯片必锁无疑!
    在学习熔丝位设置操作时,建议无论是用外晶振还是内RC振荡器,还是在你的目标板或实验板上加一晶振。这也是芯片防锁的方法。

结语:在学用AVR时,曾在熔丝位设置操作上做了些功课,以上仅供参考!更准确的还是以AVR数据手册为准。
PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户1488093 2012-9-17 22:34

很好,值的学习
相关推荐阅读
用户194887 2010-05-25 14:44
集成运放 单电源问题
集成运放单电源供电交流放大电路的问与答1、 问:双电源运放改单电源,为什么要取其中点电压供电?答:一般运放以双电源工作时是以((V+)+(V-))/2=0V 作为参考电压的,运放工作在中间的线性区。运...
用户194887 2009-12-06 21:35
AVR软件延时精确计算
和软件延时时间长短有关的因素有,单片机,晶振,延时语句,此处以for循环语句为例。首先,我们编写一个for循环的延时语句,如下:非关键代码省略。正常编译,按照常规方法打开JTAG下载并进入调试。我们要...
用户194887 2009-10-27 07:46
SPI协议简介
SPI协议简介一 SPI协议概括SPI,是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口。是Motorola首先在其MC68HCXX系列处理器上定义的。...
用户194887 2009-10-12 09:48
栈、堆栈和堆有什么区别?
栈、堆栈和堆有什么区别?  答:栈和堆栈都指的是Stack,它们与堆(heap)是不同的概念,要注意区分开来。  栈(stack)是限定仅在一端进行插入或删除的线性表。虽然这个限制减小了栈的灵活性,但...
用户194887 2009-09-29 14:49
UCOS学习笔记
别人的 感觉蛮好的 收藏 ◆ 任务,在UCOS-ii实时系统中,一个任务其实就是一个线程,该任务可以认为CPU完全属于它自己。UCOS-ii中的任务拥有自己的堆栈和CPU寄存器,并且赋予一定的优先级,...
EE直播间
更多
我要评论
1
7
关闭 站长推荐上一条 /3 下一条