Programator STK200 ze złączem KANDA do procesorów Atmel
Programator – niezbędne urządzenie do załadowania napisanego i skompilowanego programu z komputera do mikrokontrolera. Jakiś czas temu, przy okazji zabaw z mini płytką testową AVR opisałem bardzo prosty programator, który umożliwia łatwe i szybkie programowanie układów zbudowanych na płytce stykowej. Dziś pokażę jak zbudować nieco bardziej złożony, ale bezpieczny i profesjonalny programator STK200 z 10 pinowym złączem w standardzie KANDA. Historia tego układu jest dosyć długa. Przez wiele lat programowałem AVR’y dołączone do portu LPT komputera przez kabelek i kilka rezystorów. Działało, więc nie widziałem potrzeby kombinowania z czymś innym. W 2006 roku postanowiłem jednak zbudować STK200, z uwagi na posiadany przez niego bufor, który zabezpiecza port komputera przed ewentualnym zniszczeniem. Dodatkowo można znacznie zwiększyć odległość komputera od programowanego układu. Ostatecznie układ rozpoczęty ponad 7 lat temu dokończyłem teraz :).
Schemat STK200
Ponieważ chyba 99% STK200 jakie można znaleźć w sieci, posiada płytki drukowane zaprojektowane pod kątem montażu wtyku LPT, postanowiłem zaprojektować swoją płytkę. Prace rozpocząłem od narysowania schematu. Wzorowałem się na układzie ze strony www.lancOS.com. Układ sprzed kilku lat posiadał mały błąd, o którym później. Teraz można tam znaleźć poprawioną wersję opisaną jako betterSTK200.
Mój programator postanowiłem zmodernizować o diody LED: zasilania i wymiany danych. Schemat narysowany w darmowym KiCadzie wygląda tak:
Jak widać, układ jest dosyć prosty: kilkanaście rezystorów, kilka kondensatorów, układ 74HC244 i reszta drobnicy. Do złącza P1 należy doprowadzić sygnały z portu LPT, złącze P2 to 2 rzędy po 5 goldpinów do których sygnały zostały dołączone w standardzie KANDA, dzięki czemu programator jest kompatybilny z całą masą płytek prototypowych z mikrokontrolerami AVR na pokładzie.
Płytka drukowana programatora STK200
Płytkę, podobnie jak schemat, zaprojektowałem w programie KiCad. Jej wymiary były podyktowane liczbą elementów, a nie konkretną obudową. Dzięki temu gniazdo LPT może być dołączone do płytki za pośrednictwem tasiemki czy nawet skrętki o długości 1 czy 2 metry. Można je też przykręcić do obudowy. Jest tu pełna dowolność. Poniższy rysunek pokazuje rozmieszczenie elementów i będzie bardzo pomocny przy montażu całości:
Jeśli ktoś chciałby wykonać płytkę samodzielnie, a nie za bardzo wie, jak się za to zabrać, polecam ten wpis: Jak zrobić płytki drukowane w domu.
Montaż STK200
Prace najlepiej rozpocząć od skompletowania elementów. Niezbędne będą:
R1-R6, R8-R11, R15, R16 – wartości od 330Ω do 1kΩ, dwa ostatnie decydują o jasności diod LED
R7 – 100Ω
R12-R14 – 100kΩ
C1 – 47μF/16V elektrolit
C2-C4 – 100pF ceramiczne
C5 – 100nF ceramiczny
D1 – 1N4148
D2, D3 – diody LED według uznania
U1 – 74HC244 + podstawka DIL20
P2 – wtyk goldpin 2×5 kątowy w obudowie
J1 – wtyk DB25 na kabel + ewentualna obudowa
Jakaś obudowa, w której zmieści się płytka, niezbędne kable do diod LED i wtyku DB25.
Ja przyciąłem nieco dłuższy laminat, by móc umieścić na nim otwory na śruby, którymi przykręciłem całość do obudowy, od strony P1.
Montaż najlepiej rozpocząć od zworki pod układem U1 (kolor czerwony na rysunku płytki), pod scalaka warto też dać podstawkę, kosztuje niewiele, a w razie uszkodzenia układu wymiana trwa chwilkę. Do montażu użyłem małych rezystorków 1/8 wata, jeśli masz większe, można je zamontować pionowo. Dwie diody LED przymocowałem do płytki za pośrednictwem kabelków – uwaga na polaryzację – ich prostokątne pola, to +, tak samo z kondensatorem C1. Diodę D1 należy zamontować w taki sposób, by jej czarny pasek znajdował się od strony krawędzi płytki. Podobnie układ U1 – jego klucz musi znaleźć się na “górze”.
Ja mój programator budowałem na raty, ponad 6 lat przeleżał on w takim stanie:
Wtyk LPT przylutowałem do pól złącza P1 za pośrednictwem kawałków skrętki komputerowej – pomocny będzie schemat. Pamiętać tu należy o połączeniu we wtyku pinów: 3 z 11 i 2 z 12. W posiadanej, starej obudowie, wyciąłem kawałki plastiku na złącze do programowania i LPT, a płytkę przykręciłem dwoma śrubami. W górnej części wywierciłem dwa otwory na oprawki diod LED. W programie Inkscape narysowałem coś na wzór panelu górnego, który zabezpieczyłem przezroczystą folią samoprzylepną, można też go zalaminować. Całość nakleiłem na obudowę za pomocą mocnej taśmy dwustronnie przylepnej 3M.
Złącze LPT przykręciłem do obudowy, ponieważ do komputera mam wpięty odpowiedni przedłużacz. Dobrym pomysłem może być przylutowanie wtyku DB25 z obudową do 2 metrowej skrętki, której drugi koniec należy wlutować do płytki. Wpinamy wtedy port równoległy z tyłu komputera, a programator mamy “pod ręką”.
Pierwsze programowanie
Poprawnie zmontowany układ nie wymaga uruchomienia i działa od razu. Programator wymaga zasilania napięciem stabilizowanym o wartości +5V, które pobiera z programowanego układu za pośrednictwem 2 pinu złącza KANDA. Obecność tego napięcia jest sygnalizowana świeceniem diody LED D2.
Mój programator nie ruszył jednak od razu, a to za sprawą rezystora R7 – zastosowałem tam, zgodnie z posiadanym schematem opornik 1kΩ i taka wartość okazała się za duża, by wymusić stan niski na pinie 10 (ACK) portu LPT. Zmieniłem jego wartość na 100Ω i AVRDUDE odczytał sygnaturę Atmegi.
Do podłączenia programatora z płytką będzie potrzebny odcinek 10 żyłowej taśmy z gniazdami 2×5. Piny tych gniazd muszą być połączone ze sobą 1:1, czyli 1 pin do 1 pinu, 2 pin do 2 itp.
Do testów użyłem programu avrdude, który uruchamiałem na Linux Mint. Po upewnieniu się, że programator jest podłączony do komputera i płytki testowej z włączonym zasilaniem, w terminalu wydałem polecenie:
avrdude -c stk200 -p m8
Czyli poinformowałem program, że będzie odczytywał mikrokontroler atmega8 za pośrednictwem programatora stk200. W odpowiedzi avrdude zwrócił:
Podczas odczytu, na programatorze migała dioda LED D1, czyli wszystko OK. Jeśli jednak dostaniesz komunikat o braku dostępu do portu LPT, zapoznaj się z tym wpisem, lub dodaj się do grupy lp.
Spróbowałem też zaprogramować atmegę, by sprawdzić czy nie wystąpią jakieś błędy:
Avrdude odczytał sygnaturę, skasował pamięć flash, zapisał w niej program ze wskazanego pliku i zweryfikował czy zawartość mikrokontrolera jest taka sama jak pliku hex. Wynik pozytywny, więc wszystko działa jak należy :).
Jeśli programator będziemy chcieli użyć z płytką stykową, lub inną, gdzie nie ma złącza KANDA, przydatna może być poniższa rozpiska z pinami gniazda i ich znaczeniem:
Wszystkie niezbędne pliki ułatwiające samodzielne zmontowanie programatora STK200, możesz pobrać tutaj: dokumentacja_stk200.
świetna robota, choć większość pewnie powie po co to robić jak można kupić gotowca za grosze 🙂
krótkie pytanko: HC244 (będę musiał kupić) czy LS244 (mam)
są jakieś przeciwwskazania użycia LS’a?
pozdr
krzysztof
@~krzycho 74HC244 jest wykonany w technologii CMOS, a 74LS244 w TTL. Ten ostatni jest znacznie szybszy, ale ma większe wymagania jeśli chodzi o zasilanie (4,5V do 5,5V) oraz poziomy logiczne. Ogólnie 74LS244 powienien działać prawidłowo.