evboard, Płytka testowa dla mikrokontrolerów AT89S oraz AVR

background image

http://www.easy-soft.tsnet.pl/


Płytka testowa dla mikrokontrolerów

AT89S... oraz AVR.



Budując model urządzenia z mikr

czegoś

ożliwiał łatwe dołączenie urządzeń zewnętrznych,

ikrokontrolerów bez poważnych zmian w konstrukcji

wanie programów przeznaczonych dla mikrokontrolera i nie wymagał

ę z używanymi przeze mnie programami typu IDE.

jb

ereg wad, które

zdecydowałem się na zaprojektowanie własnego. Jest on

sane dla

u na

mowanie (metodą „in-circuit”) następujących układów

AT89S8252

AT90S1200 rev.C

AT90S4434

odana wyżej lista w łatwy sposób może być rozszerzona. I najważniejsze: płytkę testową bez najmniejszych

Programowanie „in-circuit”.

Kilka lat temu firma ATMEL zaczęła wyposażać swoje mi okontrolery w interfejs sprzętowy o nazwie SPI (Serial

ady i

M)

cji

ą to MOSI,

jako Master (nadrzędny – sterujący

go która jest wyjściową gdy układ pracuje jako Master i wejściową, gdy

pracuje jako Slave,

okontrolerem czego tak naprawdę oczekuje projektant od tzw. układu

uruchomieniowego? Trudno odpowiedzieć na takie pytanie, ponieważ z całą pewnością każdy oczekuje
innego. Może spróbuję wymienić własne kryteria wyboru. Chciałbym aby taki układ:

um

umożliwiał wykorzystanie stosowanych przeze mnie m
zestawu uruchomieniowego,
pozwalał na łatwy zapis i testo
dodatkowego układu programatora,
w łatwy sposób pozwalał integrować si

Na ardziej zbliżonym do tego mojego „ideału” jest AVR Starter Kit firmy ATMEL. Ma jednak sz
obniżają w moich oczach jego funkcjonalność. Mam na przykład zawsze duże problemy z podłączeniem zasilania
sondy logicznej – najczęściej lutuję jej wyprowadzenia wprost do układu stabilizatora. Nie jest to ani
funkcjonalne, ani estetyczne, ani zbyt wygodne.
W związku z brakiem na rynku podobnego układu
częściowo wzorowany na AVR Starter Kit firmy ATMEL i na notach aplikacyjnych tej firmy, jednak posiada
pewne cechy funkcjonalne, których nie ma pierwowzór. Układ przeznaczony jest dla mikrokontrolerów
produkowanych przez ATMEL. Oczywiście można przy jego pomocy uruchamiać również programy napi
mikrokontrolerów produkowanych przez innych producentów i zgodnych pod względem wyprowadzeń z
popularnym 8051 czy 8052, jednak w takim wypadku zestaw traci sporo ze swej funkcjonalności. Mam t
myśli jedną z najważniejszych cech a mianowicie możliwość zapisu programu do pamięci programu
mikrokontrolera bez użycia dodatkowego programatora.
Płytka prototypowa umożliwia wykorzystanie lub zaprogra
mikrokontrolerów:

AT90S1200 i

AT90S2313

AT90S2323

AT90S2333

AT90S2343

AT90S4414

AT90S4433

AT90S8515

AT90S8535

ATMega 103

ATMega 161

ATMega 163

ATMega 603

ATMega 83


P
problemów zintegrować z Bascom AVR oraz AVR Studio. W innych sytuacjach wykorzystywany jest program
AVRProg.

kr

Peripherial Interface) a wkrótce potem w możliwość zapisu pamięci FLASH i EEPROM z jego wykorzystaniem.
Daje to projektantowi systemu możliwość łatwej implementacji metody zapisu programu do pamięci
mikrokontrolera zwanej z języka angielskiego „in-circuit” to znaczy „w układzie”. Posiada ona swoje w
zalety. Wadą jest to, że czasami trzeba nieco skomplikować układ połączeń tak, aby odseparować obwody
sterownika od szeregowego programatora w czasie zapisu czy odczytu wewnętrznej pamięci FLASH (EEPRO
mikrokontrolera. Do wad zaliczam również możliwość ustawienia tylko niektórych bitów bezpieczników i opcji
przy pomocy tego rodzaju interfejsu. Zaletą jest niewątpliwie umożliwienie zapisu pamięci mikrokontrolera bez
konieczności wylutowywania go z płytki czy nawet wyjęcia z podstawki. Jest to cecha szczególnie korzystna dla
elektronika – amatora, który nie dysponuje zbyt dużym budżetem koniecznym na zakup emulatora. Pozwala
mu na uruchamianie urządzenia metodą prób i błędów. Do metody programowania „in-circuit” sięgają również
chętnie profesjonaliści, ponieważ umożliwia im ona łatwą zmianę programu wykonywanego przez
mikrokontroler w celu dokonania poprawek czy dodania cech funkcjonalnych już podczas eksploata
urządzenia. Opisywaną wyżej cechę wykorzystuje proponowany układ uruchomieniowy.
Układy mikrokontrolerów wyposażone w interfejs SPI posiadają przyporządkowane mu 4 linie. S
MISO, SCK i SS. Ich nazwy pochodzą z języka angielskiego i oznaczają:

MOSI – Master Output Slave Input – linia danych; gdy układ pracuje
transmisją) jest to linia wyjściowa, gdy jako Slave (podporządkowany) wówczas jest to linia wejściowa,
MISO – Master Input Slave Output – linia danych; gdy układ pracuje jako Master jest to linia wejściowa,
gdy jako Slave – wyjściowa,
SCK – linia sygnału zegarowe

J.Bogusz „Płytka uruchomieniowa dla ...”

-Strona 1/1-

background image

http://www.easy-soft.tsnet.pl/

SS – Slave Select – linia sterując przełączaniem interfejsu z funkcji układu master do funkcji slave; stan ni

oduje przełączenie in

ski

pow

terfejsu w tryb Master.

i odpowiedniego sterowania wymagają tylko wyprowadzenia

