最简单的ATMEGA8熔丝恢复器电路和PCB图
受论坛上那么多高压编程器帖子的启发,我精简了以前slyt的电路,简化成上电恢复M8熔丝位的版本,硬件电路图和PCB图如下:http://www.ouravr.com/bbs/bbs_content.jsp?bbs_sn=729072&bbs_page_no=1&search_mode=4&search_text=eguy&bbs_id=9999
由于本人不太熟悉烧写方面的编程,如果有高手能根据此图编写出一个HEX代码(底层文件),本熔丝恢复器简单易做,看了电路图您能发现在实验板上搭建也是相当容易的。本电路去掉了和电脑连接实现电脑操作的串口电路,原因如下:
1.以前论坛上爱好者给的电路大部分是有串口通讯,搭建起来比较麻烦,实现起来需要底层和电脑软件的密切配合,烧友在实际操作中成功率比较低,经常会出现通讯问题。
2.目前ISP方式的编程电路相当简单,软件也比较成熟,但是高压编程方面的资料就比较少,实际只要熔丝位恢复以后,使用ISP方式编程就可以了,没有必要一定要高压编程
http://cache.amobbs.com/bbs_upload782111/files_14/ourdev_442229.gif
最简单的ATMEGA8熔丝恢复器电路和PCB图 (原文件名:最简M8高压恢复器.gif) 是不是很简单呀 所以高手都不屑一顾? 好东西呀,要是外挂一片EEPROM或DataFlash,就能做脱机编程器了。 好~!~!
我就是想要这个~!~! 等高手~@!~! 装多两个EEPROM座还可以做存储器复制器! 才发现没有程序的!!!楼主去看那个用51恢复AVR的吧!电路就比你的多了一个按钮! 6楼的贴个连接呀 还是我搞算了!! ;***********************ATmega16(L)简易并行编程器**********************/
;说明:
; 用于没有烧写ATmega16并行编程器的朋友,初用ATmega16的工程师在串行
;编程时写错熔丝位,及加密位,造成不能再应用串行编程,构成不便,没并行
;编程将无法再使用,做了一个简易的并行编程器(很简单,用万能板搭焊即可),
;将的芯片加密位及熔丝恢复出厂默认值及恢复串行在线编程功能(ISP)。
;**********************************************************************
;使用说明:
; 本电路有1按键(key),执行1次将芯片加密位擦除,都要按下按键1秒钟才
;执行操作,可将at89S51的P3.1(TXD)连接1只NPN三极管(9014)、2支电阻作为
;P3.1(TXD)输出5V反相器,连接PC的RS-232接收端(RXD),就可通过在PC执行1
;个串口调试软件SSCOM V3.0,设置波特率(2400、8、1、N),查看到之前的加
;密位及熔丝高低字节内容,以及执行了加密位擦除之后的加密位及熔丝高低字
;节内容(FF 99 E1)。
;//////////////////////////////////////////////////////////////
;主控at89S51,晶振6M
;P0口编程数据输入输出 ,;P2编程控制
;/*******************AT89C51与ATmega16(L)各脚连接********************/
;P0.0~7 <-->PB.0~PB.7
;P0.0~7 要连接4.7K x 8 上拉电阻到VCC (要注意:没有上拉电阻本电路是不能工作)
;********************************************************************
;P2.0-PD7(PAGEL)
;P2.1-PD6(XA1)
;P2.2-PD5(XA0)
;P2.3-PD4(BS1)
;P2.4-PD3(_WR)
;P2.5-PD2(_OE)
;P2.6-PD1(RDY/BSY)
;P2.7-(XTAL1)
;P1.0-PA0(BS2)
;-----------------------------------------
;P1.1---LED 指示运行状态 (p1.1=0时 LED 亮)
;P1.2---控制reset脚的12v电压(p1.2=1时输出12v,0时没有电压输出)
;P1.3---连接1个按键(key)的1接点,按键另1接点连接到GND
;////////////////////////////////////////////////////////////////////
;若不用不清楚请参考datesheet;
;制作成功后你就狂烧熔丝和加密位吧!!!!!!!!!!!!!!!!!!
PAGEL BIT P2.0 ;PD7 flash和E2PROM页装入
XA1 BIT P2.1 ;PD6 XTAL编程动作位1
XA0 BIT P2.2 ;PD5 XTAL编程动作位0
BS1 BIT P2.3 ;PD4 字节选择1(0:选低字节,1:选高字节)
_WR BIT P2.4 ;PD3 写脉冲
_OE BIT P2.5 ;PD2 输出允许(低有效)
RDY_BSY BIT P2.6 ;PD1 0:器件正在编程,1:器件就绪等待命令
XTAL1 BIT P2.7 ;晶振输入端
;-----------------------------------------------------
BS2 BIT P1.0 ;PA0 字节选择2(0:选低字节,1:选高字节)
;-----------------------------------------------------
LAMP BIT P1.1 ;编程指示灯
_RST_12V BIT P1.2 ;复位端12V电压
KEY BIT P1.3 ;执行按键
CR EQU 0DH ;CARRIAGE RETURN
LF EQU 0AH ;LINE FEED
;****************************************************************************
ORG0000H
AJMP MAIN
ORG 0030H
MAIN:
MOV SP,#70H
MOV P0,#0FFH ;初始化P0,P1,P2
MOV P1,#11111000B ;P1.7~4=1,KEY=1,_RST_12V=0,LED=0V.BS2=0
MOV P2,#01110000B ;XTAL1=0,RDY_BSY=1,_OE=1,_WR =1,(BS1,XA0,XA1,PAGEL=0)
ACALL INT_SIO ;初始化SIO
LOOP:
CPL LAMP
ACALL DELAY_1S
JB KEY,LOOP
JNB KEY,$
SETB LAMP
ACALL PROG_ST ;进入并行编程模式
ACALL READ_FUSE ;读之前熔丝字节及经过TXD将内容发送到PC RS-232
ACALL CHIP_ERASE ;擦除加密位,存储器
ACALL WRITE_FUSE ;写熔丝字节
ACALL READ_FUSE ;读之后熔丝字节及经过TXD将内容发送到PC RS-232
CLR_RST_12V
CLRLAMP
ACALL SIO_CR_LF
AJMP LOOP
;**********************************
;进入并行编程模式子程序
;**********************************
PROG_ST:
MOV R1,#6
PLS:
SETB XTAL1 ;产生6个的XTAL1时钟脉冲触发
CLR XTAL1
DJNZ R1,PLS
ANL P2,#01110000B ;PAGEL,XTAL1,XA1,XA0,BS1==0
NOP ;延时大于100ns
SETB _RST_12V ;RST加12v电压
NOP ;延时大于100ns
RET
;**********************************
;擦除加密位、存储器子程序
;***********************************
CHIP_ERASE:
CLR LAMP ;指示正忙
SETB XA1 ;设置XA1,XA0="10"允许装入命令
CLRXA0
CLR BS1
CLR BS2
MOV P0,#80H ;送出芯片擦除命令
SETB XTAL1
CLR XTAL1 ;输入正脉冲将命令装入芯片
NOP
SETB _WR
CLR _WR
SETB _WR ;输入一个负脉冲,开始执行命令擦除芯片
JB RDY_BSY,$ ;等待RDY/BSY变高,表示擦除完成
JNB RDY_BSY,$
ACALL DELAY_106US
SETB LAMP ;指示空闲
ACALL DELAY_106US
RET
;///////////////写熔丝高低字节子程序////////////////
WRITE_FUSE:
CLR LAMP ;指示正忙
SETB XA1 ;设置XA1,XA0="10"允许装入命令
CLRXA0
CLR BS1
CLR BS2
MOV P0,#40H ;送出写熔丝命令
SETB XTAL1
CLR XTAL1 ;XTAL1输入正脉冲将命令装入芯片
CLR XA1 ;设置XA1,XA0="01"允许装入数据
SETB XA0
NOP
CLR BS1 ;BS1,BS2="00"表示熔丝低字节“10”表示高字节
CLR BS2
MOV P0,#0E1H ;DOBLEVEL=1,BODEN=1,SUT1=1,SUT1=0,SKSEL3=0,
;SKSEL2=0,SKSEL1=0,SKSEL0=1(工厂设定值)
SETB XTAL1
CLR XTAL1 ;XTAL1输入正脉冲数据装入芯片
SETB _WR
CLR _WR
SETB _WR ;_WR输入一个负脉冲,开始执行命令
JB RDY_BSY,$ ;等待RDY/BSY变高,表示完成
JNB RDY_BSY,$
ACALL DELAY_106US
;/*********写高字节**********/
MOV P0,#99H ;'99'为出厂设定值
SETB XTAL1
CLR XTAL1 ;XTAL1输入正脉冲数据装入芯片
SETB BS1
SETB _WR
CLR _WR
SETB _WR ;_WR输入一个负脉冲,开始执行命令
JB RDY_BSY,$ ;等待RDY/BSY变高,表示完成
JNB RDY_BSY,$
CLR BS1
ACALL DELAY_106US
SETB LAMP ;指示空闲
RET
;/**********读熔丝及加密位************/
READ_FUSE:
CLR LAMP ;指示正忙
SETB XA1 ;设置XA1,XA0="10"允许装入命令
CLR XA0
CLR BS1
CLR BS2
MOV P0,#04H ;送出读熔丝和锁定位命令
CLR XTAL1
SETB XTAL1
CLR XTAL1 ;XTAL1输入正脉冲将命令装入芯片
NOP
CLR _OE
CLR BS2 ;读熔丝低字节
CLR BS1
MOV P0,#0FFH
MOV R7,P0
SETB BS2 ;读熔丝高字节
SETB BS1
MOV R6,P0
CLR BS2 ;读加密位
MOV R5,P0
SETB _OE
SETB LAMP
ACALL SIO_TO_PC
RET
;------------------
DELAY_1S:
MOV R7,#1
DELAY11:
MOV R6,#0FFH
DELAY12:
MOV R5,#0FFH
DJNZ R5,$
DJNZ R6,DELAY12
DJNZ R7,DELAY11
RET
;-------------------
DELAY_106US:
MOV R5,#18H
DJNZ R5,$
RET
;************************************************************
;将R5 R6 R7 的内容经 TXD 发送到 PC 子程序
;*************************************************************
SIO_TO_PC:
MOV A,R5 ;加密锁定字节
SWAP A
ACALL HEX_ASC
ACALL SIO_SEND_OUT ;经TXD发送加密锁定字节的高4BIT
MOV A,R5
ACALL HEX_ASC
ACALL SIO_SEND_OUT ;经TXD发送加密锁定字节的低4BIT
MOV A,#' '
ACALL SIO_SEND_OUT ;经TXD发送 空格
MOV A,R6 ;熔丝高字节
SWAP A
ACALL HEX_ASC
ACALL SIO_SEND_OUT ;经TXD发送熔丝高字节的高4BIT
MOV A,R6
ACALL HEX_ASC
ACALL SIO_SEND_OUT ;经TXD发送熔丝高字节的低4BIT
MOV A,R7 ;熔丝低字节
SWAP A
ACALL HEX_ASC
ACALL SIO_SEND_OUT ;经TXD发送熔丝低字节的高4BIT
MOV A,R7
ACALL HEX_ASC
ACALL SIO_SEND_OUT ;经TXD发送熔丝低字节的低4BIT
MOV A,#CR
ACALL SIO_SEND_OUT
MOV A,#LF
ACALL SIO_SEND_OUT
RET
;*****************************************
;初始化SIO 波特率 2400 (晶振6MHz)
;*****************************************
INT_SIO:
ORL PCON,#10000000B ;SMOD=1 T1
MOV TMOD,#00100000B
MOV TH1,#256-13 ;设置波特率为2400
MOV TL1,#256-13 ;6.MHZ石英/12/16/13=2400
SETB TR1 ;启动定时器T1 TR1=1
ORL SCON,#01000000B ;SET SIO MODE 1
;******************************************
SIO_CR_LF:
MOV A,#CR
ACALL SIO_SEND_OUT
MOV A,#LF
ACALL SIO_SEND_OUT
RET
;*****************************************
;* SEND ONE DATA SUBROUTINE *
;* USE A FOR SEND DATA *
;*****************************************
SIO_SEND_OUT:
MOV SBUF,A
JNB TI,$
CLR TI
RET
;*****************************************
;* INVERT HEX TO ASCII SUBROUTINE *
;* INPUT HEX LOW 4BIT TO A *
;* OUTPUT ASCII FORM A *
;*****************************************
HEX_ASC:
ANL A,#00001111B
INC A
MOVC A,@A+PC
RET
DB '0123456789ABCDEF'
END 在某些情况 目标芯片的VCC需要受控 才能进行高压编程
具体情况是
当RST引脚被用作普通IO口时,需要特定的时序才能进行编程,他的VCC需要受到控制。可关可开。
楼主的电路没有这样的电路。 小松说的对 领教了 我明天修改下 期待 那个51的恢复电路我做过!
我用了一个S52和一个M8还有M16!
熔丝我把程序里的熔丝改成了外部晶振的! bbsniua 鹏
能否把电路图和HEX文件发上来呢?还有小松说的VCC控制问题怎么解决的呢? 哪有什么VCC控制的?
这里只控制复位的12V!
复位还原的原理是用高压编程器的! 放图了!
http://cache.amobbs.com/bbs_upload782111/files_14/ourdev_442382.jpg
(原文件名:51主控电路.jpg)
http://cache.amobbs.com/bbs_upload782111/files_14/ourdev_442383.jpg
(原文件名:供电.jpg.jpg)
http://cache.amobbs.com/bbs_upload782111/files_14/ourdev_442384.jpg
(原文件名:M8的接线.jpg.jpg)
http://cache.amobbs.com/bbs_upload782111/files_14/ourdev_442385.jpg
(原文件名:M16的接线.jpg)
http://cache.amobbs.com/bbs_upload782111/files_14/ourdev_442386.jpg
(原文件名:复位控制和状态指示.jpg)
点击此处下载 ourdev_442387.rar(文件大小:504字节) (原文件名:51.rar)
主控IC用AT89S52!
M16的恢复熔丝的固件(编译好的),参照编程器上的!
不同的avr编程线图
http://cache.amobbs.com/bbs_upload782111/files_14/ourdev_442389.jpg
(原文件名:不同的avr编程线图.jpg) M8的恢复熔丝的固件有吗?
这个电路稍微复杂了点,12V的控制电路稍微多了点元件,还要晶体和复位电路,不过能达到脱机恢复的目的的确是不错.. 还有另一个编译好的,熔丝是EF 99 FF,设置为外部晶振的熔丝固件!
http://www.ouravr.com/bbs/bbs_content.jsp?bbs_sn=13162&bbs_page_no=1&search_mode=4&search_text=bbsniua&bbs_id=9999
在47楼,还有我的熔丝修改例子,经过修改可以适合其它AVR单片机的恢复! 明天研究下你的电路,搞的简单点,我只需要恢复M8 12V控制的可以用一个光耦做的!
http://cache.amobbs.com/bbs_upload782111/files_14/ourdev_442394.jpg
(原文件名:光耦控制的12V电路.jpg) mark下 电路中只要把相同名字的线连起来就可以了!
刚开始想用线直接连的!后来看了效果一下子晕了!
建议把它分开看简单点! 谁会汇编的话把那个控制12V的搞成低电平时控制输出12V就可以用一个三极管做了!
还有那个熔丝的修改要是能用按键切换就好了!
用数码管显示更好!
接上电就开始读取熔丝,
读完了在数码管上显示,
没按下中间的键前不闪,
短按中间的键换字,并且在闪,
按上面按键是加数字,
按下面按键是减数字,
最后长按中间的键确定写入熔丝,
写完熔丝后不闪,并且一直稳定显示当前熔丝!
http://cache.amobbs.com/bbs_upload782111/files_14/ourdev_442408.jpg
(原文件名:51主控电路.jpg)
http://cache.amobbs.com/bbs_upload782111/files_14/ourdev_442409.jpg
(原文件名:显示电路.jpg) 好像意义不大!!./emotion/em003.gif 可以参考这个:http://www.microcontrollerprog.com/ 25楼的这个不是开源的 连电路图都没有 无法自己做自己做 没有意义呀。。 根据bbsniua 鹏的电路图重新绘制的AT89C51主控的一键恢复ATMEGA8熔丝位,如可能请bbsniua 鹏贴个恢复ATMEGA8的底层上来
http://cache.amobbs.com/bbs_upload782111/files_14/ourdev_442536.gif
(原文件名:51恢复M8.gif) bbsniua 鹏
http://www.ouravr.com/bbs/bbs_content.jsp?bbs_sn=13162&bbs_page_no=1&search_mode=4&search_text=bbsniua&bbs_id=9999
上的底层
点击此处下载 ourdev_442541.rar(文件大小:526字节) (原文件名:ourdev_600004.rar)
---------
装好了下完程序运行灯是一闪一闪的!
按住按键会一直亮!放手后恢复闪的状态!
同时在串口调试助手能显示反过来的熔丝位!
第一位是扩展熔丝位,后面两位是从高到低!
默认的可以看见FF 99E1,我改的会看见FF 99EF!
可惜那个默认设置是不能用USBASP下载线识别的!
把里面的:
MOV P0,#0E1H ;DOBLEVEL=1,BODEN=1,SUT1=1,SUT1=0,SKSEL3=0,
;SKSEL2=0,SKSEL1=0,SKSEL0=1(工厂设定值)
改成:
MOV P0,#0EFH ;DOBLEVEL=1,BODEN=1,SUT1=1,SUT1=0,SKSEL3=1,
;SKSEL2=1,SKSEL1=1,SKSEL0=1(外部晶振设定值)
然后装上3-8M的晶振还有复位电路就可以用USBASP下载线读取了!
改完还可以用USBASP改熔丝!只要没把熔丝设置内部RC的4M以下就可以!
要是你的USBASP下载线有低速下载就没关系!
顺便上传一个我编译好的HEX!我用AT89S52编译的哦!
我试过M16和M8都可以恢复!
熔丝位是EF 99 FF ,外部晶振
---------
AT89S52编译的这个代码是烧到89C51吗? 谁来编个eguy 画的图用的HEX啊 晕死!
具体其它的我没试过!直接搞进去试试不就知道了吗?
再说现在谁还会用C系列的?
给我都不要!
还要并行编程器下载程序的!
在电路上C系列和S系列都是通用的!
还有你用什么型号就用Keil uVision2对应编译一下不就行了吗?
连那个主程序都贴出来了!
只要新建一个工程后复制过去编译一下就可以了!
里面的熔丝位修改自己看一下注释就知道了!
还有27楼的修改把我的上拉电阻给弄没了!
就算接好电路也用不了!
上拉电阻可以用1K-10K的! 谁会汇编的就把P0口弄到P1或者P3口去!
把那个串口去掉就可以把上拉电阻给省了!
顺便问一下27楼的用那个版本的仿真器!
我的Proteus 7.12里面没有TLP521的!
后面的那个是用multisim10画的! 我这样的菜鸟没有接触过51系列,直接学习AVR开始的,所以不熟悉Keil,呵呵,请有条件的朋友实验下啦。
上拉电阻您指的是哪个? 我是按照20楼的用了光藕,光藕的电路我是实践过的,可以用。
----------------------------------------
eguy误解了,原图画的是排阻,明天补上,不过这样做出来的硬件如果比M8做主控就多了太多的电阻了... 上拉电阻就是那个排阻!
把八个相同阻值的电阻的一头全部并起来作为一个脚的就叫做排阻!
看我在16楼发的图片!
在AVR单片机是很少用到上拉电阻的! mark 支持一下,最好搞一个类似串行高压编程的,并行的接线太多了 串行的可能性是零!
因为很多买的二手M8和其它的AVR都是锁死了ISP下载口的! 咨询有关大佬,说这样脱机工作只是恢复熔丝位的底层是很容易编制的 支持 有一顶点儿51的基本功,估计这个做起来顺手些
谢谢! 各位大侠,能否用AT89S52代替啊,可以的话能发个HEX么? 51和52的文件通用的!
我用的就是AT89S52,
STC的我没用过!也没有,所以不知道行不行!
52我是敢打包票的! mark 手上有3片呢 资料很全! 这个进度有点慢。 好。先做个标记,回头做一个试试看。 能写出程序的还用你给画出线路图啊?? 我按照bbsniua 鹏的弄了一个。为什么我的还是被锁,解不开,有点纳闷!我没有用串口查看,就直接做,开始灯是一闪一闪,长按后,放手也还闪的,然后就断电,把atnegs8取出来试一试编程,结果就是不行!不知到哪里出问题了,请高手指点指点!
小的感激不尽!呵呵呵 我刚用串口发送查看,开始接电时,接受到FE FC FE ,按键复位之后,就再也收不到了,不知道怎么回事,开始恼火了啊!呵呵呵 请问:atmega8第20管脚要不要接5V啊?哪位高手指点指点! 空着就可以了! 有点失败!怎么搞还是不行!太失败了,有点像跳楼的冲动!呵呵!先不搞了,做别的!可是灯为什么一闪一闪的!又有继续搞的冲动!我做的,好像什么都不改!按照楼上的接好电路!导入hex文件通电!复位!还是不行~ 有时间做一个看看 mark2 MARK mark 仔细看好datasheet就可以做。。。
按进入高压并行编程,芯片擦除,写熔丝位,这个步骤走就可以了。。。 mark 好东西 niepanj mark 留念~~ mark 9902/9915 mark mark avr熔丝位恢复 我的Mega16熔丝位终于恢复了,多谢楼主,尤其是要感谢bbsniua 鹏./emotion/em018.gif 有人作好了,说明是真的,记下了 非常好,学习了,谢谢! MARK MARK . 明天试试,我的mega16也锁了 仿制了,不成功。上电后led闪烁,按下按钮led长亮,松开按钮后还是长亮,取下M8,还是不能isp编程(接了外部晶振),检查半天没有结果,郁闷。。。 非常好,学习了,谢谢!{:lol:} 学习一下 谢谢高手的分享啊。 顶起楼主! 谢谢楼主
页:
[1]