USBasp

Elektronika to dość miła dziedzina. O ile programować może każdy, to by móc zrobić coś elektronicznego trzeba wpierw zainwestować parę złotych w części. Dostajemy jednak w zamian urządzenie, które - chociażby tylko miało by migać diodą - coś robi samo.

Mikrokontrolery AVR

Mikrokontrolery Atmela na stałe zagościły na półkach polskich elektroników, zarówno profesjonalistów jak i hobbystów. Największą popularnością cieszą się już od kilku lat szczególnie mikrokontrolery rodziny AVR, głównie rodziny ATmega. Ich niska cena i całkiem spore możliwości kuszą głównie początkujących elektroników. Jedną z ich zalet jest możliwość programowania w systemie (ISP), czyli możliwość ładowania programu do pamięci urządzenia, kiedy jest już ono na płytce, w urządzeniu docelowym. Jednym z programatorów do programowania w systemie jest właśnie USBasp.

USBasp

Programator USBasp został zaprojektowany i oprogramowany przez Thomasa Fischla. Jak nazwa wskazuje interfejsem, za pomocą którego programator łączy się z komputerem jest USB. Rzeczą najbardziej niezwykłą jest to, że programator ten na swoim pokładzie ma ze scalaków tylko mikrokontroler ATMega8 lub ATMega48 (no i stabilizator, ale on nie jest programowalny), które nie są wyposażone w sprzętowy interfejs USB. Całą obsługa wykonywana jest za pomocą jednego z przerwań i dwóch pinów urządzenia przez bibliotekę avrusb (chwilowe problemy z nazwą). Urządzenie zasila się z portu USB i może zasilać także urządzenie programowane. Do kompletu, by móc programować scalaki potrzebny jest jeszcze program-programator wspierający USBasp - avrdude. Wadą programatora jest używanie poziomów TTL (0-5V), Podczas gdy niektóre AVRki działają już od 3V (działają wszystkie, ale oficjalnie tylko niektóre).

USBasp - Caladan's Mod

Do niedawna używałem najprostszego z możliwych programatora ISP dla AVRów - bsd. Niestety coraz częściej trzeba coś zrobić "w polu", z laptopa albo nowego PCta, bez portu równoległego. Wtedy właśnie przydaje się urządzenie podłączane za pomocą USB i zasilane także z portu.

Ponieważ czasami potrzebowałem programować urządzenia zarówno 5, jak i 3,3 woltowe, postanowiłem lekko zmodyfikować USBasp. A wyszło to tak.

Schemat

Wpierw nieco uwag:

  • gniazdo USB jest typu B - typ A jest zarezerwowany dla hostów,
  • potrzebna jest ATmega8L, która może działać z niższego napięcia
  • kwarc ma mieć 12MHz, mimo tego, że wg. noty katalogowej maksimum to 8MHz,
  • zworka JP1 wybiera napięcie z którego działa całość, można sobie wybrać jedno i wtedy należy pozwierać odpowiednie linie zasilania,
  • zworka JP2 służy do wystawiania napięcia zasilającego programator na złączkę programującą,
  • zworka JP3 służy do spowalniania transmisji danych po SPI,
  • zworka JP4 służy do programowania uC w programatorze,
  • stabilizator 3V3 LDO jest taki, bo taki znalazłem w domu, we własnym projekcie zalecam inny - tańszy,
  • diody Zenera na 3V3 są potrzebne przy 5V zasilanii,</.li>
  • złączka programująca jest tą zalecaną przez Atmela, z drobną modyfikacją, polegającą na dołożeniu UARTa.

W tej części moja modyfikacja to przełączanie zasilania.

Płytka

Koszt wykonania:

  • Mikrokontroler ATMega8L - 5 zł,
  • Gniazdo USB-B - 3 zł,
  • Kwarc 12MHz niskoprofilowy - 1,5 zł
  • stabilizator - zależnie od rodzaju - od 2zł
  • płytka - przy większej ilości w fabryce wyjdzie < 5zł, a można też przecież zrobić samemu, domową metodą,
  • LEDki, rezystory, zworki, goldpiny, diody Zenera - < 3zł

Jak widzicie udało mi się dość mocno ścisnąć całość - wymiary to 20x50 mm. Większość elementów to elementy SMD. Płytka jest dwuwarstwowa. Zworki widoczne na płytce zostały opisane wcześniej. Zainteresowani zrobieniem własnej mogą pomyśleć o zmianie zworek na dip-switche.

IRL

Wygląda to tak:

Z poziomu OSa

Bus 002 Device 010: ID 16c0:05dc

i tak:

17:01 ~ > avrdude -c usbasp -p m16
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.05s
avrdude: Device signature = 0x1e9403
avrdude: safemode: Fuses OK
avrdude done. Thank you.

Pliki

Ponieważ niektórym z Was może się zachcieć zrobić sobie coś takiego, udostępniam pliki. Schemat i płytka z programu Cadsoft Eagle 5.4.

Inności

Programowanie programatora należy wykonać przy użyciu innego programatora. Polecam tego wcześniej wymienionego, na port równoległy. Potem można już jeden USBasp innym USBasp programować.

AVRki działające z wewnętrznego oscylatora RC o częstotliwości <=1MHz mogą nie chcieć się zaprogramować jeśli nie zewrze się odpowiedniej zwory spowalniającej programowanie.

Programator może zasilać urządzenie programowane, ale pamiętajcie, że nie jest to dobry zasilacz. Nie ma zabezpieczenia nadprądowego, nie spalcie sobie portu!

Pytania? Sugestie?

Piszcie, chętnie wyjaśnię wszelkie wątpliwości.

Kategorie: Elektronika, Ogólne, Techblog
11 kwietnia 2009, 17:31:47
Trackback

Komentarze

Sorry, że tak nie do końca na temat… Ale nie masz może jakiś materiałów o programowaniu mikrokontrolerów AVR? Coś tam z kolegą próbowaliśmy działać na ATmegach, ale polegliśmy na przerwaniach i „obsłudze przycisków”. A to co udało nam się znaleźć w Internecie było pisane pod starą bibliotekę, albo nie bardzo chciało nam działać (Jeszcze raz sorry, że nie na temat).

Reynevan (link do komentarza) 11 kwietnia 2009, 18:20:14

Moje materiały to głównie datasheety i internet.
Powiedzcie z czym konkretnie problem.
Obsługa przerwań przycisków wygląda tak:
Piszecie ISR, konfigurujecie port, konfigurujecie przerwania, włączacie przerwania – gotowe. :)

Caladan (link do komentarza) 11 kwietnia 2009, 18:23:07

O, mam coś, łapcie link:
http://caladan.rootnode.net/elektronika/USBasp/bwatch.tar.bz2

Caladan (link do komentarza) 11 kwietnia 2009, 18:26:14

O dzięki za kod :)
No teoria, teorią :)... ale sknociliśmy coś i jakbyśmy nie naciskali tak dioda nie gasła ;) (założenie było takie, że dioda miała gasnąć na kilka sekund po naciśnięciu przycisku).

A jest możliwość (niekoniecznie dziś i w święta) pomęczyć coś Ciebie na jabberze jakbyśmy dalej jakieś problemy mieli?

Reynevan (link do komentarza) 11 kwietnia 2009, 18:33:29

To co przesłałem to zegarek binarny. Jakimś zbiegiem okoliczności właśnie to robi. Po naciśnięciu przycisku pokazuje na LEDach czas przez kilka sekund :D

Piszcie, najwyżej powiem, że nie mam czasu akurat.

Caladan (link do komentarza) 11 kwietnia 2009, 18:34:49

No właśnie zauważyłem, że to może być to :) stąd mam nadzieję, że problem „się rozwiążę” ;)
Jeszcze raz wielkie dzięki i kończę już spamować :) w razie czego odezwę się na jabberze :)

Reynevan (link do komentarza) 11 kwietnia 2009, 18:37:59

Fajnie wygląda, malutki (fakt faktem, sama myśl o lutowaniu SMD mnie odstrasza). Miło poczytać Twoje wpisy na joggerze, człowiek dowiaduje się tylu rzeczy które dawno już powinien był wiedzieć:)

Airborn (link do komentarza) 11 kwietnia 2009, 19:09:28

No właśnie miał być mały. Chociaż jakbym dał mini-USB by było trochę mniejsze. I proca na drugą stronę. :D
Ja zaczynałem trening od lutowania za pomocą transformatorówki. Także SMD – daje radę. Trzeba mieć tylko pewną rękę i pęsetę. Na stronie autora tego programatora są także wersje płytki tylko z elementami przewlekanymi.

Caladan (link do komentarza) 11 kwietnia 2009, 19:19:32

Ja swego czasu w swoim projekcie, też wykorzystującym software’owy USB (http://code.google.com/p/opencryptotoken/wiki/OpenCryptoToken) zrobiłem sobie funkcjonalność „upgrade’u firmware”, czyli samoprogramowania via USB. Wystarczyło jednorazowo zaprogramować układ via ISP, potem można było uaktualniać oprogramowanie via USB.

mrk (link do komentarza) 11 kwietnia 2009, 20:03:49

To prawda, jest możliwość samoprogramowania. Jeszcze nie próbowałem tej opcji, póki co nie była mi potrzebna. Poza tym no cóż, dużej przepustowości ten interfejs nie ma – do programowania i bardzo prostej komunikacji jest akurat. Do poważniejszych zadań polecam scalaki od Future Technologies (http://www.futuretechnologies.com/), na przykład FT232R.

Caladan (link do komentarza) 11 kwietnia 2009, 20:22:10

Może Cię zainteresować USBaspLoader. To bootloader, który udaje USBasp, a pozwala programować samego siebie. Właśnie mam pod ręką AtMegę8 z bootloaderem USBaspLoader i USBasp jako aplikację bazową. Przydaje się zarówno do samoaktualizacji docelowego sprzętu, jak i aktualizacji programatora.

remiq (link do komentarza) 11 kwietnia 2009, 21:50:48

Przy lutowaniu SMD klej Twoim przyjacielem.

I jeszcze nie mogę się powstrzymać od: „Python, so easy even I can do that!”

fijam (link do komentarza) 12 kwietnia 2009, 10:19:28

Używam USBasp od ok. 2 lat i działa mi wspaniale, do laptopa to idealne rozwiązanie, jedynie problem może być z zaprogramowaniem atmega 8 lub 48 do programatora, mi zaprogramował kumpel ;)

goofiaa (link do komentarza) 12 kwietnia 2009, 15:30:49

No tak, za każdym razem na ten „pierwszy raz” trzeba mieć jakiś inny programator, czy to by zaprogramować programator, czy to by załadować bootloader.

Caladan (link do komentarza) 12 kwietnia 2009, 21:37:58

Witam, mam pytanie dotyczące diód LED - skoro programator jest zasilany raz z 5V a raz z 3,3V to przy takim samym rezystorze płynie w nich prąd około 9 mA dla 5V zasilania, oraz ok3 mA dla 3V dla (dobrze liczę?) Czy dioda świeci już przy 3mA?. Jak to się sprawuje w praktyce? Bardzo proszę o odpowiedź na maila mickpr@poczta.onet.pl
Z poważaniem Michał Przybył

mickpr (link do komentarza) 21 kwietnia 2010, 07:58:17

Dodaj komentarz