.

podaje zewnętrzny sygnał synchronizujący przesyłanie danych SCK i steruje transmisją.

amowanego mikrokontrolera z serii AVR,

ż zasilony sygnałem

wystarczy jednak

er znajduje się w stanie reset. Można to uzyskać przez podanie stanu wysokiego dla AT89S8252,

,

itów

igdy zaś

jściowe lub wyjściowe. W przypadku,

O

składa się

posiada

Aplikacja sterująca – AVRPROG.

Do sterowania pracą programatora wy

tronie internetowej firmy ATMEL,

program AVRProg. Jest to aplikacja wykonana dla środowiska Windows. Nie wymaga przeprowadzania żadnej

.

łytkę ewaluacyjną. Komunikacja

(bądź też

Przy programowaniu w układzie nie wykorzystuje się wszystkich wyprowadzeń. Na wyprowadzeniu SS
najczęściej wymusza się stan wysoki. Podłączenia
MISO, MOSI i SCK.
Programowany układ mikrokontrolera zawsze pracuje jako Slave, dla którego układem Master jest programator
Master (programator)
Sygnał SCK powinien mieć częstotliwość:

co najmniej 40 razy mniejszą dla programowanego mikrokontrolera AT89S8252,

co najmniej 4 razy mniejszą dla progr

Oprócz sygnału zegarowego transmisji, programowany mikrokontroler musi być równie
zegarowym na wejściu XTAL1 sterującym synchroniczną pracą CPU. W tym wypadku
podłączony na zewnątrz rezonator kwarcowy czy ceramiczny będący najczęściej integralną częścią układu
sterownika.
Oba rodzaje pamięci (FLASH i EEPROM) mogą być zapisane z użyciem interfejsu SPI tylko wówczas, gdy
mikrokontrol
lub niskiego dla AVR, na wyprowadzenie RESET. To jednak nie wszystko. Aby możliwy był zapis do pamięci, CPU
musi wykonać instrukcję „Programming Enable”. Polega to na wprowadzeniu przez interfejs SPI kodu
właściwego rozkazu. W przypadku AT89S8252 jest to 3-bajtowy rozkaz składający się z kodów 0xAC – 0x53 i
np. 0x00. Konieczny do spełnienia jest jeszcze jeden warunek. Aby możliwy był zapis z wykorzystaniem
interfejsu SPI musi on pracować synchronicznie z programatorem (układem master). Synchronizację bada się
testując wartość wyprowadzaną podczas zapisu trzeciego bajtu rozkazu. Jeśli interfejs pracuje poprawnie
powinien on wyprowadzić liczbę o wartości drugiego bajtu (0x53) podczas zapisu trzeciego bajtu rozkazu.
Producent zaleca aby próbę synchronizacji przeprowadzić 32 razy. Jeśli w ciągu 32 prób synchronizacji nie
powiedzie się ona, oznaczać to będzie brak komunikacji z programowanym układem. Jeśli mikrokontroler
połączony jest poprawnie z programatorem, to przyczyną może być uszkodzenie interfejsu lub ustawienie b
opcji (bezpieczników) w sposób uniemożliwiający dostęp do pamięci programu z wykorzystaniem SPI.
Normalnie zapis pamięci wykonanej w technologii FLASH nie jest możliwy bez wcześniejszego ustawienia
wartości zapisywanej komórki pamięci na 0xFF. To znaczy – możliwa jest zmiana stanu bitu z 0 na 1, n
odwrotnie. Zapisując dane do pamięci FLASH mikrokontrolera firmy ATMEL nie musimy zajmować się tą
właściwością. Tuż przed zapisem bajtu, automatycznie wykonywana jest instrukcja ustawiająca wartość bitów
programowanej komórki pamięci na „1” - jest to tak zwane „Auto erase”.
Interfejs SPI jest typu synchronicznego. Oznacza to, że dane przesyłane są synchronicznie z sygnałem SCK.
Linie interfejsu są dwukierunkowe i w zależności od funkcji pracują jako we
gdy interfejs służy do zapisu danych w pamięci FLASH czy EEPROM, linie MOSI i SCK są wejściowymi, zaś MIS
wyjściową. W wybranym trybie pracy, przesyłane poprzez linię MOSI bity wprowadzane są podczas
narastającego zbocza, natomiast stan MISO zmienia się podczas opadającego zbocza sygnału SCK.
Odrębne zagadnienie stanowi sposób adresowania komórek pamięci i wymiany danych. Wszystko to
na tak zwany protokół komunikacyjny, który jest różnych dla różnych mikrokontrolerów, aczkolwiek
wiele cech wspólnych. Na przykład rodzina AVR wymaga do zapisu pamięci słowa danych o długości 16 bitów,
natomiast AT89 – 8 bitów. Różnice występują również w metodach zapisu – AT89 i AT90 zapisuje się słowo po
słowie, natomiast ATMega strona po stronie (256 bajtów). Zainteresowanych szczegółowym opisem protokołu
komunikacyjnego odsyłam do lektury kart katalogowych konkretnych modeli mikrokontrolerów.

korzystałem darmowy, dostępny na s

instalacji. Program rozprowadzany jest w jako archiwum w formacie ZIP, które zawiera plik wykonywalny EXE
Należy go po prostu skopiować na dysk twardy i utworzyć skrót ułatwiający uruchomienie. Uwaga: program nie
uruchomi się bez podłączenia urządzenia, które wyśle identyfikator zawierający 3 pierwsze znaki „AVR” podczas
próby nawiązania komunikacji.
AVRProg przeznaczony jest do sterowania zarówno pracą programatorów szeregowych jak i równoległych. Ja
zastosowałem go do sterowania programatorem wbudowanym w p
nawiązywana jest przez interfejs szeregowy RS232 komputera PC (19200, n, 8, 1). Po uruchomieniu program
testuje porty szeregowe sprawdzając możliwość komunikacji i w ten sposób sam wykrywa obecność
nieobecność) podłączonego układu programatora. Protokół komunikacyjny jest bardzo prosty, aczkolwiek jego
gruntowne poznanie zajęło mi kilka dni. AVRProg przesyła polecenie w formie pojedynczego znaku. Komendy te
wyszczególnione są w tabeli 1. Niektóre z komend wymagają potwierdzenia ze strony odbierającego i
wykonującego je układu w postaci kodu CR (0x0D). Inne podają również parametry takie, jak adres czy bajt
danych do zapisu.

J.Bogusz „Płytka uruchomieniowa dla ...”

-Strona 2/2-

background image

http://www.easy-soft.tsnet.pl/

AVRProg zapisuje

AVRProg czyta

Opis komendy

ID Dane

Dane

Enter Programming Mode
(załączenie trybu programowania)

P - -

0x0D

Auto Increment Address Status
(pytanie o możliwość automatycznej
inkrementacji adresu)

a

-

„Y” lub „?”

Set Address
(ustawienie adresu zapisywanego lub
odczytywanego bajtu)

A MSB

LSB 0x0D

Write Program Memory Low Byte
(zapis młodszego bajtu pamięci programu)

c dd 0x0D

Write Program Memory High Byte
(zapis starszego bajtu pamięci programu)

C dd 0x0D

Issue Page Write
(instrukcja zapisu strony pamięci)

m

0x0D

Read Lock Bits
(odczyt bitów blokujących)

r

dd

(dd)

Read Program Memory
(odczyt pamięci programu – FLASH)

R

N x dd

Read Data Memory
(odczyt pamięci danych – EEPROM)

d dd

Write Data Memory
(zapis pamięci danych – EEPROM)

D dd 0x0D

Chip Erase
(kasowanie pamięci danych i pamięci programu)

e

0x0D

Write Lock Bits
(zapis bitów blokujących)

l dd

0x0D

Write Fuse Bits
(zapis bitów bezpieczników)

f dd

0x0D

Read Fuse Bits Low Byte
(odczyt młodszego bajtu stanu bitów
bezpieczników)

F dd

Read Fuse Bits High Byte
(odczyt starszego bajtu stanu bitów
bezpieczników)

N dd

Leave Programming Mode
(opuszczenie trybu programowanie, przejście do
stanu spoczynkowego)

L

0x0D

Select Device Type
(ustawienie typu programowanego
mikrokontrolera)

T dd 0x0D

Read Signature Bytes
(odczyt bajtu sygnatury układu)

s

3 x dd

Return Supported Device Codes
(odczyt listy obsługiwanych przez programator
układów)

t

N x dd

0x00

Return Software Identifier
(odczyt identyfikatora programu; dla
programatora szeregowego jest to AVR ICP, dla
płytki prototypowej AVR DEV itp.)

S

7 x dd

Return Software Version
(odczyt wersji oprogramowania)

V

dd

dd

Return Hardware Version
(odczyt wersji układu programatora)

v

dd

dd

Return Programmer Type
(odczyt rodzaju programatora; S to programator
szeregowy, P równoległy)

p dd

Set LED
(załączenie diody LED o podanym kodzie)

x dd 0x0D

Clear LED
(wyłączenie diody LED o podanym kodzie)

y dd 0x0D

Tabela 1. Wykaz komend programy AVRProg.

Aby zilustrować użycie komend posłużę się sekwencją rozkazów przesyłanych przez AVRProg tuż po
uruchomieniu. Komendy te wysyłane są w celu identyfikacji rodzaju podłączonego programatora oraz pobrania
listy obsługiwanych układów:

0x1B (ESC) - oczyszczenie bufora komunikacji programatora,

„S” w – identyfikacja wersji oprogramowania,

J.Bogusz „Płytka uruchomieniowa dla ...”

-Strona 3/3-

background image

http://www.easy-soft.tsnet.pl/

„a” – pytanie o możliwość autoinkrementacji adresu,

„t” – pobranie listy obsługiwanych układów,

„T” + kod – wybranie programowanego mikrokontrolera (najczęściej jest to ostatni zapisywany
mikrokontroler).


Aplikacja jest bardzo prosta w użyciu. Obsługuje się ją identycznie jak większość programów napisanych dla
środowiska Windows. Korzystając z pola combo (device) umieszczonego na dole okienka, należy wybrać
programowany układ mikrokontrolera. Od tego wyboru zależeć będzie faza sygnału RESET oraz algorytm z
zastosowaniem którego zapisywana i odczytywana będzie pamięć mikrokontrolera. Na górze okienka
umieszczony jest przycisk „Browse” (Hex file). Korzystając z niego należy wskazać zbiór w formacie HEX
zawierający dane do zapisu w FLASH lub EEPROM. W ten sam sposób wskazuje się również nazwę zbioru, w
którym zostaną zapamiętane odczytane dane. Teraz, po wykonaniu wyżej opisywanych czynności, można
przeprowadzić programowanie pamięci, odczytać ją lub porównać jej zawartość z danymi zapamiętanymi na
dysku. Operacje te można przeprowadzać niezależnie dla obu rodzajów pamięci. Uwaga: przed zapisem pamięci
FLASH wykonywana jest instrukcja kasująca zarówno zawartość pamięci FLASH jak i EEPROM. W przypadku
zapisu danych do EEPROM – zawartość FLASH nie jest usuwana.
Komunikację z programatorem możemy przetestować wykorzystując przycisk „Advanced”. Po jego wybraniu
ukaże się okienko dialogowe, które w części informacyjnej powinno zawierać identyfikator podłączonego układu
programatora (dla opisywanej płytki jest to „AVR DEV”), wersję oprogramowania (tu powinno się znaleźć „7.0”)
oraz sygnaturę układu umieszczonego w podstawce. Jedynym wyjątkiem jest tu AT89S8252, którego sygnatura
nie jest odczytywana (ukaże się następująca informacja „?? ?? ??”)

Zdjęcie 1. Wygląd okna programu AVRProg po uruchomieniu.

Opis układu.


