Mikrokontrolery - Jak zacząć?

... czyli zbiór praktycznej wiedzy dot. mikrokontrolerów.

czwartek, 24 marca 2011

Atmel Studio: Programatory współpracujące są fajne!


Autor: tmf
Redakcja: Dondu

Artykuł jest częścią cyklu: Atmel Studio - Spis treści


Do tej pory wielokrotnie podkreślałem różne przewagi programatorów Atmela i ich klonów, nad tanimi usbasp i innymi programatorami „homemade”. Bez obaw, nie będę się powtarzał  Celem tego artykułu jest pokazanie możliwości i wygody jaka się wiąże z używaniem Atmel Studio i częściowo programatorów typu AVRISP-MkII.

Skoro wydaliśmy kilkadziesiąt złotych na programator, to zapewne chcielibyśmy móc skorzystać z możliwości jakie on oferuje. Poniżej przedstawię zrzuty zrobione z użyciem programatora AVR Dragon, lecz w zakresie programowania (nie debugowania) układów AVRISP-MkII i jego klony mają możliwości identyczne.


Dlaczego programatory współpracujące z Atmel Studio są fajne?

Zacznijmy więc od okna programowania. Podłączony programator korzysta z USB jest więc automatycznie rozpoznawany przez system, a jeśli wcześniej zainstalowaliśmy Atmel Studio to nie musimy także martwić się o sterowniki – system wszystko zainstaluje automatycznie.

Dialog programatora możemy uruchomić wybierając z menu Tools > Device Programming, lub klikając na odpowiednią ikonę na listwie narzędziowej (ikonka z układem scalonym i błyskawicą):

Atmel Studio - Listwa narzędziowa główna.


Zapewne najszybciej będzie po prostu nacisnąć Ctrl+Shift+P, co spowoduje uruchomienie dialogu programowania:

Atmel Studio: Okno - Device programming


Do wyboru będziemy mieli listę dostępnych narzędzi (Tool) z której wybieramy programator, którego chcemy użyć. Następnie wybieramy programowane urządzenie (Device), interfejs, który chcemy wykorzystać do programowania (np. pokazany JTAG) i klikamy Apply. Jeśli wszystkie połączenia są poprawne, to programator nawiąże połączenie z programowanym układem, a my będziemy mogli wybierać opcje programowania.

W dalszych przykładach jako procesor wybiorę ATMega128 – tylko dlatego, żeby pokazać wybór i konfigurację fusebitów. Procesory, które używam na co dzień (XMEGA) zasadniczo nie wymagają konfiguracji fusebitów, więc dla zilustrowania tematu o którym piszę byłyby po prostu nudne.

Nie tylko początkującym osobom spore problemy sprawiają bity konfiguracyjne (tzw. fusebity). Często zdarza się, że wybieramy nieprawidłową konfigurację, w efekcie procesor próbuje uruchomić się z nieistniejącego źródła zegara, co oczywiście nie jest możliwe.

Warto podkreślić, że problem ten nie występuje w przypadku mikrokontrolerów XMEGA – one zawsze startują z wewnętrznego generatora RC o częstotliwości 2 MHz, a wybór i konfigurację zegara przeprowadza się programowo.

Problemy te powodują, że szukamy różnych rozwiązań, mniej lub bardziej dziwacznych. Począwszy od studiowania noty procesora (co jest godne pochwały), a skończywszy na różnych nakładkach graficznych na AVR Dude. Niektóre z nich są płatne i mają nas rzekomo uchronić przed zablokowaniem MCU. Z pewnością pomagają one w uniknięciu nieprawidłowej konfiguracji procesora, lecz nie są w stanie jej zapobiec (chyba, że uniemożliwią nam po prostu wybór pewnych konfiguracji, co jest raczej rozwiązaniem bezsensownym).

Ale to samo możemy osiągnąć bez programów zewnętrznych, wykorzystując IDE jakim jest Atmel Studio. W celu konfiguracji fusebitów klikamy po prostu zakładkę Fuses i wybieramy pożądaną konfigurację:

Atmel Studio: Programator AVR Dragon - Okno device programming


Wybierając źródło i konfigurację zegara, typ oscylatora i czasy startu mikrokontrolera wybieramy pożądaną konfigurację z rozwijanej listy. W powyższym przykładzie zaznaczona jest opcja taktowania MCU z zewnętrznego źródła zegara o częstotliwości 8-12 MHz, z czasem startu równym 64 ms.

Proste, prawda? Podobnie możemy wybierać konfigurację innych opcji określanych przez fusebity. Co więcej, na dole okienka mamy wyświetloną bieżącą wartość fusebitów w postaci heksadecymalnej (extended, high i low), możemy w dowolnej chwili odczytać ich aktualny stan lub zapisać nowy.

Dodatkowo przy każdej opcji dostępna jest pomoc kontekstowa, a także dymek opisujący skrótowo za co dana opcja odpowiada.

Wydaje się więc, że korzystając z tej zakładki konfiguracyjnej powinniśmy uniknąć problemów z zablokowanym mikrokontrolerem. A przynajmniej tego typu problemy znacznie ograniczyć.

Warto też pamiętać, że problem w ogóle znika jeśli korzystamy z interfejsu JTAG. Interfejs ten służy także do taktowania mikrokontrolera, w efekcie nawet jeśli wybierzemy niewłaściwe źródło zegara, to przy pomocy JTAG zawsze będziemy mogli zmienić konfigurację fusebitów (oczywiście nie wszystkie MCU dysponują interfejsem JTAG).

W podobny sposób w zakładce lockbits możemy skonfigurować bity odpowiedzialne za dostęp do poszczególnych typów pamięci:

Atmel Studio: Programator AVR Dragon - Okno device programming - zakładka Lock bits


Ale to nie wszystko. Oczywiście możemy także wybrać pliki, które posłużą do zaprogramowania MCU. W zakładce Memories możemy określić pliki zawierające dane, które należy zapisać w pamięci FLASH i EEPROM mikrokontrolera. Co ważne do zaprogramowania możemy użyć plików w formacie IntelHeX lub w formacie .elf:

Atmel Studio: Programator AVR Dragon - Okno device programming - zakładka Memories

Jeśli zdecydujemy się na pliki w formacie .elf (jest to opcja zdecydowanie zalecana) to prawdopodobnie lepiej będzie jeśli zaglądniemy do zakładki Production file. W zakładce tej możemy wybrać do programowania tzw. plik produkcyjny.

Co to takiego? To nic innego jak plik w formacie .elf. Jak pamiętamy pliki te zawierają komplet informacji potrzebynych do zaprogramowania mikrokontrolera (dane dla pamięci FLASH, EEPROM oraz konfigurację fuse- i lockbitów). Pliki .elf są szczególnie wygodne, jeśli chcemy komuś przesłać nasz program w postaci skompilowanej.

Zamiast dostarczać dwóch plików (z danymi dla FLASH i EEPROM) oraz opis konfiguracji fuse- i lockbitów (co zawsze wiąże się z niebezpieczeństwem popełnienia błędu) możemy po prostu przesłać zawierający wszystko plik w formacie .elf. Taki plik to właśnie plik produkcyjny – umożliwia on „rozpoczęcie produkcji” gotowych do użycia, zaprogramowanych i skonfigurowanych mikrokontrolerów.

Po wybraniu zakładki Production file i wybraniu pliku elf możemy skonfigurować co chcemy aby programator wykonał:

Atmel Studio: Programator AVR Dragon - Okno device programming - zakładka Production file


Jeśli wybrany plik .elf nie zawiera np. informacji o pamięci EEPROM to opcja programowania tej pamięci będzie niedostępna. W efekcie mamy do dyspozycji wyłącznie te opcje, które są istotne dla wybranego pliku elf. Aby uniknąć każdorazowego programowania np. fuse- czy lockbitów opcje te możemy odznaczyć. Po naciśnięciu przycisku Program, IDE wykona wszystkie zaprogramowane akcje.





A co mają zrobić posiadacze USBAsp?

Mogą zazdrościć :-)

Co prawda Atmel Studio można skonfigurować do współpracy z USBasp, lecz współpraca ta nie będzie pełna, a z wielu opcji oferowanych przez narzędzia bezpośrednio wspierane przez Atmel Studio nie będziemy mogli skorzystać.

Ale nie jest tak źle. Z pewnością wybierając typ programatora w tej zakładce zauważyłeś(aś), że na liście jest dostępne urządzenie o nazwie Simulator. Urządzenie to nie jest fizycznym programatorem, ale go udaje – oczywiście w ten sposób nie zaprogramujemy żadnego realnego układu.

Ale obecność symulatora ma ogromną zaletę dla posiadaczy USBasp i innych niewspieranych bezpośrednio programatorów – możemy sobie za jego pomocą skonfigurować fuse- i lockbity wybranego mikrokontrolera, a następnie uzyskane wartości hex tych bitów konfiguracyjnych wykorzystać do programowania mikrokontrolera.

Co nam to daje? Użytkownicy avrdude wiedzą, że program ten wymaga podania fuse- i lockbitów w postaci wartości liczbowych. W efekcie musimy mozolnie ślęczeć nad notą użytego procesora i je wyliczyć, lub skorzystać z jakiejś nakładki graficznej na avrdude, która te wyliczenia zrobi za nas. Jednak w poprzednim odcinku tego mini-kursu Atmel Studio zintegrowaliśmy programator USBasp z naszym ulubionym IDE. W związku z tym sens stosowania zewnętrznych nakładek dla wyliczenia fusów były nikły.

Dzięki symulatorowi mamy fusebity ładnie policzone, wystarczy tylko ich wartości podać jako argumenty wywołania programu avrdude. W ten sposób mamy nie tylko wygodne narzędzie do konfiguracji bitów konfiguracyjnych procesora, ale także unikamy możliwej pomyłki związanej z niewłaściwym wyliczeniem wartości liczbowej odpowiadającej wybranej konfiguracji:

Atmel Studio: Programator AVR Dragon - Okno device programming - zakładka Fuses

Nic tylko korzystać, bez obaw, że przypadkowo zablokujemy mikrokontroler.

Jeśli jednak ciągle czujesz się niepewnie programując fusebity, to jest jeszcze jedno rozwiązanie – przejść na XMEGA. Dlaczego? Bo masz ten sam rdzeń AVR, lecz nie ma problemu z fusebitami!


Artykuł jest częścią cyklu: Atmel Studio - Spis treści

Oceń artykuł.
Wasze opinie są dla nas ważne, gdyż pozwalają dopracować poszczególne artykuły.
Pozdrawiamy, Autorzy
Ten artykuł oceniam na:

Brak komentarzy:

Prześlij komentarz

Działy
Działy dodatkowe
Inne
O blogu




Dzisiaj
--> za darmo!!! <--
1. USBasp
2. microBOARD M8


Napisz artykuł
--> i wygraj nagrodę. <--


Co nowego na blogu?
Śledź naszego Facebook-a



Co nowego na blogu?
Śledź nas na Google+

/* 20140911 Wyłączona prawa kolumna */
  • 00

    dni

  • 00

    godzin

  • :
  • 00

    minut

  • :
  • 00

    sekund

Nie czekaj do ostatniego dnia!
Jakość opisu projektu także jest istotna (pkt 9.2 regulaminu).

Sponsorzy:

Zapamiętaj ten artykuł w moim prywatnym spisie treści.