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








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