Układ zmontowany został na płytce dwustronnej z metalizacją otworów. Umożliwia podłączenie
mikrokontrolerów w obudowie DIL40 oraz DIL20. Inne – mimo iż mogą się znajdować na liście programowanych
układów – wymagają zastosowania adaptera. Rolę programatora spełnia tani i popularny mikrokontroler
AT89C2051, w którym zaimplementowałem programowy interfejs SPI, pracujący z zewnętrznym rezonatorem
kwarcowym 11,0592 MHz. Mikrokontroler ten komunikuje się z aplikacją sterującą AVRProg przez interfejs
szeregowy RS232. Konwersji poziomów napięć dokonuje układ drivera MAX232. Wykorzystane są tylko 2
bramki: odpowiednio jedna nadajnika i jedna odbiornika. Pozostałe dwie podłączone są do wyprowadzeń UART
programowanego mikrokontrolera. Umożliwia to jego podłączenie i pracę na przykład jako terminal, bez
stosowania dodatkowego układu dopasowującego. Wyprowadzenia UART można odłączyć od drivera MAX232.
Wystarczy wyjąć zworki J1 i J2.
AT89C2051 pełni jednocześnie rolę układu sterującego wyprowadzeniem reset programowanego
mikrokontrolera. Faza sygnału reset jest dobierana w dwojaki sposób. Tuż po włączeniu układ „nie wie” jaka
faza sygnału jest wymagana, ponieważ nie został jeszcze przesłany przez AVRProg bajt dokonujący wyboru
typu mikrokontrolera. Można to co prawda określić na podstawie odczytu sygnatury układu, jednak ta metoda
nie została zaimplementowana. Aby określić fazę reset po włączeniu zasilania układ odczytuje stan zwory J3. I
tak AT89S8252 wymaga aby zworka znalazła się w położeniu 1-2, natomiast układy z serii AVR 2-3. Nastawa ta
ma znaczenie tylko do momentu przesłania bajtu identyfikatora wybranego układu. Później nastawa zwory jest
ignorowana.
Do wyprowadzenia INT0 mikrokontrolera programatora podłączony jest przycisk, lub tak jak w modelu,
goldpiny zwierane w razie potrzeby na przykład przy pomocy śrubokręta, czy pęsety. Zwarcie wyprowadzeń

J.Bogusz „Płytka uruchomieniowa dla ...”

-Strona 4/4-

background image

http://www.easy-soft.tsnet.pl/

(lub naciśnięcie przycisku) wymusza krótki sygnał reset programowanego mikrokontrolera. Przycisk nie działa w
czasie, gdy programator zapisuje lub odczytuje dane.
Stan programatora sygnalizowany jest przez trzy diody świecące o kolorach żółtym, zielonym i czerwonym:

dioda zielona oznaczona jako „OK” zaświeca się, gdy rezultat operacji jest poprawny oraz po nawiązaniu
połączenia z aplikacją AVRProg, tuż po jej uruchomieniu,

dioda żółta oznaczona jako „praca” świeci się, gdy programator zapisuje lub odczytuje dane,

dioda czerwona sygnalizuje błąd zapisu, odczytu lub weryfikacji danych i zaświeca się po wyświetleniu
komunikatu o błędzie przez aplikację AVRProg.

Poza układem drivera MAX232 i dwoma stabilizatorami napięcia, na płytce nie ma innych układów scalonych. Ci,
którzy lubią eksperymentować z rozmaitymi znajdującymi się na płytce testowej układami, nie znajdą tu nic dla
siebie. Płytka ma wszystkie porty mikrokontrolera wyprowadzone na zewnątrz bądź to przy pomocy złącz
terminatorów, bądź to przy pomocy goldpinów. Te ostatnie przeznaczone są do podłączenia wyświetlacza
pracującego z interfejsem 4 lub 8 bitowym oraz do wyprowadzenia sygnałów z układu programatora w celu
zapisu danych w innym, zewnętrznym układzie. Wszystkie linie portów mikrokontrolera testowego za wyjątkiem
P1 są podłączone do zewnętrznych rezystorów pull-up o wartości 47k. Rolę oscylatora spełnia rezonator
kwarcowy. Ja stosuję dla większości AVR rezonator o częstotliwości 7,3728 MHz a dla AT89S8252 11,0592 MHz
lub 22,1184 MHz. Oscylator trzeba będzie prawdopodobnie wymieniać w zależności od aktualnych potrzeb.
Można więc w otwory na płytce drukowanej wlutować 2 wyprowadzenia wyjęte z podstawki precyzyjnej tak, aby
możliwa była wymiana rezonatora bez konieczności użycia lutownicy. Można też w razie potrzeby wymienić
rezonator na inny wylutowując go.
Jak wspomniałem wcześniej, na płytce znajdują się 2 układy stabilizatorów napięcia. Ten pierwszy, oznaczony
jako U1, służy do zasilania układów znajdujących się na płytce. Ten drugi, oznaczony jako U2, mimo iż korzysta
ze wspólnego napięcia wejściowego podawanego przez G1, służy do zasilania układów znajdujących się poza
płytką i może stabilizować napięcie o innej wartości niż U1. W układzie modelowym używałem stabilizatora z
serii 7812. Oba napięcia wyprowadzone są na zewnątrz przez złącza G2 (5V) i G3 (inne napięcie, w modelu było
to 12V). Ich stan sygnalizowany jest przez diody LED – odpowiednio D6 i D8. Diody mają za zadanie świecić
przy obecności napięcia wyjściowego. Ich dodatkową funkcją jest to, że zgasną w przypadku zwarcia. Jest to
jedynie bardzo prosty sposób sygnalizacji. Zabezpieczenie nadprądowe jest jednym z elementów, w które
wyposażony jest stabilizator. Uwaga: obwody stabilizatorów nie posiadają separacji galwanicznej. Ich wyjść nie
można łączyć szeregowo w celu uzyskania wyższego napięcia. Napięcie wejściowe zależy od rodzaju
zastosowanych stabilizatorów. Jego wartość powinna być co najmniej o 2V wyższa od napięcia wyjściowego
stabilizatora. I tak, jeśli konieczne jest wyłącznie zasilenie układów płytki testowej, wystarczy doprowadzenie
do G1 napięcia stałego lub przemiennego o wartości około 8V. Za złączem G1 znajduje się mostek prostowniczy
i kondensator elektrolityczny, toteż polaryzacja doprowadzonego napięcia nie ma znaczenia: zamiana „+” z „-”
nie jest dla układu groźna.
Tabela 2 zawiera opisy złącz – wyprowadzeń płytki. Złącza oznaczone jako X to wyprowadzenia sygnałów
mikrokontrolera. Funkcje G1, G2 i G3 omówiliśmy już wcześniej. G4 to wyprowadzenie przez które sygnały
interfejsu SPI programatora szeregowego mogą być podawane na zewnątrz. Można sobie wyobrazić zasilenie
nimi płytki – przejściówki z podstawką, w której znajduje się mikrokontroler do zapisu czy odczytu lub
podłączenie programatora do urządzenia zewnętrznego.
Złącza X1 i X2 to wyprowadzenia przeznaczone dla podłączenia wyświetlacza LCD. Złącze X1 umożliwia
podłączenie LCD z interfejsem 8-bitowym, natomiast złącze X2 z interfejsem 4-bitowym. Potencjometr
wieloobrotowy PR1 służy do regulacji kontrastu. Dla większości wyświetlaczy LCD można z niego zrezygnować,
łącząc wyprowadzenia 2 i 3 potencjometru, podając potencjał masy zamiast napięcia regulacji. Złącza X3 do
X16 to wyprowadzenia portów mikrokontrolera.
Pewnego wyjaśnienia wymaga rola zwory J4 podłączonej do nóżki 31 mikrokontrolera. Wyprowadzenie 31 w
przypadku AT89S8252 oznaczane jest jako V

PP

/Prog i służy do wyboru rodzaju pamięci programu podłączonej

do mikrokontrolera. Praca z wewnętrzną pamięcią programu FLASH wymaga podania stanu wysokiego. Nie jest
ono używane z innym przeznaczeniem niż tylko wybór pamięci programu. Inaczej jest w rodzinie układów AVR.
Tutaj, na przykład dla AT90S8515, to samo wyprowadzenie pełni funkcję Capture Input (ICP) i może służyć do
pomiaru czasu trwania impulsu. Zwora J4 umożliwia wybór podłączenia nóżki 31 mikrokontrolera do „1”
logicznej w położeniu 1-2 oraz dołączenie jej do wyprowadzenia złącza X16 w położeniu 2-3. Pamiętajmy o jej
roli zmieniając rodzaj mikrokontrolera. Bez podania logicznej „1” AT90S8252 nie będzie pracował poprawnie z
wewnętrzną pamięcią programu!
Złącza DSUB9 oznaczone jako X17 i X18 to wyprowadzenia interfejsu RS232. X17 to wejście / wyjście
programatora, X18 to dodatkowe złącze umożliwiające wykorzystanie interfejsu UART testowanego
mikrokontrolera. Sygnały tego interfejsu obecne są również, bez dodatkowych układów buforów, na
wyprowadzeniach złącza X11. Tabele 2 i 3 zawierają opisy złącz oraz opis funkcji i położeń elementów
regulacyjnych i zworek.

Programator – opis programu.

Programator szeregowy wykonałem w oparciu o mikrokontroler AT89C2051 pracujący z rezonatorem
kwarcowym 11,0592 MHz. Cały program napisany jest w języku C z niewielkimi fragmentami w języku
asembler. Po skompilowaniu zajmuje on około 1,6kB przy włączonej opcji optymalizacji kodu wynikowego pod
kątem szybkości jego działania. Do napisania programu posłużył mi kompilator firmy RAISONANCE. Każdy, kto
będzie chciał wykonać modyfikacje może się posłużyć darmową wersją demonstracyjną tego pakietu dostępną
na stronie producenta http://www.raisonance.com/ umożliwiającą kompilację i uruchamianie programów do
4kB kodu.

J.Bogusz „Płytka uruchomieniowa dla ...”

-Strona 5/5-

background image

http://www.easy-soft.tsnet.pl/

Złącze

Oznaczenie

Numer

wyprowadzenia

Opis

sygnału

Uwagi

X1

(wyśw. LCD w
trybie 4 bity)

1
2
3
4
5
6
7
8
9

10

masa

+5V

kontrast

PB0 (P1.0)
PB1 (P1.1)
PB2 (P1.2)
PB4 (P1.4)
PB5 (P1.5)
PB6 (P1.6)
PB7 (P1.7)



z potencjometru PR1, można zewrzeć z GND
RS (LCD Register Select)
RD (LCD Read)
EN (LCD Enable)
DB4 (LCD Data Bus 4)
DB5 (LCD Data Bus 5)
DB6 (LCD Data Bus 6)
DB7 (LCD Data Bus 7)

X2

(wyśw. LCD w
trybie 8 bitów)

1
2
3
4
5
6
7
8
9

10
11

12
13
14
15
16

masa

+5V

kontrast

PD4 (P1.0)
PD5 (P1.1)
PD6 (P1.2)
PB0 (P1.4)
PB1 (P1.5)
PB2 (P1.6)
PB3 (P1.7)
PB4 (P1.7)

PB5 (P1.7)
PB6 (P1.7)
PB7 (P1.7)

+podśw.

masa



z potencjometru PR1, można zewrzeć z GND
RS (LCD Register Select)
RD (LCD Read)
EN (LCD Enable)
DB0 (LCD Data Bus 0)
DB1 (LCD Data Bus 1)
DB2 (LCD Data Bus 2)
DB3 (LCD Data Bus 3)
DB4 (LCD Data Bus 4)

DB5 (LCD Data Bus 5)
DB6 (LCD Data Bus 6)
DB7 (LCD Data Bus 7)
napięcie zasilania podświetlania tła: 4,3V DC
masa napięcia podświetlania tła

X3

1
2

PA0 (P0.0)
PA1 (P0.1)

Opis wyprowadzeń dla AT89S8252 i AT90S8515

X4

1
2

PA2 (P0.2)
PA3 (P0.3)

