USBasp - uzasadniona popularność

Mała rzecz, a cieszy...

Pojawiła się kwestia wyboru programatora mikrokontrolerów AVR (prod. Atmel). Ze względów sprzętowych "musiał" to być programator "na USB" i oczywiście działający w środowisku Linuksa. Okazało się, że wśród (nie tylko) tych zaczynających dużą popularnością (nadal) cieszy się USBasp

"Nadal", bo konstrukcja liczy sobie ponad 10 lat i jest popularna ze względu na: prostotę układu, niski koszt i powszechną dostępność elementów oraz dokumentacji, żywe dyskusje na forach. Obecnie dostępne są już wersje bardziej rozbudowane, o zwiększonej funkcjonalności.

Na moim poziomie potrzeb i znajomości AVR uznałem wersję podstawową za wystarczającą.

SchematUkład

Wybrałem wersję programatora zbudowaną w oparciu o MCU ATmega8.

Oryginalny schemat programatora zamieszczony jest na stronie Thomasa Fischla. Ten obok został przeze mnie przerysowany. Starałem się zachować pierwotne oznaczenia elementów. Jedyne zmiany to:

  • dla sygnałów Rx/Tx  zadedykowano oddzielne złącze. Odpowiednie styki łącza KANDA10 zostały zwarte do masy,
  • nieco zwiększono jasność świecenia diod LED1 i LED2 (poprzez zmniejszenie wartości rezystorów szeregowych z 1k do 750om).

Układ elementów SMD (widok od strony ścieżek)W celu maksymalnego uproszczenia konstrukcji oparto ją na elementach SMD (rezystory i kondensatory - rozmiar 0805, 2 rezystory: 68om i 10k - 1206).

Elementami przewlekanymi są: ATmega8, diody LED, gniazda KANDA10 oraz USB. Ponadto wszystkie złącza kontaktowe typu goldpin. 

Widok od strony elementów THTPonieważ zakładałem, że płytka programatora winna być jednostronnie laminowana toteż wykonano na niej 4 krosy kynarem. (Jeden z widocznych krosów (masa) został w ostatecznej wersji płytki zastąpiony odpowiednio poprowadzoną masą ogólną).

Dla tych, którzy chcieliby skorzystać "z gotowca" prasowanki programatora z prawej strony przedstawiono odpowiedni rysunek. Jest on gotowy do bezpośredniego wykorzystania (tzw. lustro) do Prasowankawykonania płytki programatora metodą termotransferu.

 Niezbędny do zaprogramowania ATmegi plik wsadu (usbasp.2011-05-28.tar.gz) pobrałem ze strony Autora.

Programator USBaspGotowy programator przedstawia zdjęcie z lewej.

Sukces w swej krasie...Sposób zaprogramowania i wykorzystywane przy tym urządzenia (USBasp w wersji "kupnej"!) oraz oprogramowanie (avrdude)- opisałem w artykule: "Mocna trójka: AVR, USBasp, avrdude".

Programowanie przebiegło bez zakłóceń. Po włożeniu zaprogramowanego MCU do podstawki i podłączeniu programatora do komputera układ został prawidłowo rozpoznany. Sprawdzenie poszczególnych funkcjonalności programatora i programu potwierdziły, że wszystko jest ok:

user@XYZ:~$ avrdude -c usbasp -p m8
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.02s
avrdude: Device signature = 0x1e9307
avrdude: safemode: Fuses OK (E:FF, H:C9, L:A1)
avrdude done. Thank you.
user@XYZ:~$

Przeprowadzone kontrolne programowanie (przy pomocy avrdudekilku egzemplarzy AVR'ów również dało pozytywne rezultaty. 

Może się jednak zdarzyć, że pojawi się komunikat:

user@XYZ:~$ avrdude -p m328p -c usbasp
avrdude: error: programm enable: target doesn't answer. 1
avrdude: initialization failed, rc=-1
Double check connections and try again, or use -F to override this check.
avrdude done. Thank you.

świadczący o braku komunikacji programatora z programowanym MCU.

W tym konkretnym przypadku przyczyną było zbyt szybkie taktowanie (sygnał SCK) programowanej ATmegi. Zainteresowanych tym jak uniknąć tego komunikatu odsyłam do artykułu: "Mocna trójka: AVR, USBasp, avrdude" (temat: "AVR nie odpowiada!").

Piny programatora....Innym zródłem komunikatu może być błędne podłączenie programowanego mikrokontrolera do programatora. Trzeba pamiętać o tym, że poszczególne piny gniazda programatora oraz koncówki kabla stanowią swoje zwierciadlane odbicie.

Dlatego korzystając z opisu znalezionego w sieci trzeba ustalić: czy dotyczy on gniazda czy kabla?

Większość dotyczy gniazda programatora. Ale nie wszystkie. Dodatkowo sprawę może komplikować fakt, że istnieje również "standard" KANDA6, którego układ pinów jest inny niż w standardzie KANDA10.

Muszę jednak wspomnieć o innej możliwości: dokładnie ten sam komunikat uzyskamy, gdy - na skutek błędu montażowego - któryś z sygnałów nie dociera do programowanego mikrokontrolera. W moim przypadku był to cienki jak włos mostek (zwarcie) z cyny łączący masę z sygnałem MOSI. Zobaczyłem go dopiero oglądając spód płytki pod światło przez szkło powiększające.

Na szczęście MCU wytrzymał tę próbę.

Zamiast obudowy

Bez obudowy, bo... niepotrzebna

Początkowo chciałem włożyć programator do obudowy.

Głównie by uchronić jego spód przed przypadkowymi zwarciami. Ponadto chciałem zwiększyć masę płytki programatora by nie przesuwała się po biurku.

Jest dość lekka i "podąża" za kablem.

Pokryłem dolną powierzchnię płytki klejem "na gorąco". Warstwą o grubości ok. 2-2,5mm.

Gdy wystygł podgrzałem go powierzchniowo (Hot-Air, 220st.C) i przykleiłem do nadtopionej warstwy (kuchenną, do wykładania szuflad, groszek) polietylenową matę antypoślizgową.

Teraz płytka waży 3x tyle co na początku, choć nadal lekka. Jest bardziej stabilna i nie ślizga się.

Ponieważ powyższe rozwiązanie rozwiązało oba opisane problemy to w ostateczności zrezygnowałem z obudowy.

Zasadniczo w układzie brak jest elementów, które mogłyby się zepsuć, a nawet jeśli to już opanowałem technikę "sięgania" po nie :)

Sama płytka i jej elektronika są estetyczne i ciekawe. A: gniazda, zworki, diody muszą być dostępne, widoczne.