Programator na USB (USBasp)
Opisywany układ jest programatorem mikrokontrolerow AVR,
wzorowanm na bardzo popularnym projekcie opracowanym przez
. Zaletą układu jest prostota (Tylko
mikrokontroler ATMEGA8 i kilka dodatkowych elementow) i łatwość
obsługi, a fakt że wspołpracuje on z komputerem przez port USB
sprawia, że bez problemu można go używać na laptopie oraz
komputerach z płytami głownymi pozbawionymi portu LPT (obecnie
coraz trudniej o dobrą płytę z portem LPT). Transmisją sygnału przez USB zajmuje się
mikrokontroler, więc nie jest wymagany żaden dodatkowy kontroler USB. Dodatkową ważną zaletą
tego projektu jest szybkość programowania dochodząca do 5KB/s oraz możliwość jej zredukowania
na potrzeby programowania mikrokontrolerow z zegarem <1.5MHz. Jedynym problemem jaki
pojawi się na początku to konieczność zaprogramowania mikrokontrolera sterującego za pomocą
dowolnego innego programatora. Najprościej jest to zrobić korzystając z opisu dostępnego
. Do
obsługi programatora najlepiej nadaje się program avrdude, gdyż działa on na wielu systemach
operacyjnych. Testowałem go na Archlinux 64 , PLD Titanium, Windows XP i Vista.
Działanie:
Schemat ideowy programatora przedstawiony jest na rysunku poniżej:
Sercem układu jest mikrokontroler U1 (Atmega8) wraz z rezonatorem kwarcowym X1 (12MHz) i
kondensatorami C1 (22pF) i C2 (22pF). Złącze RxD/TxD wraz z rezystorem R7 (1k) umożliwiają
budowę interfejsu RS232 (w tej wersji nie jest wykorzystywany). Diody D3 i D4 wraz z
rezystorami R5 (470R) i R6 (470R) stanowią kontrolkę zasilania i programowania. Rezystor R1
(10k) wymusza stan wysoki na pinie reset mikrokontrolera, gdy nie jest on wykorzystywany (po
zaprogramowaniu układu U1). Z1 jest złączem USB typu B, służącym do komunikacji z
komputerem i zasilania programatora oraz programowanego układu (gdy prąd nie przekracza
500mA). Kondensatory C3 (4,7uF) i C4 (100nF) filtrują napięcie zasilające a diody D1 (Zenera
3,6V) i D2 (Zenera 3,6V) dbają aby napięcia na liniach D+ i D- portu USB nie przekroczyły 3,6V.
Rezystory R2 (2,2k) oraz R3 (68R) i R4 (68R) są konieczne dla poprawnego działania USB. Złącze
Prog jest złączem programującym przez które w pierszej fazie programujemy układ U1 a później
stanowi ono wyjście naszego programatora. Zworka S_Prog (Self Program) umożliwia uaktalnienie
oprogramowania w układzie (zaprogramowanie U1). S_SCK (Slow SCK) zapewnia obniżenie
częstotliwości zegara taktującego programowanie i możliwość zaprogramowania mikrokontrolerów
działających na niskiej częstotliwości (<1,5MHz). Zworka S_Target (SUpply Target) podłącza
zasilanie do programowanego układu.
Budowa:
Programator można zbudować w oparciu o płytkę drukowaną dostępną
lub dowolną inną
. Rysunek w odbiciu lustrzanym znajduje się
Montaż rozpoczynamy od wlutowania jednej zworki znajdującej się pod układem scalonym U1.
Kolejność pozostałych elementów jest dowolna ale polecam rozpocząć montaż od złącza USB. Pod
mikrokontroler zalecam zastosowanie podstawki. Pomocą przy konstrukcji może okazać się
dostępny
schemat montażowy.
Gdyby chtoś chciał wykonać wersję płytki ze złączem KANDA, poniżej znajdują się odpowiednie
wyprowadzenia tego złącza:
Wykaz Elementów:
1x Listwa Goldpin 1x2 (RxD/TxD)
3x Listwa Goldpin 1x3 + zworka
1x Listwa Goldpin 1x8
1x Złącze USB typu B (do druku)
1x Kabel USB_A - USB_B (taki jak do drukarki)
1x 1k
1x 2,2k
1x 10k
2x 68R
2x 470R
2x 22pF
1x 100nF
1x 4,7uF Elektrolit
1x Rezonator Kwarcowy 12MHz
2x Dioda Zenera 3V6
2x Dioda LED
1x Mikrokontroler ATMEGA8 + Podstawka
Programowanie:
Program do mikrokontrolera został napisany przez Thomasa Fischl'a i wszystkie jego wersje,
począwszy od tych najwcześniejszych (wraz z kodami źródłowymi) można znaleźć na
. W moim projekcie zastosowałem wersję programu
dla
mikrokontrolera ATMega8. Do mikrokontrolera należy załadować plik usbasp.atmega8.2006-12-
29.hex znajdujący się w katalogu "/bin/firmware/". Z nowszą wersją oprogramowania miałem
pewne problemy ale może to tylko przypadek :).
Po zaprogramowaniu mikrokontrolera czas na ustawienie jego bitow konfiguracyjnych (Fuse
Bitow). Ogolnie powinno to wyglądać tak: ("1" oznacza bit niezaprogramowany, tak jak w kartach
katalogowych)
Fuse high byte: 0xc9 (szesnastkowo)
RSTDISBL = 1
WDTON = 1
SPIEN = 0
CKOPT = 0
EESAVE = 1
BOOTSZ1 = 0
BOOTSZ0 = 0
BOOTRST = 1
Fuse low byte: 0x9f (szesnastkowo)
DODLEVEL = 1
BODEN = 0
SUT 1..0 = 01
CKSEL 3..0 = 1111
Rysunek poniżej przedstawia ustawienia fusebitów (Screen z programu BASCOM AVR):
Ustawienia fusebitów w programie Burn-O-Mat przedstawione są poniżej:
Obsługa:
a) Linux
1. Instalujemy program avrdude ze standardowego repozytorium
2. Podłączamy programator do portu USB (zworka S_Prog powinna być rozwarta)
3. Podstawowe komendy:
Tylko odczyt sygnatury: (m8 to typ mikrokontrolera)
avrdude -p m8 -c usbasp
Odczyt programu z pamięci mikrokontrolera do pliku *.hex
avrdude -p m8 -c usbasp -U flash:r:program.hex
Zapis programu z pliku *.hex do pamięci mikrokontrolera
avrdude -p m8 -c usbasp -U flash:w:program.hex
b) Windows
1. Włączamy programator do portu USB
2. Rozpocznie się instalacja sterownika dla USBasp. Wybieramy sterownik z folderu "/bin/win-
driver/" (znajdziemygo po rozpakowaniu pliku
3. Ściągamy skompilowaną wersję programu avrdude (patrz załączniki)
4. Uruchamiamy konsolę "cmd"
5. Dalsze czynności tak jak dla systemu Linux od punktu 2
Pod Windowsem istnieje możliwość współpracy opisywanego programatora z programem
BASCOM AVR. Aby to zrobić wykonujemy następujące czynności:
1. Klikamy Options->Programmer
2. W polu programmer wybieramy extrenal programmer
3. W części other w polu program wybieramy scieżkę do avrdude
4. W części other w polu parameter wpisujemy : "avrdude" -p m8 -c usbasp -U flash:w:"{FILE}":a
-U flash:v:"{FILE}":a
"m8" musimy zamienić na odpowiedni typ mikrokontrolera, który chcemy programować
(najczęściej jest to: t2313, m8, m16, m32 lub m162)
Zdjęcia Projektu: