Atmega fusebit doctor (HVPP+HVSP) – napraw fusebity

mega_fusebit_doctor_1Atmega fusebit doctor, jak sama nazwa mówi, to urządzenie do naprawienia nieumiejętnie przestawionych fusebitów w mikrokontrolerach z rodziny AVR. Największymi problemami jest ustawienie nieprawidłowego źródła zegarowego (fusebity CKSEL), wyłączenie programowania SPI (fusebit SPIEN), lub ustawienie pinu reset w tryb I/O (fusebit RSTDISBL). To proste urządzenie w ułamek sekundy naprawi mikrokontroler nadając mu ustawienia fabryczne.

Programowanie wysokonapięciowe

mega_fusebit_doctor_3O ile w pierwszym wypadku można poratować się generatorem zegarowym lub generatorem RC/kwarcowym, to w drugim i trzecim przywrócenie mikrokontrolera do życia nie jest możliwe przy pomocy programatora szeregowego SPI. Mało osób decyduje się na budowę programatora równoległego, a to dla tego że jest niewygodny w użyciu, a to dla tego że taniej kupić nowy mikrokontroler niż się bawić w jakieś naprawy. Na dłuższą metę jednak, zbudowanie tego urządzenia okazuje się bardzo dobrym pomysłem.

Przedstawiane urządzenie wykorzystuje możliwość programowania równoległego oraz szeregowego wysokonapięciowego. Są to metody programowania pozwalające dobrać się do układu z wyłączonym resetem czy isp:
HVPP = high voltage parallel programming = wysokonapięciowe programowanie równoległe.
HVSP = high voltage serial programming = wysokonapięciowe programowanie szeregowe.

Lista obsługiwanych układów:

Urządzenie obsługuje obecnie 145 układów, choć nie ze wszystkimi było testowane. Testowane układy są podświetlone na zielono. Zgłaszasz problem – wydaję poprawkę :)
1kB:
AT90s1200, Attiny11, Attiny12, Attiny13/A, Attiny15
2kB:
Attiny2313/A, Attiny24/A, Attiny26, Attiny261/A, Attiny28, AT90s2333, Attiny22, Attiny25, AT90s2313, AT90s2323, AT90s2343
4kB:
Atmega48/A, Atmega48P/PA, Attiny461/A, Attiny43U, Attiny4313, Attiny44/A, Attiny48, AT90s4433, AT90s4414, AT90s4434, Attiny45
8kB:
Atmega8515, Atmega8535, Atmega8/A, Atmega88/A, Atmega88P/PA, AT90pwm1, AT90pwm2, AT90pwm2B, AT90pwm3, AT90pwm3B, AT90pwm81, AT90usb82, Attiny84, Attiny85, Attiny861/A, Attiny87, Attiny88, AT90s8515, AT90s8535
16kB:
Atmega16/A, Atmega16U2, Atmega16U4, Atmega16M1, Atmega161, Atmega162, Atmega163, Atmega164A, Atmega164P/PA, Atmega165A/P/PA, Atmega168/A, Atmega168P/PA, Atmega169A/PA, Attiny167, AT90pwm216, AT90pwm316, AT90usb162
32kB:
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
64kB:
Atmega64/A, Atmega64C1, Atmega64M1, Atmega649, Atmega6490, Atmega649A/P, Atmega6490A/P, Atmega640, Atmega644/A, Atmega644P/PA, Atmega645, Atmega645A/P, Atmega6450, Atmega6450A/P, AT90usb646, AT90usb647, AT90can64
128kB:
Atmega103, Atmega128/A, Atmega1280, Atmega1281, Atmega1284, Atmega1284P, AT90usb1286, AT90usb1287, AT90can128
256kB:
Atmega2560, Atmega2561

Opis:

mega_doctor_renderUrządzenie jest niezwykle proste i tanie w budowie, wystarczy tylko Atmega8 (lub kompatybilny, patrz dalej) w roli doktora, dwie diody LED, zworka, stabilizator, tranzystory. Wystarczy podłączyć „uwalony” uC i wcisnąc przycisk START a układ wykona żądaną operację i nasz pacjent zostanie przywrócony do życia. Na płytce znajdują się trzy gniazda, dla procesorów zgodnych pinowo z atmega8, atmega16, i attiny2313 – czyli takich najpopularniejszych. Dodatkowo na płytce znajduje się złącze goldpin żeńskie z wyprowadzonymi wszystkimi potrzebnymi sygnałami, do podłączania adapterów:
#1 HVPP adapter” jako rozszerzenie HVPP dla procesorów kompatybilnych z 20pin Attiny26 oraz 40pin Atmega8515
HVSP adapter” dla procesorów HVSP 8pin oraz 14 pin attiny, których nie można programować równolegle z powodu zbyt małej ilości pinów.
Istnieje możliwość wykonania własnych dodatkowych adapterów pod inne rodzaje procesorów w obudowach DIP czy też SMD. Nie trzeba jednak wykonywać adaptera aby naprawić jeden procek, można to zrobić przy pomocy płytki stykowej łącząc sygnały z odpowiednimi pinami. Jak? Zajrzyj do noty katalogowej twojego AVRa, przejdź do „memory programming” a następnie „parallel programming” – nazwy sygnałów i pinów jak na tacy. Wszystkie piny są podpisane pod podstawką DIP40, a w załączniku znajduje się też projekt „pustego” adaptera. Płytka jednostronna, o wymiarach 55mm x 92mm. Na wierzchniej części należy wlutować kilka zworek, lub, płytkę można wykonać także jako dwustronną. Zasilanie 12V stabilizowane. Rezystory R7 do R23 moga mieć wartości od 100 ohm do 1K, proponuję raczej 330ohm. Należy pamiętać że trzy piny bitów z linii danych są także wykorzystywane przez programator ISP do aktualizacji programu – urządzenie nie będzie prawidłowo działało jeśli np podlutujemy się do nich z programatorem.

UWAGA!
Podczas montażu podstawki DIP40 należy usunąć z niej metalowe złącza od 29 do 37 pinu! Ścieżki przechodzące w tych miejscach nie mogą zostać elektrycznie połączone z pinami włożonego procesora, a biegną tamtędy aby uprościć samą płytkę. Na obrazku po lewej zaznaczyłem które to piny.


Działanie układu:

fusebit_doctor_adapters_4Zworka ALLOW ERASE zezwala na wymazanie całej pamięci w przypadku ustawionych Lockbitów (bez ich wykasowania nie jest możliwe przestawienie Fusebitów). Po podłączeniu układu i wciśnięciu przycisku START program inicjuje tryb programowania wysokonapięciowego. Czy jest to HVSP czy HVPP zależy od konfiguracji sprzętowej, po ludzku mówiąc, układ sam wykryje włożony adapter HVSP i automatycznie będzie w tym trybie pracował. Bez tego adaptera pracuje w trybie HVPP. Pierwsze co układ robi, to czeka na stan wysoki na pinie RDY/BSY co oznacza prawidłowe wejście w tryb programowania. Po tym odczytuje sygnaturę podłączonego mikrokontrolera i sprawdza czy jest w stanie go obsłużyć. Następny krok to wymazanie całej pamięci jeśli użytkownik na to zezwolił. Następnie sprawdzane są lockbity, i jeśli nie blokują dostępu, doktor odczytuje fusebity i porównuje je z fabrycznymi zapisanymi w bazie. Jeśli się różnią, zapisuje te fabryczne, uwzględniając czy dany model pacjenta posiada extended fusebits, czy nie. Niektóre starsze układy AVR mają jedynie jeden bajt fusków – LOW – i to także jest brane pod uwagę. Program na końcu weryfikuje poprawność zapisanych danych i zapala odpowiednią diodę.

Oznaczenia diod:

świeci zielona – fusebity naprawione i zweryfikowane, układ naprawiony. Jeśli jest ustawione zabezpieczenie lockbit, to tylko sprawdza czy fuski odpowiadają fabrycznym, i jeśli tak to także zapali tę diodę.
świeci czerwona – problem z odczytaniem sygnatury, brak układu, lub brak sygnatury w bazie.
migająca zielona – sygnatura odczytana, fusebity się nie zgadzają z fabrycznymi, ale ustawione są lockbity i trzeba zezwolić na wymazanie pamięci aby je naprawić (czytaj dalej).
migająca czerwona – sygnatura odczytana, lockbity wyłączone, ale nie można z jakichś powodów zapisać nowych fusebitów.

Terminal:

Terminal jest tylko opcjonalny, urządzenie działa bez niego a wszystkiego dowiemy się z samych diod…
Na płytce dodatkowo znajduje się złącze opisane jako RS232, jest to wyjście UARTa, podłączając się pod nie, dowiemy się wszystkiego o przebiegu operacji naprawy – przykładowe zrzuty w galerii poniżej. Informacje przez uart są wysyłane na bieżąco. Aby połączyć urządzenie z komputerem, użyć należy odpowiedniego konwertera. Jeśli w komputerze mamy gniazdo COM dla RS232, użyć można prostego konwertera zbudowanego w oparciu o układ MAX232 (np taki). Jeśli używamy laptopa, użyć należy konwertera na USB (może być taki lub taki).

Ustawienia dla terminala:
baudrate: 4800
parity: none
databits: 8
stopbits: 1
handshake: none

Inne:

prototype_docW roli układu-doktora można użyć jednego z następujących mikrokontrolerów: Atmega8, Atmega88, Atmega88P, Atmega168, Atmega168P, Atmega328, Atmega328P – oraz ich nowsze/niskonapięciowe wersje „A” czy też „L”. Wsady znajdują się w odpowiednio opisanych folderach.
Zasilanie układu to stabilizowane 12V. Większe napięcie może uszkodzić naprawiany układ!

Program został napisany na podstawie opisu programowania równoległego oraz szeregowego wysokonapięciowego, zawartego w każdej z not katalogowych mikrokontrolerów AVR, (memory programming – parallel/serial programming). Projekt rozpoczęty jeszcze w 2008 roku, ale z braku czasu porzucony, teraz (2010) wykonany na nowo. Jeśli szukasz dedykowanego urządzenia do odblokowania procesorów Attiny, sprawdź mój poprzedni projekt, Attiny fusebit doctor. W projekcie ujawniły się jednak błędy a nie jest on już rozwijany z powodu powstania „Atmega fusebit doctor” który obsługuje wszystkie procesorki Attiny. Opublikowałem tam jednak kod źródłowy, i posiłkując się w/w rozdziałem noty katalogowej, można szybko zrozumieć omawiany mechanizm.


Fusebity:

Wewnętrzny zegar 1MHz oraz włączony bit EESAVE, patrz plik README.
Jeśli używasz nowego układu w roli doktora, to nie musisz nic przestawiać ponieważ fabryczne ustawienia są dobre i układ działa już na wewnętrznym 1MHz. Bit EESAVE nie jest konieczny, powoduje on że zawartość pamięci eeprom nie jest kasowana w przypadku aktualizacji programu – w eeprom układ zapisuje licznik naprawionych układów, którego wartość jest słana po rs232 w celach czysto statystycznych. Więc olej ten fusebit jeśli chcesz.



AKTUALIZACJA 2.1X DAJE NOWĄ FUNKCJONALNOŚĆ!

Wyślij własne fusebity i lockbity przez terminal, pracuj z układami z uszkodzoną sygnaturą. Jeśli dołączysz pin Tx terminala do pinu RX doctora – tryb manualny uruchomi się automatycznie. Wymaga to aby pin Tx terminala był w stanie wysokim w czasie bezczynności, musi on podciągnąć rezystor ściągający 10K. Jeśli tak się nie stanie (połączenie przychodzące odłączone) to doctor będzie pracował w trybie automatycznym (jak dotychczas).

CO I JAK:
Najpierw, doctor odczyta sygnaturę. Jeśli odczyt się nie powiedzie, poprosi o ręczne jej wpisanie. Wpisz dwa ostatnie bajty sygnatury w HEX (4 znaki) i wduś enter.

Następnie doctor spróbuje odczytać układ na podstawie podanej sygnatury.
Jeśli się powiedzie, wybierz jedną z opcji:
1 – write fusebits – zapis fusebitów wartościami z bufora (początkowo fabryczne).
2 – modify fusebits – opcja pozwala na ręczną zmianę fusebitów, dane w buforze się zmienią. Wpisz jeden bajt w HEX (2 znaki) i wduś enter. Powtarzaj dla każdego bajtu (jeśli istnieje).
3 – set lockbits – wpisz wartość lockbajtu, jeden bajt w HEX (2 znaki) i wduś enter.
Pamiętaj że nieużywane bity zawsze muszą być 1! Np, jeśli chcesz włączyć LB1 i LB2, wpisz FC (11111100)
4 – erase the chip – wymazanie całej pamięci i lockbitów, dla bezpieczeństwa wymagana zworka „allow erase”.
5 – end – zakończ programowanie i zwolnij napięcia – można wyjąć układ.

Zobacz jak został naprawiony Attiny13 z uszkodzoną sygnaturą.
Zobacz jak ten sam układ został z powrotem „zepsuty”.
Nie sugeruj się diodami w trybie manualnym – migają jak chcą :)
UWAGA – Firmware 2.1x WYMAGA aktualizacji płytki do wersji 2h!


Galeria:


Pliki:

POBIERZ – ARCHIWUM wszystkich poprzednich aktualizacji. Wsady + płytki.
Historia zmian w pliku README. -WERSJA SMD TUTAJ-
Nie musisz tego pobierać, najnowszy komplet plików znajduje się poniżej.


POBIERZ – AKTUALIZACJA #11, 30.04.2011:
Program ver.2.11 – poprawki
Fusebity: patrz plik README

Poprawiono błąd nie zapisywania się fusebajta HIGH (dotyczy wszystkich procków!)
To „tylko” literówka którą sieknąłem przy optymalizowaniu programu do 2.10 :)

POBIERZ – Adapter SMD:
4 pola układów, kompatybilnych z: T2313, M8, M16, M128 – wszystkie przetestowane.
Do dociśnięcia układu należy użyć silnych spinaczy do papieru.


FAQ – czyli często zadawane Pytania i Odpowiedzi: (aktualizacja 2014-02-01)

P: Brak żadnego znaku życia, diody się nie zapalają.
O: Poważne błędy na płytce lub źle zaprogramowany procesor.

P: Zapala się czerwona dioda.
O: Procesor nie jest rozpoznawany. Wykonaj pomiar napięć. W czasie bezczynności, zmierz napięcia na liniach +12 RESET oraz +5 SUPPLY w złączu goldpin żeńskim – powinny wynosić 0V, lub być bliskie 0V. Po naciśnięciu przycisku START, napięcia te na czas około sekundy powędrują do wartości bliskich +5V oraz +12V. Jeśli jest inaczej, upewnij się że użyłeś dobrych tranzystorów i wlutowałeś je poprawnie.

P: Zapala się czerwona dioda.
O:Błędy na płytce, ścieżki są gęsto upakowane i bardzo możliwe że jest gdzieś niewidoczna przerwa, zwarcie, lub zimny lut. Sprawdź wszystko miernikiem, ale DOKŁADNIE.

P: Zapala się czerwona dioda.
O: Podłącz urządzenie do terminala aby odebrać log z naprawy. Wciśnij start aby odebrać dane.

P: Odebrano „Init programming…” i nic więcej – LUB – odebrana sygnatura to „00 01 02” lub „FF FF FF”.
O: Włożony procesor jest uszkodzony, lub występują błędy na płytce – patrz wyżej.

P: Odebrana sygnatura to „1E 90 00″, ” 1E 1E 1E”, lub coś podobnego (przypominającego sensowne dane)
O: Włożony procesor jest sprawny, inicjuje się, na płytce są zwarcia na liniach DATA, BS, XA.

P: Zapaliła się zielona dioda / odebrano „Verifying… – OK!” ale procesor nadal nie działa w zwykłym programatorze
O: Fusebity na 100% zostały naprawione, procesor posiada uszkodzony sprzętowy SPI lub posiada inne uszkodzenie.

P: Co w logu robi „Read Signature… FAIL!” oraz „Trying T2313 pinout… OK”?
O: Wszystkie układy z 20pinami trzeba traktować nieco inaczej. Urządzenie domyślnie próbuje odczytać procesor wg standardowego schematu, i jeśli się to nie powiedzie („FAIL!”), to próbuje schematu dla ukłaów 20pinowych zgodnych z T2313 i dopiero układ zostaje odczytany. Jest to normalne zachowanie, nie jest to żaden błąd.

