Atmega fusebit doctor (HVPP+HVSP) – fix the fusebits

mega_fusebit_doctor_1Atmega fusebit doctor, as name says it, device for repairing dead Atmega (and Attiny from v2.04) family AVRs by writing correct fusebits. Most common mistakes or problems are a wrong clock source (CKSEL fusebits), disabled SPI programming (SPIEN fuse) or disabled reset pin (RSTDISBL fuse). This simple and cheap circuit will fix you uC in a fraction of a second. If in first case we can help ourself with clock generator, then in 2nd and 3rd cases bring uC back to life is impossible with standard serial programmer. Most of people do not decide to build parallel programmer because its inconvenient and its cheaper and faster to buy new uC.

High voltage programming

mega_fusebit_doctor_3This circuit uses the parallel and serial high-voltage programming method. With those methods, we can talk to our “dead” chips which have reset or isp disabled:
HVPP = high voltage parallel programming.
HVSP = high voltage serial programming.

Supported chips list:
Code to this point supports 145 chips, but not all have been tested. Tested are lighted green. Report a problem – and i make a fix :)
AT90s1200, Attiny11, Attiny12, Attiny13/A, Attiny15
Attiny2313/A, Attiny24/A, Attiny26, Attiny261/A, Attiny28, AT90s2333, Attiny22, Attiny25, AT90s2313, AT90s2323, AT90s2343
Atmega48/A, Atmega48P/PA, Attiny461/A, Attiny43U, Attiny4313, Attiny44/A, Attiny48, AT90s4433, AT90s4414, AT90s4434, Attiny45
Atmega8515, Atmega8535, Atmega8/A, Atmega88/A, Atmega88P/PA, AT90pwm1, AT90pwm2, AT90pwm2B, AT90pwm3, AT90pwm3B, AT90pwm81, AT90usb82, Attiny84, Attiny85, Attiny861/A, Attiny87, Attiny88, AT90s8515, AT90s8535
Atmega16/A, Atmega16U2, Atmega16U4, Atmega16M1, Atmega161, Atmega162, Atmega163, Atmega164A, Atmega164P/PA, Atmega165A/P/PA, Atmega168/A, Atmega168P/PA, Atmega169A/PA, Attiny167, AT90pwm216, AT90pwm316, AT90usb162
Atmega32/A, Atmega32C1, Atmega323/A, Atmega32U2, Atmega32U4, Atmega32U6, Atmega32M1, Atmega324A, Atmega324P, Atmega324PA, Atmega325, Atmega3250, Atmega325A/PA, Atmega3250A/PA, Atmega328, Atmega328P, Atmega329, Atmega3290, Atmega329A/PA, Atmega3290A/PA, AT90can32
Atmega64/A, Atmega64C1, Atmega64M1, Atmega649, Atmega6490, Atmega649A/P, Atmega6490A/P, Atmega640, Atmega644/A, Atmega644P/PA, Atmega645, Atmega645A/P, Atmega6450, Atmega6450A/P, AT90usb646, AT90usb647, AT90can64
Atmega103, Atmega128/A, Atmega1280, Atmega1281, Atmega1284, Atmega1284P, AT90usb1286, AT90usb1287, AT90can128
Atmega2560, Atmega2561


mega_doctor_renderJust put your dead mega in socket, press the START button, and enjoy your good-as-new processor. There are three slots on board, for most common AVR’s, pins compatible with: Atmega8, Atmega16, Attiny2313. There is also an extra goldpin connector with all signals so you can attach adapters:
#1 adapter” as HVPP extension, for 20pin Attiny26 compatible and 40pin Atmega8515 compatible processors.
HVSP adapter” for 8pin and 14pin HVSP processors.
Or make your own adapters for other types of processors, in trough-hole or surface-mounted, you can use the breadboard for this – just connect signals to correct pins. How? Check your AVR datasheet, go to “memory programming” and then “parallel programming” – check the signal names, all signals are described under the DIP40 slot. In doctor memory there is a lot of free space so project may be developed all the time. One sided PCB with 55mm x 92mm dimensions. On top side you need to solder several jumpers, or, make this PCB as double sided – choose yourself. Resistors from R7 to R23 may be in 100ohm to 10K, but i suggest from 470ohm to 1K.

