Programator mikrokontrolerów AVR Marek SP9XUH www.sp9xuh.pl poczta@sp9xuh.pl Moja przygoda z mikrokontrolerami firmy ATMEL zaczęła się w 1999 roku od układu AT89C2051. Minęło parę lat, pojawiły się nowe procesory których mój stary programator nie obsługuje. Na początek postanowiłem zbudować prosty programator dla stosowanych w moich konstrukcjach układów Atmega8, 32, 64. Jest to zmodyfikowana wersja bardzo popularnego wśród elektroników urządzenia STK 200 firmy Kanda. Programator, pomimo prostej konstrukcji, umożliwia wykonanie wszystkich potrzebnych operacji na dołączonym mikrokontrolerze. Możemy odczytywać, zapisywać, kasować, weryfikować pamięć programu i danych a także ustawiać bity konfiguracyjne. Pozwala nam zaprogramować każdy procesor AVR i niektóre układy z rodziny 51 (np. AT89S8252). Komunikacja odbywa się poprzez port LPT, już trochę zapomniany, ale całkiem nieźle nadający się do tych celów. Procesory np. ATmega 8, ATmega64 możemy zaprogramować wkładając je do podstawek (28 i 40 nóżkowe) zainstalowanych w płytce. Wykorzystując złącze ISP, możemy połączyć programator z układem w którym procesor pracuje i tam go programować. Schemat ideowy Podstawową część programatora stanowi układ 74HCT244 (U2, 8-krotny bufor 3-stanowy) będący buforem zabezpieczającym z jednej strony port naszego komputera przed przypadkowym uszkodzeniem, z drugiej strony pozwalający mikrokontrolerowi na normalną pracę po zaprogramowaniu bez konieczności odłączania urządzenia od komputera. Rezystor R2 i R3 (100k) wymusza stan wysoki na wejściu bufora, co w przypadku odłączenia programatora od mikrokontrolera, zapobiega stanom nieustalonym. Sygnały MOSI, MISO, SCK, RST poprzez rezystory zabezpieczające R4 R7 wyprowadzone są na podstawki DIP28 i DIP40, a z rezystorów R8 R11 do gniazda ISP (G3).Rezonator kwarcowy X1 (16MHz taką częstotliwość stosuję najczęściej w swoich układach) z kondensatorami C5 i C6 podpięty jest do 12 i 13 nóżki podstawki DIP40 wejście zegarowe mikrokontrolera. Układ może być zasilany ze stabilizatora znajdującego się na płytce lub z układu w którym pracuje procesor. W pierwszym przypadku do gniazda G1 podpinamy źródło napięcia stałego lub zmiennego (prostowanego na D1) o wartości ok. 9V. Kondensatory C1 C4 filtrują napięcie zasilania. Stabilizator to 5 woltowy LM7805. Pobór prądu przez układ jest tak mały, że można w jego miejsce włożyć mniejszą, 100 ma wersję LM78L05. W drugim przypadku, napięcie +5V podawane jest z gniazda G3(2) poprzez diodę D3. 1
Płytka drukowana Spód płytki Odbicie lustrzane Mozaika od strony elementów Odbicie lustrzane Rozmieszczenie elementów Płytka zaprojektowana jest jako dwustronna. Ja zrezygnowałem z drugiej warstwy i parę połączeń które znajdują się na górnej warstwie (elementów), wykonałem cienkim drutem w izolacji. Pod układ U1 zamontowałem podstawkę. W podstawkach pod programowane procesory, obcinamy nóżki pod którymi przebiegają ścieżki. G2 to 36-pinowe, kątowe gniazdo drukarkowe DB36. Uruchamiane układu, to praktycznie tylko sprawdzenie czy nie popełniliśmy błędu przy montażu (zwarcia) oraz wartości napięcia zasilania +5V. Po włożeniu układu U2 w podstawkę programator jest gotowy do pracy. 2
Opis wyprowadzeń złącza ISP W tabeli przedstawiłem opis wyprowadzeń gniazda ISP Rozkład sygnałów magistrali SPI jest kompatybilny ze standardem firmy ATMEL. Układ w którym znajduje się programowany procesor powinien posiadać złącze w tym samym standardzie. Połączenie programatora z układem wykonujemy za pomocą taśmy 1:1 zakończonej złączami żeńskimi IDC10. Programowanie PIN I/O Nazwa Opis 1 I/O MOSI dane odbierane; podłączamy do linii MOSI mikrokontrolera 2 PWR VTG napięcie zasilania; +5V podawane kiedy zasilamy programator z układu 3 NC NC NC nie podpięte 4 PWR GND masa układu 5 I/O RST reset; podłączamy do linii RESET mikrokontrolera 6 PWR GND masa układu 7 I/O SCK sygnał zegara; podłączamy do linii SCK mikrokontrolera 8 PWR GND masa układu 9 I/O MISO dane nadawane; podłączamy do linii MISO mikrokontrolera 10 PWR PWR masa układu Oprogramowania, które obsługuje tego typu programator jest sporo. Najczęściej używam modułu programowania zawartego w środowisku BASCOM AVR. Wykorzystuję także PonyProg i ISP Programmer, które tak samo jak i BASCOM bardzo dobrze współpracują z programatorem. Poniżej przedstawiam parę zrzutów ekranowych z konfiguracji i programowania przy użyciu tych programów. W internecie można znaleźć wiele informacji na ich temat i nie będę wdawał się w ich szczegółowe opisywanie BASCOM AVR Wyboru programatora dokonujemy w okienku BASCOM AVR Options. Wchodzimy do niego wybierając z paska menu Options a następnie Programmer, W pozycji Programmer ustawiamy STK200/STK300 Programmer, a w LPT address numer portu do którego jest podłączony programator. W przypadku wystąpienia błędów w programowaniu, możemy wpisując wartości w polu Port delay, zmieniać opóźnienie na porcie LPT.., 3
Jeżeli program był pisany i kompilowany w tym programie, pozostaje nam tylko wgranie go do procesora. Klikamy na Program w pasku menu, a następnie Send to chip -> Program. Otwiera się okno z trzema zakładkami FlashROM pamięć programu, EEPROM pamięć danych i Lock and Fuse Bits bity konfiguracyjne. Teraz przy pomocy menu Chip lub klikając odpowiednia ikonę wybieramy operację jaka będzie wykonywana na procesorze. Chcąc wgrać kod utworzony w innym programie musimy go załadować używając polecenia Load from file z menu Buffer. Pamiętać należy o wybraniu procesora jaki będziemy programować rozwijana lista Chip. Zakładka z kodem program Zakładka z kodem dane Zakładka - bity konfiguracyjne Zwracam uwagę na ostrożne zmienianie bitów konfiguracyjnych, np. odpowiadających za źródło oscylatora czy pozwalającego na programowanie szeregowe bitu SPEN Serial programming enabled. Błędne ustawienie tego bitu spowoduje, że program przestanie widzieć mikrokontroler i potrzebny będzie programator równoległy. 4
Pony Prog W pierwszej kolejności wykonujemy kalibrację programu, wywołując Calibration z menu Setup, Następnie z tego samego menu wybieramy Interface Setup. Pojawia się okienko I/O port setup w którym zaznaczamy Paraller, port do którego podpięty jest programator, a z rozwijanej listy wybieramy Avr ISP I/O. Okno główne programu Okno ustawiania bitów konfiguracyjnych. 5
ISP Programmer W głównym oknie programu klikamy na Setup. W okienku ISP Programmer setup,z listy wybieramy STK200/STK300 Evaulation Board, ustawiamy numer portu i klikamy OK. Po naciśnięciu Read signature obok napisu Device signature powinien pojawić się typ podpiętego procesora. Okno główne programu. Okno ustawiania bitów konfiguracyjnych. 6
Pliki do pobrania avr_prog_sch.pdf schemat ideowy avr_prog_met_bottom_pcb.pdf płytka drukowana spód avr_prog_met_top_pcb.pdf płytka drukowana elementy avr_prog_met_termo_bottom_pcb.pdf odbicie lustrzane - spód avr_prog_met_termo_top_pcb.pdf odbicie lustrzane - elementy avr_prog_elementy.pdf rozmieszczenie elementów ispprog_2007_setup.zip program ISP Prog 2007 ponyprog_v207c_setup.zip program PonyProg v 2.07c avr_prog_artykuł.pdf opis w formacie Acrobat Reader avr_programator.zip wszystkie pliki 7