P: Co na początku logu robią krzaki typu „<[2J" ? O: Jest to sekwencja czyszczenia ekranu terminala, w ustawieniach włącz emulację „VT100”.

P: Próbuję wysłać znaki na terminal w wersji 2.10, ale żadne się nie pojawiają.
O: Upewnij się że w ustawieniach terminala opcję handshake ustawiłeś na NONE.

P: Po wpisaniu znaków nie mogę ich zatwierdzić enterem i wpisać kolejnych.
O: Przy wciśnięciu „enter/return” terminal musi wysłać znaki CRLF, sprawdź w jego ustawieniach.

P: To mi nadal nie pomaga, próbowałem wszystkiego i ciągle mam problem.
O: Zapytaj w komentarzach poniżej :) Podaj wersję softu oraz wersję płytki z którymi walczysz. Wklej odebrany log naprawy (w formie tekstowej).

P: Czy rezystory szeregowe 1K (R7 do R23) są tu na prawdę potrzebne?
O: Nie, możesz zbudować układ bez nich. Pamiętaj jednak, że jeśli z jakiegoś powodu pacjent nie wejdzie w tryb programowania i będzie wykonywał swój kod, to konflikt stanów na pinach obydwu mikrokontrolerów może je nieodwracalnie uszkodzić. Te rezystory są zabezpieczeniem przed takimi sytuacjami, i sugeruję zbudowanie pełnego układu wg schematu.

P: Rezystory ściągające linie 12V i 5V (R24 i R27) dosyć mocno się grzeją w trybie ręcznym, układ przez to pobiera sporo prądu, czy mogę je zmienić na jakieś większe?
O: Tak, ale układ może działać niepoprawnie ze wszystkimi pacjentami. Napięcia podczas spoczynku muszą mieć wartości bliskie 0V, a podczas załączania i wyłączania tych napięć zbocza powinny być odpowiednio strome aby zachować zależności czasowe (patrz nota, inicjowanie programowania wysokonapięciowego). Jako że w układzie zastosowane są zwykłe tranzystory bipolarne, te rezystory gwarantują zachowanie powyższych wymogów. Ciekawym przypadkiem z jakim się spotkałem była attiny2313 w której zapisywały się wszystkie fuski oprócz RSTDISBL, ponieważ jak się okazało poprzez nieodpowiednio strome zbocza napięcia 12V, procesor prawdopodobnie pracował w trybie równoległym ale nie wysokonapięciowym i nie pozwalał na zmianę tego fuska – jest to moja własna interpretacja także mogę się mylić.

P: Mój procesor jest odczytywany ale doctor nie może zmienić w nim fusebitów, mimo tego że mam założoną zworkę allow erase.
O: Jeśli programator ISP również nie potrafi zmienić fusków ale je odczytuje, to pacjent jest uszkodzony i nic z tym nie zrobimy.

P: Bez włożonego pacjenta układ zachowuje się dziwnie, zawiesza się, a jak przystawię palec do płytki to rusza.
O: Układ nie jest przeznaczony do pracy „na pusto”. Dzieje się tak, ponieważ przy próbie inicjacji trybu wysokonapięciowego, układ czeka na stan wysoki od pacjenta na pinie RDY. Pin ten nie jest ściągnięty do masy i zachowuje się jako wejście o wysokiej impedancji, dla tego ładunek elektrostatyczny z palca jest odczytywany jako stan wysoki i układ rusza dalej z programem.

P: Nie wyświetlają mi się nazwy układów w logu, zamiast nich jest „no names in 8kB ver”.
O: Nazwy nie są wyświetlane przy korzystaniu ze wsadów 8kB, t.j. dla atmega8 i atmega88 – ponieważ nazwy nie mieszczą się w ich pamięci. Jeśli zależy ci na wyświetlaniu nazw, użyj układu atmega168 lub atmega328 i wgraj odpowiedni wsad.

ZAWSZE wgrywaj najnowszą wersję wsadu. Pliki hex oraz bin to wsady dla pamięci flash, użyj jednego z nich. Pamięci eeprom nie programujemy.

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


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