AT89S8252 i AT90S8515

X5

1
2

PA4 (P0.4)
PA5 (P0.5)

AT89S8252 i AT90S8515

X6

1
2

PA6 (P0.6)
PA7 (P0.7)

AT89S8252 i AT90S8515

X7

1
2

PC0 (P2.0)
PC1 (P2.1)

AT89S8252 i AT90S8515

X8

1
2

PC2 (P2.2)
PC3 (P2.3)

AT89S8252 i AT90S8515

X9

1
2

PC4 (P2.4)
PC5 (P2.5)

AT89S8252 i AT90S8515

X10

1
2

PC6 (P2.6)
PC7 (P2.7)

AT89S8252 i AT90S8515

X11

1
2

PD0 (P3.0)
PC1 (P3.1)

AT89S8252 i AT90S8515

X12

1
2

PD2 (P3.2)
PD3 (P3.3)

AT89S8252 i AT90S8515

X13

1
2

PD4 (P3.4)
PD5 (P4.5)

AT89S8252 i AT90S8515

X14

1
2

PD6 (P3.6)
PD7 (P3.7)

AT89S8252 i AT90S8515

X15

1
2

RESET

ALE

AT89S8252 i AT90S8515

X16

1
2

ICP-1 (Vpp)

OC1 (PSEN)

AT89S8252 i AT90S8515

X17

RS232

złącze programatora; X17 podłączone jest do AT89C2051

X18

RS232

złącze interfejsu UART testowanego mikrokontrolera; odłączane przy pomocy J1 i J2

G1

1, 2

napięcie zasilania

napięcie zasilające układu, stałe lub przemienne, o wartości wyższej o co najmniej 2V
od napięcia wyjściowego

G2

1
2

+5V

masa

wyprowadzenia napięć zasilających mikrokontroler

G3

1
2

np.+12V

masa

wyprowadzenie napięcia odseparowanego od zasilania mikrokontrolera

G4

1
2
3
4
5
6
8

7, 9, 10

+5V
PB7

-

PB6

-

PB5

RESET

masa

wyprowadzenia programatora przeznaczone do podłączenia zewnętrznego,
programowanego układu

Tabela 2. Opis wyprowadzeń płytki testowej

J.Bogusz „Płytka uruchomieniowa dla ...”

-Strona 6/6-

background image

http://www.easy-soft.tsnet.pl/



Zworka / element regulacyjny

Oznaczenie

Położenie

Opis funkcji

J1

1-2

0

linia RXD podłączona do drivera MAX232 (i złącza X18)
RXD odłączone

J2

1-2

0

linia TXD podłączona do drivera MAX232 (i złącza X18)
TXD odłączone

J3

1-2
2-3

wybór fazy sygnału reset, aktywna jest „1” (AT89)
aktywne jest „0” (AT90 i ATMega)

J4

1-2

2-3

logiczna „1” (Vcc) dołączona do wyprowadzenia 31 mikrokontrolera (AT89S8252)
wyprowadzenie 31 podłączone do złącza X16 (ICP-1)

PR1

-

regulacja kontrastu dla wyświetlacza

SW1

-

zwarcie powoduje reset programowanego mikrokontrolera, funkcja blokowana podczas
odczytu / zapisu danych

SW2

1-2

0

zwora - wyłącznik zasilania

Tabela 3. Opis elementów regulacyjnych oraz nastaw zworek


Cały program to rodzaj terminala dołączanego do komputera PC i realizującego polecenia przesyłane przez
AVRProg. Z małym wyjątkiem, do komunikacji używane są funkcje wejścia / wyjścia, z biblioteki producenta.
Ten „mały wyjątek” to funkcja przesyłająca znaki do komputera PC, która wymagała odrębnej implementacji.
Standardowo bowiem putchar() po napotkaniu kodu 0x0A przesyła dodatkowo 0x0D tworząc typową sekwencję
końca linii znaków (powrót karetki i nowa linia). Nie jest to pożądane przy przesyłaniu danych w postaci
binarnej zawartych w pamięci mikrokontrolera. Najprostszym rozwiązaniem była własna implementacja funkcji
putchar(), co uczyniono na początku programu. Jak widać, nie należy ona do zbyt skomplikowanych. Nie
wykorzystuje mechanizmu przerwań, zeruje flagę TI oraz zapisuje dane do bufora UART i oczekuje na
ustawienie TI będące sygnałem zakończenia transmisji bajtu.
Funkcja korzysta z nastaw predefiniowanych przez producenta pakietu. Szybkość transmisji określana jest
przez polecenie #pragma DEFJ(TIM1_INIT=0xFD) zawierające wartość inicjującą Timer 1 sterujący pracą UART.

//własna funkcja putchar (dla każdego 0x0A oryginalny putchar dodaje 0x0D)
int putchar (const int c) //nagłówek zgodny z biblioteką producenta
{

SBUF = c;

//zapis bufora UART

TI = 0;

//zerowanie flagi TI, początek transmisji

while (!TI);

//oczekiwanie na przesłanie bajtu

}
Listing 1. Implementacja funkcji putchar()

