Programator ISP dla mikroprocesorów z rodziny AVR na USB.
Z powodu zakupu nowego laptopa, który nie posiada już portów LPT byłem zmuszony do zbudowania programatora ISP działającego na porcie USB. Po kilku chwilach spędzonych w internecie wybór padł na programator zamieszczony na stronie http://www.fischl.de/usbasp/.
Na powyższej stronie widnieje kilka wersji tego programatora, niemniej są to wszystko takie same programatory tylko w inny sposób zrealizowane.
Osobiście wybrałem wersję zaprojektowaną przez J.A. de Groot.
Wersja ta jest zbudowana w całości na typowych elementach bez użycia elementów SMD, tym samym najprostsza w budownie.
Schemat programatora
Płytka programatora (3x8cm)
Schemat programatora i płytki do pobrania tutaj. (format EAGLE)
Ponieważ jak widać na schemacie ATMEGA8 taktowana jest kwarcem 12Mhz ważne jest aby była ona wersią pracującą do 16Mhz czyli powinna posiadać oznaczenia ATMEGA8-16AU. W innym przypadku programator nie będzie działał poprawnie.
Po wykonaniu płytki i wlutowaniu wszystkich elementów przechodzimy do programowania.
Programowanie
mikroprocesora.
Ponieważ robiłem programator na USB a poprzednio używałem programatora na LPT1 i programu Adama Dybkowskiego musiałem posłużyć się innym komputerem wyposażonym w port LPT1 do zaprogramowania nowego programatora.
Na płytce zwieramy zworke JP1 "SELF PROGRAMMING". Podłączamy nasz programator pod USB (tylko po to aby zasilić nasz programator) oraz podłączamy złącza ISP pod port LPT1 w celu programowania.
Schemat podłączenia programatora pod LPT1
Opis wtyczki na programatorze USB
Uruchamiamy program Adama Dybkowskiego do programowania. Program
trzeba skonfigurować aby poprawnie działał. Po pierwsze w oknie głównym
wybrać z jakim kwarcem mamy nasz mikroprocesor, czyli 12Mhz. Następnie
trzeba wskazać na jakich pinach portu LPT mamy sygnały. Wybieramy z okna "ISP
cable pinout" opcję AT-Prog.
Następnie klikamy na przycisk
"READ SIGNATURE". Po tej czynności powinniśmy widzieć sygnature
mikroprocesora. Jeśli nie ma jej znaczy to, że albo
żle podłączyliśmy kabel lub nie zasililiśmy mikroprocesora. Dalsze programowanie w takim przypadku jest niemożliwe. Zakładając,
że mamy odczytana sygnature przechodzimy do wskazania FLASH (programu),
którym zaprogramujemy Atmega8.
W naszym przypadku jest to flash usbasp.atmega8.2007-07-23.hex
Zawsze najnowszy flash dostępny jest na stronie autora.
Następnie klikamy na przycisk "Erase
& program All" Czekamy, aż zostanie zaprogramowany mikrokontroler.
W przypadku gdy program zgłośi błąd w czasie programowania należy powtórnie
kliknąć przycisk "Erase & program All".
Ustawienia
FUSE BIT w Atmega 8.
Po
zaprogramowaniu FLASH przystepujemy do ustawienia FUSE BIT dokładnie
jak na rysunku poniżej.
HFUSE=0xc9
LFUSE=0xef
Po
ustawieniu bitów wg. rysunku klikamy w każdym wierszu w którym dokonaliśmy
jakiś zmian przycisk "Program"
Tak zaprogramowany mikroprocesor jest gotów do pracy.
Zdejmujemy zworkę JP1.
Od tego momentu podłączając nasz programator do USB powinniśmy w systemie Windows dostać komunikat, że znaleziono nowy sprzet.
Potem powinien pojawić się monit o podanie sterownika do naszego programatora.
Sterownik pod Windows do pobrania tutaj.
Podajemy ścieżkę gdzie mamy sterownik.
Jeśli wszystko poszło do tej pory dobrze programator jest gotów do pracy a w Menadżerze Urzadzeń w Windows powninniśmy mieć taką pozycję
Do programowania naszym programatorem będzie nam potrzebny program AVRDUDE koniecznie w wersji 5.2 lub nowszej! Starsze nie obsługują tego programatora!
AVRDUDE do pobrania tutaj.
Program avrdude.exe jest aplikacją konsolową, tzn. taką którą wywołuje się z wiersza poleceń. W zależności od parametrów wywołania program obsługuje różne programatory i procesory. W celu ułatwienia sobie pracy dobrze jest stworzyć plik bat i umieścić go w tym samym katalogu co program avrdude. Edycja i zmiana parametrów wywołania programu może być przeprowadzona za pomocą notatnika. Elementami niezmieniającymi się w konstrukcji linii wywołania programu są:
avrdude.exe -p { typ procesora } -c usbasp {dalsze instrukcje}
Odczyt następuje przy użyciu następującej konstrukcji:
Dla pamięci programu:
-U flash:r:'{plik ze ścieżką dostępu}':a
Dla pamięci programu: -U eeprom:r:'{plik ze ścieżką dostępu}':a
Zapis następuje przy użyciu następującej konstrukcji:
Dla pamięci programu: -U flash:w:'{plik ze ścieżką dostępu}':a
Dla pamięci programu: -U eeprom:w:'{plik ze ścieżką dostępu}':a
Weryfikacja następuje przy użyciu następującej konstrukcji:
Dla pamięci programu: -U flash:v:'{plik ze ścieżką dostępu}':a
Dla pamięci programu: -U eeprom:v:'{plik ze ścieżką dostępu}':a
Ustawienie fusebitów, i bitów blokujących następuje poprzez użycie następujących instrukcji:
Zapis:
Dla low fuse:
-U lfuse:w:{wartość w kodzie heksadecymalnym np. lfuse:w:FC}
Dla high fuse:
-U hfuse:w:{wartość w kodzie heksadecymalnym np. hfuse:w:FF}
Dla lock bits:
-U lock:w:{wartość w kodzie heksadecymalnym np. lock:w:00}
Odczyt
Dla low fuse:
-U lfuse:r:{nazwa urządzenia wyjściowego do którego zostanie skierowana wartość np. nazwa pliku}
Dla high fuse:
-U hfuse:r:{nazwa urządzenia wyjściowego do którego zostanie skierowana wartość np. nazwa pliku}
Dla lock bits:
-U lock:r:{nazwa urządzenia wyjściowego do którego zostanie skierowana wartość np. nazwa pliku}
UWAGA! Przy ustalaniu fuse bitów należy zwrócić szczególną uwagę na wartości parametrów wysyłanych do procesora, gdyż niewłaściwe wartości mogą doprowadzić do jego zablokowania.
Są dostępne dardzo fajne nakładki graficzne umożliwiające przyjemniejszą pracę z AVRDUDE.
Jedną z takich nakładek graficznych jest AVR8 Burn-O-Mat do pobrania tutaj. Zawsze aktualna wersja pod adresem http://avr8-burn-o-mat.aaabbb.de/avr8_burn_o_mat_avrdude_gui_en.html.
Oto jak wygląda ta nakłdaka.
Główne okno programu.
Okno do ustawiania FUSE BITS.
Programator bardzo fajnie i szybko programuje mikrokontrolery. Polecam zbudowanie go dla tych co nie posiadają w swoich komputerach portu LPT1.
Powodzenia w budowie.