24
Programowanie
E l e k t ro n i k a d l a Ws z y s t k i c h
PaŸdziernik 2008
PaŸdziernik 2008
Początek wakacji okazał się czasem inten-
sywnych pytań na mojej skrzynce mailowej,
związanych z zestawem AVT-3505. Okazuje
się, że wielu Czytelników wybrało ten okres
na zamówienie urządzenia. Jest dla mnie
miłym zaskoczeniem, że projekt przeżywa
aktualnie drugą młodość. Postanowiłem też
sprawdzić, jak mogę jeszcze uprzyjemnić
korzystanie z płytki.
W swoich listach Czytelnicy skarżą się
na utrudnienia związane z programowa-
niem przy pomocy komputera niewyposa-
żonego w porty LPT ani COM, przy czym
okazuje się także, że przejściówki z portu
USB nie umożliwiają stosowania prostych
programatorów. Problemowi temu da się
zaradzić w prosty sposób. W tym artyku-
le pokażę zaimplementować bootloader z
noty aplikacyjnej AVR109. Jego ogromną
zaletą jest wsparcie ze strony AVRStudio.
Dla wielbicieli innych programów infor-
macja także jest dobra – wspiera go także
AVRdude oraz AVROSP.
Jeśli zechcesz, po prostu skorzystać z
wygody, jaką daje bootloader, nie wgłębiając
się na razie w jego konfigurację oraz kompi-
lację, będziesz mógł pobrać gotowe pliki ze
strony Elportalu. Wszystkich zapraszam do
lektury artykułu.
AVR109 – co to jest i skąd to wziąć?
AVR109 to nota aplikacyjna firmy Atmel opisują-
ca przykładowy bootloader dla procesorów AVR.
Mimo tego, że w sieci można znaleźć sporo pro-
jektów z bootloaderami pracującymi przez chyba
każdy możliwy interfejs, siłą wspomnianej noty
jest to, że tworzy pewien standard, obsługiwany
nie tylko przez oprogramowanie producenta.
Notę tę, w postaci opisu w pliku PDF oraz
kodów źródłowych dla kompilatora C firmy
IAR oraz kompilatora GCC, można pobrać
ze strony www.atmel.com. W dziale AVR
8-Bit RISC wybieramy Application Notes.
Po odnalezieniu AVR109: Self Programming
pobieramy pliki programu (ikona płyty CD).
Mimo że nie jest to konieczne do zrozumienia
dalszej części opisu, warto zainteresować się
dostępną na stronie, solidnie przygotowaną,
dokumentacją w pliku PDF.
Co mamy?
Ze strony firmy ATMEL powinniśmy pobrać
plik AVR109.zip. Proponuję teraz rozpakować
go w dowolne miejsce. W jego wnętrzu znaj-
duje się katalog Source Code. Głębiej mamy
podział na podkatalogi IAR oraz GCC – wybie-
ramy ten drugi.
Ponieważ w ramach kursu C uczyliśmy się
korzystać z Pogrammers Notepada, dla włas-
nej wygody proponuję utworzyć z jego pozio-
mu nowy projekt. Jak to zrobić, przypomina
rysunek 1. Do projektu dodajemy wszystkie
potrzebne pliki źródłowe, są to:
Makefile, defines.h, flash.h, main.c, serial.
h, serial.c.
Plik link.xcl to pozostałość po wersji IAR
– GCC z niego nie korzysta.
Narzędzia pracy mamy już ustawione.
Możemy przejść do konfiguracji.
Konfiguracja
W katalogu znajdziesz jeszcze dwa interesujące
pliki: preprocesor.sh oraz preprocesor.xls. Każdy
z nich ułatwia skonfigurowanie programu do
wybranego typu procesora. Plik preprcesor.sh
może być wywołany z linii komend w środowisku
uniksowym (w tym z poziomu naszego Makefile)
i przeprowadza całą konfigurację automatycznie.
Plik preprocesor.xls ma dokładnie takie samo
przeznaczenie, ale konfiguracja odbywa się za
pomocą rodzaju programu napisanego w formie
arkusza kalkulacyjnego. Mimo natywnego for-
matu Exela, sprawdziłem, że arkusz działa zna-
komicie także w OpenOffice. Dalszy opis będzie
dotyczył konfiguracji za pomocą tego pliku.
Uruchom go teraz w używanym programie i
przejdź do pierwszej zakładki – Documentation.
W tym miejscu znajduje się wyjaśnienie, krok
Rys. 1 Zakładanie nowego projektu i dodawanie do niego istniejących plików
Bootloader AVR109
Bootloader AVR109
,,
czyli jeszcze raz
czyli jeszcze raz
Kurs C
Kurs C
oraz
oraz
AVT-3505
AVT-3505
25
Programowanie
E l e k t ro n i k a d l a Ws z y s t k i c h
PaŸdziernik 2008
PaŸdziernik 2008
po kroku, jak przeprowadzić konfigurację.
Poniżej przedstawiam, jakie kroki powin-
niśmy wykonać w przypadku korzystania
z kompilatora GCC:
1. Przechodzimy na zakładkę o nazwie
defines_h. Komórki, które powinniśmy
ręcznie zmienić, są wyróżnione przez
czerwony tekst na żółtym tle.
2. W wierszu 7 zmieniamy tekst
_ATMEGAXXX na odpowiadający naszemu
procesorowi (_ATMEGA162).
3. W wierszu 8 zmieniamy tekst _Bxxxx na
wielkość odpowiadającą rozmiarowi, w sło-
wach, naszej sekcji bootloadera (_B1024).
4. W wierszach 17–19 znajduje się definicja
wyprowadzenia odpowiadającego za wejście
w tryb bootloadera. Wyprowadzenie to będzie
sprawdzane podczas startu. Jeśli będzie ono
zwarte do masy, wystartuje bootloader. Jeśli
chcemy aby uruchamiało go przytrzymanie w
chwili startu przycisku S1, wpisujemy kolejno
PORTE, PINE, PE0.
5. Dwa ostatnie wiersze do ustawienia
mają numery 22 i 23. Wpisujemy tutaj warto-
ści odpowiadające częstotliwości taktowania
procesora oraz używanej prędkości transmi-
sji. W związku z tymi parametrami wynika
pewien problem, związany z prędkością trans-
misji wymaganą przez AVRProga. Sprawę tą
wyjaśnimy sobie za chwilę.
Uwaga. Nie zmieniamy tutaj nic poza oznaczo-
nymi polami. Reszta pól zostanie wyliczona auto-
matycznie. Fragment prawidłowo wypełnionego
pliku, dla płytki AVT3505, pokazuje rysunek 2.
Co zrobić z wypełnionym plikiem prepro-
cessor.xls
Na czym polega idea utworzonej konfiguracji?
Sprawa jest bardzo prosta. Z otrzymanego pliku
skopiujemy potrzebne dane do dwóch innych pli-
ków. Pierwsze, na co zwracamy uwagę, to wiersz
2. Spójrz ponownie na rysunek 2. Pierwszą,
pojawiającą się liczbę szes-
nastkową za słowem CODE,
czyli w naszym przypadku
3800, wykorzystamy do pliku
Makefile. Otwórz teraz ten
plik. Liczbę tę przypiszemy
do BASEADDR, w pobliżu
14 linii. Jeśli jesteśmy już
w tym pliku, od razu usta-
wiamy odpowiedni procesor.
Po tych zabiegach, począ-
tek pliku Makefile, będzie
wyglądał jak na listingu 1.
Zauważ teraz, że w wier-
szu 4 na 2 mamy napis:
„Utwórz plik (defines.h) zawierający co następu-
je:”. Zaznaczamy więc wiersze od 5, do końca
arkusza. Kopiujemy i wklejamy do pliku defines.
h. Nie zważamy na to, co w tym pliku już jest. Po
prostu kasujemy całość i wklejamy nasze dane.
Konfiguracja została praktycznie skoń-
czona. Jednak czekają tutaj pewne drobne
pułapki...
Wymagana prędkość transmisji i związane
z tym problemy
Jeśli koniecznie chcesz korzystać z AVRProga
wbudowanego w AVRStudio, natkniesz się na
pewien problem. Aktualnie
AVRProg wymaga, aby
prędkość, z jaką układ poro-
zumiewa się z programem
wynosiła 115,2kbps. Nie da
się niestety z wystarczającą
dokładnością uzyskać takiej
prędkości na wewnętrznym
generatorze RC. Konieczne
będzie zastosowanie kwarcu
o jednej z podanych wartości:
1,8432MHz; 3,6864MHz;
7,3728MHz; 11,0592MHz;
14,7456MHz; 18,4320MHz.
W czasie prac prototypo-
wych wybrałem wartość
11,0592MHz i program dla
tej wartości został przeze
mnie sprawdzony.
Jeśli nie chcesz korzy-
stać z AVRProga, a jedynie
z AVRdude, sytuacja jest o
tyle komfortowa, że można
skonfigurować program do
pracy z prędkością 38,4kbps.
Prędkość taka jest możliwa
do uzyskania z wystarczającą
dokładnością na wewnętrz-
nym generatorze RC 8MHz.
Kosztem zmniejszenia szyb-
kości transmisji programu
unikamy konieczności stoso-
wania zewnętrznego oscyla-
tora.
Udajemy ATmega169
Zakładka Part_definitions
w pliku preprocessor.xls
zawiera dane poszczegól-
nych typów procesorów. Z
niej kopiowane są odpowied-
nie dane do zakładki defi-
nes_h. Znajdziesz tutaj w
kolumnie F nagłówek Part
code (AVRProg). Tutaj nasz
ATmega162 posiada kod 0x63. Okazuje się
jednak, że aktualna wersja (1.40) nie obsługu-
je tego kodu. Pełną listę obsługiwanych przez
ten program kodów, znalezioną na forum stro-
ny www.avrfreaks.net, zebrałem w tabeli 1.
Mimo tego, że ATmega162 zastępuje
wycofany już ATmega161, pojawiają się tutaj
znaczne różnice w bitach ustawień (fusach).
O ile procesor ATmega169 pod względem funk-
cjonalnym różni się dość znacznie od ATmega162,
to od strony wielkości posiadanych pamięci są
identyczne. Ponadto, „fusy” ATmega169 róż-
nią się tylko tym, że w bajcie rozszerzonym
(Extended Fuse Byte) brak bitu kompatybilności
z ATmega161. Tak naprawdę AVR109 nie wspiera
możliwości programowania fusów. Umożliwia
jedynie ustawianie bitów zabezpieczeń, więc jeśli
wybierzemy kod BOOT procesora ATmega169,
możemy bezpiecznie przeprowadzić programo-
wanie naszego ATmega162.
Po skończonej konfiguracji może okazać
się, że jeśli teraz skompilujesz program,
nasza płytka nie będzie prawidłowo widzia-
na przez AVRProg i nie da się zaprogramo-
wać. Zwróć baczną uwagę na dwa kolejne
podtytuły.
Po skończonej konfiguracji może okazać
się, że jeśli teraz skompilujesz program,
nasza płytka nie będzie prawidłowo widzia-
na przez AVRProg i nie da się zaprogramo-
wać. Zwróć baczną uwagę na dwa kolejne
podtytuły.
MCU
= atmega162
FORMAT
= ihex
TARGET
= bootloader
SRC
= main.c serial.c
ASRC
=
OPT
= s
BASEADDR
= 0x3800
Rys. 2 Konfiguracja dla AVT3505
Listing 1 Zmiany w Makefile
Tab. 1 Lista układów
obsługiwanych przez
AVRProg 1.40
Kod
Obsugiwany ukad
0x10
AT90S1200rev.A
0x11
AT90S1200rev.B
0x12
AT90S1200rev.C
0x13
AT90S1200
0x20
AT90S2313
0x28
AT90S4414
0x30
AT90S4433
0x34
AT90S2333
0x38
AT90S8515
0x3A
ATmega8515
0x3B
ATmega8515 BOOT
0x41
ATmega103
0x42
ATmega603
0x43
ATmega128
0x44
ATmega128 BOOT
0x45
ATmega64
0x46
ATmega64 BOOT
0x48
AT90S2323
0x4C
AT90S2343
0x50
ATtiny11
0x51
ATtiny10
0x55
ATtiny12
0x56
ATtiny15
0x58
ATtiny19
0x5C
ATtiny28
0x5E
ATtiny26
0x60
ATmega161
0x61
ATmega161 BOOT
0x64
ATmega163
0x65
ATmega83
0x66
ATmega163 BOOT
0x67
ATmega83 BOOT
0x68
AT90S8535
0x69
ATmega8535
0x6C
AT90S4434
0x70
AT90C8534
0x71
AT90C8544
0x72
ATmega32
0x73
ATmega32 BOOT
0x74
ATmega16
0x75
ATmega16 BOOT
0x76
ATmega8
0x77
ATmega8 BOOT
0x78
ATmega169
0x79
ATmega169 BOOT
26
Programowanie
E l e k t ro n i k a d l a Ws z y s t k i c h
PaŸdziernik 2008
PaŸdziernik 2008
Zdecydowałem się
więc, dla AVRProga
przedstawić układ jako
ATmega169. W całej
„sztuczce” chodzi o
to, aby przestawić się
odpowiednio tylko dla
programu
AVRProg.
Reszta ustawień bootlo-
adera powinna pozostać
bez zmian. Zrobimy to
przez zmianę jednej linii
bezpośrednio w pliku
defines.h. Odnajdź sek-
cję oznaczoną komen-
tarzem /* definitions
for device recognition
*/. Na samym począt-
ku pojawia się defi-
nicja
PARTCODE.
Zmieniamy przypisaną
tutaj liczbę na 0x79 –
kod dla procesora ATmega169. Natomiast bajty
sygnatury pozostawimy bez zmian. Pokazuje
to listing 2.
Zmiany w kodzie dla prawidłowej pracy
także z AVRdude
Wygląda na to, że w oryginalnym kodzie
AVR109 powstał błąd, który uniemożliwia
sprawną współpracę w AVRdude. Informacja
na ten temat została przeze mnie przesłana do
odpowiedniego działu firmy ATMEL, jednak
trudno powiedzieć, czy zostanie ona uwzględ-
niona. Problem polega na tym, że bootloader
w czasie czyszczenia pamięci Flash odpowiada
sygnałem gotowości już w trakcie czyszczenia
ostatniego bloku pamięci. AVRdude zaczy-
na natychmiast wypełniać bufor tymczasowy
pamięci Flash, ale ponieważ pamięć ta jest
zajęta, pierwsze wpisane do niej bajty zostają
uszkodzone (mają wartość 0xff). A problem
można rozwiązać naprawdę bardzo łatwo.
Otwórz plik main.c bootloadera w edy-
torze. W okolicy 105 linii zaczyna się frag-
ment odpowiedzialny za kasowanie pamięci
FLASH. Możesz znaleźć go, szukając słów
„Chip erase”. Zmieniamy go tak, aby wyglą-
dał jak na listingu 3. Dodany fragment został
specjalnie oznaczony. Teraz wszystko
będzie działało prawidłowo.
Kompilacja
Po opisanej konfiguracji, kompila-
cję przeprowadzamy standardowo,
jak do tej pory. Jeśli posiadasz
Programmers Notepada skonfi-
gurowanego zgodnie z kursem,
kompilacja powinna zadziałać
po wybraniu F7. Przy domyśl-
nych ustawieniach WinAVR jest
ona także możliwa przez wydanie
polecenia Tools->(WinAVR) make
albo przez wpisanie komendy
make z konsoli z poziomu katalo-
gu projektu.
Programowanie procesora
skompilowanym kodem
W tej chwili konieczne jest
jeszcze posiadanie stan-
dardowego programatora.
Pocieszające jest jednak to,
że jeśli teraz uda nam się
zaprogramować procesor,
w przyszłości będzie można
na nim wykonać masę eks-
perymentów bez koniecz-
ności wpinania się do złącza ISP.
Na stronie Elportalu znajdą się wygodne
pliki dla PonyProga, które automatycznie prze-
prowadzą cały proces wraz z odpowiednim
ustawieniem bitów konfiguracyjnych. W innym
przypadku konieczne jest ręczne ustawienie
rozmiaru sekcji bootloadera na 1024 słowa,
włączenie skoku do sekcji bootloadera po zero-
waniu oraz, zależnie od wybranej wersji, odpo-
wiednie wybranie źródła taktowania procesora.
Uruchomienie bootloadera
Jeśli program bootloadera został skonfiguro-
wany zgodnie z opisem, jego uruchomienie
następuje przez przytrzymanie przycisku S1
w chwili startu procesora. W praktyce ozna-
cza to albo trzymanie przycisku w chwili
włączania zasilania płytki, albo przytrzymanie
przycisku S1 w czasie i chwilę po zerowaniu
procesora przyciskiem RESET na
płytce głównej. Po takim zabie-
gu przycisk S1 można zwolnić.
Procesor teraz wykonuje program
bootloadera i czeka na polecenia z
portu szeregowego.
Korzystanie z bootloadera –
AVRProg
Jeśli nasz procesor jest zaprogra-
mowany programem bootloadera,
który porozumiewa się z prędkością 115,2kbps
oraz udaje procesor ATmega169, możemy
posłużyć się wygodnym programatorem wbu-
dowanym w środowisko AVRStudio.
Po uruchomieniu bootloadera przechodzi-
my do komputera. Uruchamiamy AVRStudio.
Nie musimy otwierać żadnego projektu. Z
menu głównego wybieramy: Tools->AVR
Prog. Jeśli wszystko przebiegło prawidło-
wo, zobaczysz okno widoczne na rysunku
3. Możesz teraz wybrać plik do zapisania
i zaprogramować procesor. Po naciśnięciu
przycisku Advanced ujrzymy okienko pokazu-
jące aktualną konfigurację bitów ustawień (nie
można jednak ich zmieniać) oraz uzyskamy
możliwość konfiguracji bitów zabezpieczeń.
Jeśli program się nie uruchomi, tylko
wyświetli komunikat widoczny na rysunku 4,
oznacza to albo złe połączenie, albo nieprawid-
łowe ustawienie prędkości transmisji w pro-
cesorze – pamiętaj o konieczności stosowana
zewnętrznego kwarcu. Może oznaczać także,
że program bootloadera nie działa – spróbuj
ponownie uruchomić płytkę, trzymając S1.
Zwróć uwagę, że w polu Device, na 3,
znajduje się nazwa wybranego procesora
(ATmega169 BOOT). Jeśli jej nie ma, ozna-
cza to, że procesor nie został prawidłowo
rozpoznany i jego programowanie okaże
się niemożliwe. W takim przypadku świad-
czy to o nieprawidłowym ustawieniu stałej
PARTCODE w pliku defines.h. Zajrzyj do
części o udawaniu ATmega169.
Bootloader z poziomu AVRdude
Część osób zauważa zapewne, że im dłużej
pracuje się na komputerze, tym bardziej lubi się
programy konsolowe. Po prostu często łatwiej i
szybciej jest wpisać z konsoli kilka komend niż
sięgać po myszkę i wybierać odpowiednie opcje z
menu. Inną sprawą jest możliwość łatwego pisa-
nia skryptów. Wtedy, po wybraniu odpowiednie-
go pliku wsadowego, cały proces programowania
zostanie przeprowadzony automatycznie. Jest to
istotny powód, dla którego coraz bardziej prze-
konuję się do AVRdude.
AVRdude jest programem o otwartym
kodzie, więc nie ma co się obawiać, że
pewnego dnia straci wsparcie producenta.
W moim odczuciu ma on większe możli-
wości niż promowany przez firmę ATMEL
podobny program, także z otwartym kodem
– AVROSP (AVR Open Source Programmer).
Ponadto, obsługa AVRdude jest domyślnie
/* defi nitions for device recognition */
#defi ne PARTCODE 0x79
#defi ne SIGNATURE_BYTE_1 0x1E
#defi ne SIGNATURE_BYTE_2 0x94
#defi ne SIGNATURE_BYTE_3 0x04
Listing 2 Udawanie ATmega169 przed AVRProg
//
Chip
erase.
else
if
(val==
’e’
)
{
for
(address =
0
; address < APP_END;
address
+=
PAGESIZE)
{
_WAIT_FOR_SPM();
#ifdef __ICCAVR__
#pragma diag_suppress=Pe1053
#endif
_PAGE_ERASE(
address
);
#ifdef __ICCAVR__
#pragma diag_default=Pe1053
#endif
}
_WAIT_FOR_SPM();
sendchar(
‘\r’
);
// Send OK back.
}
Listing 3 Naprawa kasowania w AVR109
Rys. 3 Okno główne pracującego
programu AVRProg
Rys. 4 Brak wykrycia bootloadera
przez AVRProg
27
Programowanie
E l e k t ro n i k a d l a Ws z y s t k i c h
PaŸdziernik 2008
PaŸdziernik 2008
wbudowana w plik Makefile z WinAVR...
znacznie ułatwia to pierwsze eksperymenty.
Aby nie przedłużać sprawy, skonfiguru-
jemy Makefile jednego z programów kursu
C w taki sposób, aby można było swo-
bodnie korzystać z bootloadera AVR109.
Wybrałem program LCD_dynamic z części
9. Identycznie jednak można postąpić z każ-
dym udostępnionym na Elportalu programem
– patrz też przypis na końcu artykułu.
Otwieramy do edycji plik Makefile. W pliku
tym, przed linią 200, znajduje się sekcja ozna-
czona Programming Options (avrdude). Listing
4 pokazuje konieczne zmiany. Odpowiednio
ustawiamy typ programatora. Nazwę portu
ustawiamy na port, do którego rzeczywiście
podłączyliśmy naszą płytkę. Dodana została
także stała określająca prędkość transmisji.
Tuż przed końcem sekcji ustawień programa-
tora znajdziemy ustawianie odpowiednich flag.
Skorzystamy tutaj z dodanej stałej AVRDUDE_
BOUD zgodnie z listingiem 5.
Teraz jeszcze jedno: jeśli zainstalowałeś
WinAVR bez dodawania jego ścieżki do syste-
mowego PATH-a, konieczne jest też utworze-
nie odpowiedniego pliku wsadowego. Plik,
którego zawartość pokazuje listing 6, należy
wywołać z poziomu katalogu projektu. U sie-
bie plik ten nazwałem program.bat i umieści-
łem w katalogu instalacyjnym WinAVR.
Możesz wywołać go z linii poleceń,
możesz także dodać odpowiednie narzędzie
do Programmers Notepada. Przypominam
skrótowo, jak to zrobić: Z menu głównego
wybierz opcję Tools->Options. Dalej postępuj
zgodnie z rysunkiem 5.
Warto korzystać z AVRdude z poziomu
Makefile. Został on napisany w taki sposób,
że jeśli w programie dokonaliśmy zmian i
jeśli bez wybierania opcji kompilacji wybie-
rzemy opcję programowania, narzędzie make
wykryje, że istnieją kody źródłowe o dacie
nowszej niż plik wynikowy i automatycznie
wywoła kompilację – nie będzie więc przy-
padku, że zapomnimy coś skompilować i
załadujemy do procesora kod bez poprawek.
Dlatego też dobrze jest, zgodnie z rysunkiem
5, zaznaczyć w opcjach naszego narzędzia
programowania opcję zapisu zmienionych
plików przed jego wywołaniem.
Praca na przejściówce USB->RS232
Oba programy zostały sprawdzone przy współ-
pracy z przejściówką USB->RS232. Radzą sobie
znakomicie. Jedynie wbudowany w AVRStudio
AVRProg sprawia drobny problem. Okazuje się,
że program ten po uruchomieniu automatycznie
przeszukuje porty w poszukiwaniu obsługiwa-
nego urządzenia. Jednak poszukiwania prowadzi
jedynie na portach COM1...COM4. W moim
przypadku przejściówka zainstalowała się jako
port COM8, co uniemożliwiło prawidłową współ-
pracę z tym programem. W systemie Windows
XP możemy przypisać dowolny numer portu
takiej przejściówce. Można to zrobić z pozio-
mu menadżera urządzeń, wybierając we właści-
wościach przejściówki w zakładce Ustawienia
portu przycisk Zaawansowane... Ponieważ porty
COM1...COM4 są domyślnie przypisane do
fizycznej przestrzeni adresowej urządzeń wej-
ścia--wyjścia procesora, może pojawić się kilka
ostrzeżeń o możliwych problemach. Jednak w
nowych komputerach na przykład port COM4
nie istnieje, można więc bezpiecznie zignorować
pojawiające się okienka i kontynuować zmiany.
Po zmianie nazwy portu emulowanego przez
przejściówkę na jedną z zakresu COM1...COM4
AVRProg zacznie wykrywać naszą płytkę.
Należy zdawać sobie sprawę, że przejściówka
USB->RS232 ma złącze takie, jakby podłączyć
się do komputera kablem 1:1. Konieczny jest
więc jeszcze przewód Null Modem albo prosta
przejściówka krosująca odpowiednie sygnały.
Podsumowanie
Po wgraniu booloadera na płytkę komfort pracy
znacznie wzrasta. Niezależnie od posiadanej
wersji, znikają wszelkie problemy wynikające
ze współdzielenia linii interfejsu wyświetlacza
alfanumerycznego z liniami SPI. Program
ten znakomicie działa z przejściówką USB-
>RS232, co ucieszy na pewno posiadaczy
nowoczesnych komputerów pozbawionych
portów COM oraz LPT. Zauważyłem także
wzrost szybkości programowania w stosunku
do programatora STK200.
Osobiście, po przyzwyczajeniu się do tego
programu, niechętnie wracam do poczci-
wego STK200 podczas eksperymentów z
AVT3505.
Radosław Koppel
radoslaw.koppel@elportal.pl
Uwaga: Podany program nie jest prawidłowo
kompilowany przez GCC w wersji 4.3. Jedną
z głównych przyczyn takiego stanu rzeczy jest
fakt, że GCC w wersji 4.3 inaczej obsługuje
niestatyczne funkcje typu inline. Występują
jednak także inne problemy, w sprawie których
pozostaję w kontakcie z twórcami WinAVR.
Kody programów z kursu najlepiej kompilo-
wać w WinAVR w wersji 20071221.
AVRDUDE_FLAGS
= -p
$(MCU)
-P
$(AVRDUDE_PORT)
-c
$(AVRDUDE_PROGRAMMER)
-b
$(AVRDUDE_BOUD)
Listing 5 Modyfikacja flag AVRdude w celu wybrania prędkości transmisji
Rys. 5 Dodawanie narzędzia programowania do Programmers Notepad’a
AVRDUDE_PROGRAMMER
= avr109
# com1 = serial port. Use lpt1
# to connect to parallel port.
AVRDUDE_PORT
= com4
AVRDUDE_BOUD
= 115200
Listing 4 Ustawienia AVRdude w Makefile