Autor: tmf
Redakcja: Dondu
Artykuł jest częścią cyklu: Atmel Studio - Spis treści
W drugiej części mini-kursu poświęconego Atmel Studio pokazane zostanie jak wybierać narzędzia do programowania/debugowania mikrokontrolerów. Jest to o tyle ważne, że dzięki prostej konfiguracji będziemy mieli możliwość programowania/debugowania mikrokontrolerów wprost z IDE (środowisko programistyczne, w naszym przypadku Atmel Studio), bez konieczności uruchamiania programów zewnętrznych.
Zacznijmy więc od samych programatorów.
Na rynku mamy dziesiątki różnych wersji. Ja na początek proponowałbym użyć narzędzi dostarczonych przez firmę Atmel. Są one nieco droższe, ale moim zdaniem warte swojej ceny.
AVRISP
Dla osób mających ograniczony budżet proponuję AVRISP, który można kupić za około 60-80 zł (są to różne klony, jednak w pełni kompatybilne z oryginałem). Pamiętać jednak należy, że AVRISP programuje tylko mikrokontrolery ATtiny oraz ATmega posiadające interfejs ISP i nie jest bezpośrednio wspierany przez Atmel Studio 6. Jednak można „pośrednio” go z tym programem spiąć.
AVRISPMkII
To nieco droższa opcja (w granicach 170 zł). Jest to unowocześniona wersja AVRISP, która oprócz programowania starszych mikrokontrolerów, umożliwia także programowanie nowszych, wyposażonych w interfejs PDI.
AVRISPMkII na stronie Atmel'a.
Dragon
Jeśli jednak jest ktoś gotów wydać 170 zł na taki programator, to proponuję jeszcze trochę zacisnąć pasa i kupić AVR Dragon. Jak sama nazwa wskazuje, jest to prawdziwy smok – umożliwia programowanie wszystkich mikrokontrolerów AVR, przy cenie około 220 zł. Obsługuje on wszystkie interfejsy (ISP, PDI, dW, JTAG, HV, parallel), jednak jak to ze smokami bywa - trzeba się z nim obchodzić ostrożnie.
Dragon na stronie Atmela.
Dragon sprzedawany jest jako goła płytka drukowana z przylutowanymi elementami. Sami musimy sobie kupić kabel USB, oraz wykonać kable łączące interfejsy Dragona z naszymi układami. Jednak pamiętajmy, że za tą w sumie niewielką cenę dostajemy układ o możliwościach przewyższających półprofesjonalny JTAGICEMkII, który kosztuje ponad 1200 zł!
Jak widzimy na liście interfejsów pojawia się JTAG – dzięki temu zyskamy nie tylko możliwość programowania układów, ale także ich sprzętowego debugowania. Jakie daje to możliwości – może opiszemy w kolejnych artykułach.
Praca na różnych napięciach
Olbrzymią przewagą programatorów oryginalnych (oprócz wsparcia w Atmel Studio), jest ich dostosowanie do pracy z układami programowanymi w zakresie napięć 1,8-5V. W najbliższych latach, standard 5V będzie nieuchronnie odchodził do lamusa, a już obecnie zaczynają dominować układy zasilane napięciem 3,3V. Niższe napięcie zasilające to także niższy pobór prądu, co ma szczególne znaczenie dla urządzeń zasilanych z baterii.
Większość programatorów „homemade” nie ma możliwości pracy z napięciami innymi niż 5V, co czyni je w niektórych zastosowaniach małoprzydatnymi.
Konfiguracja programatora w Atmel Studio
Właściwie wszystkie obecnie sprzedawane programatory wyposażone są w interfejs USB. Wystarczy więc tylko włożyć kabel USB do komputera i programatora, po czym system powinien rozpoznać nowe urządzenie i rozpocząć instalację sterowników. Jeśli wszystko przebiegło pomyślnie powinniśmy dostać komunikat jak poniżej (do komputera został podłączony AVRISPMkII):
Warto upewnić się, że wszystko jest ok, przeglądając menagera urządzeń:
Urządzenia firmy Atmel korzystają ze sterownika Jungo (który jest instalowany razem z Atmel Studio), stąd też na liście urządzeń powinny znajdować się w zakładce o nazwie Jungo. Po instalacji urządzenie jest gotowe do użycia.
Pamiętaj, aby najpierw zainstalować Atmel Studio, a dopiero potem podpinać programatory. Postępowanie odwrotne sprawi, że system operacyjny nie będzie mógł odnaleźć potrzebnych sterowników i urządzenie nie będzie działało.
Oczywiście sterowniki można pobrać „ręcznie” i cały proces instalacji przeprowadzić manualnie, ale przecież miało być łatwo – a nie o to chodzi, aby posiadając śrubokręt wkręcać śrubki nożem.
Po poprawnym zainstalowaniu urządzeń, uruchamiamy Atmel Studio i przechodzimy do właściwości wcześniej utworzonego projektu (Project->Properties...). Wybieramy zakładkę Tool i w Selected debugger/programmer wybieramy posiadany programator:
Jak widzimy w okienku Selected debugger/programmer można wybrać tylko te urządzenia, które są dostępne w komputerze.
Jeśli posiadany programator nie będzie poprawnie zainstalowany w systemie, to nie będzie możliwości jego wyboru w Atmel Studio.
Oprócz nazwy programatora pojawia się dodatkowo jego numer seryjny – jest on przydatny jeśli w wystemie mamy zainstalowanych kilka programatorów tego samego typu (co jednak jest mało prawdopodobne). W ten sposób poszczególne programatory można od siebie odróżnić.
Drugą opcją po wybraniu programatora jest wybór interfejsu do programowania. Zarówno AVRISPMkII, jak i Dragon, czy JTAGICEMkII dysponują kilkoma interfejsami do wyboru.
Na liście interfejsów pojawią się wyłącznie te interfejsy, które wspiera wybrany programator i mikrokontroler.
Stąd też, co prawda pokazany AVRISPMkII wspiera interfejsy ISP oraz PDI, jednak wybrany w poprzedniej części kursu mikrokontroler ATMega128 wspiera tylko ISP i JTAG. W efekcie dla naszego programatora jedyną możliwością jest wybór interfejsu ISP.
Dla interfejsu ISP ważna jest także częstotliwość przesyłu danych.
Pamiętaj, że zastosowany zegar taktujący ISP musi być co najmniej 4-krotnie niższy niż zegar taktujący mikrokontroler. W przeciwnym przypadku programowanie nie będzie możliwe.
I tak, jeśli wybrany mikrokontroler jest taktowany zegarem 2 MHz, to maksymalna częstotliwość zegara ISP nie może być wyższa niż 500 kHz. W większości przypadków domyślne ustawienie jakim jest 250 kHz jest poprawne. Możemy je zwiększyć, co przyśpieszy programowanie mikrokontrolera, w rzadkich przypadkach, kiedy mikrokontroler jest taktowany zegarem o ultraniskiej częstotliwości (np. z kwarcu zegarkowego) należy je zmniejszyć. Pozostałe opcje dla interfejsu ISP na tej zakładce możemy zostawić bez zmian.
Jeśli korzystamy z Dragon'a, to do wyboru będziemy mieli (w przypadku ATMega128), aż 3 interfejsy: ISP, HV i JTAG:
Musimy wybrać taki interfejs jaki jest wykorzystywany w układzie. Stąd też wybór jednego z powyższych interfejsów jest determinowany poprzez wykonane połączenia pomiędzy mikrokontrolerem, a gniazdem programatora.
Dla interfejsu JTAG pojawiają się dodatkowe opcje związane z konfiguracją Daisy Chain (umożliwiającą łączenie w szereg wielu mikrokontrolerów/urządzeń wspierających JTAG – szczegóły znajdziesz w książce „Język C dla mikrokontrolerów AVR – od podstaw do zaawansowanych aplikacji"). W większości przypadków poniższe opcje zostawiamy bez zmian.
Symulator
Niezależnie od podłączonych programatorów zawsze na liście wyboru programatora dostępna jest jedna opcja dodatkowa – AVR Simulator.
Co to takiego? Jest to coś czego nie mają użytkownicy innych IDE (a przynajmniej nie mają tego w formie tak rozbudowanej i dobrze działającej).
Jest to jedno z bezcennych narzędzi, które mogą nam zaoszczędzić mnóstwo czasu i pieniędzy – o ile będziemy umieli się nim posługiwać.
W skrócie jest to symulator mikrokontrolerów AVR. Po jego wybraniu możemy uruchomić debugowanie programu (Debug->Start Debugging and Break, Alt+F5). Sesja debuggera programowego zostanie pokazana w dalszej części kursu.
Jeśli twój program nie działa jak należy, to warto skorzystać z symulatora i prześledzić krok po kroku jego działanie, a także stan procesora – w symulatorze dostępne są wszystkie rejestry IO mikrokontrolera, a także jego pamięć. Możemy je podglądać oraz modyfikować.
Możliwości te wprost trudno przecenić. Jedyną lepszą rzeczą od symulatora jest... symulator sprzętowy oparty o np. interfejs JTAG – ale wymaga to zakupu co najmniej AVR Dragon.
Uaktualnienie oprogramowania
Wszystkie narzędzia firmy Atmel zawierają w sobie mikrokontroler, który realizuje określony program (firmware), odpowiedzialny z komunikację pomiędzy komputerem PC, a programowanym układem. Okazjonalnie zachodzi potrzeba jego uaktualnienia.
Atmel Studio samo wykrywa sytuację, w której firmware posiadanego narzędzia jest nieaktualny – sygnalizuje wtedy konieczność jego aktualizacji. Proces ten odbywa się całkowicie automatycznie i nie wymaga żadnej ingerencji użytkownika – poza potwierdzeniem chęci uaktualnienia. Proces uaktualnienia można także zainicjować „ręcznie” wybierając opcję Tools->AVR Tools Firmware Upgrade. Atmel Studio przeszuka podłączone urządzenia i sprawdzi, czy nie wymagają one aktualizacji, na końcu wyświetlając mini raport:
Pamiętaj, aby przed procesem aktualizacji sprawdzić wszystkie połączenia pomiędzy komputerem na aktualizowanym narzędziem. Dobrze jest też odłączyć narzędzie od innych układów. Zapewni to bezproblemowy proces aktualizacji. Nie wyłączaj też komputera dopóki aktualizacja się nie zakończy.
W rzadkich sytuacjach może pojawić się problem i po aktualizacji urządzenie nie będzie działać. Zwykle jest to związane z utratą połączenia, błędem systemu lub działaniem tzw. siły wyższej Nie należy się wtedy załamywać – każde urządzenie firmy Atmel ma „protokół awaryjny”, umożliwiający ratunkowe przeprogramowanie firmware. Opisy jak to zrobić znajdują się na stronie firmy Atmel, a jeśli zajdzie taka potrzeba umieścimy je i tutaj.
To tyle. Po dokonaniu wyboru programatora możemy programować swoje układy wprost z poziomu Atmel Studio. W tym celu klikamy na ikonkę na pasku narzędziowym:
Obok przycisku programowania wyświetlone będą też informacje o wybranym mikrokontrolerze oraz programatorze i interfejsie programowania – w naszym przykładzie będzie to ATMega128, a programatorem będzie AVR Dragon pracujący w trybie JTAG.
Zobacz także: Atmel Studio - Spis treści
Nic nie piszesz o programatorach UABASP. Czy oznacza to że nie da się ich wykorzystać? To musiałbym wydać kasę na nowy programator?
OdpowiedzUsuńPewnie można, tak samo jak w starszych wersjach. Żeby w AVR Studio 4 móc korzystać z programatora USBASP musiałem dodać w menu "skrót" do programu avrdude i ostatecznie to nim programowałem. Tutaj pewnie też da się tak zrobić, a ostatecznie powinno się dać ręcznie przez avrdude programować.
OdpowiedzUsuńNiestety programatory inne niż firmy Atmel nie są bezpośrednio wspierane, co więcej nawet starsze programatory (AVRISP, AVRICE) też nie są. Można je wywołać dodając skrót, co może opiszę w kolejnej części.
OdpowiedzUsuńObecnie klon AVRISPMkII można kupić za około 70 zł, warto o tym pomyśleć, tym bardziej, że USBASP kosztuje 30 i więcej złotych, a nie ma wielu funkcji AVRISP MkII.
Czy jest możliwość współpracy ATMEL STUDIO z jakimś innym programatorem/deguggeren niż niebieski SAM-ICE (którego mam użyczonego z uczelni).
OdpowiedzUsuń@Tmf
OdpowiedzUsuńUBAASP mam, nie chcę kupować innego, nawet za 70zł. Nie ma jakiejś możliwości by go wykorzystać?
A może ktoś inny wie jak?
Tak jak ci pisałem da się go wykorzystać tak jak dowolny inny programator, poprzed dodanie skrótu do skryptu wywołującego programator z odpowiednimi parametrami. Będzie o tym w dalszej części kursu.
OdpowiedzUsuńMoże pytanie z innej beczki. Chciałbym zakupić programator AVR Dragon (głownie za cenę przy dużych możliwościach no i kompatybilność z ATMEL Studio ), ale ze względu na moje umiejętności i ciągłe biadolenie, że łatwo go popsuć boję się wyrzucać kasę. Czy będzie\jest jakiś tutorial jak się z nim obchodzić??
OdpowiedzUsuńJeśli będzie taka potrzeba to tutorial może być. Popsuć go nie tak łatwo - po prostu sam programator sprzedawany jest jako goła płytka bez obudowy. To jedyny problem. Wystarczy go wsadzić w pudełko po czekoladkach i jest ok. Dragona szczerze polecam.
OdpowiedzUsuńOprócz oczywistej obudowy- można sobie kupić w AVT Dragon Save.
OdpowiedzUsuńAVT1663.
Oczywiście jak to w AVT- koncepcja może dobra ale wykonanie...
Po pierwsze trzeba się zaopatrzyć w gniazdka wannowe 3x2 i wtyczki do nich.
Bo to co proponują- uciąć nogi od gniazd/wtyczek 5x2 to jest karalne.
Takie gniazda/wtyczki są potrzebne jeśli się zamierza działać z Atmelami- co do innych procesorów- nie wiem.
No i w układ 74HC08- bo do zestawu dają 74LS08- no porażka.
Witam
OdpowiedzUsuńMożna prosić o umieszczenie opisu jak wykorzystać w atmelstudio programator USBASP?
Rady typu "kupić inny programator" są z kategorii zepsuł się komputer - jak naprawić? - kup nowy.
Przy okazji uwaga na klony AVRISPMkII. W przypadku drobnych zmian w atmelstudio, wymagana jest aktualizacja firmware w programatorze. Wystarczy ze wersja jest minimalnie rozna niz oryginalu i programator oprogramowanie odmawia współpracy z programatorem.
W oryginale, firmware mozna zaktualizowac automatycznie, w klonie, trzeba czekac na nowy wsad autora programatora.
Rozmawiałem z Tmf'em - przygotuje artykuł o prostym wykorzystaniu USBasp w Atmel Studio via AVRDude (w miarę jego możliwości czasowych).
OdpowiedzUsuńNo i już jest :) Wystarczy kliknąć kolejny.
OdpowiedzUsuńA który programator wybrac pod linuxa i pod laptopa ktory ma tylko i wylacznie mozliwosc programowania przez USB? Szukalem na AVT i nie maja nic, w opisach programatorw ATmela nie ma opisu co do systemu operacyjnego. Sie juz zamotalem w tym wszystkim....
OdpowiedzUsuńWszystkie programatory Atmela będą działać w GNU/Linux m.in. przez AVRDude. Problem w tym, że główna zaleta z ich korzystania - czyli Atmel Studio działa tylko w MS Windows. Można je odpalić w virtualnej maszynie, ale wtedy potrzebujesz licencję na Windows.
UsuńCzy to normalne, że za każdym razem gdy chcę programować flash (przycisk kostki z błyskawicą) muszę kilkać aply (mam pusty ekran) a dopiero potem klikać memory i program? Często też ustawienia taktowania CLK się zmieniają (chyba na domyślne 2MHz) i muszę ręcznie je zmieniać na 1MHz by spokojnie zaprogramować procesor taktowany 8MHz.
OdpowiedzUsuńNie ma jakiegoś szybszego sposobu programowania procesora? To jest tragedia przy częstych zmianach programu :( (używam mk2 slim).
Pozdrawiam, Karol
Niestety normalne. Z jakiegoś powodu twórcy AS uznali, że programista ciągle zmienia podłączony procesor :) Stąd też za każdym razem trzeba naciskać Apply. Co do reszty to kliknij w tym dialogu na to kółko zębate - przeniesie cię do ustawień, gdzie powinieneś mieś nadane opcji Load from Project true.
UsuńCo do programowania - zamiast z zakłądki memory programuj z zakładki Production File - wygodniejsze. No i można też do programowania użyć opcji startu debuggera - wtedy naciskasz F5 i program się automatycznie ładuje do MCU.
F5 nie tylko służy do startu debuggera. Jeśli programator nie obsługuje deuggera to F5 kompiluje i wgrywa do procka. O wiele wygodniejsze niż ciągłe klikanie w ikonę programowania i zatwierdzanie wybranego UC.
OdpowiedzUsuńDzięki za odpowiedź. Load from Project oczywiście miałem zaznaczone (przez chwilę tam grzebałem, może właśnie odznaczyłem). Co do F5 (start debugging) to wybierałem tą opcje (wiedziałem, że jest jakiś skrót) ale miałem ciągle błąd, nie pamiętam jaki ale czepiał się o EASAVE=1 (za cholerę nie mogłem zrozumieć co to ma wspólnego a zmiany, już mu ustąpiłem;P, nic nie powodowały). W książce pisałeś o nazwach folderów, przede wszystkim polskie znaki nie są tolerowane (akurat taką zasadę przyjmuję od dawna) ale cała ścieżka do danego projektu jest u mnie dość zawiła i uwzględnia dziwne nazwy jak np " D:\+++ ELEKTRONIKA +++\!=== MOJE PROJEKTY =!\..." Chodziło mi kiedyś o, z pozoru, niecodzienny wygląd mojego folderu roboczego i tak już zostało od kilku lat... Czy to może też czasami przeszkadzać?
OdpowiedzUsuńAktualnie mam drobny problem z plikiem nagłówkowym hardware.h znajdującym się w folderze hardware. "Obok" folderu hardware mam folder 1-wire a w nim np plik 1-wire.c, który ładuje z folderu hardware plik hardware.h. Kończy się to błędem, includuje dokładnie tak #include "io_hardware/hardware.h"
ok, miałem nagłe zaćmienie :D w WinAVR generalnie nie musiałem tego stosować ale i projekty miały wszystkie pliki luzem... chodziło mi wyżej o magiczne dwie kropeczki "../io_hardware/hardware.h" wbrew pozorom albo źle wyszukiwałem albo po prostu się o tym nie mówi - może to oczywiste :D http://www.elektroda.pl/rtvforum/topic1499141.html
UsuńNa stronie sklep.cyfronika.com.pl znalazłem taki opis przy programotorze AVT5322C AVR JTAG-ICE.
OdpowiedzUsuń"Dla mikrokontrolerów AVR dobrym i tanim rozwiązaniem jest AVR Dragon. Niestety, jest podatny na uszkodzenia a ewentualna późniejsza naprawa jest stosunkowo droga."
Ktoś wie na czym ma polegać w/w podatność na uszkodzenia?
Jskiś marketingowy bełkot. Piszą o podatności na uszkodzenia Dragona co jest wyssaną z palca bzdurą (dokładniej to padały pierwsze rewizje dragona, których od lat nie ma już na rynku), za to sprzedają JTAG, który nie współpracuje z Atmel Studio, tylko starym AVR Studio, poza tym ma ograniczony zestaw procków z którymi działa, co się nie zmieni, gdyż Atmel lata temu zarzucił wsparcie dla tego programatora/debuggera. Podsumowijąc - Dragon jest ok, chociaż obecnie lepiej wychodzi Atmel ICE.
UsuńPodczas programowania plytki ATMEL XPlained MIni Atmega168PB dostaje blad:
OdpowiedzUsuń++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Setting DebugWire fuse seems to have failed. Check your clock and fuse settings.
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Atmel Studio was unable to start your debug session.
Please verify device selection, interface settings, target power and connections to the target device. Look in the details section for more information.
Timestamp: 2015-12-13 14:55:07.617
Severity: ERROR
ComponentId: 20100
StatusCode: 131107
ModuleName: TCF (TCF command: Processes:launch failed.)
The detected device ID is not valid. Debugger command Activate physical failed.
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
fusbity: LOW: 0xE0 HIGH: 0x9F EXT: 0xFF
Sygnatura urzadzenia: 0x1E9415
Cwiczenia robie w/g ksiazki Pana Francuza Jezyk c dla mikrokontrolerow od podstaw do zaawansowanych aplikacji wyd 2.
Plytka sie programuje ale nie moge dostac sie do debugera. Jestem zielony w tym temacie i nie chce zablokowac plytki. Prosze o pomoc zaawansowanych uzytkownikow.
Teraz sytuacja jest odwrotna. Programuje przez F5 ale nie moge odczytac sygnatury:
OdpowiedzUsuńFailed to enter programming mode. ispEnterProgMode: Error status received: Got 0xc0, expected 0x00 (Command has failed to execute on the tool)
Unable to enter programming mode. Verify device selection, interface settings, target power, security bit, and connections to the target device.
Czy ktos sie z tym spotkal?