While mounting the DIP40 slot, you must to remove it pins from 29 to 37. These pins must not have electrical contact with inserted uC pins, traces runs there only to make the board smaller (onesided). Take a look at pic on the left, these you must remove from slot.


fusebit_doctor_adapters_4The ALLOW ERASE jumper allows doctor to erase whole flash and eeprom memory, if it is open, doctor will newer erase memory but may not cure device if lockbits are enabled, so you choose. After insert dead uC and press the START button, doctor will initiate the parallel or serial high-voltage programming mode. This is chosen automatically, device will recognize HVSP adapter and start to work in HVSP mode. After that, doctor wait for high state at RDY/BSY line. Then, read device signature and check if it supports it. Next, memory erase is performed if user allows that. Then lockbits are checked, and if they not blocking device, doctor sets all fusebits to fabric, having regard to whether there are extended fusebits or not. Some of older AVR have only one byte of fuses – LOW – and this is also included. After fusebits are verified, the proper leds is flashed.

Leds explanation:

green on – patient successfully cured, fusebits repaired. If lockbits are enabled, just verify fusebits with factory ones – and if they ok – light up green.
red on – signature problem, can’t read, no device in socket, or no such signature in database.
green flashing – signature ok, fusebits are wrong. Lockbits enabled, chip erase permission required (read below).
red flashing – signature ok, no lockbits, but for some reason can’t write new fusebits.


Note that terminal is not needed, device works without pc, and all we want to know we get from leds.
You can find extra RS232 output, and connecting this to the terminal, sends all information about fixing process – see exemplary printscreens in gallery. All the info is send “on fly” via uart. Use proper converter to connect this with pc. If you have COM port for RS232, use MAX232 based converter (eg this). If you are using laptop, use the USB converter (like this or this).

Terminal settings:
baudrate: 4800
parity: none
databits: 8
stopbits: 1
handshake: none


prototype_docUse one of the following microcontrollers as the doctor-chip: Atmega8, Atmega88, Atmega88P, Atmega168, Atmega168P, Atmega328, Atmega328P – and their newer/low-voltage “A” or “L” versions.
Use stabilized 12V supply voltage. Higher voltage can damage fixed chip!

Code was written based on high-voltage parallel and serial programming section of datasheet of suitable AVRs.
If you are searching for attiny family AVR’s fusebits fix device, then check my previous project, the Attiny fusebit doctor. Unfortunately, some bugs show off and this project is no longer updated since the “Atmega fusebit doctor” supports all the Attiny family AVRs. But, source code is attached for this project, and with avr datasheet, it will be easy to understand this programming mechanism.


Internal 1MHz clock, and enabled EESAVE bit – see README file.
If you use a brand new chips as doctor, you don’t need to change anything – 1MHz clock is already set as default. EESAVE bit is optional. It disallows to erase the eeprom when firmware is actualized, eeprom is used to store the fixed chips counter which is send trough uart.


Send your own fuses and locks trough terminal, talk with chips with broken signature. If you connect terminal Tx pin to PCB Rx pin – manual mode will be enabled automatically. This requires Tx-terminal pin to be HIGH and OUTPUT when idle. It must pull up the 10K pulldown. If this condition is not met, doctor will work in normal – automatic mode.

First, doctor will read signature. And if fail, it will ask to type signature manually.
Type two last bytes of signature in HEX (4 chars) and hit enter.

Then, doctor will try to read the chip depending on given signature.
When succeed, select an option:
1 – write fusebits – this will perform a fuse write cycle with fuse-values from buffer (default).
2 – modify fusebits – this will let you to type fuses manually, values in buffer will update. Type one byte in HEX (2 chars) and hit enter. Repeat for each byte (if exist).
3 – set lockbits – type new lock value in HEX (2 chars) and hit enter – do this with caution! Remember that unused bits are always 1! E.g. if want to enable LB1 and LB2, type FC (11111100)
4 – erase the chip – this will just erase the chip and locks, it require “allow erase” jumper for safety.
5 – end – exit programming and drop voltages, now you can safely remove the chip.

See how Attiny13 with broken signature was repaired.
See how the same chip was “broken” again.
Do not suggest LEDs when in manual mode – they just blinking randomly :)
ATTENTION – Firmware 2.1x NEED a pcb updated to version 2h!



DOWNLOAD – ARCHIVE of all previous updates. Firmwares + boards.
Changelog in README file. -SMD VERSION HERE-
No need to download this, all newest files are below.

DOWNLOAD – UPDATE #11, 30.04.2011:
Firmware ver.2.11 – fixes
Fusebits: see README file

Fixed bug when not writing the HIGH fusebyte (concerns all chips!)
“Just” a typo which i made during optimalisations for 2.10 firmware :)

Pads for 4 chips, compatible with: T2313, M8, M16, M128 – all has been tested.
Use strong paper clips to push chip to the pads.

FAQ – frequently asked Questions and Answers: (update 2014-02-01)

Q: No sign of life, no leds are working.
A: Critical bugs on pcb, poorly programmed chip.

Q: Red led is on.
A: Chip si not recognized. Make a voltage measurements. In idle, measure voltages on +12 RESET and +5 SUPPLY at female goldpin connector – you should get 0V or close to 0V on both. After the START button is pressed, you should get close to +12V and 5V for one second. If not, check transistors, if they are ok and if they are soldered ok.

Q: Red led is on.
A: Bugs on pcb, traces are packed densely and its very possible that you have invisible gap, shortcut, or dry joint. Check everything with multimeter, but PRECISELY.

Q: Red led is on.
A: Connect device to the terminal to get repair log. Press start to receive infos.

Q: Received “Init programming…” and nothing more – OR – received signature is “00 01 02” or “FF FF FF”.
A: Chip is broken, or there still are bugs on pcb – look above.

Q: Received signature is “1E 90 00″, ” 1E 1E 1E”, or something familiar (meaningful data).
A: Chip is good, it initiates, look for shortcuts on DATA, BS, XA lines.

Q: Green led is on / “Verifying… – OK!” received, but chips don’t work with standard programmer.
A: You can be 100% sure that fuses are fixes, chip have hardware ISP damaged or it have some other damage.

Q: What are “Read Signature… FAIL!” and “Trying T2313 pinout… OK” doing in log?
A: Alle the 20pin chips need to be threated individually. First, device tries to read chip with standard schematic, and if it fails (“FAIL!”), then it tries to use schematic for 20pin T2313 compatible chips and then chip is read properly. This is normal behavior, this not a bug.

Q: What are “<[2J" trashes doing in log? A: This is a terminal clear screen sequence, turn on the “VT-100” emulation in terminal settings.

Q: I’m trying to type data into terminal but no chars appearing.
A:Make sure you set handshake to NONE in terminal settings.

Q: After typing data into the terminal, i can’t confirm them with return key and can’t type next ones.
A: When pressing return, your terminal must have to send the CRLF chars, if not, check your settings.

Q: This still doesn’t help me, i tried everything but still have the problem.
A: Ask in comments below :) Post firmware version and pcb version with which you try to work, paste the repair log.

Q: Do all these 1K series resistors (R7 up to R23) are really needed here?
A: No, you can build the circuit without them. But remember, if for some reason out patient will not enter in the programming mode and continue with its code, then logic state conflict will occur between two microcontrollers which can damage them permanently. These resistors are to protect the circuit against such situations. I strongly recommend to build it exactly as schematic says.