1 207 komentarzy

  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..

    • the 4.7k resistor on the circuit needs to be exactly 4.7k or can i put higer or lower value then 4.7k, and if so whats the range?

    • Facet poświecił swój czas wymyślił coś takiego, udostępnił swój projekt dla wszystkich, nie płacisz za to ani centa i jaszcze marudzenie. Weź się gnoju sam za robotę a nie stękanie jakieś. Przepraszam wszystkich ale nie cierpię takich ludzi. Podać mu wszystko na tacy i jeszcze źle. Księciunio jakiś czy co?

    • Stary, żebyś ty wiedział co ja czasem przez formularz kontaktowy dostaję…

  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 :(

    • If you look closely you can see their stickers. Used a label maker.

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

    ENG:
    Hello!
    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?

    Frank

    • 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.
    Ahoj.

  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?

    tnx.

    • And your fw version is? 2.10 is bugged so it doesnt write high byte, use 2.11 if thats the 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.

    • W załączniku masz projekt adaptera HVSP który należy wykonać aby móc odblokowywać procki HVSP.

    • Rzeczywiście, przeoczyłem to. Dzięki.

  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:

    MANUAL HVPP MODE

    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.

    Greetings,

    Ralph

  22. StrangerIV

    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.

    • This is terminal clear screen command. Enable VT100 emulation in settings, should work.

    • Hi, thanks for your answer.

      My problem was located in a bad connection of MAX232 positive
      supply. It was connectec to the 5V when should be in out of 7805.

      After correctec this connection, the circuit work as planned.

      Thanks for all and sorry for my bad english.

  24. Where and how to buy the pcb ?

  25. Dzien dobry,
    Czy jest mozliwosc u was kupic juz gotowy produkt? Jestem z litwy.

  26. Thomas Kilian

    And a 2nd thing: a step-up voltage converter from 5V to 12V would also be nice and it’s now only about 5€ (plus induction a schottky, a capacitor and a resistor). For connection to a USB programmer that would be really a wonderful design.

  27. Złożyłem Twój układ, ale działa dopiero za którymś razem (kilka kliknięć i mruga czerwona dioda, za 4-10 razem zapali się zielona i „naprawiany” procesor jest wykrywany przez programator. Czy użycie rezystorów 1k zamiast 330R może powodować taki efekt, czy przyczyna jest gdzie indziej?

    • Może to być przyczyną. Jak podepniesz terminal to będzie można to stwierdzić (przekłamania w odbieranych w danych).

  28. Czesc, po probie naprawienia atmegi8 doctorem zapala mi sie zielony led, natomiast przy probie polaczenia sie z „naprawionym” uc przez mkavrcalculator dostaje komunikat:

    avrdude.exe: set SCK frequency to 2000 Hz
    avrdude.exe: warning: cannot set sck period. please check for usbasp firmware update.
    avrdude.exe: error: programm enable: target doesn’t answer. 1
    avrdude.exe: initialization failed, rc=-1
    avrdude.exe: AVR device initialized and ready to accept instructions
    avrdude.exe: Device signature = 0x000000
    avrdude.exe: Yikes! Invalid device signature.
    avrdude.exe: Expected signature for ATMEGA8 is 1E 93 07

    avrdude.exe done. Thank you.

    czy mikrokontroler jest juz „na dobre” uziemiony?

  29. Danke für dieses Projekt. Diese Schaltung „der Fuse Doktor” ist eine große Bereicherung! Verfuste Megas gehören der Vergangenheit an. Kann ich jeden empfehlen!!!
    Problemlos nach zu bauen, PCB- PDF einfach auf Laserdrucker- Farbpapier ausdrucken, auf Leiterplatte Bügeln, abkühlen lassen, Papier entfernen, Ätzen… löten, fertig…Top Projekt…!!!

  30. Jakby ktoś potrzebował opinii, bo autor nie zaznaczył że testował – z procesorem AT90PWM3B działa doskonale.

    Works fine with AT90PWM3B.

    • Dzięki, dodałem.

      W ogóle zastanawiające jest to że projekt z 2010r ciągle jest powielany i używany, widać AVR odniosło swój sukces i nadal jest wykorzystywane na szeroką skalę, tylko z tymi fusami projektanci dali trochę ciała :)

    • Pomoc podłączenia AT90PWM3B! sergsha@list.ru

    • Did not understand how to connect AT90PWM3B if you can tell me .
      thank you

  31. Did not understand how to connect AT90PWM3B if you can tell me .
    thank you

  32. Hello sir…
    Thanks a lot for very good Design and PCB circuit .
    Please sir : there are a Resistance 1K you put it in schematic but isn’t in Board ???
    that connected with Reset Pin as Pull-Up Res

  33. noga 25 procka niezaznaczona połączenia do BS2 tylko na tym zdjeciu na schemacie jest

  34. chodziło mi o zdjęcie w folderze sockets dla Atmega 8

  35. Dziękuję za doskonałe „koło ratunkowe” dla (takim jestem) początkujących z AVR’ami.
    Dodałem drobiazgi: bardziej rozbudowany układ zasilania (12 i 5V) oraz tranzystory i elementy pasywne zmieniłem na SMD 0805. Rezystory „ściągające” 100R to 2x200R SMD 1206. Wyeliminowałem z PCB (projekt w SL6) większość „ślepych” pinów. Pozostały w podstawkach, ale bez przelotu. By zwiększyć stabilność precyzyjnych podstawek w tych miejscach została ona przyklejona klejem „na gorąco”.
    Układ ruszył bez problemu. Tak w wersji ATmega8, jak i ATmega328P.
    Jeszcze raz serdecznie dziękuję. A że jest za co… dowodem są 4 uzdrowione 328’ki. Jedna z nich aktualnie rezyduje w AVRdoktorze. Należało jej się. :) Pozdrawiam – Janusz

  36. Wielkie dzięki, za udostępnienie tego projektu. Udało mi się naprawić ATmega328P, któremu wyłączyłem reset (Ehh.. nauka na błędach ;)).

    First time I assembled this, I put PNPs backwards (maybe because I got incorrect datasheet). If someone have problem with this circuit and there is no 5V on (+5V) line, then i suggest to verify that PNPs are properly connected.
    The other issue was, that i was running the circuit dry (without patient uC). So red LED turned on only after I had got up from the chair (funny.. ;)) – but this one is already in FAQ.

  37. Hello for all….
    I do it and it work perfectly , i fix a lot of dead AVRs
    but i want to run this doctor in manual mode can somebody help me
    i changed my connecting wires UART but it not running ?????

  38. :( not appear

  39. What i have to do ;(
    the doctor can’t write correct fuse bits ??

  40. what is the benefit from manual mode ?

  41. Built your AVR Fuse Doctor using my home made PCB, works a treat. Tested both automatic and manual modes both work as expected. Fixed two ATmega32 chips that I miss-programmed using avrdude. Thanks for sharing. A project like this represents a lot of hard work.

  42. Sergey Balanovsky

    Zdravstuyte. I want to assemble this device, very much it was pleasant and it is very necessary. Advise, the best, what of all versions of a firmware and printed circuit boards. There is no wish to remake then if I select not the working version…

  43. Witam,
    Można zapytać, gdzie można kupić gotowe urządzonko? Całość bądź płytkę do zmontowania?

  44. I designed a PCB based on your schematic.
    Although it seems to repair my chips I have a problematic serial connection.
    Please see this image.
    http://i66.tinypic.com/2h7ntpu.png
    Why do I get these weird characters? I have set up the connection like you say:
    VT100
    baudrate: 4800
    parity: none
    databits: 8
    stopbits: 1

    • You are sure that your uart-usb converter is ok? Maybe it reverts polarity or something?

      Or, another problem that you can rarely meet is that internal clock generator in Atmega chip can be way off from 1MHz. Theoretically, it should be calibrated by user at programming level, but you can not do it when you burn compiled FW. The more this generator is running off from set frequency, the more uart errors it generates… and it can be that bad. But it happens very rarely so i did not implement any sort of calibration in this software.

      So you can try to use another AVR chip if you can, or test your uart-usb converter with another device. Or try to toggle some options in terminal settings?

      Cheers

  45. Thanks for your reply. I feel so embarrased – I had forgotten to connect the ground pin on the ftdi board. Now it seems fine.
    The only thing is that sometimes I it cannot read the chip signature, and if I give it manually it tries to write the fuses and fails to verify them. It reads all of them as FF. The problem seems to go away if I keep pressing with my finger the ATmega8 on my PCB. It might be a bad solder joint. I checked everything with a multimeter but I couldn’t find the issue. What connections should I check first?
    Here is my PCB. Now I will start making the adapters. My next project will be your μProg. Hope everything is gonna be ok.
    http://i65.tinypic.com/28k61k8.jpg
    http://i64.tinypic.com/2qd7ts6.jpg

    • Well its a bit complicated circuit, one bad joint and it wont work, multimeter is not a good tool in that case. Just try to resolder every joint and check for improvement.

      I see you used 1K series resistors, 1K is the upper limit, this also might be the problem. For some people for some chips 1K was causing problems, 470ohm works way better.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Proszę pozostawić te dwa pola tak jak są: