Mikrokontrolery i systemy embedded

Atmel Studio – instalacja, konfiguracja i programowanie mikrokontrolerów AVR

Spis treści
Atmel Studio – instalacja, konfiguracja i programowanie mikrokontrolerów AVR

Atmel Studio to kompletne, bezpłatne środowisko IDE do tworzenia, kompilowania, debugowania i programowania aplikacji dla mikrokontrolerów AVR. Sprawdzi się zarówno podczas nauki podstaw programowania, jak i przy realizacji zaawansowanych projektów elektronicznych.

Atmel Studio – najważniejsze możliwości

Atmel Studio, obecnie rozwijane jako Microchip Studio, jest zintegrowanym środowiskiem programistycznym przeznaczonym dla mikrokontrolerów AVR i ARM. Oferuje edytor kodu, kompilator, debugger oraz narzędzia do obsługi programatorów.

Środowisko umożliwia tworzenie projektów w językach C i C++ z wykorzystaniem pakietu narzędziowego Atmel AVR 8-bit. Pozwala również na integrację z zewnętrznymi rozwiązaniami, takimi jak WinAVR i avrdude.

Atmel Studio 7 jest dostępne bezpłatnie i można je legalnie pobrać ze strony producenta jako pełny instalator lub instalator internetowy.

Pobieranie i instalacja Atmel Studio

Wymagania i przygotowanie systemu

Przed rozpoczęciem instalacji warto sprawdzić wymagania sprzętowe i programowe w sekcji „System Requirements” dokumentacji Atmel Studio. Należy również odpowiednio przygotować system:

  • upewnić się, że konto użytkownika ma uprawnienia administratora w systemie Windows,
  • zapisać otwarte dokumenty i zamknąć pozostałe aplikacje,
  • odłączyć programatory, płytki ewaluacyjne i inne urządzenia Atmel korzystające z USB lub RS-232.

Odłączenie urządzeń na czas instalacji pomaga ograniczyć ryzyko konfliktów sterowników. Po zakończeniu procesu może być wymagane ponowne uruchomienie systemu.

Pobieranie instalatora

Producent udostępnia Atmel Studio 7 jako pełny pakiet instalacyjny oraz instalator internetowy, który pobiera wymagane składniki w trakcie konfiguracji.

Po pobraniu pliku należy zapisać go na dysku lokalnym, uruchomić dwukrotnym kliknięciem i zaakceptować komunikat kontroli konta użytkownika systemu Windows, jeśli zostanie wyświetlony.

Instalacja krok po kroku

Instalator prowadzi użytkownika przez kolejne etapy konfiguracji. Standardowy proces wygląda następująco:

  1. Uruchom instalator – otwórz pobrany plik instalacyjny Atmel Studio;
  2. Zaakceptuj umowę licencyjną – zapoznaj się z warunkami EULA i przejdź dalej;
  3. Wybierz typ instalacji – początkującym użytkownikom zalecana jest pełna instalacja obejmująca najważniejsze składniki IDE;
  4. Określ ścieżkę instalacji – pozostaw domyślny katalog w folderze Program Files, jeśli nie masz szczególnych wymagań;
  5. Zatwierdź listę komponentów – rozpocznij kopiowanie plików, klikając „Install” lub „Next”;
  6. Zakończ instalację – kliknij „Finish” i uruchom ponownie komputer, jeśli instalator tego wymaga.

Po ponownym uruchomieniu systemu Atmel Studio będzie dostępne w menu Start. Aplikację można rozpoznać po charakterystycznej ikonie z biedronką.

Pierwsze uruchomienie i aktualizacja pakietów urządzeń

Po pierwszym uruchomieniu Atmel Studio warto zaktualizować pakiety obsługi urządzeń, czyli Device Packs. Zawierają one aktualne definicje obsługiwanych mikrokontrolerów AVR.

