Programator AVR USBasp v2.0 Lcsoft i Linux

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.

Co to jest USBasp Lcsoft?

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

Pierwsze podłączenie programatora

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.

Aktualizacja firmware w USBasp V2.0 Lcsoft Studio

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.

Wojtek

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)

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

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

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

Ostatnie posty

Nieudana naprawa i udany przeszczep – Boombox Philips

Mamy w domu dość wiekowy (2012) Boombox Philips, model AZ385/12 używany przez dzieci głównie jako…

14 godzin temu

Tani moduł IoT z kamerką ESP32 CAM – pierwsze uruchomienie

Mega tanie, bezprzewodowe moduły Internet of Things na dobre zadomowiły się w naszych sieciach. Od…

7 miesięcy temu

Aktualizacja oprogramowania w stacji lutowniczej AiXun T3A

Pewnie nie każdy posiadacz tytułowej stacji lutowniczej wie, że posiada ona możliwość aktualizacji firmware'u. Producent…

8 miesięcy temu

Programator USB AVR ISP z Arduino Nano

Jakiś czas temu, przeglądając Aliexpress natknąłem się na ciekawy shield do Arduino Nano. Według opisu…

8 miesięcy temu

Tester elementów elektronicznych na atmega – aktualizacja firmware’u

W mailach i komentarzach kilka razy przewijała się prośba o ten wpis. Chodzi o aktualizację…

9 miesięcy temu

Wzmacniacz słuchawkowy Lovely Cube – popularny klon Lehmanna

Dziś tematyka audio, a nawet audiofilska. Uznany wzmacniacz słuchawkowy Lehmann Black Cube Linear o dość…

9 miesięcy temu