Witam
Chciałbym przedstawić Wam moją wersję programatora STK500v2. Przy jej wykonaniu bazowałem na projekcie ze strony:
http://we.easyelectronics.ru/Asticon/stk500v2---new-edition.htmlWspomagałem się także materiałami z tej strony:
http://tuxgraphics.org/electronics/200705/article07052.shtml#07052lfindex0W porównaniu z pierwowzorem
- zrezygnowałem z bootloadera
- interfejs ISP oparty jest na sofcie (nie używam wbudowanego SPI). Dlatego też wyższe częstotliwości programowania (1,8MHz i 460kHz) nie są dostępne. Maksymalna częstotliwość linii SCK wynosi ok 375kHz (zmierzona).
- zastosowałem CH340G – jest tani
Co zmieniłem:
- poprawiłem niektóre linie w kodzie, tak aby mi było lepiej go analizować.
- zmieniłem bufory na 74LVC125A i 74AHC1G126
- dodałem przycisk do ręcznego włączania generatora wyjściowego. Dodatkowo jego wciśnięcie powoduje zmianę częstotliwości linii SCK na 115kHz. Ponowne przyciśnięcie wyłącza generator i ustawia częstotliwość SCK na max.
- dorobiłem automatyczną zmianę częstotliwości programowania pod avrdude (pod atmel studio działa zmiana częstotliwości bez tej protezy). Po „autoustawieniu” częstotliwość ta jest pamiętana do momentu restartu programatora (wyjęcie i włożenie do portu USB) lub do momentu wciśnięcia przycisku (zapalenie się czerwonej diody) – ustawiane jest 115kHz, ponowne przyciśnięcie ustawia częstotliwość maksymalną.
- zmieniłem rozmiar płytki – jest wielkości pendrive’a. Pociąga to za sobą pewne konsekwencję – rozmiary elementów SMD w większości to 805 dodatkowo umieszczone bardzo blisko siebie i przelotki są na polach lutowniczych elementów – cóż – coś za coś. Zależało mi na miniaturyzacji.
Co mi się nie udało
- nie wyłapałem wszystkich chochlików z kodu – tzn. programator działa, ale np. gdzieś autor projektu włączył jakiś timer, który nie wiadomo co robi i tak zostało – a ja to przeoczyłem.
- pod avrdude przy „dziwnych” częstotliwościach procesora jest problem z odczytaniem jego sygnatury. Częstotliwość SCK się nie zmienia – bo poprawnie procesor wchodzi w stan programowania (błąd przy wejściu w stan programowania wymusza zmianę częstotliwości SCK), ale przy odczycie sygnatury pojawiają się błędy. Problem do pewnego stopnia udało się wyeliminować – Doszedłem do wniosku, że stan wysoki i niski linii SCK musi trwać tyle samo (w miarę możliwości)
Depending on CKSEL Fuses, a valid clock must be present. The minimum low and high periods
for the Serial Clock (SCK) input are defined as follows:
Low:> 2 CPU clock cycles for fck <12MHz, 3 CPU clock cycles for fck >=12MHz
High:> 2 CPU clock cycles for fck <12MHz, 3 CPU clock cycles for fck >=12MHz
Nie mam oscyloskopu – kartka papieru, plik .lss i na piechotkę liczyłem takty……
Tam, gdzie uznałem to za stosowne dodałem NOP’y i metodą prób doszedłem do wartości optymalnej. Czasem zdarzy się błąd przy odczycie, ale za każdym razem udawało i się zmienić fusebity w procku. Nie jest to rozwiązanie, nie potrafię sobie jednak z tym poradzić. Nie wiem jak wymusić, aby avrdude wysyłało w przypadku błędu komendę do STK500 przetaktowującą linię SCK (tak jak robi to atmel studio). Zawsze można spróbować wciskając przycisk uruchamiający generator i przetaktowujący linię SCK na 115kHz. Ale są to naprawdę rzadkie przypadki – tam, gdzie częstotliwość linii SCK jest sporo mniejsza od czterokrotnie większą częstotliwością taktowania procesora, a mimo to udaje się wejść w tryb programowania (np.. attiny85 z częstotliwością 800kHz - 6,4/8 – za każdym razem wchodził w tryb programowania przy SCK 375kHz – chodź nie powinien, ale w czasie programowania wywalał błędy z sygnaturą. Dziwna sprawa, bo za każdym razem udawało mi się mimo to zmienić fusebity).
- minimalna częstotliwość pracy pod avrdude to ok 4,1 kHz. Niżej nie udało mi się zejść – wywalają się timeouty w avrdude. Ale bez problemu zaprogramowałem (wielokrotnie) procka taktowanego zegarem wewnętrznym 16kHz. W atmel studio można zejść do ok. 1,6kHz – taką częstotliwość zmierzyłem.
Jakie są zalety:
- sterownik do CH340G instaluje się łatwo (jakiś czas temu były z nim problemy – to ten sam sterownik jak przy klonach arduino)
- działa w miarę szybko
- małe wymiary
- współpracuje z avrdude i atmel studio (w tym drugim można sprawdzić napięcie zasilające procek, zmienić częstotliwość taktowania SCK, wałczyć i przeprogramować częstotliwość generatora zewnętrznego)
Schematu nie mam – robiłem na podstawie pierwowzoru gotową płytkę nanosząc zmiany w trakcie pracy. Za ewentualne błędy w kodzie (zwłaszcza ortograficzne) – przepraszam. Niektóre komentarze są niegramatyczne – kopiuj wklej z translatora gogle – projekt wyjściowy tworzony był w cyrylicy – autor jest Rosjaninem.
Autor projektu zamieścił kod, ja zrobię to samo – podając jednocześnie jego adres WWW.
Reasumując – wiem, że jest to stara konstrukcja, ale bawiłem się nią w celach poznawczych. Może kiedyś wezmę na tapetę MK2 z projektu LUFA. Zobaczymy.
UWAGA – na schemacie wkradł się błąd – użyty procesor to ATMEGA328 (nie ATMEGA8) !!!Można zastosować inne taktowanie (przyjazne dla USART) np. fosc = 11.0592MHz lub fosc = 18.4320MHz, tracimy jednak wówczas wartości generatora wyjściowego zbliżone do tych podawanych przez atmel studio. Prototyp robiłem dla fosc = 18.4320MHz.