Podstawy programowania mikrokontrolerów AVR8 w środowisku AVR Studio 4

background image


KATEDRA INFORMATYKI

Wydział EAIiE AGH







Laboratorium Techniki Mikroprocesorowej











Ćwiczenie 5

Podstawy programowania

mikrokontrolerów AVR8 w

środowisku AVR Studio 4

background image

2

1 Cel ćwiczenia

Celem ćwiczenia jest poznanie możliwości 8-bitowych mikrokontrolerów o

architekturze RISC oraz technikach programowania tych mikrokontrolerów w językach
wysokiego poziomu na przykładzie języka C.

Wymagane wiadomości


• Budowa, sposób programowania mikrokomputerów jednoukładowych rodziny AVR8.
• Magistrala I

2

C - budowa , zasada działania, implementacja programowa i obsługa z

poziomu języka C

• Budowa i zasada działania silników krokowych.

Wykorzystywany sprzęt


• Komputer klasy PC z zainstalowanym oprogramowaniem AVR Studio 4.0+, pakietem

WinAVR do przygotowania tekstu źródłowego, kodu wynikowego i programowania
procesora AT90S8515.

• Zestaw laboratoryjny AVR z interfejsem RS232C, wyświetlaczem LCD i zegarem czasu

rzeczywistego PCF8583 i silnikiem krokowym.

• Programator ISP /JTAG np. ATMEL JTAG/ICE mkII.

Literatura

1. ATMEL Corp. : AT90S8515 8-bit AVR® Microcontroller with 8K Bytes In-System

Programmable

Flash

. Rev .A 04.11.2001. Dostępny w internecine:

http://www.atmel.com/dyn/resources/prod_documents/doc0841.pdf

2. T.Augustyn, G.Niemiec, A.Szlachta : Zestaw uruchomieniowy AVR. Opracowanie

wewnętrzne KI AGH 2001.

3. AVR-LIBC Users manual : http://savannah.nongnu.org/download/avr-libc/avr-libc-

user-manual-1.7.1.pdf.bz2

4. Mielczarek W.: Szeregowe interfejsy cyfrowe. Wyd. Helion 1994
5. Philips Semiconductors : PCF8583 Data Sheet , 1997
6.

http://www.mcselec.com

– Informacje na temat pakietu BASCOM AVR.

7. Potocki L.: Silniki krokowe od podstaw cz. 1-6. Elektronika dla Wszystkich 7/2002

s.22-26 ,8/2002 s.26-29, 9/2002 s. 24-26, 10/2002 s. 21-22, 11/2002 s. 24-26,
12/2002 s.22-24. Dostępna online.

http://edw.com.pl/pdf/k01/79_22.pdf

,

http://edw.com.pl/pdf/k01/80_26.pdf

,

http://edw.com.pl/pdf/k01/81_24.pdf

,

http://edw.com.pl/pdf/k01/82_21.pdf

,

http://edw.com.pl/pdf/k01/83_24.pdf

,

http://edw.com.pl/pdf/k01/84_22.pdf

.

background image

3

2 Wykonanie ćwiczenia

Wykonanie ćwiczenia zostało podzielone na kilka zadań

2.1 Zadanie A – zapoznanie się ze środowiskiem AVR Studio 4.x

Środowisko AVR Studio jest komercyjnym bezpłatnym pakietem IDE służącym do

programowania mikrokontrolerów produkowanych przez firmę ATMEL. Pozwala
programować mikrokontrolery tej firmy na poziomie języka asemblerowego i
wspomagać

proces

tworzenia

aplikacji

dostarczając

wygodne

mechanizmy

uruchamiania przygotowywanego oprogramowania. W połączeniu z pakietem WinAVR
(zawierającym kompilator języka C oraz odpowiednie biblioteki) uzyskać można bardzo
wygodne

środowisko,

pozwalające

programować

mikrokontrolery

AVR

z wykorzystaniem języka C.


Pierwszym krokiem jest uruchomienie środowiska AVR Studio. Tworzenie

projektu w AVR Studio najłatwiej rozpocząć, wykorzystując odpowiedni kreator
uruchamiany poleceniem Project->Project Wizard ( Rys. 1)

Rys. 1 Uruchamianie kreatora nowego projektu

Uruchamia to kreatora, którego wygląd przedstawia Rys. 2 . Kreator pozwala na

wczytanie jednego z wcześniej utworzonych projektów lub utworzenie nowego
projektu. Ponieważ jest to pierwszy projekt w AVR Studio, należy utworzyć nowy
projekt korzystając z przycisku New Project.

Rys. 2 Kreator projektu AVR Studio (1)

background image

4

W kolejnym oknie kreatora (rys) należy w pierwszej kolejności wybrać typ

projektu. Jeśli powstający projekt ma zostać przygotowany z użyciem języka C należy
zaznaczyć pozycje AVR GCC (jeśli w systemie nie zainstalowano pakietu WinAVR do
wyboru będzie tylko projekt w asemblerze AVR)

Rys. 3 Kreator projektu AVR Studio (2)

Następnie w aktywnym już polu Project Name wpisujemy nazwę projektu (n.p.: test). Dla
porządku, należy zaznaczyć również opcje Create initial file oraz Create folder.
Spowoduje to, że użyta nazwa projektu staje się automatyczne nazwą głównego pliku
źródłowego powstającej aplikacji, a wszystkie pliki aplikacji zostaną umieszczone we
wspólnym folderze o takiej nazwie jak nazwa projektu.
Można oczywiście wskazać inną niż domyślna, lokalizację w której będą
przechowywane pliki projektu. Po ustaleniu wszystkich dostępnych w tym oknie
kreatora parametrów aplikacji, należy przyciskiem Next przejść do kolejnego okna
kreatora Rys. 4.

Rys. 4 Kreator projektu AVR Studio (3)


Dokonuje się tu wyboru platformy sprzętowej wykorzystywanej do debugowania
aplikacji oraz modelu mikrokontrolera dla którego przygotowywana jest aplikacja. Z
listy po lewej stronie należy wybrać AVR Simulator a na liście po prawej stronie

background image

5

odszukać model AT90S8515. Następnie można zakończyć pracę kreatora naciskając
przycisk Finish.

Rys. 5 Okno aplikacji AVR Studio 4

W oknie po lewej stronie znajduje się drzewo plików projektu, w środkowej części

powinien być otwarty edytor pliku lub plików zawierającego kod źródłowy
przygotowywanej aplikacji. W prawej części okna widoczny jest stan układów
peryferyjnych mikrokontrolera. Okno to wykorzystywane jest w trybie symulacji
działania programu lub w trybie śledzenia wykonania programu we wnętrzu
mikrokontrolera z wykorzystaniem interfejsu JTAG. Obecnie jego funkcja nie będzie
omawiana.

Przed przystąpieniem do przygotowania kodu źródłowego dobrze jest

zweryfikować/uzupełnić ustawienia środowiska AVR Studio do pracy z odpowiednim
modelem mikrokontrolera. Dokonuje się tego w opcjach projektu
Project->Configuration Options

(Rys. 6).

Rys. 6 Wywołanie okna właściwości projektu

background image

6

Wywołanie opcji projektu powoduje wyświetlenie okna jak na rys. Należy sprawdzić czy
zakładce General w w polu Device wybrany jest mikrokontroler at90s8515 oraz czy
w polu Frequency wpisana jest właściwa częstotliwość podłączonego rezonatora
kwarcowego (8000000Hz).

Rys. 7 Okno opcji projektu

Po zakończeniu konfigurowania opcji projektu należy jeszcze sprawić właściwą

konfigurację połączeń na płytce uruchomieniowej – linie portu A0-A7 powinny być
połączone przewodami z diodami LED nad wyświetlaczem. Następnie korzystając
z wbudowanego edytora umieścić następujący kod:

#ifndef F_CPU
#define F_CPU 8000000 // określenie częstotliwości pracy mikrokontrolera
#endif

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

int main(void)
{
char i;
DDRA = 0xFF; // konfiguracja portu A jako wyjść
// nieskonczona petla
do{
PORTA = 0b10101010;

// wpisanie 0xAA do portu A

for(i= 0; i < 25; i++)

// odczekanie 250 ms

_delay_ms(10);

//

PORTA = 0b01010101;

// wpisanie 0x55 do portu A

for(i= 0; i < 25; i++)

// odczekanie 250 ms

_delay_ms(10);

//

}while(1);
return 0;
}

Kompilację projektu przeprowadza się poleceniem Build->Build lub klawiszem F7.
Po bezbłędnej kompilacji można przejść do zaprogramowania mikrokontrolera.

Jeśli jest to pierwsza próba programowania, należy wcześniej przeprowadzić

konfigurację programatora/debugera. Dokonuje się tego przy pomocy polecenia

background image

7

Tools→Program AVR→Connect…

lub przyciskiem

umieszczonym na pasku

przycisków (Rys. 8).

Rys. 8 Przycisk wywołania obsługi programatora


Wybranie tego polecenia powoduje pojawienie się okna wyboru przedstawionego na
Rys. 9.

Rys. 9 Okno konfiguracji programatora


Z listy programatorów znajdujących się w oknie po lewej stronie należy wybrać
JTAGICE mkII.

Port komunikacyjny pozostawiamy na Auto, lub jeśli było wybrane inne

ustawienie wybieramy Auto. Następnie wciskamy przycisk Connect… .
Jeśli

połączenia

między

komputerem,

programatorem

oraz

zestawem

uruchomieniowym funkcjonują poprawnie i konfiguracja przebiegła prawidłowo na
ekranie pojawi się następujące okno (

Rys. 10

):

Rys. 10 Okno programatora w trybie JTAG

background image

8

Interfejs JTAGICE mkII daje możliwość programowania mikrokontrolerów AVR bez

demontowania ich z aplikacji w której mają pracować (funkcja In-System Programming)
Zadanie to może być realizowane w trybie JTAG lub w trybie ISP. Interfejs JTAG może
być dodatkowo wykorzystywany do śledzenia i krokowania wykonania programu we
wnętrzu mikrokontrolera. Wykorzystywany mikrokontroler AT90S8515 może być
programowany z użyciem interfejsu JTAGICE mkII wyłącznie w trybie ISP. Domyślnym
trybem pracy programatora JTAGICE mkII jest tryb JTAG. Koniecznie może się zatem
okazać odpowiednie jego skonfigurowania, aby pracował w trybie ISP. Należy w tym
celu przejść do zakładki Main (Rys. 11) i sprawdzić lub w miarę potrzeby ustawić
prawidłową konfigurację widoczną na tym rysunku.

Rys. 11 Konfiguracja programatora JTAG/ICE mkII do pracy w trybie ISP

W celu sprawdzenia poprawności działania interfejsu ISP można dokonać odczytu

sygnatury układu. Wciskamy w tym celu przycisk Read Signature (Rys. 12). Po
poprawnym odczytaniu sygnatury będzie ona widoczna w polu zawierającym wcześniej
napis Signature not read. Poprawna wartość sygnatury dla mikrokontrolera AT90S8515
wynosi 0x1E 0x93 0x01.

Rys. 12 Odczyt sygnatury mikrokontolera przez ISP

background image

9

Najważniejsze opcje i polecenia związane z programowaniem wewnętrznej pamięci

mikrokontrolera znajdują się na zakładce Program (Rys. 13). Przycisk Erase Device
powoduje wykasowanie wewnętrznej pamięci FLASH mikrokontrolera (co jest
równoznaczne z usunięciem zapisanego w niej programu).

Rys. 13 Programowanie pamięci flash mikrokontrolera

Do zaprogramowania tej pamięci wykorzystywać będziemy sekcję Flash. Powinna w

niej być zaznaczona opcja Input HEX File (jak na Rys. 13). W polu obok należy wskazać
plik, którym ma zostać zaprogramowana pamięć FLASH. Zwykle taki plik wynikowy
posiada nazwę taką, jak nazwa projektu oraz rozszerzenie *.hex . Kompilator tworzy ten
plik w podkatalogu ./default znajdującym się w katalogu z plikami projektu. Po
wciśnięciu przycisku Program, pamięć FLASH mikrokontrolera jest zapisywana
zawartością pliku .hex. Po zakończeniu zapisu następuje automatyczne uruchomienie
wczytanego programu, co w przypadku projektu wykonanego w tej części zadania
powinno być widoczne w postaci zapalających się i gasnących diod świecących D0-D7.

Po prawidłowym wykonaniu wszystkich etapów związanych z uruchomieniem

