Programator USBasp stał się godnym i naturalnym następcą STK200 podłączanym do portu LPT. Ten nowszy, choć nieco bardziej skomplikowany w budowie, jest znacznie szybszy i funkcjonalniejszy, głównie za sprawą możliwości podłączenia do portu USB i funkcją zasilania programowanego układu. Samodzielne złożenie tego programatora nie jest trudne i taki układ na pewno pojawi się na stronie. Dziś zajmiemy się bardzo tanim gotowcem, idealnym dla początkujących – USBasp V2.0 Lcsoft Studio w cenie około 15zł na allegro i jeszcze taniej na chińskich portalach.
Odpowiadając krótko na powyższe pytanie – chiński klon programatora USBasp opracowanego przez Thomasa Fischla. Urządzenie jest praktycznie zgodne elektrycznie z pierwowzorem. Porównując PCB ze schematem oryginału można zauważyć brak kondensatora elektrolitycznego C1 o pojemności 4,7μF, ale został dodany półprzewodnikowy bezpiecznik o oznaczeniu F1. W nieco inny, korzystniejszy sposób, rozwiązano zasilanie, dostępne na 2 pinie złącza KANDA. W oryginale było to +5V z USB lub jego brak, chiński odpowiednik posiada 3 opcje – 5V, brak (po zdjęciu zwory) lub 3,3V. Zrezygnowano z wlutowania goldpinów JP2 – zwora Self programming i JP3 – Slow SCK. USBasp Lcsoft posiada nieco zmodyfikowane oprogramowanie i Chińczycy założyli, że JP3 jest zbędne, a JP2 nie będzie wykorzystywane. Programator posiada kompaktowe wymiary, laminat jest węższy niż złącze KANDA:
Jeśli u kogoś pojawiło się pytanie – czy warto kupić? W chińskich sklepach cena wynosi około 2$ z darmową wysyłką do Polski, więc odpowiedź jest chyba jasna ;).
W linuksie wystarczy podłączyć programator do portu USB i gotowe, nie trzeba instalować żadnych sterowników, wszystko jest w kernelu. Wpisując w terminalu
lsusb
powinniśmy otrzymać wynik podobny do poniższego
Czyli Vendor ID to 16C0 i Product ID to 05DC. Podłączmy teraz za pomocą kabelka IDC10 (2×5 PIN) mikrokontroler AVR i za pomocą avrdude spróbujmy odczytać podstawowe informacje:
avrdude -c usbasp -p m8
Parametr -c to typ programatora, -p model mikrokontrolera AVR, tutaj jest to atmega8. Więcej o avrdude i innych narzędziach znajdziesz tutaj: Instalacja narzędzi dla AVR i IDE Eclipse w Linux Mint. Wynikiem działania jest…
No właśnie, operacja niedozwolona dla zwykłego użytkownika. Możemy to sprawdzić wydając polecenie:
ls -l /dev/bus/usb/001/018
Wydając wcześniej komendę lsusb widziałem, że jest to urządzenie nr 018 na magistrali 001, wynik był zgodny z oczekiwaniem:
Pewnym rozwiązaniem (nieeleganckim) jest uruchamianie avrdude z uprawnieniami roota. Ładniej jednak nadać uprawnienia do komunikacji z programatorem użytkownikowi, na początek dodajemy regułę:
nano /etc/udev/rules.d/59-usbasp.rules
Czyli w odpowiednim miejscu tworzymy plik xx-usbasp.rules (xx – jakaś niewykorzystana liczba) i wpisujemy w nim:
SUBSYSTEMS=="usb", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="05dc", GROUP="users", MODE="0666"
W terminalu wygląda to tak:
Po zapisaniu pliku, wydajemy komendę:
sudo udevadm trigger
I jeszcze raz sprawdzamy uprawnienia:
Już jest OK :). Ponawiamy próbę odczytu naszej atmegi8:
Na dzień dobry ostrzeżenie – avrdude nie może ustawić taktowania na linii SCK magistrali ISP i sugeruje zrobić update firmware. Dalej wszystko jest OK, odczytana została poprawna sygnatura i fusebity. Z tym warningiem da się żyć, tzn. programować, ale da się też podnieść firmware w naszym tanim, chińskim programatorze, do wyższej wersji i zapomnieć o ostrzeżeniu.
Do aktualizacji oprogramowania programatora USBasp będzie potrzebny… programator mikrokontrolerów AVR. Może to być choćby taki najprostszy, składający się z wtyczki DB25 i kabelka + zasilacz stabilizowany 5V, można też wykorzystać drugi programator USBasp.
Warto zacząć od pobrania nowej wersji firmware’u, najlepiej ze strony domowej autora projektu: www.fischl.de/usbasp/ w części download wybieramy najnowszą wersję paczki:
Po rozpakowaniu archiwum, przechodzimy do folderu bin/firmware i kopiujemy plik dla odpowiedniego mikrokontrolera (np. usbasp.atmega8.2011-05-28.hex) w dogodne miejsce. W programatorze, który będziemy aktualizować, zwieramy punkty lutownicze JP2 – idealna do tego celu będzie odizolowana miedziana żyła skrętki komputerowej. Powstaje nam taki potworek:
Programatory wyposażone w złącze KANDA łączymy kablem IDC10 jeden-do-jednego. Programowany programator nie może być wpięty w port USB, a zworka wyboru zasilania musi być ustawiona na 5V. Na początek odczytajmy fusebity z chińskiego usbasp:
avrdude -c usbasp -p m8 -U lfuse:r:-:h -U hfuse:r:-:h
No i mamy wyniki szesnastkowo: HighFuse: D9 i LowFuse: 9F. W pliku Readme.txt znajdującym się w ściągniętej paczce, dla atmegi8 są podane nieco inne wartości: hfuse: C9 i lfuse: EF. Różnice w zaprogramowanych poszczególnych bitach zostawiam dla dociekliwych. Na pewno warto ustawić wartości wskazane przez autora projektu, ale najpierw wgrajmy nowy soft:
avrdude -c usbasp -p m8 -U flash:w:sciezka_do_pliku/usbasp.atmega8.2011-05-28.hex
Wgrało się, weryfikacja przebiegła pomyślnie. To teraz fusebity, po wpisaniu warto sprawdzić dwa razy przed wciśnięciem [Enter], bo pomyłka może zamienić programator w przycisk do papieru:
avrdude -c usbasp -p m8 -U hfuse:w:0xC9:m -U lfuse:w:0xEF:m
No i udało się :).
Od teraz, wykonując operacje odczytu/zapisu na mikrokontrolerach AVR, musimy programowo ustawić taktowanie linii SCK. W avrdude realizowane jest to za pomocą parametru -B X, gdzie X to liczba. Im wolniejsze taktowanie mikrokontrolera, tym większa liczba. Dla zegara 8MHz i więcej możemy pominąć -B, ale dla 1MHz trzeba wpisać -B 3, czyli:
avrdude -c usbasp -p m8 -B 3
Spowoduje poprawne odczytanie sygnatury atmegi8 taktowanej zegarem 1MHz, czyli takiej świeżej, z półki sklepowej.
Radio nieodłącznie kojarzy się z nieśmiertelnym FM lub transmisją intermetową. Standard DAB+ wydaje się być…
Poniżej opiszę odpowiednik drogiej (w stosunku do pojemności) baterii 9V o oznaczeniu 6F22. Ze względu…
Widząc migającą na pomarańczowo lampę ostrzegawczą, zastanawiałem się (ciekawe czy tylko ja) jak jest zbudowana,…
W tym wpisie przedstawię bardzo ciekawe narzędzie na RaspberryPi, przydatne każdemu administratorowi urządzeń sieciowych. W…
Poniżej opiszę mały, przydatny gadżet, który przechwytuje obraz i dźwięk z portu HDMI i przekazuje…
Tytuł tego wpisu zawiera część komunikatu z menedżera urządzeń systemu Windows 11, po wsadzeniu w…
Zobacz komentarze
jak uzyskać uprawnienie do edycji pliku w gnu nano? bo właśnie z ich powodu nie chce mi ich edytować (mam programator o tych samych id)(wiem prawdopodobnie jest to głupie pytanie, ale moja wiedza oscyluje bardzo blisko zera)
sudo nano /sciezka/do/pliku
wielkie dzięki, działa, mam ten programator od niemal roku i tyle kombinowałem w windowsie, a dziś, akurat chciałem sobie odświeżyć i zobaczyć co tu się dzieje, i widzę ten temat "…i linux" bo od miesiąca jestem na ubuntu, teraz może nauczę się c na mikrokontrolery, dostałem wtedy nawet książkę, wielkie dzięki
Do zabawy w programowanie AVR pod Linux, polecam ucs-prog. Darmowy, bez reklam itp.
(Nie)Subtelna reklama ;)
W sumie racja, wyszło na reklamę. Nie specjalnie, no ale... Skoro jest dobre narzędzie, które potrafi zrobić za użytkownika wiele rzeczy, to dlaczego by o nim nie poinformować? Ok, wiem, dostanie mi się... ;)
Potrzebowałbym beta-testerów do tego programu, bo sam nie wyłapię wszystkich bugów.
A Pan, Panie Wojtku, to w jaki sposób programuje swoje AVRki? CLI AVRDude czy jakąś fajną nakładką graficzką na niego?
No ja programuję klasycznie, czyli avrdude z linii poleceń. Rozumiem, że Twój soft to GUI do avrdude?
Tak, korzysta z AVRDude.
Aktualnie dodaje kilka "drobiazgów" do niego, np. baza danych o prockach (ilość RAM, FLASH, EEPROM, Fuse i LockBity).
Muszę ogarnąć mądrze Fuse, bo to dla mnie temat nieco zakręcony, żeby nie narobić nikomu problemów przy programowaniu. Czy zechciałby Pan rzucić okiem na program jak wydam pierwszą publiczną wersję i napisać opinie?
Który z 3 firmware (8, 48 i 88) będzie odpowiedni do atmega168? Mam do testów/zabawy 3 szt ProMini atmega168. Próbuję (bezskutecznie) wpisać choćby blink. Chiński programator USBASP i arduinoIDE nie chcą współpracować mimo moich starań.
avrdude -p m168 -c usbasp
avrdude: warning: cannot set sck period. please check for usbasp firmware update.
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.00s
avrdude: Device signature = 0x1e940b (probably m168p)
avrdude: safemode: Fuses OK (E:F8, H:DD, L:FF)
avrdude done. Thank you.
Coś mi sie rąbało : :~$ ls -l /dev/bus/usb/009/002
crw-rw----+ 1 root plugdev 189, 1025 maj 5 17:34 /dev/bus/usb/009/002
Powinno byc user a jest plugdev :(
U mnie nic z tych rzeczy nie działa. Linux Mint 20 ulyana. Nie mogę nawet odczytać procesora.
co widzisz po wpisaniu lsusb w terminalu?
To co powinienem zobaczyć czyli między innymi to co zaznaczone na tym kolegi obrazku
https://grylewicz.pl/wp-content/uploads/2015/06/usbasp_lsusb-590x161.jpg
Tylko że moje uprawnienia wyglądają tak
crw-rw-rw-+ 1 root usb 189
Teraz moje prawa wyglądają już tak
crw-rw-rw-+ 1 root users 189, 9 sie 30 10:01 /dev/bus/usb/001/010
Ale próba odczytania megi 328 w arduino nano (w trzech różnych sztukach) daje tylko rezultat w poniższej postaci
avrdude -p m328 -c usbasp
avrdude: error: program 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.
Dobra, atmegę 8 na płytce ewaluacyjnej EVBAVR04 mi odczytało więc teraz jestem w czarnej d...
Nie wiem jaki procek siedzi na tych płytkach arduino nano lub jakaś niewłaściwa pinologia złącza ISP się na nich znajduje.