Q: Pulldown resistors for 12V and 5V lines (R24 and R27) are heating up quite strongly in manual mode, and whole circuit takes more power, can i change them for something higher value?
A: Yes, but circuit can work incorrectly with some of the patients. When idle, voltages should be near 0V, and when powering on or off, their edges should have proper steepness to provide good timing (see entering high voltage programming in datasheet). Because only simple bipolar transistors are used, these resistor guarantee above requirements. The interesting case is an attiny2313 problem when all the fuses were correctly burned, without one, the RSTDISBL. As it showed up, because of bad edges of 12V reset voltage, this uC although was working in parallel mode, but not in high voltage, so it was not allowing to change that fuse – this is my own interpretation so i can be wrong.

Q: My chip is read properly but doctor can not write new fuses, allow erase is enabled.
A: If the ISP programmer acts the same way, then your chip is damaged, nothing can do.

Q: Without a patient, circuit acts awkward, it freezes, and goes on when i put my finger near the traces.
A: This circuit is not meant to be used without a patient. It acts in such way because when entering in programming mode, it is waiting for a high state on the RDY pin from patient. This pin is not pulled down and works as high impedance input, so electrostatic charge from your finger is read as high state and code goes on further.

Q: Chip names are not appearing in the log, i see “no names in 8kB ver” instead.
A: Chip names are not displayed in 8kB versions of the firmware, i.e. for atmega8 and atmega88 – because names don’t fit in such memory space. If you want the names, use atmega168 or atmega328 chip and burn proper firmware.

ALWAYS use the newest version of the firmware. Hex and bin files are the flash memory files, use one of them. No need to program eeprom memory.

Русский перевод – Евгений из GetChip Блог.

Atmega fusebit doctor (HVPP+HVSP) – fix the fusebits
0 votes, 0.00 avg. rating (0% score)


  1. Mogles kolego napisac ze chodzi o rezystory przewlekany 0.125W ,przeciez inne nie wejda bo takie otwory nawciubiales na plytke…

  2. tak samo otwory na zwory… szlak zaraz czlowieka moze trafic..

  3. im trying to burn fuses L:0x62 H:0xD1 E:0xFF for atmega 328p
    avrdude lets me burn the L:0x62 H:0xD1 , dont let me burn E:0xFF
    so current my chip got the fuses L:0x62 H:0xD1 E:0x07 is this ok ?

    • 07 is how you will need to define with AVRDUDE . It amounts to the same thing, just the way it’s handled. Take a look at a fuse calculator and you will see.

  4. thanks russel got it to work :)
    1 more question what software program do i need to be able to use the tx and rx on the board to be able to see on the screen, and do i need any special adapter to coneect the tx and rx?

    • You will need a com terminal of some kind, windows used to have hyper terminal built in, that’s what I use, still using XP. Arduino or bascom has one. Unless your computer has an RS-232 port you will need an RS-232 or UART to USB converter. This website has one made from an attiny 2313, I built it and it works, but I bought this cheap FTDI based USB converter from INLAND and it works excellent. A photo of the converter, the header pins are an adapter I made to directly plug into fuse bit doctor.

  5. cool i just order FTDI adapter, for the com terminal i just fount this Hype!Terminal program that can be used on windows 10, if any one can recomend a better com terminal for windows 10 will be apreciated..
    the fuse doctor is working perfectly with out the software i just have a litle bug that is when it has no chip i press button and red led dont comes up right away, but if i put my finger on the back then it comes up, got no idea whats going on yet, all it seems well soldered..
    thanks alot for all russel u been a great help :)

    • What you speak of with operation is how circuit works. If you go back a bit earlier in comments you will see a post I made with terminal picture and how circuit works at start up.

  6. ok
    by the way your board looks awsome work, what tecnic did u use to put the black text on the plastic top part of board, i been searching if there is any tecnic to do that so far find nothing :(

  7. RUS:
    Мне нужны исходные коды программы управления. Может ли автор их предоставить? Если автор этого не сделает, со временем проект умрет и кто-то будет вынужден делать подобное устройство повторно !!!

    I need a source code control program. Does the author provide them? If the author does not, over time, the project will die and someone will have to do the like again !!!

  8. Hello,

    I found your project by searching for a solution to reanimate an ATtiny85. I also do have some of the smallest ATtiny (4,5,9,10). Will there be an Update for these Versions of the ATtiny family?


    • There wont be any support for TPI protocol. If you disable RESET pin then only difference in TPI programming is that you need to put +12V on your reset line instead of GND. You can add some NPN+PNP transitors so they first invert logic on reset line, and then enable +12V from external source. All the rest is the same. You can modify your programmer, high-voltage programming will work as normal TPI, no matter if reset is disabled or not.

  9. diky, pomohlo mi to trosku vycistit stare zasoby.
    Diody LED bilkaji spolu, nevim, kde je chyba.

  10. Hello, I maked one piece of fuse doctor. And tried fix Atmega328P-PU,
    but no worked for me. Actually, not allowed write H byte. L byte and E byte I can write. I watching these in putty terminal. Where is problem?


  11. Hi man. Thank you very much for the efforts on this project. I got ahold of a bunch of AT90S1200 chips with enabled locked bits, hope I will be able to put the fusebit doctor together :)

  12. Jak się podłącza do układu doktora procek attiny13? Jego nota nie wymienia wysokonapięciowego programowania równoległego, jedynie szeregowe (chyba za mało nóżek :D ), pokazujesz go jako obsługiwany przez Twój układ ale nie umiem dojść do jego prawidłowego podłączenia.

  13. Hi there! Thank you again so much! I’ve spent this entire day making the Fuse Doctor, and I succeeded (I think). After assembly I had only one bug on PCB (broken line), which I found and fixed pretty quick. It runs and LEDs blink and I’m able to communicate with it via terminal, this is awesome :) Thank you once again for putting it out there and supporting the project. Is there a way I can make a small donation or buy you beer or something like that?

    • Lockbits in AT90S (and all AVR chips) can be erased by “chip erase” command via ISP programmer. HVPP is only needed when SPIEN was disabled. But it will also do the job.

      I disabled donations a lot of time ago because no one used them, and enabled ads instead. Your appreciation is enough for me :)

  14. Thank you man, you’re the best! I’ve got a bunch of PCBs with AT901200-12PI chips on them, basically I’ve got them from trash. They have both lockbits set, SPIEN off and RCEN on. I’ve tried using Fusebit Doctor on 2 of those so far, and unsuccessfully. Here is what happens: when I tell the Doctor to erase chip, it resets lockchips, but SPIEN stays disabled. If I tell it to reset fuses to default, it does not do that, instead it breaks the first byte of chip signature. When I connect such chip to my serial programmer (I use USB-ASP) and read fuses, it says LOW fuse is 0xFE (same as LOCK value). Does that make any sense?

    • Ok, im confused. Can you paste here repair log from terminal? And add some comments what should be and what actually is and why.

      What do you mean by it breaks first byte of ship signature? “1E” is permamently erased or it takes some random value?

      Can you test fuse doctor with some other chip (some avr) to tell its working ok? Because there may still be some shortage on the traces. It seems like addressing issues, like its pushing fusebyte into the lockbyte address.

      But wait, you connect it to ISP programmer and read fuses successfuly, so i think SPIEN was enabled by fuse doctor (because it works with isp programmer), but the problem might be in usbasp / avrdude / GUI. Some of software might work ugly with those old chips, beacuse they have a bit different address for fuse/lock, and this might not have been really tested.

      And those AT90, are they DIP, or SMD which you connect with cables without desoldering?

  15. I know, sounds strange, I probably messed up PCB or something. Now testing with tiny2313a. ISP programmer reads chip ID fine, fuses are E4:DF:FE, LOCK is FF, flash is programmed with small program. I insert it into the doctor, here’s the log:


    Init programming… DONE
    Read signature… FF FF FF – FAIL!
    Trying T2313 pinout..1E 91 0A
    Searching chip… Attiny2313/A
    Read fusebits… L:E4 H:DF E:FE
    Should be… L:64 H:DF E:FF
    Lockbits… DISABLED (FF)

    I tell it to do Chip Erase, response is “Chip erase… DONE”. I Insert the chip back to ISP programmer, signature is fine, the flash is erased. Back to doctor, tell it to write fusebits, it responds with:

    Writing 64 DF FF… DONE
    Verifying… L:64 H:DF E:FF – OK!

    Back to ISP, the fuses have been rewritten, chip is working fine. So the Doctor works fine with tiny2313a!

    The AT90’s are DIP.

    • Your comment was flagged as “waiting for moderation”, so it was waiting for my decision before it became public.

      Ok, so T2313 is working fine. And now AT90?

  16. If I sent prev. comment twice, it was by mistake, sorry about that. Ok, trying AT90S1200 now. My ISP programmer says it has wrong signature (doesn’t display it though) and says fuses are 00:00. I think the problem might be that my ISP software is incompatible with AT90S1200 chip. Ok, so I insert chip into Doctor:

    Init programming… DONE
    Read signature… FF FF FF – FAIL!
    Trying T2313 pinout..1E 90 01
    Searching chip… AT90s1200
    Read fusebits… L:DF H:00 E:00
    Should be… L:DF H:00 E:00
    Lockbits… ENABLED (FC)

    I erase the chip – it resets lockbits to FF. All looks fine. Now I insert the chip into ISP, it still says the signature is bad. When I read fuses now, it says the value is FE:00:00, lock value is FE.

    So my conclusion out of this is, Doctor works fine, and the problem is most likely in my ISP software not being compatible with AT90S1200 chip. With previous 2 chips, after running them in Doctor, as a test I’ve tried to write the fuses and program chip via ISP. I’ts probably what messed the chip signature up.

  17. Upd: found this in documentation to AVRDude: «(****) The ISP programming protocol of the AT90S1200 differs in subtle ways
    from that of other AVRs. Thus, not all programmers support this device. Known to work are all direct bitbang programmers, and all programmers talking the STK500v2 protocol.»

    • Yes, i also had problems with this chip, i remember i was fixing this in 2 or 3 releases, but somebody tested it in real life and wrote that everything works ok. If fuse doctor reads signature properly, you can be sure its there and its ok. ISP software can be bugged and not tested with this chip. Try to use some newer software, try to download newer avrdude and read it trough line command instead GUI – because this also can be bugged. I’m not saying that fuse doctor is bug free, but breaking signature or changing it is “impossible” according to atmel. But i know that even regular ISP programmer can mess up signature bytes.

  18. That’s what I think happened – my ISP programmer definitely broke the chip signature. I’ve tried several versions of software, to no result. I’ll get my old PC that has LPT port and will try to program those AT90’s with simple parallel programmer.

  19. Anyway, man, I want to thank you one more time for the great project and for being so responsive and supportive!

    • Please try to use a dedicated hardware & software for those chips and check wats going on. Im as curious as you.

      No problem mate, i like to solve weird problems, and you got lucky because i was at my pc whole weekend so i could response so quick. Try to ask me something during the work days :D

  20. Zawalista sprawa odpaliłem dzisiaj to urządzonko porostu jest rewelacyjne . Podziękowania dla autora !!!

  21. Hi, great work.

    is there any chance to get the sourcefile of the fuse doctor? I want to add a simple PWM output to supply a switching transistor and a coil to generate 12 V so there is no need of a 12V power supply.



  22. Hello, I’m trying to repeat your device. I have a question, must the 12V be connected to the patient from the beginning or something is wrong on my board? Transistors are all OK…

  23. Hi,

    First of all: thanks for the hard work. With that I managed to restore a bunch of AVRs that are dead to my programmers.

    I have an issue: I’ve builded the fuse doctor with a TTL converter based on a MAX232 and using Tera Term Pro Web. The result is attached. See that after the “Thank You”, a strange character is diplayed, then the fuse doctor works (but don’t display the Header “Welcome, etc, etc).

    In the attached image is the RS232 converter that I’m using.

    Even with this issue, the fuse doctor is working ok.

    Can you point me what is wrong?

    Thanks in advance.

  24. Where and how to buy the pcb ?

Leave a Reply

Your email address will not be published. Required fields are marked *

Please leave these two fields as-is: