VUSBtiny. Miniaturowy programator mikrokontrolerów AVR

VUSBtiny. Miniaturowy programator mikrokontrolerów AVR
Pobierz PDF Download icon
W Elektronice Praktycznej nr 12/2011 opisano tani programator mikrokontrolerów AVR - USB ASP. W tym numerze prezentujemy jeszcze mniejszy (wielkość porównywalna z pendrive) i jeszcze tańszy programatora, który ze względu na swoje wymiary i niewielki koszt wykonania przyda się w warsztacie niejednego elektronika lub do celów serwisowych. Rekomendacje: programator polecamy każdemu, kto zajmuje się programowanie mikrokontrolerów AVR lub myśli o pierwszych aplikacjach wykonanych z ich użyciem.

Rysunek 1. Schemat ideowy programatora VUSBtiny

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
High: 0x5D
Ext: 0xFF

Montaż i uruchomienie

Rysunek 2. Schemat montażowy programatora VUSBtiny

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ów

Rezystory: (SMD 1206)
R1: 1,5 kΩ
R4…R6: 470 Ω
R2, R3: 68 Ω

Kondensatory:
C1: 100 nF (SMD 1206)

Półprzewodniki:
D1, D2: dioda Zenera SMD na 3,6 V
U1: ATtiny45/85 (zaprogramowany)

Inne:
J1: USB-A (wtyk USB do druku)
J2: IDC6MLP (gniazdo 6 pin)
JP1: goldpin 1×2+zworka

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.

Tabela 1. Obsługiwane mikrokontrolery i ich kody:

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:

  • Z menu "Tools" wybieramy "Customize...".
  • W nowo otwartym oknie "Command" wybieramy zakładkę "Tools".
  • Wskazujemy ikonkę "New" lub wciskamy klawisz "Insert".
  • Wpisujemy nazwę programatora, np. "USBtiny".
  • W oknie "Command" wskazujemy ścieżkę do "avrdude" (np.: C:WinAVR-20100110binavrdude.exe).
  • W oknie "arguments" podajemy parametry: "-p m168 -c usbtinyp -P usb -U flash:w:"plik. hex":a -U flash:v:"plik.hex":a", gdzie "m168" to typ procesora.
  • W "Initial directory" wpisujemy ścieżkę dostępu do pliku (trzeba pamiętać o końcowym znaku "")
  • Zmiany zatwierdzamy przyciskiem "Close".

W celu zaprogramowania mikrokontrolera wybieramy w menu "Tools" nazwę naszego programatora (w przykładzie jest to "USBtiny".

Konfiguracja Bascom do współpracy z USBtiny:

  • Z menu wybieramy "Options/Programmer".
  • Z listy rozwijanej wybieramy "External programmer".
  • W zakładce "Other" (w dolnej części okna) podajemy ścieżkę do "avrdude".
  • W oknie parametry wpisujemy ""avrdude" -p m168 -c usbtiny -U flash:w:"{FILE}":a -U flash:v:"{FILE}":a" oraz zaznaczamy opcje "Use HEX file", gdzie "m168" to typ procesora.

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.

Rysunek 3. Menu konfiguracyjne avrdude

Rysunek 4. Wybór rodzaju programatora

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).

Rysunek 5. Wybór typu mikrokontrolera

Rysunek 6. Konfigurowanie bitów bezpieczników

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

Artykuł ukazał się w
Wrzesień 2015
DO POBRANIA
Pobierz PDF Download icon
Materiały dodatkowe
Zobacz też
Elektronika Praktyczna Plus lipiec - grudzień 2012

Elektronika Praktyczna Plus

Monograficzne wydania specjalne

Elektronik lipiec 2020

Elektronik

Magazyn elektroniki profesjonalnej

Raspberry Pi 2015

Raspberry Pi

Wykorzystaj wszystkie możliwości wyjątkowego minikomputera

Świat Radio lipiec 2020

Świat Radio

Magazyn użytkowników eteru

APA - Automatyka Podzespoły Aplikacje lipiec 2020

APA - Automatyka Podzespoły Aplikacje

Technika i rynek systemów automatyki

Elektronika Praktyczna lipiec 2020

Elektronika Praktyczna

Międzynarodowy magazyn elektroników konstruktorów

Praktyczny Kurs Elektroniki 2018

Praktyczny Kurs Elektroniki

24 pasjonujące projekty elektroniczne

Elektronika dla Wszystkich czerwiec 2020

Elektronika dla Wszystkich

Interesująca elektronika dla pasjonatów