Do zarządzania pakietami służy narzędzie Device Pack Manager, dostępne w menu Tools. Umożliwia ono pobieranie pakietów przeznaczonych między innymi dla rodzin ATxmega, ATtiny i ATmega.

Aktualne pakiety Device Packs zapewniają prawidłową obsługę nowych mikrokontrolerów, szablonów projektów i plików nagłówkowych z definicjami rejestrów.

Konfiguracja pakietów narzędziowych i kompilatora

Wbudowany pakiet Atmel AVR 8-bit

Atmel Studio zawiera pakiet narzędziowy dla mikrokontrolerów AVR, dostępny osobno dla języków C i C++. Odpowiedni wariant można wybrać w ustawieniach środowiska.

Domyślny pakiet Atmel AVR 8-bit jest wystarczający dla większości projektów. Obejmuje kompilator, linker oraz narzędzia służące do generowania plików wynikowych, między innymi ELF i HEX.

Dodawanie zewnętrznego pakietu narzędziowego

Jeśli projekt wymaga integracji z WinAVR lub innym zewnętrznym zestawem narzędzi, można go dodać w sekcji Tools → Options → Toolchain → Package Configuration:

  1. Otwórz ustawienia – przejdź do Tools → Options;
  2. Wybierz konfigurację pakietów – otwórz sekcję Toolchain → Package Configuration;
  3. Określ język – wybierz Atmel AVR 8-bit (C language) lub Atmel AVR 8-bit (Cpp language);
  4. Dodaj wariant konfiguracji – kliknij „Add Flavour” i w polu Package Name wpisz nazwę pakietu, na przykład „WinAVRDev”;
  5. Wskaż katalog narzędzi – w polu Package Base Path wybierz folder zawierający pliki binarne pakietu, na przykład C:\WinAVR\bin;
  6. Zapisz ustawienia – kliknij „Add”, a następnie „OK”.

Tak skonfigurowany wariant pozwala kompilować projekty AVR za pomocą narzędzi WinAVR uruchamianych bezpośrednio z Atmel Studio.

Korzystanie z zewnętrznego pliku makefile

W bardziej zaawansowanych projektach można używać zewnętrznych plików makefile zamiast generatora ustawień kompilacji dostępnego w Atmel Studio.

W zakładce Build we właściwościach projektu znajduje się opcja „Use External Makefile”. Umożliwia ona wskazanie konkretnego pliku makefile, który zostanie użyty podczas budowania projektu.

Aby włączyć tę funkcję, należy wybrać profil, na przykład „Debug”, zaznaczyć opcję „Use External Makefile” i wskazać ścieżkę do pliku za pomocą przycisku „Browse”.

Konfiguracja programatorów AVR

Obsługa AVRISP mkII i podobnych urządzeń

Atmel Studio oferuje wbudowaną obsługę programatorów AVRISP mkII, STK500 oraz innych oficjalnych narzędzi AVR. Ich konfiguracja odbywa się w oknie „Device Programming”, dostępnym w menu Tools.

Przed nawiązaniem połączenia należy ustawić trzy podstawowe parametry:

  • Tool – używany programator, na przykład AVRISP mkII;
  • Device – model mikrokontrolera, na przykład ATtiny13 lub ATmega328P;
  • Interface – interfejs komunikacyjny, najczęściej ISP, czyli In-System Programming.

Po wybraniu programatora, mikrokontrolera i interfejsu należy kliknąć „Connect”, aby nawiązać połączenie z urządzeniem.

USBasp i inne niedrogie programatory

Popularny programator USBasp może współpracować z Atmel Studio, ale wymaga użycia zewnętrznego narzędzia avrdude. USBasp nie jest natywnie obsługiwany przez środowisko jako oficjalne urządzenie.

Rozwiązaniem jest dodanie avrdude jako narzędzia zewnętrznego i uruchamianie go z parametrami właściwymi dla programatora USBasp.

Arduino jako programator AVR

Płytki Arduino, takie jak Arduino Uno, mogą pełnić funkcję programatora samodzielnych mikrokontrolerów AVR. Dzięki temu można korzystać z nich również podczas pracy w Atmel Studio.

Do prawidłowej konfiguracji potrzebny jest numer portu COM przypisanego do płytki. Można go sprawdzić w Menedżerze urządzeń systemu Windows.

Następnie należy skonfigurować zewnętrzne narzędzie, na przykład avrdude, podając właściwy port COM i parametry programatora. Atmel Studio będzie wtedy mogło inicjować programowanie mikrokontrolera za pośrednictwem Arduino.

External Tools – integracja z avrdude

Atmel Studio umożliwia dodawanie programów wykonywalnych jako narzędzi zewnętrznych dostępnych w menu Tools → External Tools. Pozwala to zintegrować środowisko z avrdude, skryptami pomocniczymi i innymi programami konsolowymi.

Konfiguracja wymaga podania nazwy narzędzia, ścieżki do pliku wykonywalnego oraz argumentów wywołania. Argumenty mogą określać typ programatora, częstotliwość SCK, port komunikacyjny i ścieżkę do pliku HEX.

Dzięki tej integracji można skompilować projekt w Atmel Studio, a następnie uruchomić avrdude z menu Tools i zaprogramować mikrokontroler za pomocą USBasp lub Arduino.

Tworzenie pierwszego projektu AVR

Zakładanie nowego projektu

Na ekranie startowym Atmel Studio należy wybrać opcję „New Project”. W kreatorze projektów trzeba wskazać „GCC C Executable Project” dla aplikacji w języku C albo „GCC C++ Executable Project” dla programu w języku C++.

Po nadaniu projektowi nazwy, na przykład „NewBlink”, należy wybrać używany mikrokontroler AVR, taki jak ATmega328P lub ATtiny45.

Po zatwierdzeniu ustawień Atmel Studio utworzy strukturę projektu z podstawowym plikiem źródłowym main.c albo main.cpp.

Edycja kodu – przykład migającej diody

Prosty projekt migającej diody można zrealizować na mikrokontrolerze ATmega328P. Dioda LED może być podłączona do wyprowadzenia PB5, które na płytce Arduino Uno odpowiada pinowi 13.

Przykładowy kod w języku C wygląda następująco:

#define F_CPU 16000000UL

#include <avr/io.h>
#include <util/delay.h>

int main(void)
{
DDRB |= (1 << PB5); // PB5 jako wyjście

while (1)
{
PORTB ^= (1 << PB5); // zmiana stanu diody
_delay_ms(500); // opóźnienie 500 ms
}
}

Plik nagłówkowy <avr/io.h> zawiera definicje rejestrów wejścia i wyjścia, natomiast <util/delay.h> udostępnia funkcję _delay_ms().

Działanie funkcji opóźniającej zależy od prawidłowego zdefiniowania częstotliwości zegara w parametrze F_CPU.

Kompilacja projektu

Kompilację można uruchomić z menu Build, wybierając „Build Solution”, lub za pomocą odpowiedniego skrótu klawiaturowego. Spowoduje to uruchomienie skonfigurowanego pakietu narzędziowego AVR i wygenerowanie plików wynikowych.

Do zaprogramowania pamięci mikrokontrolera potrzebny jest przede wszystkim plik z rozszerzeniem .hex.

W przypadku korzystania z WinAVR lub zewnętrznego pliku makefile proces kompilacji wykorzysta narzędzia wskazane w konfiguracji pakietu albo w samym pliku makefile.

Programowanie mikrokontrolera

Po prawidłowym skompilowaniu projektu można zaprogramować mikrokontroler za pomocą okna „Device Programming” lub narzędzia skonfigurowanego w menu Tools.

W przypadku AVRISP mkII lub podobnego programatora należy ustawić właściwe wartości w polach Tool, Device i Interface, załadować plik HEX, a następnie rozpocząć programowanie pamięci flash.