Funkcje zapisu (wrser) i odczytu (rdser) interfejsu SPI napisane zostały w języku asembler. Są to niewielkie
procedury, zaledwie po kilka bajtów każda. Ich implementacja w C, aczkolwiek możliwa, zajmowałaby więcej
miejsca w pamięci programu oraz była nieco bardziej skomplikowana. Dzięki asemblerowi łatwo jest zapanować
nad funkcją i stanem flagi przeniesienia „C” mikrokontrolera a także nad czasem wykonywania instrukcji. Z tego
samego powodu również funkcja - pętla absorbująca CPU na czas około 1ms wykonana jest w asemblerze
(delayms). Deklaracji bitów wyprowadzeń programowego interfejsu SPI (MISO, MOSI i SCK) dokonałem w
module napisanym w języku asembler. Reszta programu to bardzo rozbudowany warunek switch rozpatrujący
odebrane znaki i podejmujący akcję w zależności od przesłanych przez AVRProg poleceń. Protokoły
komunikacyjne AT89 i AT90 różnią się znacznie pomiędzy sobą. Z tego też powodu, w wielu miejscach
programu, konieczny jest rozdział funkcji na te realizowane przez AVR i te realizowane przez AT89 mimo, iż
przesyłane polecenia mają identyczną postać. Podstawowa różnica w protokole polega na tym, że AT89
wymaga 3 bajtów dla każdego z poleceń, natomiast AT90 i ATMega wymagają 4.
Szczególną uwagę należy zwrócić na poprawną implementację funkcji spiinit() i polecenie „P” – była już o nim
mowa wcześniej. Funkcja ta wprowadza kod rozkazu „Programming Enable” umożliwiając zapis pamięci FLASH i
EEPROM. Układy z serii AVR wymagają, aby dokonana została synchronizacja interfejsów Master (programator)
i Slave (mikrokontroler). Dodatkowo funkcja ta wywoływana jest na koniec cyklu zapisu, przed przełączeniem
do cyklu odczytu. Uwaga: bez poprawnej pracy funkcji spiiinit() nie jest możliwy zapis i odczyt danych z
wykorzystaniem interfejsu SPI.
Poszczególne funkcje i wymagane formaty danych były omawiane wcześniej przy okazji opisu protokołu
komunikacyjnego. Dokładna lektura programu źródłowego pozwoli na zrozumienie szczegółów implementacji
oraz ewentualne własne przeróbki. Pomocne mogą być zwłaszcza noty aplikacyjne dostępne na stronie
internetowej firmy ATMEL (dla przykładu AVR109 i AVR910) oraz karty katalogowe poszczególnych
mikrokontrolerów.

Wykonanie i użytkowanie układu.

Całość zmontowana jest na płytce dwustronnej z metalizacją otworów. Wszystkie kondensatory za wyjątkiem
elektrolitycznych i rezystory to elementy SMD w obudowie 1206. Ich montaż nie powinien nastręczać żadnych

J.Bogusz „Płytka uruchomieniowa dla ...”

-Strona 7/7-

background image

http://www.easy-soft.tsnet.pl/

trudności. Również z zakupem raczej nie powinno być problemów. Osobiście przy tego rodzaju zamówieniach
posiłkuję się ofertą firm sprzedających elementy przez Internet, w formie sprzedaży wysyłkowej. Płytkę można
nabyć z oferty AVT, raczej nie polecam jej samodzielnego wykonywania aczkolwiek jest to oczywiście możliwe.
Układy stabilizatorów napięcia zamontowane są poziomo. Płytka stanowi jednocześnie radiator i zwiększa
powierzchnię, dzięki której stabilizator traci ciepło. Układ U1 musi podawać napięcie o wartości 5V (7805),
układ U2 można dobrać w zależności od indywidualnych potrzeb. Może to być drugi egzemplarz 7805, może być
również 7809 czy 7812. Można stosować również układy dla wyższych napięć (7815 czy 7824), jednak w takim
przypadku prawdopodobnie wymagane będzie założenie dodatkowego radiatora odprowadzającego nadmiar
ciepła z układu U1.
Układy mikrokontrolerów montowane są w podstawkach. U4, to znaczy AT89C2051 w celu łatwego demontażu i
ewentualnej zmiany programu, układy testowe wykorzystują JP1 i JP2 w celu łatwej ich wymiany. Raczej
proponuję nie stosować tak zwanych podstawek precyzyjnych lecz te zwykłe. „Duża” podstawka, DIL40, ma
wewnątrz poprzeczne wzmocnienie, które należy odciąć przy pomocy piłki lub ostrego noża. „Mała” podstawka,
DIL20, jest bowiem montowana wewnątrz dużej a wzmocnienie to uniemożliwia. Ze względu na ten sposób
montażu, podstawka DIL20 może wymagać również nieznacznego zeszlifowania na przykład przy pomocy
papieru ściernego tak, aby pasowała do wnętrza DIL40. Szczegóły ich montażu pokazane są na fotografii 2.

Zdjęcie 2. Sposób montażu podstawek JP1 i JP2 przeznaczonych dla testowanych
mikrokontrolerów.

Złącza X1, X2 i G4 to dwurzędowe listwy z goldpinami. Są one przycinane do potrzebnej długości i
wlutowywane w płytkę. Wyprowadzenia portów mikrokontrolera to złącza „pod śrubkę”, tak zwane terminatory,
o rastrze 3,81mm. Zostały one zastosowane dla wygody połączeń i montażu. Można ich nie stosować a w ich
miejsce na przykład przylutować zwykłe przewody. Obniży to znacznie koszt wykonania układu.
Wszystkie zwory to pozostałości po demontażu starej płyty głównej komputera PC. Są one stosowane zarówno
do wyboru opcji czy przełączania sygnałów, jak i znajdują zastosowanie jako wyłącznik napięcia zasilania czy
„przycisk” reset.

Uruchomienie układu.

Poprawnie zmontowany układ nie powinien nastręczać żadnych trudności przy uruchomieniu. Najgroźniejsza dla
niego może być jedynie zamiana układu U1 z U2, toteż przed wlutowaniem czy włożeniem w podstawki
mikrokontrolerów i układu MAX232, należy podłączyć układ do zasilania i sprawdzić wartość napięcia
zasilającego układy. Powinno ono być równe 5V. Później napięcie zasilania należy odłączyć i zamontować U3
(MAX232) oraz zaprogramowany układ U4 (AT89C2051). Całość podłączamy typowym kablem do transmisji
szeregowej do komputera PC i włączamy zasilanie. Diody LED sygnalizujące stan programatora powinny
zaświecić się a następnie kolejno zgasnąć. Diody sygnalizujące obecność napięć wyjściowych powinny zostać
zaświecone.
Teraz należy przystąpić do próby komunikacji z aplikacją AVRProg. Tuż po jej uruchomieniu próbuje ona
zidentyfikować typ podłączonego programatora oraz listę programowanych układów. Wysłanie komendy „t”
powoduje zaświecenie się diody zielonej („OK”), co jest sygnałem poprawnej wymiany danych programatora z
aplikacją sterującą. Po krótkiej chwili od nawiązania połączenia, na ekranie PC powinno się ukazać okno robocze
programu AVRProg. Teraz wybierzmy przycisk „Advanced”. Na ekranie powinna ukazać się informacja jak na
zdjęciu 3.

Zdjęcie 3. Identyfikacja rodzaju programatora po wybraniu opcji „Advanced”.

Teraz zamykamy okienka AVRProg, wyłączamy zasilanie i umieszczamy układ testowy w podstawce. Na
początek wybrałem AT90S8515, jednak może to być dowolny z listy obsługiwanych mikrokontrolerów, w

J.Bogusz „Płytka uruchomieniowa dla ...”

-Strona 8/8-

background image

http://www.easy-soft.tsnet.pl/

obudowie DIL40 lub DIL20. Ustawiamy położenia zworek J3 i J4 w zależności od rodzaju użytego
mikrokontrolera. Włączamy zasilanie i uruchamiamy aplikację AVRProg. Ponowny wybór „Advanced” powinien
pokazać nam odczytaną sygnaturę układu (nie działa dla AT89S8252!). Pole „Calibration byte” pozostaje puste.
Po zamknięciu okienka „Advanced”, najlepszym testem jest próba zapisu pamięci FLASH i EEPROM. Pamiętajmy
o wyborze właściwego typu mikrokontrolera z listy programowanych układów.

Uwagi na temat eksploatacji.

Protoplasty opisywanego układu używam od około 3 lat. Ciągłe rozszerzanie listy dostępnych układów zmusiło
mnie do napisania własnego programu do obsługi programatora, który teraz, na podstawie algorytmów
opisywanych w kartach katalogowych mikrokontrolerów, w łatwy sposób mogę modyfikować.
Połączenia z układami zewnętrznymi wykonuje się przy pomocy przewodów. Płytka to w zasadzie jądro systemu
umożliwiające dołączenie pewnych funkcji, nie ma wbudowanych żadnych układów dodatkowych – pamięci,
zegara, podtrzymania bateryjnego itp. Wyprowadzenia wyświetlacza LCD są wspólne z liniami interfejsu SPI.
Czasami nie jest możliwe zaprogramowanie mikrokontrolera przy podłączonym LCD. Zależy to jednak od
konkretnego modelu wyświetlacza. Niektóre z nich, przy braku sygnału wyboru EN, ustawiają swoje szyny jako
wejściowe i nie powodują zakłóceń w pracy programatora. Inne wymuszają stan niski na przykład linii MOSI
(PB5) uniemożliwiając zapis programu. Tak więc, jeśli przy podłączonym wyświetlaczu LCD nie jest możliwa
poprawna weryfikacja zawartości pamięci, należy go na czas programowania odłączyć. Typ programowanego
układu przechowywany jest w pamięci RAM programatora. Czasami przy wyłączeniach płytki uruchomieniowej,
mimo iż każdorazowo sekwencja programowania zaczyna się od przesłania kodu wyboru programowanego
układu, może się zdarzyć, że przy pierwszej próbie zapisu lub odczytu danych otrzymamy komunikat „Cannot
enter programming mode”. Należy wówczas ponowić próbę operacji a jeśli nie da to rezultatu, zamknąć
aplikację AVRProg i uruchomić ją ponownie. Operacja taka przywraca wszystkie nastawy programatora,
ponownie ustawiając poprawny tryb jego pracy.

Jacek Bogusz
jacek.bogusz@easy-soft.tsnet.pl









Wykaz elementów:
C1, C2, C3, C4

22p/1206

C5

1000u/25V

C6,

C7

10u/25V

C8, C9, C10, C11, C12,
C13,C14

0,1u/1206

C15, C16, C17, C18

1u/50V

D1, D2, D3, D4, D5

1N4007

D6,

D7

LED

zielony

2,5mm

D8,

D9

LED

żółty 2,5mm

D10

LED

czerwony

2,5mm

G1, G2, G3

złącza terminatory o rastrze 5,08mm

JP1

podstawka

DIL-40

JP2

podstawka

DIL-20

PR1

10k

R1

1,5k/1206

R2,

R3

680R/1206

R4, R5, R6

10k/1206

SR1, SR2, SR3

sieci rezystorowe 8x47k ze wspólnym „+“

Q1*

8MHz

Q2

11,0592

MHz

U1

7805/TO-220

U2*

7812/TO-220

U3

MAX232/DIL16

lub

odpowiednik

U4

AT89C2051/DIL20

X4 .. X16

złącza terminatory o rastrze 3,81mm

X17,

X18 DSUBB-9/F


*elementy dobierane w zależności od potrzeb

J.Bogusz „Płytka uruchomieniowa dla ...”

-Strona 9/9-

background image

-Strona 10/10-

background image

-Strona 11/11-


















Rozmieszczenie elementów: góra płytki

Rozmieszczenie elementów: dół płytki



Wyszukiwarka

Podobne podstrony:
AVT2500 Płytka Testowa Dla Bascom
AVT2500 Płytka Testowa Dla Bascom
Bootloader dla mikrokontrolerów AVR
język C dla mikrokontrolerów AVR od podstaw do zaawansowanych aplikacji
Jezyk C dla mikrokontrolerow AVR Od podstaw do zaawansowanych aplikacji jcmikr
3500 Plytka testowa do BASCOM AVR
Bootloader dla mikrokontrolerów AVR
Jezyk C dla mikrokontrolerow AVR Od podstaw do zaawansowanych aplikacji
Jezyk C dla mikrokontrolerow AVR Od podstaw do zaawansowanych aplikacji jcmikr
Jezyk C dla mikrokontrolerow AVR Od podstaw do zaawansowanych aplikacji
Jezyk C dla mikrokontrolerow AVR Od podstaw do zaawansowanych aplikacji 2
Jezyk C dla mikrokontrolerow AVR Od podstaw do zaawansowanych aplikacji jcmikr

więcej podobnych podstron