Schemat ideowy programatora pokazano na rysunku 1. Widać na nim niewiele komponentów - mikrokontroler ATtiny45, dwie diody Zenera, kondensator i kilka rezystorów. Oczywiście, są jeszcze złącza - wtyk USB oraz wtyk IDC-6. Rezystor R1 informuje host o obecności urządzenia USB transmitującego dane w trybie Slow.
Rezystory R2 i R3 w połączeniu z D1 i D2 zapewniają maksymalne napięcie na magistrali USB 3,6 V, a nie 5 V, ponieważ napięcie +5 V na magistrali powoduje występowanie błędów SYNC. Rezystory R4…R6 zabezpieczają programowany układ przed uszkodzeniem w wypadku, gdy jest on zasilany napięciem niższym niż 5 V.
Zwora JP1 powinna być otwarta. Zakłada się ją tylko w sytuacji, gdy chcemy zasilić uruchamiany układ z USB. Trzeba oczywiście pamiętać o ograniczeniach wynikających z maksymalnego dopuszczalnego prądu obciążenia oraz zakresu napięcia dostarczanego przez USB.
Ustawienie konfiguracyjnych mikrokontrolera:Low: 0xE1 |
Montaż i uruchomienie
Schemat montażowy programatora zamieszczono na rysunku 2. Montaż jest typowy i nie wymaga omawiania. Aby zmniejszyć wysokość programatora nie należy używać podstawki pod mikrokontroler. Ponadto, trzeba zastosować kątowe złącze SPI (J2) i zrezygnować z zworki JP2.
Cały programator można umieścić w koszulce termokurczliwej, ale przedtem należy zaprogramować mikrokontroler. Mikrokontrolery dostarczane w zestawach AVT są już zaprogramowane, jeśli jednak programator budujemy samodzielnie, trzeba to zrobić własnoręcznie.
Mikrokontroler należy programować w trybie wysokonapięciowym, ponieważ linia zerowania pracuje jak typowe I/O. Taką opcję mają programatory tzw. równoległe. Można jednak postąpić inaczej. Większość programów nie pozwala na wyłączenie linii RST w trybie SPI, ale np. AvrDude daje taką możliwość. Korzystając z nakładki Burn-OMat można przełączyć linię RST w tryb I/O, tyle, że należy włączyć tryb Expert.
W takiej sytuacji w trybie SPI należy zaprogramować pamięć Flash (plik: vusbtiny. hex dostępny w materiałach dodatkowych), a następnie odpowiednio ustawić bity konfiguracyjne. Oczywiście po tym stracimy możliwość programowania w trybie SPI.
Jeśli więc zostanie popełniony jakiś błąd, to trzeba użyć nowego mikrokontrolera lub użyć programatora w trybie HVPROG. Dlatego zdecydowałem się na mikrokontroler w obudowie DIP, który można zamontować w podstawce, co ułatwia jego wymianę. Nawet, gdy zdecydujemy się na wlutowanie mikrokontrolera, to łatwo go wylutować ze względu na użycie płytki jednowarstwowej.
Wykaz elementówRezystory: (SMD 1206) Kondensatory: Półprzewodniki: Inne: |
Przed przyłączeniem VUSBtiny do komputera należy pobrać sterowniki dostępne w materiałach dodatkowych lub pod adresem https://goo.gl/cPUKLC. Po dołączeniu programatora do interfejsu USB komputera pojawi się kreator. Instalacja nie przebiegnie automatycznie, należy wskazać sterowniki.
Gdy instalacja sterowników przebiegła poprawnie, co można sprawdzić w Menadżerze Urządzeń, uruchamiamy avrdude z konsoli. W konsoli przechodzimy do katalogu z programem. Dla wygody program można zainstalować w głównym katalogu jakiegoś dysku, załóżmy, że jest to d:avrdude. W takiej sytuacji musimy wydać dwie komendy:
d:
cdavrdude
Wykonujemy test. Ważne, aby programator był połączony z programowanym mikrokontrolerem. Wydajemy komendę:
avrdude -c usbtiny -p m8
Jeśli połączenia były poprawne zobaczymy:
avrdude: AVR device initialized
and ready to accept instructions
Reading | ##################### ############################# |
100% 0.00s
avrdude: Device signature =
0x1e910a
avrdude: safemode: Fuses OK
avrdude done. Thank you.
Jeśli będą problemy z komunikacją, to zostanie wyświetlony następujący komunikat:
avrdude: error: programm enable:
target doesn’t answer. 1
avrdude: AVR device initialized
and ready to accept instructions
Reading | #####################
############################# |
100% 0.02s
avrdude: Device signature =
0x000000
avrdude: Yikes! Invalid device
signature.
Double check connections
and try again, or use -F
to override
this check.
Za pomocą komendy avrduce -c usbtiny -p m8 odczytuje się sygnaturę układu, jej składnia to avrdude -c {programator} -p {typ procesora}. Nie ma pomyłki w rozkazie, jeśli chodzi o typ programatora. Trzeba wybrać "usbtiny", a nie "vusbtiny".
Vusbtiny zachowuje się jak usbtiny, a "V" to nowsza wersję procedur obsługi USB. Najważniejsza zmiana to możliwość wykorzystania wewnętrznego oscylatora RC. Co do typu procesora. Przy odczycie sygnatury nie ma to znaczenia, ale podczas programowaniu już tak. Jeśli chodzi o typ procesora to, gdy jest to na przykład ATmega8, wpisujemy "m8". Dla ATtiny2313 wpisujemy "t2313". Pełna listę kodów umieszczono w tabeli 1.
Jeśli nie było komunikatu o błędzie możemy zapisać pamięć mikrokontrolera. W tym celu wydajemy komendę:
avrdude -c usbtiny -p m8
-U flash:w:program.hex
Odczyt to komenda:
avrdude -c usbtiny -pm8
-U flash:r:program.hex
Ustawienie bitów konfiguracyjnych:
avrdude -c usbtiny -p m8
-U hfuse:w:0x{wartość}:m
-U lfuse:w:0x{wartość}:m
Zapis EEPROM:
avrdude -c usbtiny -p m8
-U eeprom:w:program.hex
Odczyt:
avrdude -c usbtiny -pm8
-U eeprom:r:program.hex
Konfiguracja AVR Studio do współpracy z USBtiny:
W celu zaprogramowania mikrokontrolera wybieramy w menu "Tools" nazwę naszego programatora (w przykładzie jest to "USBtiny". Konfiguracja Bascom do współpracy z USBtiny:
Programowanie wywołujemy klawiszem F4 lub ikonką "Program chip". |
Obsługa programu z linii komend jest kłopotliwa, dlatego powstały nakładki graficzne. Najlepszą wydaje mi się Burn-OMat’a. Można ją pobrać spod adresu http://goo.gl/3OOmQt. Po zainstalowaniu i uruchomieniu program należy zainstalować.
Ważne jest ustawienie ścieżki dostępu do avrdude oraz jego pliku konfiguracyjnego wywołanego z menu Setings/AVRDUDE (rysunek 3). Teraz, po zaakceptowaniu okna konfiguracyjnego przyciskiem OK należy zamknąć, po czym ponownie otworzyć program, aby mogły się wczytać ustawienia i typy programatorów z pliku konfiguracyjnego.
W kolejnym kroku, ponownie w oknie Setings/AVRDUDE, wybieramy rodzaj programatora (rysunek 4). Listy "port" nie należy zmieniać na "USB" - należy zostawić domyślne "/dev/ parport0". Zmiany akceptujemy za pomocą OK. Od teraz, po wybraniu w liście AVR type (jak na rysunku 5) typu mikrokontrolera można zapisywać i odczytywać zawartość pamięci Flash i EEPROM.
Aby zmienić ustawienie bitów konfiguracyjnych, należy nacisnąć przycisk Fuses umieszczony na prawo od listy AVR type. Zostanie wyświetlone okno, jak na rysunku 6. Mamy możliwość odczytu bitów konfiguracyjnych (read fuses), zapisu (write fuses) oraz weryfikacji (verify fuses).
Można też przywrócić ustawienia domyślne (reset to default). Niższe zakładki umożliwiają różne sposoby ustawiania bitów. Liczba zakładek jest zależna od typu mikrokontrolera i ich szczegółowe omówienie zajęłoby połowę EP, więc zachęcam do własnych eksperymentów. Eksperymenty z bitami są w miarę bezpieczne, ponieważ nie można niektórych zmienić (tych zaznaczonych na czerwono).
W normalnym trybie pracy nie da się wyłączyć programowania przez SPI, czy też przełączyć wyprowadzenia reset w tryb I/O, co uniemożliwiłoby programowanie mikrokontrolera w trybie SPI. Wyłączona jest nawet możliwość przejścia w tryb DebugWire, który obsługiwany jest przez nieliczne programatory (np. Dragona).
Można oczywiście zmienić te bity w trybie Expert, co opisano wcześniej w artykule. Jakkolwiek Burn-O-Mat dba o "bezpieczeństwo mikrokontrolera" to trzeba być ostrożnym przy zmianach źródła sygnału zegarowego.
Na ten temat pisano już w EP, a także jak "uratować" mikrokontroler, bez uciekania się do użycia programatora w trybie HVPROG, co jest kłopotliwe zwłaszcza, gdy jest on wlutowany w płytkę. Należy pamiętać, że zaprogramowany bit to wartości 0! Czyli zaznaczenie "ptaszkiem" bitu nadaje mu wartość 0, co jest opisane w nocie katalogowej mikrokontrolera.
Tematu programu Burn-O-Mat z pewnością nie wyczerpałem, ale sądzę, że przekazane informacje wystarczą do używania programu. Sposób instalacji programatora pod Linux-em jest opisany pod adresem https://goo.gl/IEy0Js.
Sławomir Skrzyński, EP
Bibliografia:
http://goo.gl/fY4jyp
https://goo.gl/qo59aj