Attiny fusebit doctor (HVSP) – fix fusebits

avr_attiny_hvsp_fusebit_doctor_4Did you make a mistake while programming fusebits, or purposely disabled reset pin (RSTDISBL) or ISP programming (SPIEN)? No need to buy or make inconvenient HV programmer only for unlock couple of Tiny AVR’s. This Attiny fusebit HV doctor will cure your tiny microcontrollers, by restoring all fusebits to factory settings – nice and easy. Supports all of the serial high voltage interface AVRs, that is 8-pins: Attiny11, Attiny12, Attiny13, Attiny15, Attiny25, Attiny45, Attiny85, and 14-pins: Attiny24, Attiny44, Attiny84.

How it works

avr_attiny_hvsp_fusebit_doctorThis is very simple and cheap to make, the brain of device is an Attiny2313 uC, couple of resistors and transistors, and a 5V stabilizer. You need 12V stabilized supply for this. Repair begins after the button START is pressed. Button is active again after 250ms, so pressing it will reset device and start a new repair process.

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, can’t pass verification after 10 attempts.

High voltage programming

HV_serial_AVRsDevice uses the High-Voltage Serial Programming (HVSP) to repair fusebits. First of all patient is switched to HV memory programming, then we read signature and check if it’s supported. Then the chip erase is performed if user allows it. Next the lockbits are read, if they not set, patient receives new fusebits, proper for readed model. After that, fusebits are verified, and if they pass the test – this is end of work. If not, doctor will repeat write-verify cycle 10 times, and give up when no success.

You can find two jumpers on board:
chip erase – permit to erase whole flash memory. If lockbits are enabled, there is no possibility to set new fusebits. And there is only one way to disable lockbits – by erasing whole flash. Jumper close – permission to erase flash
unknown signature – it happens very rare, but it happens, that uC has erased signature. Signature, calibration bytes, and other data are not permanently stored in uC structure and they can be accidentally erased due to power supply spikes during programming or power cycling. Generally signature will be read as FF FF FF, but chip will work good, flash can be readed and written. If signature will not match to one from doctor database (FF FF FF or 00 00 00 too), closing this jumper will write a universal fusebits pack which will mess oscillator options and such, but will repair functionality of reset (disable RSTDISBL) and ISP programming (enable SPIEN). Microcontroller will be possible to further repair on SPI normal programmer. DO NOT use this option with Attiny11 or Attiny15.

Fusebits: internal 4MHz clock not divided by 8. Will be good to select the “fast rising power” too.

ATTENTION! -> on 09.11.2010 i’ve released last update for this project. It wont be no longer updated, scince there is a Atmega fusebit doctor which supports attiny family too (138 chips in total). Build cost for both circuits is pretty the same, so its better to make the better one.


Here are all of the attachments, of course we choose the latest one:

DOWNLOAD – First release:
PCB V2 – buggy!
FIRMWARE V1 – first release

DOWNLOAD – Update 09.05.2010:
FIRMWARE V2 – Added support for: Attiny22, AT90s2323, AT90s2343
Fixed(?) bugs with tiny15 i tiny11. Added source code.

DOWNLOAD – Update 09.11.2010:
PCB V3 – fxed reset issues by adding 1K pulldown resistor for reset line.
FIRMWARE V3 – fixed Attiny15 timings on PB3, fixed data in chip erase command. Added source code.

5.00 avg. rating (96% score) - 1 vote


  1. Witam,
    świetny pomysł – niejednokrotnie przez przypadek (przecież nie celowo:) ) blokowałem fus’y w megach ,, przez kilka lat w szufladzie zgromadziło się ich sporo.. Szybciej było wydać 4zł na nowy klocek niż bawić się w odblokowywanie , lecz – czas na akcję anty-blokowania ;) – z niecierpliwością czekam na wersję pod Megi’…

  2. Tak się składa że często się bawię tymi malutkimi prockami, no i wykonałem ten układ twój.

    I jestem mile zaskoczony, sprawdziłem na attiny13, attiny25 i attiny85 i w ułamku sekundy zapalał zieloną diodkę.

    Nie odważyłem się specjalnie psuć fusebitów żeby sprawdzić działanie, ale nie długo robię układ z wykorzystaniem właśnie pinu resetu jako zwykłego pinu więc zobaczymy jak będzie sobie dawał radę :)

    I tez zapytam kiedy będzie wersja pod atmegi, chyba jak każdy mam kilka zablokowanych z czasów zaczynania zabawy z mikrokontrolerami

    Pozdrawiam serdecznie

  3. Hı,
    I programmed an attiny2313 and atmega16 by wrong fuse bits(excuse me my english language is poor).
    Now ponyprog don’t see these processors. there fore I want to repair this ICs.
    Can I use this circuit to repair for attiny2313 and atmega16?
    I read from other forums,but I am not sure this.
    thank you…

    • Hi!

      No, you can’t. This is for “high-voltage SERIAL programming” uC, and yours uC are “high-voltage PARALLEL programming”. This device will only repair those avr tiny uC, not mega. But i am working now on repair tool for mega uC (support also tiny2313), so stay tuned :)

  4. thank you very much.
    I will be waiting for your new fusebit doctor with impatience.
    (you can delete this comment,only I wrote for thanks)

  5. Na Attiny 15 nie działa. Na Attiny25 działa .Tyle mi się udało sprawdzić .


  6. To kiedy ten fusownik do Atmeg będzie?

  7. Niestety kompletnie nie mam czasu żeby posiedzieć nad kodem, doktor dla rodziny mega będzie ale nie mam pojęcia kiedy… postaram się w któryś weekend wykonać płytkę i skrobnąć kawałek kodu który przynajmniej będzie atmega8 odblokowywał, ot taka wersja bardzo-beta.

    Piotr dzięki za info z attiny15, niestety takiego procka nie posiadam aby się pobawić nad kodem ale jak już znajdę błąd to podeślę ci na email nowy kod do przetestowania (o ile podałeś prawdziwy ;) )

  8. Very nice project! I have two questions:

    1) Can you make version with other AVR as the doctor like the more used mega8/48? Or just release the source :)

    2) Of the tiny family the tiny26/261/461/861 aren’t mentioned so I guess they are HVPP and not HVSP? I saw you’re working on mega repair tool, does it mean it can repair all that uses HVPP (and is implemented)?

    I suggest you put onboard some 12V generator, it could be done with dedicated chip like MAX662A or just with PWM on AVR, that would be cool. You can check the AVRminiProg which does it
    Good luck with the next version!

    • I looked at the schematic again. Well the 12V generator was meant for powering by 5V source instead of 12V input, then it’s obviously not needed (but needs to be well regulated) :)

    • 1. Hi, i can send you source code but not now, i have it on my computer, i do this maybe tomorrow, so you can mod this to use with mega8 with no problem.

      2. yep, tiny26 (same as tiny2313) is HVPP, take a look in datasheet :) Yes im working on mega doctor, but don’t have much time for my toys :( PCB is projected with three slots, for mega16/32/644 etc, for mega8/88/168 etc, and for tiny2313 etc. There is also goldpin connector with all the signals so we can easy make adapters for other uC’s, in mega8 which will be the doctor, is plenty of space to put data for all the hvpp uC’s. In this weekend i make pcb and write code to cure at least mega16 mega8 and tiny2313. Take a look at my site sometimes, i will publicate this as soon as it starts to work :)

      3. I see no need to put there 12V generator, it will only complicate pcb and raise the costs. I guess there is no problem with 12V suplly :) But thanks for advice, maybe i make simple generator with two transistors. I try to do some testing if i find time. And do not have free pin so it cant be done on host atmega, all pins from mega8 are used.

      PCB for mega doctor, it’s still in project… :)

  9. T.Cím!
    Megcsináltam attiny fusebit doctort,de a start gomb megnyomása után a piros led kigyullad.
    Betettem egy jó attiny45-t,annál is ugyan az a helyzett.
    Ha tud segítsen(help).
    Üdv:Ochmánszky Attila

  10. T. Cim!
    Megcsináltam ATtiny fusebit doctort de Gombe ÉS elkezd megnyomása utan vezetett piros kigyullad.
    Jó attiny45 Betettem EGY-t, AZ ugyan annál a helyzett.
    Ha Tud segítsen (Segítség).
    Üdv: Attila Ochmánszky

    • a fuse biteket jól állítottad be?

    • Hi Attila. I can help, but please write in english or polish. I google-translated your comment, and if i understand correctly, you get red led all the time. Check if you used correct transistors (if E-B-C are not replaced). Check after pressing START, if you get +5V on supply pin and +12V on reset pin of target chip. 12V stabilized supply is very important, this is for correct H-V programming initialization.

      Also check connection from R10 (330ohm) to T2 (BC557) – in PCB files there was a small bug, no connection between these elements. Attachment was updated so please download again and check if you have good PCB :)

  11. Hi
    Greetings from Croatia.
    Thank you for sharing this wonderful project. No doubt it will help a lot of people. I see you made HVPP too! I’m looking foward to see that project completed. Excelent site, with many usefull projects. You should put the link for donations! Keep up the good work!

  12. Hi!
    I have very interesting situation, not described on whole internet :)
    After half of year of using mega328p, I bought my first attiny2313 and programmed it couple of times while it working in default speed – 1 MHz. Then I add crystal and capacitors and change fuse bits. Then I program changed blinking example. All is ok. But somehow my attiny2313 looses calibration code and signature code. I can still program and change fuse bits while using -F switch for avrdude, but I cannot get back signature code and calibration code. If I use it with external crystal 16MHz, then timings are ok. But without calibration code and with internal calibrated (now – uncalibrated) oscillator it runs almost in ~1,7 MHz. I calculate/guess the value for OSCCAL register and add row to blinking example at the very start – OSCCAL = 0x60. So now this attiny2313 is running at 1 MHz – I checked with chronometer :) Have you any suggestion? Can it be reverted to initial state as it come from shop – with calibration code?

    • Hi
      This happens very rare but it happens, Atmel does not say anything about this. It can not be fixed, the signature bytes can not be (theoretically) erased or changed. I got on my desk two chips with erased signature – Tiny13 and Mega8 – both are FF FF FF and i must use with -F option while programming, but i use internal 8MHz clock in the M8 and it work very well – i did not check the calibration bytes.

      Check this thread on avrfreaks forum:
      But you will not learn anything new. I did not found any other info about signature erasing..

  13. Can I change attiny2313 uC with AT90s2313?

  14. Congratulations
    This is an issue ‘too controversial’ … There is a lot of ‘chatter’ on the web and you did a decent project.
    Again … Congratulations
    Eduardo – Brasil
    Jest to kwestia ‘zbyt kontrowersyjny’ … Tam jest dużo gadać w internecie i zrobił porządny projekt.
    Znowu … Gratulacje

  15. Witam, ja mam problem, ale najpierw zacznę od pytania. Mianowicie jak powinien być ustawiony zegar w attiny? i czy dzielenie taktowana przez8 ma być włączone? Teraz problem- wykonałem płytkę, wlutowałem wszystkie elementy, łączyłem i nie działa poprawnie! W Attiny13 mam wyłączony reset i chciałem go uruchomić. Jedyne co wykazuje układ to albo świecąca, albo pulsująca (w zależności od zworek) czerwona dioda. Jak wyjmę Attiny13, to nawet bez układów diody zachowują się tak samo. Nie widzę w płytce błędów, próbowałem wgrywać na dwóch attinach2313, i dwie wersje oprogramowania- cały czas to samo. Jeżeli chodzi o uwagę manekinen dotyczącą błędu na płytce, został on wyeliminowany. Proszę o pomoc.

    • Zegar wewnętrzny 4MHz, dzielenie wyłączone – przecie to jest ładnie napisane u góry :)

      Tzn jak pulsujące diody w zależności od zworek? Jak to się zachowuje? Która zworka i która dioda? Diody nie powinny migać bez włożonego pacjenta, miganiem sygnalizują stan który można uzyskać dopiero po poprawnym odczytaniu procka, czyli albo zabezpieczenie lockbit albo niemożność zapisania nowych fusków.

    • Oczywiście o fusebitach 2313 nie doczytałem, ale to nie zmieniło problemu. Znalazłem jednak parę usterek. Mianowicie u mnie musiałem zmienić rezystor R1 z 4,7k na 1k. Wtedy w ogóle układ zaczął komunikować się z tiny13. Poza tym miałem wlutowane uszkodzone tranzystory i tutaj dobra rada, do zastosowań cyfrowych lepiej dać BC317 niż BC547, które u mnie szybko ulegają uszkodzeniu. Teraz doktor działa jak należy. Jedynym niezrozumiałym do tej pory problemem jest świecenie lub pulsacja diody BAD bez włożonego żadnego układu tiny, ale to już bez znaczenia. Bardzo dziękuje autorowi za pomoc przy rozwiązywaniu problemu oraz za udostępnienie swojego projektu. Wiem ile czasu i wysiłku wymaga projektowanie i wykonywanie takich układów , więc jeszcze raz dziękuje.

    • :)

      Niechaj długo służy i ratuje procki :)

      Czemu BC317? Jest to po prostu tranzystor o większej wydajności prądowej, i w tym przypadku nie ma innych różnic. Nie jest tutaj wykorzystywany do przesyłania danych więc nie ma mowy o zastosowaniach cyfrowych, służy on jedynie do załączania napięcia. Jeśli BC547 ulega uszkodzeniu to znaczy że nie wyrabia prądowo a na płytce musi być jakiś błąd skoro tak się dzieje. Ile prądu pobiera układ podczas pracy?

      Z tą diodą nie wiem niestety o co chodzi, i dodam że program w sumie jest w wersji BETA czyli takiej która jeszcze jakieś drobne błędy może posiadać. Program niestety nie będzie już rozwijany, a to z powodu układu “atmega doctor” który naprawia również kilkunóżkowe procki attiny i jeśli będą jakieś poprawki przy ich obsłudze to tylko w atmega doctor a nie w tym.

  16. Hi,
    primarily thank’s to share your project ;-)
    I’m beginner…I’ve buyed 4 ATtiny45 but during fuses program (LPT-Ponyprog) 3 of each are dead. The 4th is ok, Ponyprog can recognise it! I’ve made your project (with your PCB) but when i try to restore fuses, red led is flashing. If I try with the ok one, the green led remain on.
    I’ve try to close reset switch without any results.
    I think my hardware replica is not totally ok. what do you think about? Sorry for my English…i hope you can understand my question.


    • If you get the GREEN light with the good one tiny45, it means that doctor recognizes and successfully fixes your chip. And it seems that everything is ok. Maybe those 3 dead chips are not killed by wrong fuses settings. Maybe they are damaged in other way, it seems like doctor can read signatures but for some unknown reason new fuses are not burned correctly. I have a atmega88 with same problem, fuses are frozen and dont know any solution for that.

  17. hi,
    … it is true, two of three are broke by my interface (the destination of ATtiny45) for a wrong 12V. One is resurrected ;-)
    Now the situation is this:
    if I press the button without closing the switch, responds solid green if the fuses are original factory, flashing red when he finds them changed. But it seems not to make any action.
    If I press the button closes the switch “reset” erases the flash memory but does’t restore the fuses.
    If I press the button closing the other switch, remove the flash memory and resets the fuses.
    The last thing … what does it mean when the LED alternately flashes red and then the green one?
    Thanks a lot.

  18. Hi!

    Its great construction, congratulation!

    But I have some problems. I try restore fusebits on my ATtiny12 with fuses NoSPIEN and RSTDISABLe, but got Green and Red LED flashing by rotation.

    Also, as for me, there is mistake in code.

    Sdi_data = &B10000000
    Sii_data = &B01001100

    Sdi_data = &B00000000
    Sii_data = &B01100100

    Sdi_data = &B10000000 <— must be &B00000000 (read from datasheet)
    Sii_data = &B01101100



    • You are right, data for data line in instr.3 should be 0000 0000. Don’t know why there is 1000 0000 – but it works ok with few chips that i tested – SDO goes high and chip is erased.

      Other problem is that, instructions for chip erase for attiny12 differs from other uC’s. It requires 4 instructions for chip erase command… other chips only 3 instructions. I did not tested this with attiny12, and it seems it wont fix that :/

      Did you try to run program with this fixed instr.3?

    • I tried with right instruction and with 4 erase commands – but not got result.
      Now I try to rewrite all program on C because I don’t like Basic.

      BTW, 4 commands for erase have Tity 11, 12 and 15.
      May be you need another variable for “ChipNumber” ?
      Check “ChipNumber” in _chip_erase function and add needed commands.

    • But it is working ok with that bug on tiny13, tiny45, etc.

      Those datasheets are pretty messed up…
      In example, look in attiny13 datasheet > table.55 > instruction “read signature bytes”. It says “Repeats Instr 2 4 for each signature byte address”. How much time i wasted before i realized what was going on there (i was getting some trash instead of signature bytes). Then i looked in that table in datasheet of other u’c and bingo – it says “Repeats Instr 2 4 for each signature byte address”… that one dash character changing the whole procedure! And it worked.
      Other thing, while collecting data from datasheets, i found a bunch of different init procedures for HV programming. Some differs a lot, some a bit – but ALL chips initialize with ONE procedure (on my atmega doctor).

      I don’t see a reason why they would to make such differences in HVSP chips when it comes to stupid commands like a “chip erase” – maybe this is another bug in datasheets, because you tried to do it exactly like the datasheet says and with no success – maybe your tiny12 is hardware-dead?

  19. Hello!
    I have a problem with pcb board Fusebit repair , I dot now can-t work corect.
    Is posible this PCB have a bug? PCB ist for attiny25 with attiny 2313 driver.( I haven-t 12 v to pin 1 after start )
    Escuse my english, please help me.
    Best regards!

  20. Thank you very much for this kitt (for Attiny25) works perfectly, I saved many Attiny with him.
    I have a problem and I need your help:
    I have10 attiny25 and do not know how to recalibrate the internal oscillator as the frequency varies at all, neither has the same frequency acceptable
    Example: one Attiny 25 has calibration bit 0x4d, another have 0x90 etc.
    Is possible modify this bits?
    Thank you verry verry mutch for hepl(escuse my english, I live in romania.
    Best regards!

  21. 09.11.2010 – LAST UPDATE!

    PCB V3

  22. Well done! Thank you very much for this!!! (Found it on instructables)
    I made the circuit, but did not buy the 2313 chip yet. I get it in a week or so. Hopefully it will revive my dead ATtiny45 (if I don’t mess it up) :) :D

  23. I made the circuit (V3) and replaced BC547 with C9014. The circuit works fine and revived my Attiny45.

    Thank you very much !

  24. Witam kolegę i gratuluję pomysłu !!!
    Sam piszę w Bascomie, ale nie dałbym rady napisać tak fajnego programu (bardzo słaba znajomość angielskiego a co za tym idzie kłopoty z interpretacją datasheet).

    Wracając do rzeczy:
    Bardzo rzadko używam ATTINY (relacja cenowa do np M8), jednak tym razem zaszła taka potrzeba i potrzebowałem wykorzystać nóżkę resetu jako port.
    Zmontowałem na szybko fuse doctora i działa znakomicie !!!.

    Tak na marginesie – zdrowo mnie rozbawiły niektóre teksty. Na przykład o zastąpieniu BC547 mocniejszymi tranzystorami… Ręce opadają…
    Dla jasności dodam, że mam 62 lata i kocham mikrokontrolery :)))))

    Pozdrawiam serdecznie

  25. Tak na marginesie do powyższego
    Skompilowałem dla próby w bascomie i działa też dobrze.
    Zrobiłem tą próbę kompilacji dlatego, że np. Getrc5 nie chciało mi działać w najnowszej wersji
    Bascoma (problem już rozwiązałem).


    • Dzięki za słowa uznania :)

      Szkoda że Kolega wykonał wersje attiny, atmega fusebit doctor obsługuje juz 145 procków, w tym attiny :)

      Ten mój program może nie jest szczytem optymalizacji czy czytelności, ale myślę że pomoże w zrozumieniu działania tego interfejsu :)

      No niestety, nie tylko błędy są poprawiane w nowszych wersjach, niejednokrotnie zdarza się że dochodzą nowe.

      Pozdrawiam i dużo sukcesów życzę :)

  26. i can not unlock avr32 with atmega fusebit doctor. i from vietnamese. I can not find transistor BC547 and BC557. So , i replace transistor A1015 and C1815 but i can’t unlock. Every body help me find conponent replace it. Thank

  27. Witam szanownego kolegę po elektronicznym fachu. Trochę programuję mikroprocesory i od dawna marzył mi się takie urządzenie do naprawy zablokowanych uC. Dziś odpaliłem doktora dla m. in. dla Attiny 13 i myślałem, że układ nie odpali, ale “poszedł” za pierwszym razem. Nic nie mrugało jak u innych…Najpierw dla testu dałem Attiny 13 bez zablokowanych fuses i widziałem, że układ działa. Następnie ustawiłem pin resetu jako we/wy czyli zwykłe wyjście i oniemiałem z radości jak zielona dioda w doktorze się zapaliła po naciśnięciu przycisku!!! Skontrolowałem jeszcze czy uC żyje (poprzez programator) i okazało się, że tak…!!! Kolego jesteś wielki!!! Serdeczne dzięki za taki projekt…teraz czas na doktora dla Atmegi…Pozdrawiam Łukasz :-)

  28. zbudowałem wersje V3 . Niestety układ nie pracuje , po włożeniu ATtiny 15 naciskam przycisk i po chwili zaświecają się obie diody . Nie mam pomysłu co to może być

  29. Skajite pojaluysta kakie fuse stavit nado dlya proshivki tiny2313 i kakuyu nado ispolzovat?hex ili bin ili bas?
    i v proshivke atmega8 kakuyu bin ili hex
    ya ranshe proshival tolko hex ? a dlya 4ego drugiye
    spasibo zaranee


  31. Człowieku,wspaniałe konstrukcje.Wyleczyłem prawie ok.196 sztuk attinek przy Twojej pomocy. Bozia żeby Ci dała za to bardzo dużo,dużo zdrowia.

  32. Thank you, thank you, thank you!

    In just one evening of intense breadboarding, part matching, and googling I managed to rescue a dear friend(an ATtiny85).

    Now my homemade Trinket can live again!

    I know this project has been superseded with your newer project, but was still critical to me since all I had was a spare ATtiny2313. Since I’ll probably need the circuit again :-) I am going to make this permanent!

    Thank you for your work and sharing it on this site.

  33. Hi, is it possible to have the C source code please?

Leave a Reply

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

Please leave these two fields as-is: