历史上的今天
返回首页

历史上的今天

今天是:2025年03月29日(星期六)

2020年03月29日 | 实战ArduinoUNO制作高压编程器恢复Atmega8熔丝

2020-03-29 来源:eefocus

上个月折腾arduino最小系统,一不小心改错晶振熔丝位,导致一块Atmega8A-PU芯片无法识别,请教度娘得知需要使用高压编程器来恢复熔丝,虽然淘宝上找到有现成的刷写设备,本着折腾精神,百度了相关资料,发现DIY一个也应该不是很困难。然后就是根据资料里面的电路图上淘宝掏了相关电子元件(没办法,小地方,很多东西都买不到,只能网购),修修改改,没想到竟然做出来了,现在把一些制作过程分享一下,首先先上做好的板子如下:




下面说说制作过程,整个制作过程主要参考了以下相关资料

http://jingyan.baidu.com/article/22a299b53e2ab89e19376a05.html

http://mightyohm.com/blog/2008/09/arduino-based-avr-high-voltage-programmer/ (鸟文页面,好像上面百度那个也是翻译这里面的内容,需翻墙浏览,为啥??别问过,我也不知道为啥技术论坛也要翻墙)

制作材料如下:

1、合适大小洞洞板一块

2、1K 电容若干

3、2N3903或2N3904三极管一个

4、开关一个

5、led等一个

6、28脚芯片座一个

7、连接线若干

8、12V直流电供电设备一个(由于高压编程器需要外接12V直流电源,我是用淘宝上掏的一块升压模块接电池实现的)


首先对照下面的电路图把电子元件焊接到洞洞板上


图片中左边的芯片针脚对应arduino UNO,右边的针脚对应的事待恢复的芯片针脚(即28脚芯片座),具体的针脚顺序参照下图


电路接好后,将恢复代码刷写进arduino里,百度知识里面的那位哥们没有把代码文件分享出来,结果在那个鸟文网站找到了代码,为了方便没法翻墙的弟兄们,现将代码分享在这里,方便大家使用


/*  

 HVFuse - Use High Voltage Programming Mode to Set Fuses on ATmega48/88/168

 09/23/08  Jeff Keyzer  http://mightyohm.com                

 The HV programming routines are based on those described in the

 ATmega48/88/168 datasheet 2545M-AVR-09/07, pg. 290-297

 This program should work for other members of the AVR family, but has only

 been verified to work with the ATmega168.  If it works for you, please

 let me know!  http://mightyohm.com/blog/contact/

 */

 

// Desired fuse configuration

#define  HFUSE  0xDF   // Default for ATmega48/88/168, for others see

#define  LFUSE  0x62   // http://www.engbedded.com/cgi-bin/fc.cgi

 

// Pin Assignments

#define  DATA    PORTD // PORTD = Arduino Digital pins 0-7

#define  DATAD   DDRD  // Data direction register for DATA port

#define  VCC     8

#define  RDY     12     // RDY/!BSY signal from target

#define  OE      11

#define  WR      10

#define  BS1     9

#define  XA0     13

#define  XA1     18    // Analog inputs 0-5 can be addressed as

#define  PAGEL   19    // digital outputs 14-19

#define  RST     14    // Output to level shifter for !RESET

#define  BS2     16

#define  XTAL1   17

 

#define  BUTTON  15    // Run button

 

void setup()  // run once, when the sketch starts

{

  // Set up control lines for HV parallel programming

  DATA = 0x00;  // Clear digital pins 0-7

  DATAD = 0xFF; // set digital pins 0-7 as outputs

  pinMode(VCC, OUTPUT);

  pinMode(RDY, INPUT);

  pinMode(OE, OUTPUT);

  pinMode(WR, OUTPUT);

  pinMode(BS1, OUTPUT);

  pinMode(XA0, OUTPUT);

  pinMode(XA1, OUTPUT);

  pinMode(PAGEL, OUTPUT);

  pinMode(RST, OUTPUT);  // signal to level shifter for +12V !RESET

  pinMode(BS2, OUTPUT);

  pinMode(XTAL1, OUTPUT);

 

  pinMode(BUTTON, INPUT);

  digitalWrite(BUTTON, HIGH);  // turn on pullup resistor

 

  // Initialize output pins as needed

  digitalWrite(RST, HIGH);  // Level shifter is inverting, this shuts off 12V

}

 

void loop()  // run over and over again

{

  while(digitalRead(BUTTON) == HIGH) {  // wait until button is pressed

  }

  // Initialize pins to enter programming mode

  digitalWrite(PAGEL, LOW);

  digitalWrite(XA1, LOW);

  digitalWrite(XA0, LOW);

  digitalWrite(BS1, LOW);

  digitalWrite(BS2, LOW);

  // Enter programming mode

  digitalWrite(VCC, HIGH);  // Apply VCC to start programming process

  digitalWrite(WR, HIGH);  // Now we can assert !OE and !WR

  digitalWrite(OE, HIGH);

  delay(1);

  digitalWrite(RST, LOW);   // Apply 12V to !RESET thru level shifter

  delay(1);

  // Now we're in programming mode until RST is set HIGH again

  

  // First we program HFUSE

  sendcmd(B01000000);  // Send command to enable fuse programming mode

  writefuse(HFUSE, true);

 

  // Now we program LFUSE

  sendcmd(B01000000);

  writefuse(LFUSE, false);

 

  delay(1000);  // wait a while to allow button to be released

 

  // Exit programming mode

  digitalWrite(RST, HIGH);

 

  // Turn off all outputs

  DATA = 0x00;

  digitalWrite(OE, LOW);

  digitalWrite(WR, LOW);

  digitalWrite(PAGEL, LOW);

  digitalWrite(XA1, LOW);

  digitalWrite(XA0, LOW);

  digitalWrite(BS1, LOW);

  digitalWrite(BS2, LOW);

  digitalWrite(VCC, LOW);

}

 

void sendcmd(byte command)  // Send command to target AVR

{

  // Set controls for command mode

  digitalWrite(XA1, HIGH);

  digitalWrite(XA0, LOW);

  digitalWrite(BS1, LOW);

  //DATA = B01000000;  // Command to load fuse bits

  DATA = command;

  digitalWrite(XTAL1, HIGH);  // pulse XTAL to send command to target

  delay(1);

  digitalWrite(XTAL1, LOW);

  //delay(1);

}

 

void writefuse(byte fuse, boolean highbyte)  // write high or low fuse to AVR

{

  // if highbyte = true, then we program HFUSE, otherwise LFUSE

  

  // Enable data loading

  digitalWrite(XA1, LOW);

  digitalWrite(XA0, HIGH);

  delay(1);

  // Write fuse

  DATA = fuse;  // set desired fuse value

  digitalWrite(XTAL1, HIGH);

  delay(1);

  digitalWrite(XTAL1, LOW);

  if(highbyte == true)

    digitalWrite(BS1, HIGH);  // program HFUSE

  else

    digitalWrite(BS1, LOW);

  digitalWrite(WR, LOW);

  delay(1);

  digitalWrite(WR, HIGH);

  delay(100);

}


代码需按照刷写芯片更改

#define  HFUSE  0xDF   // Default for ATmega48/88/168, for others see

#define  LFUSE  0x62   //


以上两行位熔丝位,需根据恢复的芯片来修改,我的芯片是Atmega8A-PU,按照资料里面的修改发现不行,查看了手头上能正常使用的同型号芯片的熔丝位,改成下面的内容后,发现芯片修复正常。


#define  HFUSE  0xDC  

#define  LFUSE   0xA4


刷完代码后,接上洞洞板和12V电源,UNO的L灯会亮,然后按洞洞板上的开关,UNO的灯会先灭再亮,这时芯片应该已经正常修复了,如果芯片还是修复不成功,在确保芯片不是烧毁的问题的情况下,检查熔丝位是否正确。注意,此设备只能起到恢复熔丝位的作用,无法修复烧毁芯片。最后提醒大家焊接洞洞板的时候对每个焊点都要确保焊接到位,不然到时出了问题都不知道是什么问题。

推荐阅读

史海拾趣

功得(CONQUER)公司的发展小趣事

功得公司最初成立时,只是一家专注于电子元器件代理的小公司。创始人李明看准了电子行业快速发展的趋势,决定投身于这一领域。他带领团队深入市场调研,发现了一种新型的集成电路芯片在市场上有着巨大的潜力。于是,功得公司投入大量资金研发这种芯片,并通过不断改进和优化,最终成功推出了具有竞争力的产品。凭借这一创新产品,功得公司在市场上获得了初步的成功,为后续发展奠定了基础。

D3 Semiconductor公司的发展小趣事

作为一家以技术创新为核心竞争力的公司,D3 Semiconductor始终保持对新技术、新应用的关注和研究。公司不断投入研发资源,推出了一系列具有创新性的半导体产品,满足了市场的多样化需求。这种持续创新的精神推动了D3 Semiconductor的不断发展,也使其在竞争激烈的电子行业中保持领先地位。

Holtek(合泰)公司的发展小趣事

作为一家以技术创新为核心竞争力的公司,D3 Semiconductor始终保持对新技术、新应用的关注和研究。公司不断投入研发资源,推出了一系列具有创新性的半导体产品,满足了市场的多样化需求。这种持续创新的精神推动了D3 Semiconductor的不断发展,也使其在竞争激烈的电子行业中保持领先地位。

Densei-Lambda (TDK)公司的发展小趣事

为了更好地拓展市场,D3 Semiconductor与全球知名的电子元件分销商贸泽电子(Mouser Electronics)建立了合作伙伴关系。根据协议,贸泽电子储备了D3 Semiconductor的完整650伏额定电压超结MOSFET产品线,并将其推向全球市场。这一合作不仅加强了D3 Semiconductor在全球市场的竞争力,也为公司带来了更多的商业机会。

佰鸿(BrtLed)公司的发展小趣事

近年来,佰鸿公司开始将业务触角延伸至再生医学领域。通过多年的努力,公司成功建立了再生医学医疗与健康科技生态圈,并逐步实现了产业集群化。在再生医学领域,佰鸿不仅建立了产业化场地和研发设备,还计划在未来几年内打造国际领先的再生医学产业集群。这一多元化的发展战略,使得佰鸿在电子行业之外,也找到了新的增长点。

博巨兴公司的发展小趣事

博巨兴公司一直注重技术研发和自主创新,近年来公司研发费用投入均占当年销售额的10%以上。凭借科学的管理手段和雄厚的技术力量,公司于2006年被认定为“深圳市软件企业”,2007年被认定为“深圳市高新技术企业”,2011年更是荣获“国家高新技术企业”称号。这些荣誉的获得不仅是对公司技术实力的认可,也为公司的进一步发展奠定了坚实基础。

问答坊 | AI 解惑

转发:关于嵌入式系统方向1

嵌入式系统无疑是当前最热门最有发展前途的IT应用领域之一。嵌入式系统用在一些特定专用设备上,通常这些设备的硬件资源(如处理器、存储器等)非常有限,并且对成本很敏感,有时对实时响应要求很高等。特别是随着消费家电的智能化,嵌入式更显重要 ...…

查看全部问答>

继电器的国际标准

UL标准         UL标记是Underwriter’s Laboratories lnc的缩写,是1984年美国火险工业联合会建立的一个非赢利性组织。         保险商实验室公司(Underwriter’s Laboratories lnc以下缩写为UL ...…

查看全部问答>

关于driver打印机驱动程序

现有著名企业,诚聘C/C++方面的,driver打印机驱动人才,有意者,可尽快联系:)MSN:jflpnoah@hotmail.com…

查看全部问答>

如何在ce程序中嵌入网页

如何在ce程序中嵌入网页 moblie上用wm中的Htmlview.dll已经实现了,就是ce上没办法,ce上没有Htmlview.dll啊, 那位大侠高过,帮个忙啊!!!…

查看全部问答>

发布个Compact Framework 下的扩展WebBrowser 已支持鼠标动作

我是用.NET在Ce上开发的,在用到IE这部分时,因为.NET Compact Framework的WebBrowser 实在太简单了,只有一个下载完成事件,和一个转向前的事件,也不太清楚了,即然不能控制滚动条,因为没有公布它的Document 对象接口 原本是打算写一个可以支持滚动的W ...…

查看全部问答>

我给大家特别推荐的两款产品,非常棒!!!

1. c8051f 单片机(c2 ,jtag)和at89s5x单片机(isp)二合一串口编程下载线,支持3伏(c8051f 单片机),5伏(at89s5x单片机)电源, 目前通过实际验证可编程下载的芯片:c8051f310、c8051f320、c8051f330D、c8051f340、c8051f350、c8051f360、c80 ...…

查看全部问答>

网络监控与模拟监控比

单就价格来说,网络摄像机是比模拟摄像机要贵。但您也应该看到它的功能是模拟摄像机不可比拟的,模拟信号的数字化、影像压缩传输以及智能控制功能。模拟加上后端DVR成本与网络摄像机+PC机,据统计:     >如果IP基础架构已经安装的话, ...…

查看全部问答>

自制的EXCEL画时序图程序

自制的EXCEL画时序图程序 输入10101010二进制数值即可显示 输入数据前需加“\'”单引号,不然会被自动转换成科学计数  …

查看全部问答>

关于继电器

请教各位大侠,有没有这样的继电器,就是说在一个继电器中包含有两个不同的线圈,每个线圈分别独立控制一个开关。相当于将两个普通的继电器整合到一个中去。…

查看全部问答>