-40% na bestsellery wydawnictwa HELION, min.: Java, C++, TensorFlow, PHP, MySQL. Sprawdź listę tytułów »

Szybki start z WinAVR

Szybki start z WinAVR

Pakiet programów WinAVR zawiera w sobie całkiem dobry i zupełnie darmowy (na licencji GPL) kompilator języka C wraz z kompletem narzędzi do tworzenia programów dla 8-bitowych mikroprocesorów AVR firmy ATMEL.

Jest to odmiana znanego, np. z systemu Linux, kompilatora GCC (GNU Compiler Collection).

Pracuje on w systemie Windows, a tworzy kod wynikowy przeznaczony dla mikrokontrolerów AVR. Jednak w odróżnieniu od programów komercyjnych, takich jak np. CodeVisionAVR, pakiet WinAvr nie dostarcza tzw. zintegrowanego środowiska programistycznego IDE (ang. Integrated Development Environment), tj. aplikacji pozwalającej:

  • edytować teksty źródłowe programów,
  • kompilować,
  • debugować (szukać błędów, śledząc instrukcja po instrukcji wykonanie programu),
  • programować pamięć układu AVR.

Po instalacji WinAvr otrzymujemy w katalogu zbiór programów, z których większość działa w konsoli tekstowej (w wierszu poleceń) i z którymi nie wiadomo, co dalej zrobić. Dlatego w tym krótkim artykule opisałem, jak, wykorzystując WinAvr, można szybko skompilować przykładowy program w C i zaprogramować pamięć mikrokontrolera AVR.

Instalacja WinAVR

Oczywiście trzeba zacząć od pobrania z Internetu i instalacji najnowszej wersji WinAVR, której szukać należy pod adresem: http://sourceforge.net/news/?group_id=68108. Obecnie najnowszą wersją jest 20070525. Pobrany plik instalacyjny WinAVR-20070525-install.exe ma rozmiar 18 MB, a instalowane pliki zajmą na twardym dysku 91 MB.

Program instalacyjny zapyta między innymi o katalog na dysku, gdzie WinAVR ma być umieszczony i które komponenty pakietu mają być zainstalowane. Lepiej tu nic nie zmieniać i przyjąć domyślne opcje, jakie proponuje instalator. Dodatkowo, by moc korzystać z programatora za pośrednictwem programu avrdude, należy uruchomić skrypt:

C:\WinAVR-20070525\bin\install_giveio.bat (nie dotyczy Win9x/Me)

WinAVR dostarcza następujące programy:

  • GNU Compiler Collection (GCC)
  • avr-libc
  • GNU Binutils
  • GNU Debugger (GDB)
  • Insight
  • SimulAVR
  • AVaRICE
  • avrdude
  • avrdude-gui
  • Programmers Notepad
  • MFile
  • SRecord

Kompilacja pierwszego programu

Poniżej znajduje się tekst przykładowego programu w C. Efektem działania programu będzie miganie diody LED przyłączonej do wyprowadzenia PD1 uC AVR. Zajmiemy się jego kompilacją, a następnie załadujemy wynikowy kod do pamięci flash mikrokontrolera AVR.

Wcześniej, by uniknąć bałaganu na dysku, warto utworzyć (np. w katalogu Moje dokumenty) podkatalog o nazwie Kurs avr-gcc, a w nim podkatalog o nazwie led. Będzie to miejsce dla plików kompilowanego programu.

Zaczniemy od uruchomienia edytora tekstu Programmers Notepad dołączonego do WinAVR.

Start->Programy->WinAvr-20070525->Programmers Notepad [WinAVR]

winavr1

Programmers Notepad jest prostym edytorem tekstu, posiada podświetlanie składni wielu języków programowania oraz możliwość tworzenia projektów i pracy z wieloma plikami naraz. Edytor został odpowiednio skonfigurowany do współpracy z programami pakietu WinAVR. Można uruchomić kompilację edytowanego programu i zaprogramować układ AVR, wybierając w menu Tools edytora odpowiednią opcję.

Często tekst źródłowy programu w C jest podzielony na wiele plików. Żeby nie musieć otwierać do edycji każdego z plików osobno, można utworzyć w edytorze projekt, dodać do niego każdy z plików programu i na koniec zapisać plik opisujący projekt na dysku.

Następnym razem, po uruchomieniu edytora i otwarciu pliku projektu, w okienku Projetcts pojawią się nazwy wszystkich plików dodanych wcześniej do projektu. Aby któryś z nich otworzyć do edycji, wystarczy kliknąć na jego nazwę.

Tworzymy w edytorze nowy projekt, mimo że przykładowy program mieści się w jednym pliku:

File->New->Project

winavr2

Pojawia się okienko dialogowe New Project. W pole Name wpisujemy nazwę tworzonego projektu led. W polu Folder wpisujemy ścieżkę do katalogu, w którym znajdą się pliki przykładowego programu:

C:\Moje dokumenty\Kurs avr-gcc\led

Następnie kopiujemy i wklejamy tekst przykładowego programu do edytora i zapisujemy plik pod nazwą led.c w katalogu projektu:

File->Save As

Dalej dodajemy plik led.c do utworzonego wcześniej projektu. W okienku Projects należy zaznaczyć nazwę projektu led i w menu, które pojawi się po wciśnięciu prawego klawisza myszki, wybrać opcję Add Files. Pojawia się okienko wyboru pliku Add Files, w którym należy odnaleźć katalog projektu i wybrać plik led.c.

winavr3

Zapisujemy wszystko na dysku:

File->Save All

Plik Makefile

To jeszcze nie wszystko. Żeby skompilować przykładowy program potrzebny nam będzie w katalogu projektu tzw. plik Makefile. Jest to specjalny plik tekstowy, który zawiera różne informacje potrzebne do kompilacji. Na szczęście nie trzeba go pisać samemu. By szybko utworzyć odpowiedni plik Makefile posłużymy się programem MFile.

Start->Programy->WinAvr-20070525->MFile [WinAVR]

winavr4

Program MFile jest kreatorem plików Makefile. Z jego pomocą można szybko utworzyć gotowy plik Makefile, wybierając odpowiednie opcje z menu, bez konieczności poznawania reguł pisania plików Makefile.

W programie MFile, w kolejnych pozycjach menu Makefile ustawiamy parametry jak poniżej.

  • Main file name: led
    Po kliknięciu w pozycję menu "Main file name" pokaże się okienko z polem do wprowadzenia tekstu. Należy tem wpisać nazwę pliku programu, w którym znajduje się funkcja "main". Nazwę pliku należy wpisać bez rozszerzenia ".c" .
  • MCU type: ATmega8
    Tu wybieramy typ mikrokontrolera AVR.
  • Output format: ihex
    Tu wybieramy format pliku wynikowego. Do wyboru mamy: plik w formacie hex, plik binarny lub plik z kodem w asemblerze.
  • Optimization level: s
    Optymalizacja kodu. Możemy wybrać jeden z trzech poziomów (1,2,3), wyłączyć optymalizację (0) lub wybrać optymalizację pod względem rozmiaru kodu (s).
  • C Standard level: gnu99
    Wybór standardu języka C.
  • Debugging format: ELF/stabs
    Wybór formatu pliku do debugowania.
  • C/C++ source file(s): (pomijamy, program składa się tylko z jednego pliku)
    Jeśli tekst programu podzielony jest na wielu plików, to należy wpisać nazwy wszystkich plików z wyjątkiem pliku zawierającego funkcję "main". Nazwy plików trzeba rozdzielić spacją i tym razem należy wpisać je wraz z rozszerzeniami.
  • Assembler source file(s): (pomijamy, piszemy tylko w C)
    Wpisuje się tu nazwy plików z kodem w asemblerze.
  • printf() options: none/standard ( nie używamy funkcji "printf" )
    Funkcja printf ze standardowej biblioteki jest bardzo rozbudowana i może zająć znaczną część pamięci programu uC. Dla zaoszczędzenia pamięci można zrezygnować z użycia funkcji "printf" lub wybrać jej wersję okrojoną.
  • scanf() options: none/standard (nie używamy funkcji "scanf")
    Podobnie jak z funkcją printf.
  • Programmer: stk200 (użyjemy programatora zgodnego z popularnym STK200)
    Wybieramy typ programatora.
  • Port: lpt1 (programator podłączony do portu drukarki lpt1)
    Wybieramy nazwę portu komputera, do którego przyłączono programator.

Mfile wygląda i zachowuje się jak zwykły edytor tekstu. Jednak by móc ręcznie edytować treść tworzonego pliku Makefile, trzeba odfajkować w menu Makefile pozycję Enable Editing of Makefile. Robimy to. Dodatkowo należy wpisać, z jaką częstotliwością pracuje mikrokontroler oraz kilka innych informacji, których nie można zamieścić przez menu.

Będziemy programować nową ATmega8, która domyślnie skonfigurowana jest do pracy z wewnętrznym generatorem 1MHz. Odnajdujemy w nowo utworzonym pliku Makefile fragment tekstu zaczynającym się od:

i zaraz po nim dopisujemy linię:

winavr5

Następnie odnajdujemy sekcję, gdzie zapisane są informacje dla programu avrdude, który służy do programowania pamięci mikrokontrolera (część softwarowa programatora). Sekcja ta zaczyna się od linii:

Na końcu sekcji dopisujemy dwie linie, tę na początku i tę na końcu poniższego fragmentu:

winavr6

Dzięki temu po zakończeniu programowania pamięci mikrokontrolera, avrdude wyłączy sygnał reset i procesor rozpocznie pracę z nowym programem. Domyślnie avrdude pozostawia reset włączony.

Gotowy plik Makefile zapisujemy w katalogu projektu pod nazwą Makefile:

File->Save As

Gdy mamy już w katalogu projektu gotowy plik Makefile, możemy powrócić do edytora tekstu Programmers Notepad i uruchomić kompilację:

Tools->[WinAVR]Make All

winavr7

W trakcie kompilacji pojawi się okienko "Output" z informacjami o jej przebiegu, a pod koniec wypisany zostanie komunikat:

Zwrócona wartość zero oznacza, że kompilacja przebiegła bez błędów. Istotną informacją jest też, ile kod programu zajmie w pamięci uC.

winavr8

Programowanie pamięci układu AVR

Gdy kompilacja przebiegła bez błędów i w katalogu projektu jest gotowy plik led.hex, można spróbować zaprogramować pamięć mikrokontrolera AVR:

Tools->[WinAVR] Program

Uruchomiony zostanie program avrdude i w okienku Output wypisane zostaną komunikaty o przebiegu programowania pamięci układu AVR.

winavr9

Problem z Windows 98/ME

W systemie Windows 98/ME kompilator avr-gcc z WinAVR w wersji 20070525 może w ogóle nie działać. Na szczęście można w Internecie znaleźć poprawioną wersję pliku avr-gcc.exe.

Jeśli podczas kompilacji otrzymamy komunikat o błędzie:

winavr10

Należy odszukać w Internecie plik o nazwie _spawnv-20070525.zip. Po jego rozpakowaniu otrzymamy plik o nazwie avr-gcc.patched.exe. Musimy zmienić jego nazwę na avr-gcc.exe i podmienić z plikiem C:\WinAVR-20070525\bin\avr-gcc.exe

Artykuł ten był wstępem do kursu C dla AVR. Zapraszamy do lektury!

avr, gcc, kompilator, mikrokontroler, programowanie, start, WInAVR

Trwa ładowanie komentarzy...