Szybki start z WinAVR cz 1


1 z 14
Artykuł pochodzi ze strony XYZ HOBBY ROBOT (xyz.isgreat.org)
Szybki start z WinAVR, cz.1
30.11.08 ABXYZ
Pakiet programów WinAVR zawiera niezłej jakości, całkowicie
darmowy (GPL) kompilator języka C (AVR GCC) wraz z kompletem
narzędzi do tworzenia programów dla 8-bitowych mikroprocesorów
AVR ATMEL. Jednak, w odró\nieniu od programów komercyjnych,
jak np. CodeVisionAVR, WinAvr nie dostarcza \adnego IDE (ang.
Integrated Development Environment) - zintegrowanego
środowiska programistycznego, tj. aplikacji pozwalającej: edytować
teksty zró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ć. W artykule opisałem jak, wykorzystując
programy z pakietu WinAVR, szybko skompilować przykładowy
program w języku C i zaprogramować układ AVR.
Instalacja WinAVR
Zaczynamy od pobrania z Internetu i instalacji najnowszej wersji
WinAVR, szukać nale\y pod adresem: http://winavr.sourceforge.net
/download.html Obecnie najnowszÄ… wersjÄ… jest 20090313. Pobrany
plik instalacyjny WinAVR-20090313-install.exe ma rozmiar 22 MB,
instalowane pliki zajmÄ… na twardym dysku 123 MB. Program
instalujący zapyta między innymi o nazwę katalogu na dysku gdzie
WinAVR ma być zamontowany i które komponenty pakietu mają
być zainstalowane. Mo\emy tu nic nie zmieniać i przyjąć domyślne
opcje jakie proponuje instalator. Ja skróciłem nazwę katalogu
docelowego do "C:\WinAVR", poniewa\ zwykle w tym miejscu inne
programy (programy wykorzystujÄ…ce kompilator avrgcc) poszukujÄ…
pakietu WinAVR.
2 z 14
Instalator pakietu WinAVR.
Dodatkowo, jeśli u\ywamy programatora przyłączanego do portu
równoległego komputera, nale\y uruchomić skrypt:
C:\WinAVR\bin\install_giveio.bat
Więcej szczegółowych informacji na temat instalowanych
programów mo\na znalezć przeglądając plik:
C:\WinAVR\WinAVR-user-manual.html
Wraz z kompilatorem AVR-GCC, jako biblioteka standardowa,
dołączona jest specjalna biblioteka Avr-Libc, jej szczegółowa
dokumentacja dostępna jest te\ w katalogu:
C:\WinAVR\doc
W tym katalogu znajdują się te\ dokumentacje i instrukcje obsługi
wszystkich programów z pakietu WinAVR, warto tam zajrzeć.
Kompilacja przykładowego programu
Poni\ej znajduje się przykładowy programik w języku C, efektem
jego działania będzie miganie dwóch diod LED przyłączonych do
portów we/wy AVRa. Skompilujemy przykładowy program,
następnie, wykorzystując programator ISP załadujemy go do
pamięci Flash układu AVR.
/* Programik do testowania środowiska WinAVR
układ ATmega
PB0,PB1 - diody LED (PBx->R->LED->GND);
PD0 - przycisk (PD0->Button->GND) */
#include
#include
int main( )
(void)
( )
( )
{
{
{
{
DDRB |= _BV( )|_BV( );
|= ( )| ( );
|= (0)| (1);
|= ( )| ( );
PORTB |= _BV( );
|= ( );
|= (0);
|= ( );
PORTB &= ~_BV( );
&= ~ ( );
&= ~ (1);
&= ~ ( );
DDRD &= ~_BV( );
&= ~ ( );
&= ~ (0);
&= ~ ( );
PORTD |= _BV( );
|= ( );
|= (0);
|= ( );
while (1)
( )
( )
( )
{
{
{
{
PORTB ^=_BV( );
^= ( );
^= (0);
^= ( );
PORTB ^=_BV( );
^= ( );
^= (1);
^= ( );
_delay_ms((PIND & _BV( ))? 1000: 200);
(( & (0))? : );
(( & ( ))? : );
(( & ( ))? : );
}
}
}
}
}
}
}
}
Listing przykładowego programu w języku C, programik powoduje migotanie dwóch diod
LED przyłączonych do portów we/wy AVRa
Sprzęt. U\yty sprzęt to płytka stykowa z układem atmega16 oraz
dwa popularne (schematy z Internetu) typy programatorów ISP:
stk200 i usbasp. Niektóre programatory wymagają instalacji
sterowników oraz dodatkowej konfiguracji, więc nale\y zapoznać
się dokładnie z instrukcją obsługi programatora lub opisem
schematu. Jeśli brak instrukcji i potrzebnego oprogramowania
(sterowników), mo\na poszukać w Internecie, na stronie
producenta/sprzedawcy sprzętu.
Tworzymy gdzieś na dysku katalog projektu, na przykład: "Moje
3 z 14
dokumenty\winavr\start\". Następnie uruchamiamy "ulubiony"
edytor tekstu; ja najchętniej u\ywam gvim'a, lecz tym razem
u\yjemy dołączonego do WinAVR edytor pn (Programmers
Notepad).
Start->Programy->WinAvr->Programmers Notepad [WinAVR]
Programmers Notepad jest niewielkim edytorem tekstu, posiada podświetlanie składni wielu
języków programowania, mo\liwość tworzenia projektów i pracy z wieloma plikami
jednocześnie, ma szerokie mo\liwości konfiguracji.
Wklejamy tekst przykładowego programu do edytora i zapisujemy
plik pod nazwÄ… "main.c" w katalogu naszego projektu.
File->Save As
Aby skompilować przykładowy program, potrzebujemy w katalogu
projektu plik Makefile; jest to specjalny plik tekstowy z regułami
dla programu make. Program make automatyzuje proces kompilacji
programów. By utworzyć odpowiedni dla naszego projektu plik
Makefile, posłu\ę się dołączonym do WinAVR programem MFile.
Start->Programy->WinAvr->MFile [WinAVR]
4 z 14
Program MFile jest kreatorem-edytorem plików Makefile, z jego pomocą, szybko i łatwo,
wygenerujemy gotowy plik Makefile wybierajÄ…c odpowiednie opcje z menu; bez
konieczności poznania reguł tworzenia takich plików.
W programie MFile, w kolejnych pozycjach menu "Makefile"
ustawiamy parametry jak poni\ej:
Main file name: main
Po kliknięciu w pozycję menu "Main file name" poka\e się
okienko z polem tekstowym, gdzie nale\y wpisać nazwę pliku
programu, w którym znajduje się funkcja main programu;
nazwę pliku nale\y wpisać bez rozszerzenia ".c" .
MCU type: ATmega16
Z listy wybiera siÄ™ typ mikrokontrolera AVR.
Output format: ihex
Wybiera się format pliku wynikowego, mo\na wybrać: plik
w formacie hex, plik binarny lub plik z kodem w asemblerze.
Optimization level: s
Optymalizacja kodu, mo\na wybrać jeden z trzech
poziomów(1,2,3) lub wyłączyć optymalizację(0) albo wybrać
optymalizacja względem rozmiaru kodu(s).
C Standard level: gnu99
Wybór standardu języka C, pozostawiamy bez zmian.
Debugging format: ELF/stabs
Wybór formatu pliku do debugowania, pozostawiamy bez
zmian.
C/C++ source file(s): (pomijamy, program składa się tylko
z jednego pliku)
Jeśli tekst program podzielony jest na wielu plików, to nale\y
wpisać nazwy wszystkich plików z wyjątkiem pliku
zawierającego funkcje "main". Nazwy plików trzeba rozdzielić
spacją i tym razem nale\y wpisać je wraz z rozszerzeniami.
Assembler source file(s): (pomijamy)
Wpisuje się nazwy plików z kodem w asemblerze.
printf() options: none/standart (nie u\ywamy funkcji "printf"
)
Funkcja printf ze standardowej biblioteki jest bardzo
5 z 14
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/standart (nie u\ywamy funkcji "scanf")
Podobnie jak z funkcjÄ… printf.
Programmer: stk200 (u\yjemy programator zgodny
z popularnym STK200)
Wybiera się typ programatora. Jeśli u\ywanego typu
programatora brak liście (MFile go nie zna), mo\na wpisać go
ręcznie - patrz dalej w tekście.
Port: lpt2 (programator podłączony do portu drukarki lpt2)
Wybiera siÄ™ rodzaj i numer portu we/wy komputera do
którego przyłączono programator. Ja mam w komputerze dwa
porty równoległe: LPT1 i LPT2.
Mfile działa jak zwykły edytor tekstu, by móc ręcznie edytować
treść tworzonego pliku Makefile trzeba zaznaczyć w menu
"Makefile" opcjÄ™ "Enable Editing of Makefile". Wiec robimy to, bo
dodatkowo chcemy wpisać z jaką częstotliwością ma pracować
mikrokontroler, a tak\e kilka innych informacji, a czego nie mo\na
zrobić poprzez menu.
Będziemy programować nowego ATmega16, który domyślnie
skonfigurowany jest do pracy z wewnętrznym oscylatorem RC
1MHz. Jeśli trzeba podać częstotliwość sygnału taktującego
procesor, na przykład u\yjemy w programie funkcji _delay_ms, to
te\ najlepiej wpisać tę informację w pliku Makefile. Odnajdujemy
w nowo tworzonym pliku Makefile fragment tekstu zaczynajÄ…cym
siÄ™ od:
#Processor frequency
i zaraz po nim dopisujemy liniÄ™
F_CPU = 1000000
6 z 14
Mfile działa jak zwykły edytor tekstu, więc mo\na "ręcznie" edytować tworzony plik
Makefile.
Jeśli u\ywamy programatora przyłączanego do portu równoległego
komputera, warto wymusić by avrdude(program sterujący
programatorem) zawsze po zakończeniu działania pozostawiał
wyłączony sygnał RESET. Dzięki temu, natychmiast po zakończeniu
operacji programowania Flash, mikrokontroler będzie mógł
rozpocząć wykonanie nowego programu. Normalnie avrdude, po
zakończeniu działania, przywraca port równoległy do stanu jaki
zastał przed rozpoczęciem pracy.
Odnajdujemy w naszym Makefile sekcjÄ™ z parametrami dla avrdude
#---------------- Programming Options (avrdude) ----------------
I dopisujemy dwie linie, te na początku i na końcu poni\szego
fragmentu:
AVRDUDE_EXITMODE = noreset
AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)
AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)
AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)
AVRDUDE_FLAGS += -E $(AVRDUDE_EXITMODE)
7 z 14
Avrdude będzie uruchamiany z opcją "-E noreset", co, po zakończeniu programowania
układu AVR, wymusi wyłączenie sygnału RESET.
Jeśli naszego programatora brakuje na liście - w menu programu
MFile, a avrdude go obsługuje, to oczywiście wpisujemy typ
programatora ręcznie. Listę obsługiwanych przez avrdude typów
programatrów uzyskamy wpisując w wierszu poleceń systemu
Windows komendÄ™:
avrdude -c ?
8 z 14
MFile nie zna popularnego programatora usbasp, ten bardzo pomocny programik nie jest od
kilku lat rozwijany, więc wpisałem ręcznie typ progamatora.
Gotowy plik Makefile zapisujemy w katalogu projektu pod nazwÄ…
"Makefile":
File->Save As
Gdy ju\ mamy w katalogu projektu odpowiedni plik Makefile,
mo\emy powrócić do edytora tekstu Programmers Notepad
i uruchomić kompilacje:
Tools->[WinAVR]Make All
9 z 14
PN dołączony do WinAVR został odpowiednio skonfigurowany do współpracy z programami
pakietu, mo\na uruchomić kompilacje edytowanego programu lub zaprogramować Flash
układ AVR wybierając w menu Tools edytora odpowiednią opcję.
W trakcie kompilacji pojawi siÄ™ okienko "Output" z informacjami o
jej przebiegu, pod koniec wypisany zostanie komunikat:
> Process Exit Code: 0
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.
W okienku "Output" edytora drukujÄ… siÄ™ komunikaty z informacjami o przebiegu kompilacji.
Wartość "Process Exit Code" równa zero oznacza brak błędów.
Programowanie pamięci Flash układu AVR
Gdy kompilacja przebiegła bez błędów i w katalogu projektu mamy
gotowy plik main.hex, mo\na spróbować zaprogramować Flash
AVRa.
Tools->[WinAVR] Program
Uruchomiony zostanie program avrdude i w okienku Output
wypisane zostaną komunikaty o przebiegu programowania pamięci
10 z 14
układu AVR. Wcześniej, jeśli w katalogu brak aktualnego pliku hex,
make uruchomi kompilacja plików projektu.
W okienku "Output" drukujÄ… siÄ™ komunikaty z informacjami o przebiegu programowania
pamięci Flash AVRa.
Jeśli podczas programowania pamięci poka\e się komunikat:
avrdude: can't open divice "giveio"
nale\y uruchomić skrypt:
C:\WinAVR\bin\install_giveio.bat
Do obsługi programatorów przyłączanych poprzez port równoległy komputera avrdude
potrzebuje sterownika "giveio".
Graficzny interfejs dla Avrdude
W pakiecie WinAVR do obsługi programatora u\ywamy
11 z 14
wspomnianego ju\ avrdude, program ten obsługuje większość
spotykanych programatorów i oznacza się du\ymi mo\liwości. Ale
avrdude jest programem działającym w konsoli, brak wersji
okienkowej; jak dla mnie, nie jest to wadÄ… tego programu,
a bardziej zaletÄ…; jednak typowy u\ytkownik komputera PC raczej
nigdy nie korzysta z wiersza polecenia. IstniejÄ… specjalne
programiki tworzące interfejs graficzny, mające ułatwić pracę z
avrdude. Przejrzałem trzy takie programiki: avrdude-gui, SinaProg,
AVR8 Burn-O-Mat(Java); nie znajdziemy ich w WinAVR, trzeba
dodatkowo pobrać z Internetu. U\ywając nakładki graficznej dla
avrdude mo\emy przeprowadzać wszystkie operacje
z programatorem klikajÄ…c w okienkach. Mo\na
zapisać|odczytać|zweryfikować zawartość pamięci Flash i EEPROM;
zapisać|odczytać fusebity i lockbity; odczytać|zapisać bajty
kalibracji wewnętrznego oscylatora. SinaProg wyposa\ony jest
dodatkowo w "kalkulator" fusebitów, ta funkcja z pewnością przyda
się początkującym programistom AVRów, zwłaszcza do konfigracji
częstotliwości pracy mikrokontrolera. Na początek polecam właśnie
SinaProg, a w przyszłości u\ywać bezpośrednio avrdude, w konsoli.
Obszerna instrukcja do avrdude znajduje siÄ™ w katalogu
C:\WinAVr\doc.
Obsługa programu SinaProg jest zupełnie prosta. Wpierw nale\y
wybrać w polu "Programmer" typ u\ywanego programatora
i port(LPTx|COMx|USB), a w polu "Device" wybrać typ układu AVR.
śeby zapisać|weryfikować|odczytać zawartość pamięci
Flash|EEPROM, wpisujemy w polu "Hex file" nazwÄ™ pliku i w polu
Flash|EEPROM klikamy przycisk Program|Verify|Read. SinaProg
odczyta|tworzy jedynie pliki w formacie Intel Hex (chyba, bo
dokładnie tego nie sprawdzałem), chocia\ sam avrdude
czyta|tworzy te\ pliki raw binarne. W ramce, poni\ej pola "Hex file"
wyświetlane są krótkie komunikaty o rezultacie operacji
(sukces|niepowodzenie); kliknięcie przycisku "<" obok ramki
powoduje otwarcie lub zamknięcie dodatkowego okienka "Output"
z przechwyconymi komunikatami programu avrdude.
12 z 14
Program SinaProg - wygodny interfejs graficzny dla avrdude.
Aby móc zapisywać i odczytać: fusebity, lockbity oraz bajty
kalibracji wewnętrznego oscylatora, klikamy w polu "Fuses"
przycisk "Advanced"; poka\e siÄ™ okienko jak na obrazku poni\ej.
W okienku znajdujÄ… siÄ™ pola: Lock Bits, Calibration, High Fuse, Low
Fuse, Ext. Fuse; widnieją tam wartości odczytane z przyłączonego
układu AVR. Odczyt mikrokontrolera odbywa się wraz z otwarciem
tego okienka oraz po kliknięciu przycisku "Read" poni\ej.
Odczytane wartości przedstawione mogą być w postaci dwójkowej,
ósemkowej, szesnastkowej i dziesiętnej. W polach kontrolki
tekstowe mo\emy ręcznie edytować, wprowadzone dane wysyłane
są do AVRa po kliknięciu przycisku "Write".
13 z 14
SinaProg, programowanie fusebitów.
Kliknięcie przycisków "C" powoduje otwarcie okienka "kalkulatora"
fusebitów lub lockbitów. Kalkulator fusebitów będzie bardzo
u\yteczny dla początkujących programistów AVRów.
Nowe (prosto ze sklepu) układy AVR atmega skonfigurowane są do
pracy z wewnętrznym oscylatorem RC 1MHz; jeśli chcemy
zwiększyć częstotliwość pracy mikrokontrolera, trzeba odpowiednio
konfigurować fusebity. W przykładzie poni\ej, dla u\ytego
atmega16, z pomocą kalkulatora fusebitów, "wyliczyłem" nową
wartość dla Low_Fuse: 0xE4. Teraz sygnał taktujący
mikroprocesora, od wewnętrznego oscylatora RC, będzie miał
częstotliwość 8MHz.
14 z 14
SinaProg, kalkulator fusebitów.
© 2009 ABXYZ Wszelkie prawa zastrze\one


Wyszukiwarka

Podobne podstrony:
Programowanie w jezyku C Szybki start procss
PHP6 i MySQL 5 Dynamiczne strony WWW Szybki start ph6ms5
Szybkie starty z przyborami – cz 6
Visual Basic Net Szybki start
Adobe Air i Ajax Szybki start
Delphi Szybki start
PHP i MySQL Dynamiczne strony WWW Szybki start Wydanie II
Programowanie w jezyku C Szybki start procpp

więcej podobnych podstron