przykładowego projektu o nazwie LED, dokonać modyfikacji w programie tak, aby
uzyskać efekt wędrującego światła (zapalamy diodę D0, w kolejnym kroku zapalamy
diodę D1 i gasimy D0, w kolejnym zapalamy D2 i gasimy D1 itd. gdy zapalimy diodę D7 w
kolejnym kroku zapalamy D6 i gasimy D7 itd. aż dojdziemy do diody D0.

2.2 Zadanie B – Unipolarny silnik krokowy

Unipolarny silnik krokowy posiada wyprowadzone na zewnątrz 5 zacisków. Jeden z

nich jest zaciskiem wspólnym dla wszystkich uzwojeń, podłączanym zwyczajowo do
dodatniego bieguna zasilania. Pozostałe 4 zaciski to wyprowadzenia odpowiednich
uzwojeń. Silnik krokowy jest podłączony do 4 najstarszych bitów portu C
mikrokontrolera przez wzmacniacze prądowe układu ULN2803. Uzwojenie A jest

background image

10

podłączone do portu PC4, Uzwojenie B do portu PC5, uzwojenie C do portu PC6 i
uzwojenie D do portu PC7. Przepływ prądu przez wybrane uzwojenie silnika uzyskuje
się podając wartość “0” na wyprowadzenie mikrokontrolera, do którego jest ono
podłączone.


Uwaga ! – Ze względu na własności mechaniczne, zbyt szybkie załączanie

i wyłączanie przepływu prądu przez uzwojenie silnika nie będzie powodować
ruchu

wirnika.

W

początkowej

fazie

uruchamiania

programu

należy

zagwarantować przepływ prądu przez uzwojenie przez czas około 200ms.


Na początku programu należy wyłączyć przepływ prądu przez uzwojenia silnika

poprzez ustawienie odpowiednich wyjść w stan “1”.

2.2.1

Sterowanie liniami we/wy mikrokontrolera

Mikrokontroler AT90S8515 posiada 4 ośmiobitowe porty wejścia-wyjścia oznaczone

odpowiednio A,B,C,D. Kontrolowania stanu portów we/wy mikrokontrolera służą 3
rejestry specjalne związane odpowiednio z każdym z portów: DDRx, PORTx i PINx (za x
należy podstawić właściwą nazwę portu). Szersze informacje na ten temat można
znaleźć w [1].

Rejestr DDRx służy do określenia kierunku linii portu x . Wpisanie wartości 1 na n-tej

pozycji bitowej konfiguruje n-tą linię portu x jako wyjście, natomiast wpisanie zera
konfiguruje tą linie jako wejście (np.: zapisanie wartości 0b00001111 do rejestru DDRC
ustawia 4 najstarsze bity portu jako wejścia i 4 najmłodsze jako wyjścia) . Po sygnale
zerowania wszystkie linie mikrokontrolera są ustawiane jako wejścia.

Rejestr PORTx pełni dwie funkcje:

- jeśli linia portu x jest skonfigurowana jako wyjście – zapisaną na tej pozycji

wartością jest sterowane odpowiednie wyprowadzenie mikrokontrolera

- jeśli dana linia portu x jest skonfigurowana jako wejście, wpisanie jedynki

załącza wewnętrzny rezystor podciągający.


Rejestr PINx służy wyłącznie do odczytu stanu linii portu x mikrokontrolera.

Silnik krokowy może być sterowany na kilka różnych sposobów. Szczegółowe

informacje można znaleźć w [7].

2.2.2

Sterowanie jednofazowe

Najprostszą metodą sterowania silnika krokowego jest sterowanie jednofazowe. Przy

takim sterowaniu w danej chwili czasu prąd przepływa tylko przez jedno uzwojenie
silnika. Przebieg napięć sterujących dla sterowania jednofazowego przedstawia rysunek
poniżej.

A, B, C, D oznaczają kolejne uzwojenia silnika.

A

B

C

D

background image

11


Za pomocą takiego sterowania można uzyskać obroty w prawą i lewą stronę. (w trakcie
zajęć należy sporządzić odpowiednie programy).

Wyznaczyć ilość kroków, którą należ wykonać, aby silnik wykonał obrót wirnika o
360°.

Do wyznaczania ilości kroków przydatne może się okazać wykorzystanie wyświetlacza
LCD. Zostało to objaśnione w rozdziale 2.3.

Zauważyć warto także wpływ zależności szybkości zmian napięcia na uzwojeniach
silnika od prędkości obrotowej silnika i istnienie maksymalnej szybkości zmian, powyżej
której silnik przestaje działać poprawnie.
Należy zaobserwować to zjawisko oraz wyznaczyć krytyczne wartości opóźnień, dla
których praca silnik zaczyna być niestabilna. Wartości winny zostać wyznaczone dla
obrotów silnika w lewą i w prawą stronę ze względu na możliwe różne wartości tego
parametru.

2.2.3

Sterowanie dwufazowe

Drugą metodą sterowania silnika krokowego jest sterowania dwufazowe. Metoda ta jest
bardzo podobna do sterowania jednofazowego. W celu wysterowania silnika w
przedstawiony sposób należy zapewnić jednoczesny przepływ prądu przez dwa
sąsiadujące ze sobą uzwojenia, co może zostać zilustrowane następującą zależnością:

AB->BC->CD->DA.

Podobnie jak w przypadku sterowania jednofazowego należy przygotować odpowiedni
program sterujący pracą silnika w opisany sposób. Sprawdzić czy uległy zmianie osiągi
silnika zaobserwowane dla sterowania jednofazowego (kąt obrotu na 1 krok, krytyczne
wartości opóźnień).

Można spróbować ocenić wpływ zmiany sposobu sterowania na siłę, z jaką obraca się
wirnik silnika.

2.2.4

Sterowanie półkrokowe

Trzecią metodą sterowania jest sterowania półkrokowe.

Stanowi ono nałożenie na siebie sterowania jedno- i dwufazowego

W takim sterowaniu prąd płynie chwilami przez 2 uzwojenia silnika zgodnie z
zależnością:

A->AB->B->BC->C->CD->D->DA->A.

Przygotować program, który będzie sterował silnikiem w prezentowany sposób i
umożliwiał wykonywanie obrotów w lewo i w prawo. Podobnie jak w poprzednich
sposobach sterowania określić parametry pracy silnika: kąt obrotu wirnika na jeden
krok, krytyczne czasy opóźnień, dla których silnik poprawnie pracuje.

background image

12

2.3 Zadanie C - Znakowy wyświetlacz LCD oparty o kontroler zgodny z

HD4478

Znakowe wyświetlacze LCD oparte o kontroler zgodny z HD44780 są bardzo

popularnym urządzeniem wyjściowym stosowanym w systemach opartych o
mikrokontrolery jednoukładowe Dostępny jest bardzo szeroki asortyment wyświetlaczy
poczynając od organizacji 1x8 znaków a kończąc na organizacji 2x40 znaków. Spotyka
się również wyświetlacze o organizacji 4x40 znaków, ale są one zbudowane w oparciu o
dwa kontrolery i z punktu widzenia mikrokontrolera zachowują się jak dwa
wyświetlaczy o organizacji 2x40 znaków.
Komunikacja z wyświetlaczem odbywa się zwykle za pośrednictwem 4-bitowej
dwukierunkowej magistrali danych (możliwa jest praca z magistralą ośmiobitową) oraz
trzech linii sterujących: RS, RW i E. Ponadto jeśli z rezygnujemy z funkcjonalności
odczytywania danych z wyświetlacza, wystarczy podłączyć linie RW na stałe do masy, co
ogranicza interfejs do 6 linii mikrokontrolera.
Wykorzystany w ćwiczeniu wyświetlacz posiada organizację 2x20 znaków i pracuje
w tej ostatniej konfiguracji.

Ze względu na dużą popularność tego typu wyświetlaczy, dostępnych jest wiele

bibliotek programistycznych, przeznaczonych na różne platformy sprzętowe, ,
pozwalających w prosty sposób wykorzystać wyświetlacz tego typu bez zgłębiania się w
szczegóły techniczne protokołu komunikacyjnego. Biblioteka obsługująca wyświetlacz
wraz z przykładem jej wykorzystania znajduje się w materiałach pomocniczych do
ćwiczenia. Biblioteka dostępna jest w postaci pliku źródłowego HD44780.c oraz pliku
nagłówkowego HD44780.h. Obsługa wyświetlacza będzie realizowana za pośrednictwem
funkcji dostarczanych przez tą bibliotekę.

Wyświetlacz został podłączony do mikrokontrolera w następujący sposób:

- linie danych wyświetlacza DB4-DB7 do linii PD4-PD7,
- linia E do portu PB2 mikrokontrolera
- linia RS do portu PB0 mikrokontrolera


Aby można było korzystać z dostarczonej biblioteki należy w pliku nagłówkowym
HD44780.H

umieścić informacje o sposobie jego połączenia z mikrokontrolerem oraz

dołączyć do własnego projektu odpowiedni plik nagłówkowy. Na potrzeby ćwiczenia
odpowiednie informacje zostały tam już umieszczone.

Przed

rozpoczęciem

wyświetlania

znaków,

wyświetlacz

powinien

zostać

zainicjalizowany. Do tego celu służy funkcja LCD_Initialize ().
Po zainicjalizowani można od razu przystąpić do wyświetlania znaków. Służy do tego
funkcja LCD_WriteText . Poza podstawowymi funkcjami wyświetlania tekstu, możliwe
jest wyświetlanie znaków definiowanych przez użytkownika. Więcej informacji na ten
temat można znaleźć w dodatku.

2.4 Zadanie D - Zegar czasu rzeczywistego oparty o PCF8583

W trakcie realizacji zadania należy napisać i uruchomić program realizujący funkcje

zegara czasu rzeczywistego. Odmierzania czasu będzie realizowane przez
specjalizowany układ PCF8583 [5], połączony z mikrokontrolerem za pomocą magistrali

background image

13

I

2

C. Przed rozpoczęciem realizacji tej części ćwiczenia, wskazane jest zapoznać się z

dokumentacją techniczną układu PCF8583 [5].

Obsługa magistrali I

2

C będzie realizowana na drodze czysto programowej gdyż układ

AT90S8515 nie posiada sprzętowego interfejsu I

2

C. W materiałach do ćwiczenia

dostępna jest odpowiednia biblioteka przeznaczona do obsługi komunikacji przez tą
magistralę. W materiałach pomocniczych zamieszczono również przykładowy kod
korzystający z tej biblioteki.
Linie magistrali I

2

C zostały podłączone następująco:

SCL do portu PC0 ,
SDA do portu PC1.


Zadaniem mikrokontrolera będzie zapis do zegara odpowiednich ustawień
początkowych, a następnie wyświetlanie na wyświetlaczu LCD lub LED aktualnego czasu
odczytanego z zegara. Dodatkowo można wbudować w program funkcje alarmu
sygnalizowanego np. za pomocą głośnika lub mrugającej diody LED.

Układ PCF8583 jest widoczny pod adresem 80D (50H) magistrali I

2

C. Ponieważ

najmłodszy bit adresu I

2

C określa typ operacji (odczyt/zapis) wiec układ PCF8583 jest

“widoczny” pod adresem 160D dla operacji zapisu i 161D dla operacji odczytu.

Do obsługi magistrali I

2

C wykorzystać można gotową bibliotekę programowej obsługi

magistrali I2C dostępną w materiałach do ćwiczenia.

Układ PCF8583 posiada możliwość generowania przerwania (niski poziom na
wyprowadzeniu nr 7 układu PCF8583), jednak w zestawie nie ma możliwości
wykonania połączenia tego wyprowadzenia do mikrokontrolera lub innego elementu
zestawu. Obsługa alarmu musi być realizowana na drodze programowego sprawdzania
stanu alarmu w odpowiednim rejestrze zegara. Sygnalizowanie stanu alarmu może być
wykonane za pomocą:

- komunikatu pojawiającego się na wyświetlaczu
- sygnalizowania zapaleniem lub miganiem diody świecącej
- sygnałem akustycznym brzęczyka (nie zalecane)

background image

14

Dodatek A - Definiowanie własnych znaków w wyświetlaczu lcd z

kontrolerem zgodnym z HD44780.

Wyświetlacz LCD (a właściwie kontroler HD44780) dysponuje możliwością
wyświetlania do ośmiu znaków zdefiniowanych przez użytkownika. Znaki te posiadają
kody o wartościach od 00H do 07H.
Dane opisujące kształty znaków są przechowywane w pamięci wyświetlacza, która
nazywa się CGRAM. Przed użyciem wzorce znaków muszą być wysłane do wyświetlacza.
Zwykle wykonywane jest to zaraz po jego inicjalizacji (wzorce znaków są tracone
bezpowrotnie po wyłączeniu zasilania lub inicjalizacji wyświetlacza).
Każdy zdefiniowany znak wymaga 8 bajtów danych. Ósmym bajtem jest zazwyczaj $00,
ponieważ jest to miejsce przeznaczone dla linii kursora. Standardowa czcionka
wyświetlacza ma 5 pikseli szerokości i 7 pikseli wysokości. Jeden rząd pikseli na samym
dole jest zarezerwowany na podkreślający znak kursora.
Kształt znaku jest taki, jaki jest układ zer i jedynek w bajcie danych. Jedynka zaświeca
piksel, zero pozostawia piksel zgaszonym. Oto przykład znaku zdefiniowanego przez
użytkownika:

Poniżej zamieszczono przykładowy program prezentujący w jaki sposób definiuje się
i wykorzystuje własne znaki.

#ifndef F_CPU
#define F_CPU 8000000
#endif

#include <avr/io.h>
#include <util/delay.h>
#include "HD44780.h"
uint8_t znak[] = {0, 10, 10, 0, 17, 14, 6, 0}; //wlasny znak - buzka

int main(void)
{
char temp, i;
LCD_Initialize();
LCD_ProgrammChar(0, znak); // przeslanie ksztaltu znaku

// o kodzie 0 do wyswietlacza

LCD_GoTo(0,0);
LCD_WriteText("- Wlasne znaki -");

// wyswietlenie zdefiniowanego znaku
LCD_GoTo(0,1);
LCD_WriteData(0);

while(1){}
return 0;
}

W przykładzie powyżej kształt znaku jest definiowany za pomocą tablicy ośmiobitowych
liczb (typu uint8_t) o nazwie znak. Za przesłanie kształtu znaku do pamięci CGRAM
wyświetlacza odpowiada funkcja LCD_ProgrammChar (unsigned char nr_znaku , unsigned
char znak[])

.

background image

15

Dodatek B - Zestaw uruchomieniowy AVR


Wszystkie opisywane tu moduły (oprócz zaprojektowanego modułu emulatora

sprzętowego AT89) znajdują się na jednej dużej płycie.

mikroprocesor
40-nóżkowy

mikroprocesor
20-nóżkowy

transmisja
szeregowa

wzmacniacz
kodu RC5

wyświetlacze
siedmiosegmentowe

programator

przetwornik
piezoelektryczny

wyświetlacz
LCD

diody

zasilanie

mikrozłącza

szyna I

2

C

moduł
resetu

Rys. 14. Rysunek poglądowy zestawu z zaznaczonymi elementami

2.5

Moduł programatora ISP dla AVR.


Programowanie mikroprocesorów AVR odbywać się może wykorzystując magistralę SPI
(3 linie). W takim trybie programowania dane są przesyłane do procesora szeregowo.
Procesory można programować zarówno w podstawkach wyposażonych w niezbędny
rezonator kwarcowy, jak i w systemie, za pomocą specjalnego złącza ISP, który to
sposób został wykorzystany w naszym zestawie. Programator jest umieszczony na
jednej płycie z resztą układu i jest podłączany z komputerem przez złącze Centronics.
Posiada diodę do wskazywania transmisji sygnałów. Przy programatorze znajdują się
zworki do obsługi złącza ISP. Zworki znajdujące się bliżej programatora służą do
całkowitego odłączenia złącza ISP lub podłączenia zewnętrznego (np. innego typu)
programatora ISP. Drugi rząd zworek służy do przełączenia podłączenia złącza ISP
między mikroprocesorem 20- i 40-nóżkowym.

Istnieje też drugi tryb programowania, Parallel Mode, w którym dane przesyłane

są równolegle przy wykorzystaniu większej ilości przewodów – wyklucza to jednak
używanie ISP, gdyż układ trzeba fizycznie przenieść do programatora. Główną zaletą
programowania ISP jest prostota wykonania programatora. Jest jednak i druga strona
medalu – czym prostszy układ programujący tym większa możliwość wystąpienia
przekłamań podczas programowania.

background image

16


2.6

Moduł procesorowy


Należy zauważyć, że procesory AVR mogą działać przy częstotliwości 0-8 MHz, a

AT89xxx z wartościami 0-24 MHz. W celu dowolnej zmiany tych wartości na płytce
znajdują się po trzy kwarce dla mikroprocesora 20- i 40-nóżkowego, wybierane
zworkami: 4, 8 i 11.059 MHz. Należy zauważyć, że niektóre aspekty programowania
mikroprocesora są dedykowane do ściśle określonego kwarcu i nie można go zmienić
np. tam, gdzie mają znaczenie wartości zliczane przez wewnętrzny licznik / czasomierz
mikroprocesora – ma to miejsce przy transmisji szeregowej

1

, obsłudze szyny 1WIRE,

częstotliwościomierzach itp. Zmiana kwarcu raczej nie wpływa na wyświetlacz LCD,
szynę I

2

C (synchronizacja zegara z układem mastera – mikroprocesorem) i obsługę

innych urządzeń poza zmianą szybkości działania mikroprocesora.

Uwaga: Należy pamiętać, aby do mikroprocesora AVR nie podłączać kwarcu
11.059 MHz, którego on nie obsługuje i może skończyć się przegrzaniem, a nawet
spaleniem układu.

W przypadku wykorzystywania określonego typu mikroprocesorów (AT89 lub AVR)

należy odpowiednio ustawić zworkę poziomu sygnału RESET. Należy zauważyć, że
działa tylko wybrany RESET (albo AVR albo ’51). Zastosowany układ RESETU dla AVR
automatycznie resetuje mikroprocesory po włączeniu zasilania. Zauważono także
resetowanie procesora AVR po zakończeniu działania zapisanego w nim programu
(program wykonuje się w kółko).

Należy zauważyć, że dzięki temu, że mikroprocesory 20- i 40-nóżkowy mają

odrębne wyprowadzenia portów, istnieje możliwość działania dwóch procesorów. Aby
umożliwić pracę mikroprocesora należy podłączyć mu zasilanie (Vcc). Nie zostało to
wykonane na stałe, gdyż umożliwia to wybór uruchamianego układu. Dzięki
zastosowanemu układowi resetu, jednocześnie mogą pracować mikroprocesory AT89 i
AT90, ale wybór poziomu resetu musi być odłączony.

1

niektórych szybkości transmisji nie da się otrzymać przy każdym kwarcu

background image

17

2.7

Moduł urządzeń


Płyta prototypowa została wyposażona w następujące urządzenia peryferyjne:
• wyświetlacz LCD (o organizacji 2x20 znaków)
• 4 wyświetlacze siedmiosegmentowe LED, wspólna anoda (Rys. 15)
• złącze szeregowe RS232 (Rys. 16)
• wzmacniacz sygnału w kodzie RC5 – obsługa standardowego pilota (Rys. 17)
• 8 mikroprzełączników membranowych (Rys. 17)
• 8 diód świecących (Rys. 15)
• przetwornik piezoelektryczny


Rys. 15. Diody i wyświetlacze siedmiosegmentowe

Rys. 16. Podłączenie układu MAX232 – transmisja szeregowa

background image

18

Rys. 17. Podłączenie wzmacniacza kodu RC5 i mikroprzełączników

2.8

Moduł układów współpracujących z szyną I

2

C

Układy pracujące w magistrali I

2

C :

• pamięć szeregowa
• zegar z kalendarzem + dodatkowy kwarc (zegarkowy) + bateria podtrzymująca
• 2 dwukierunkowe konwertery I

2

C na 8-bitową szynę danych

• 2 wzmacniacze prądowe 5V i 12V (wykorzystywane poprzez expandery z

poprzedniego podpunktu lub bezpośrednio) – np.. sterowanie silnikami krokowymi,
przekaźnikami

przetwornik AD/DA

background image

19

Rys. 18. Moduł układów współpracujących z szyną I

2

C

background image

20

2.9

Moduł zasilania


Układ zasilania zestawu uruchomieniowego (Rys. 19) składa się z mostka

prostowniczego i scalonego stabilizatora napięcia 7805, wraz z niezbędnymi do jego
pracy kondensatorami wygładzającymi impulsy. Doprowadzone zasilanie powinno być o
3V wyższe od nominalnego, niekoniecznie stabilizowane. Pobór prądu jest poniżej 1A (w
zależności od ilości podłączonych urządzeń), więc nie dochodzi do przegrzania
stabilizatora.

Istnieje możliwość obejścia zastosowanego zasilacza (poprzez przestawienie zworki

JP2 w pozycję zasilania zewnętrznego). Możliwe jest wówczas podłączenie napięcia
stałego 5V.

Rys. 19. Moduł zasilania




Wyszukiwarka

Podobne podstrony:
Podstawy Programowania Mikrokontrolera 8051
Galka Galka Podstawy Programowania Mikrokontrolera 8051
Podstawy programowania mikrokontrolera 8051
Podstawy programowania mikrokontrolera 8051(300dpi)
Podstawy programowania mikrokontrolera 8051
Podstawy programowania mikrokontrolera 8051(300dpi)
Galka Galka Podstawy Programowania Mikrokontrolera 8051
Podstawy Programowania Mikrokontrolera 8051
Podstawy programowania mikrokontrolera 8051
AVR i ARM7 Programowanie mikrokontrolerow dla kazdego avrar7
Marcin Wiazania Programowanie mikrokontrolerow AVR w jezyku Bascom
Programowanie mikrokontrolerów AVR Narządzia rozwojowe
Nowa podstawa programowa WF (1)
evboard, Płytka testowa dla mikrokontrolerów AT89S oraz AVR
1 Podstawy programowania dialogowego

więcej podobnych podstron