Jeśli używany jest USBasp, programowanie wykonuje zazwyczaj avrdude z argumentami zdefiniowanymi w konfiguracji External Tools.

Programowanie pamięci flash, EEPROM i bitów fuse

Okno „Device Programming” umożliwia wgrywanie programu do pamięci flash, obsługę pamięci EEPROM oraz zmianę bitów konfiguracyjnych mikrokontrolera, określanych jako fuse bits.

W sekcji „Memory” można wybrać typ pamięci, załadować odpowiedni plik i wykonać operację Program, Verify lub Read. Dla pamięci flash najczęściej używa się plików .hex, a dla pamięci EEPROM plików .eep.

Sekcja „Fuses” pozwala odczytywać i zmieniać ustawienia dotyczące między innymi źródła zegara, sposobu uruchamiania układu oraz poziomu zabezpieczeń.

Nieprawidłowa konfiguracja bitów fuse może uniemożliwić dalszą komunikację z mikrokontrolerem przez interfejs ISP. Przed wprowadzeniem zmian należy zapisać pierwotne wartości i sprawdzić znaczenie każdego ustawienia w dokumentacji konkretnego układu.

Starsze narzędzia – AVR Studio, AVR Prog i STK500

W starszych wersjach AVR Studio programowanie mikrokontrolerów odbywało się między innymi za pomocą narzędzia AVR Prog dostępnego w menu Tools. Służyło ono również do współpracy z programatorem STK500.

AVR Prog można było uruchomić skrótem Alt+F9 albo przez wybranie Tools → AVR Prog. Następnie wskazywano plik oprogramowania sprzętowego, na przykład STK500.ebn, i uruchamiano operację „Program” w sekcji „Flash”.

Chociaż Atmel Studio 7 zastąpiło wiele elementów starszego AVR Studio, znajomość AVR Prog i STK500 może być przydatna podczas pracy ze starszym sprzętem lub archiwalną dokumentacją laboratoryjną.

Integracja z ekosystemem Linux

Do pracy z mikrokontrolerami AVR w systemie Linux można wykorzystać narzędzia gcc-avr, avr-libc i avrdude. Pierwsze jest kompilatorem, drugie dostarcza bibliotekę standardową, a trzecie służy do programowania mikrokontrolerów.

W dystrybucjach takich jak Ubuntu narzędzia te można zainstalować za pomocą menedżera pakietów. Pozwala to utworzyć kompletne środowisko do kompilowania i programowania układów AVR bez używania graficznego IDE.

Pliki HEX wygenerowane w Atmel Studio są zgodne z avrdude, dlatego można przenosić je i programować również w systemie Linux.

Typowe problemy i praktyczne wskazówki

Brak komunikacji z programatorem

Problemy z połączeniem często wynikają z wybrania niewłaściwego narzędzia, mikrokontrolera lub interfejsu w oknie „Device Programming”. Przyczyną może być także nieprawidłowy port USB albo COM.

Właściwy numer portu COM jest niezbędny do komunikacji z płytką Arduino. Bez niego avrdude nie będzie w stanie połączyć się z programatorem ani mikrokontrolerem.

Błędy kompilacji

Problemy z kompilacją mogą wynikać z nieprawidłowej konfiguracji zewnętrznego pakietu narzędziowego albo błędnej ścieżki Package Base Path.

Należy upewnić się, że wskazano katalog zawierający właściwe pliki wykonywalne, na przykład folder bin instalacji WinAVR.

Problemy z zewnętrznym plikiem makefile

Podczas używania zewnętrznych plików makefile trzeba sprawdzić zgodność opcji kompilatora z wybranym modelem mikrokontrolera i jego częstotliwością zegara.

Nieprawidłowe ustawienia mogą powodować błędy linkera, niedokładne opóźnienia lub niewłaściwe działanie programu.