一乐电子

一乐电子百科

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

搜索
查看: 35761|回复: 51
收起左侧

[avr] AVR单片机烧录和熔丝位的操作初步

  [复制链接]
发表于 2008-11-15 00:43 | 显示全部楼层 |阅读模式
    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系列单片机是通过对熔丝位的操作来实现的。

二。熔丝位的操作  
  AVR的芯片的烧录和熔丝位的操作,是由ISP下载线配合软件进行的,ISP下载线,十分简单,可以自制,我目前使用的冯老师制作的BBMV并口下载线,软件虽大多用PonyPr0g,但我和老冯一样还是偏爱晓奇老师的。全中文界面,操作提示,使用十分方便,祥见:
https://www.yleee.com.cn/forum.php?mod=viewthread&tid=1
    熔丝位的操作主要为二个部分。熔丝位低字节(时钟及延时启动)和熔丝位高字节(引导),不能搞错,因为有些作品发布时不会附熔丝位设置图,往往只告知低字节和高字节是多少。请见下图,图中熔丝位低字节是oxe1,熔丝高字节是oxd9.有了这样二个数据,你可以方便地进行熔丝位的操作了。
    其实熔丝位的操作十分简单,因为绝大部分是采用的出厂默认值。下图为M8熔丝位的设置界面。图中已用红线将其对应的功能标出。如:BODLEVEL--对应的是监测电压。你如果在BODLEVEL前的小方框内打钩,对应的功能说明区内就会有相应的说明。可以对每项都试一下,以便对熔丝位的操作功能有一定的了解。(可以不接ISP下载线只要打开软件就能试)

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

        
 楼主| 发表于 2008-11-16 20:03 | 显示全部楼层
对熔丝位低字节部分操作
由主要是时钟部分,启动延时二部分
启动延时部分可设置一中等启动时间或采用保留黙认值。要设置的是时钟部分 。
Atmega8有4个不同时钟来源:
外部晶振或谐振器;
外部低频率晶振;
外部RC振荡器或被校准的内部RC振荡器;
外部时钟来源。
由CKSEL0, CKSEL1, CKSEL2, CKSEL3组合决定。祥细配置见下表,
熔丝1.JPG



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

image013.jpg

对熔丝位高字节部分操作
这部分主要涉及对看门狗定时器,晶振幅度,EEPROM的操作,这不难理解,也容易设置。没涉及这些内容时可使用黙认值。
 楼主| 发表于 2008-11-16 20:06 | 显示全部楼层
3.AVR芯片烧录和熔丝位的操作实例
以烧录一简单的程序为例:
将AVR下载线插入目标板上,上电,打开软件,在时钟延时启动和引导部分按读键,即可了解当前芯片熔丝位的配置状态。
    如当前读出的熔丝位芯片时钟为内1MHz,现要写入芯片时钟的是内8MHz,操作如下图示。




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

结语:在学用AVR时,曾在熔丝位设置操作上做了些功课,以上仅供参考!更准确的还是以AVR数据手册为准。
发表于 2008-11-25 23:02 | 显示全部楼层
刚学AVR,看看
发表于 2009-1-11 17:09 | 显示全部楼层
好文章!受益匪浅!在写M8电子负载程序时遇到写入后不认芯片的问题,看了倪工的文章后才知道:用最简目标板操作时,当遇到选择外部时钟时,目标板一定要有晶振,不然芯片必锁无疑。呵呵,问题解决了。谢谢倪工!
 楼主| 发表于 2009-1-11 18:15 | 显示全部楼层
<P>
原帖由 <I>zhangym</I> 于 2009-1-11 17:09 发表 <A href="https://www.yleee.com.cn/redirect.php?goto=findpost&amp;pid=2877&amp;ptid=18" target=_blank><IMG alt="" src="https://www.yleee.com.cn/images/common/back.gif" border=0></A> 好文章!受益匪浅!在写M8电子负载程序时遇到写入后不认芯片的问题,看了倪工的文章后才知道:用最简目标板操作时,当遇到选择外部时钟时,目标板一定要有晶振,不然芯片必锁无疑。呵呵,问题解决了。谢谢倪工!
</P>
<P>&nbsp;</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 初次烧录AVR,目标板还是加一晶振为好!</P>
发表于 2009-1-11 21:30 | 显示全部楼层
学习了
发表于 2009-3-28 12:22 | 显示全部楼层
谢谢楼主,正在学习AVR,受益非浅!!!!!!!!!
发表于 2009-3-29 00:16 | 显示全部楼层
太感谢了,你真是一位好老师!
发表于 2009-3-30 09:08 | 显示全部楼层
深入浅出,受益非浅

本版积分规则

QQ|一淘宝店|手机版|商店|电子DIY套件|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2024-4-26 21:56 , Processed in 0.069932 second(s), 50 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表