Instrukcja do ćwiczenia 5

Transkrypt

Instrukcja do ćwiczenia 5
Mikroprocesory i mikrosterowniki
 Wydział Elektroniki Mikrosystemów i Fotoniki
Politechniki Wrocławskiej 2014
Ćwiczenie nr 5
Program ćwiczenia:
 Komunikacja z pamięcią SRAM,
 Komunikacja z pamięcią EEPROM,
 Obsługa wyświetlacza LCD ze sterownikiem HD44780.
Zagadnienia do przygotowania:
 Specyfika przestrzeni pamięci danych układu ATmega8535
 Obsługa pamięci SRAM i EEPROM układu ATmega8535
 Rejestry specjalne – wpisywanie wartości
 Specyfika układu HD44780
 Wywołania podprogramów
 Inicjalizacja stosu
 System przerwań
 Programy obsługi przerwań
1
1
Mikroprocesory i mikrosterowniki
 Wydział Elektroniki Mikrosystemów i Fotoniki
Politechniki Wrocławskiej 2014
1. Wprowadzenie – podstawowe informacje o pamięciach SRAM i EEPROM
w ATmega8535
Z punktu widzenia możliwości wykonywania operacji zapis/odczyt rozróżnia się dwa
podstawowe typy pamięci półprzewodnikowej: RAM i ROM. Pamięć RAM (ang. Random
Access Memory) jest pamięcią o dostępie swobodnym, przeznaczoną do wielokrotnego zapisu
i odczytu. Jest pamięcią ulotną, a więc wyłączenie zasilania skutkuje utratą zapisanych w niej
danych. Pamięć ROM (ang. Read Only Memory) jest pamięcią tylko do odczytu. Jest
pamięcią trwałą (nieulotną), co oznacza, że po wyłączeniu zasilania, dane w niej zapisane nie
są
kasowane.
Oba
wymienione
wyżej
typy
pamięci
zostały
zaimplementowane
w mikrokontrolerach AVR rodziny ATmega.
2. Pamięć SRAM
W mikrokontrolerach AVR rodziny ATmega zaimplementowana została pamięć SRAM
(ang. Static Random Access Memory), czyli statyczna pamięć RAM. Pamięć tego typu nie
wymaga okresowego odświeżania, w przeciwieństwie do pamięci dynamicznej DRAM, oraz
charakteryzuje się dużą szybkością działania. W układach AVR pamięć SRAM została
włączona we wspólną przestrzeń adresową pamięci danych, razem z rejestrami roboczymi
ogólnego przeznaczenia (ang. general purpose working registers) oraz rejestrami
funkcyjnymi w przestrzeni wejścia-wyjścia (ang. I/O registers). Zostało to zilustrowane na
rys. 1. W pamięci SRAM układu ATmega mogą być przechowywane dane (np. zmienne
programowe) oraz stos mikrokontrolera, na który odkładane są między innymi adresy
powrotu z podprogramów. Aby nie doszło do nadpisania informacji zawartych na stosie przez
dane (i odwrotnie), stos powinien zajmować inną przestrzeń adresową w pamięci SRAM niż
zapisane do niej dane. W praktyce najczęściej podstawę stosu umieszcza się na końcu pamięci
SRAM (adres $025F), a zapis danych zaczyna się od najniższego adresu tej pamięci (adres
$0060).
2
2
Mikroprocesory i mikrosterowniki
 Wydział Elektroniki Mikrosystemów i Fotoniki
Politechniki Wrocławskiej 2014
pamięć danych
adres
$0000
rejestry robocze
R0-R31
...
$001F
$0020
rejestry funkcyjne
(przestrzeń
wejścia-wyjścia)
...
$005F
$0060
SRAM
...
$025F
Rys.1. Schemat pamięci danych w mikrokontrolerze AVR rodziny ATmega
Wykorzystanie pamięci SRAM do przechowywania danych może być konieczne, gdy
liczba rejestrów roboczych jest niewystarczająca. Dostęp do pamięci SRAM z poziomu
języka asembler jest możliwy m. in. za pomocą instrukcji LDS i STS, które służą
odpowiednio do odczytu i zapisu danych w komórce pamięci:
LDS R16, $0103 // odczyt zawartości komórki pamięci SRAM o
// adresie $0103 do rejestru R16
LDI R16, $23 // zapis wartości $23 w komórce pamięci SRAM o
STS $0103, R16 // adresie $0103
Zamiast posługiwać się adresami konkretnych komórek pamięci, można zastosować
zmienne programowe. Zmienne deklaruje się za pomocą dyrektywy BYTE. Przed deklaracją
zmiennych konieczne jest wskazanie, że kolejne linijki będą odnosić się do pamięci danych,
co wykonuje się przy użyciu dyrektywy DSEG. Za pomocą dyrektywy ORG ustala się adres
komórki pamięci SRAM, w której ma być umieszczona pierwsza zadeklarowana zmienna.
Dla każdej kolejnej zmiennej następuje inkrementacja adresu komórki. Deklarację zmiennych
należy zakończyć dyrektywą CSEG, która powoduje powrót do operacji w pamięci programu.
Fragment kodu zawierającego deklarację zmiennych przedstawiono poniżej.
3
3
Mikroprocesory i mikrosterowniki
 Wydział Elektroniki Mikrosystemów i Fotoniki
Politechniki Wrocławskiej 2014
.DSEG // wskazanie, że dalsze operacje dotyczą pamięci danych
.ORG $0060 // ustawienie adresu na początku pamięci SRAM
z1: .BYTE 1 // deklaracja zmiennej z1 o rozmiarze 1 bajtu (pod
// adresem $0060)
z2: .BYTE 1 // deklaracja zmiennej z2 o rozmiarze 1 bajtu pod
// adresem $0061)
.CSEG // wskazanie, że dalsze operacje dotyczą pamięci
// programu
.ORG $0000 RJMP rst // ustawienie adresu na początku pamięci
// programu i skok na początek programu
rst:
...
...
3. Pamięć EEPROM
Choć z definicji pamięć ROM służy tylko do odczytu danych, istnieje specjalny rodzaj
tej pamięci, EEPROM (ang. Electrically Erasable Programmable Read Only Memory), którą
można wielokrotnie elektrycznie programować i elektrycznie kasować (ale z ograniczoną
liczbą cykli zapis/kasowanie). Wykorzystując ten rodzaj pamięci w mikrokontrolerze, można
przechowywać dane, które są dostępne nawet po wyłączeniu zasilania. Mikrokontroler AVR
ATmega8535 dysponuje pamięcią EEPROM o pojemności 512 B, w której każdą komórkę
pamięci można zapisywać co najmniej 100 000 razy.
Dostęp do pamięci EEPROM w układzie AVR ATmega jest możliwy z poziomu
programu poprzez zapis i odczyt dedykowanych rejestrów funkcyjnych:
4
4
Mikroprocesory i mikrosterowniki
 Wydział Elektroniki Mikrosystemów i Fotoniki
Politechniki Wrocławskiej 2014

EEARH i EEARL – rejestry adresowe (ang. EEPROM Address Registers). Bity od 8
do 0 określają adres komórki w pamięci EEPROM, na której ma zostać
przeprowadzona operacja zapisu/odczytu:

15
14
13
12
11
10
9
8
bit
-
-
-
-
-
-
-
EEAR8
EEARH
EEAR7
EEAR6
EEAR5
EEAR4
EEAR3
EEAR2
EEAR1
EEAR0
EEARL
7
6
5
4
3
2
1
0
bit
EEDR – buforowy rejestr danych (ang. EEPROM Data Register). Zawiera dane,
które mają być zapisane, lub które zostały odczytane z komórki pamięci EEPROM
o adresie określonym przez rejestry EEARH i EEARL:
7
6
5
4
3
2
1
MSB

0
bit
LSB
EEDR
EECR – rejestr sterujący (ang. EEPROM Control Register):
7
6
5
4
3
2
1
0
bit
-
-
-
-
EERIE
EEMWE
EEWE
EERE
EECR
Uproszczony opis znaczenia bitów rejestru EECR (dla poprawnej realizacji ćwiczenia
konieczne jest zapoznanie się z pełnym opisem w nocie katalogowej ATmega8535):
EERIE
– ustawienie ‘1’ powoduje włączenie zezwolenia na przerwanie EEPROM
Ready Interrupt,
EEMWE – ustawienie ‘1’ włącza zezwolenie na zapis do pamięci EEPROM, wpisana
wartość ‘1’ jest sprzętowo kasowana po 4 cyklach zegara,
EEWE
– ustawienie ‘1’ powoduje rozpoczęcie sprzętowej procedury zapisu danych
z rejestru EEDR w komórce pamięci EEPROM (pod warunkiem, że od
ustawienia bitu EEMWE na ‘1’ nie upłynęło więcej niż 4 cykle zegarowe).
Sprzętowa procedura zapisu trwa 8448 cykli wewnętrznego oscylatora RC
1 MHz, niezależnie od aktualnego źródła taktowania mikrokontrolera,
EERE
– ustawienie ‘1’ powoduje odczytanie danych z komórki pamięci EEPROM
o adresie wskazywanym rejestrem EEARH/EEARL do rejestru EEDR.
5
5
Mikroprocesory i mikrosterowniki
 Wydział Elektroniki Mikrosystemów i Fotoniki
Politechniki Wrocławskiej 2014
Przed przystąpieniem do zapisu lub odczytu danych w pamięci EEPROM należy
sprawdzić czy aktualnie nie trwa operacja zapisu. Można to zrobić przez sprawdzenie
wartości bitu EEWE, który jest automatycznie zerowany po zakończeniu zapisu.
Po załadowaniu bitu EEMWE wysoką wartością logiczną, jest on automatycznie
(sprzętowo) zerowany po 4 cyklach zegarowych. Dlatego też aby dane z rejestru EEDR
zapisać do pamięci EEPROM, należy ustawić znacznik EEMWE na ‘1’ nie wcześniej niż 4
cykle zegarowe przed ustawieniem bitu EEWE na ‘1’. Jak wspomniano wyżej sprzetowa
procedura zapisu jednego bajta danych w pamięci EEPROM trwa kilka ms. Procedura ta
realizowana jest niezależnie od pracy CPU, które już po 2 cyklach zegarowych (od momentu
ustawienia bitu EEWE) wykonuje kolejne instrukcje programu, mimo że zapis do EEPROM
jeszcze nie został zakończony. Ze szczegółowym opis procedury zapisu do EEPROM należy
zapoznać się w nocie katalogowej mikrokontrolera.
Odczyt danych z pamięci EEPROM zajmuje 4 cykle zegarowe.
4. Sterowanie wyświetlacza LCD
Jednym z często obecnych elementów peryferyjnych w urządzeniach sterowanych
mikroprocesorowo jest znakowy wyświetlacz LCD. W tym celu może być zastosowany
prosty wyświetlacz alfanumeryczny ze sterownikiem zgodnym z HD44780. Wyprowadzenia
sterownika wyświetlacza LCD dołącza się do dowolnych linii portów mikrokontrolera. Pracą
wyświetlacza steruje się przez wysyłanie instrukcji (rozkazów) i danych do jego sterownika.
Wykorzystuje się do tego następujące linie sygnałowe:
RS – służy do wyboru rejestru sterownika wyświetlacza, w którym zostanie wykonany
zapis/odczyt: ‘0’ – rejestr instrukcji, ‘1’ – rejestr danych,
R/W– służy do wyboru kierunku transmisji: ‘0’ – zapis, ‘1’ – odczyt,
E – zbocze opadające sygnału na tej linii uaktywnia transmisję,
DB7…DB0 – służą do przesyłania bajtu zawierającego dane lub instrukcję. Sterownik
może pracować z 8-bitową lub 4-bitową magistralą danych.
6
6
Mikroprocesory i mikrosterowniki
 Wydział Elektroniki Mikrosystemów i Fotoniki
Politechniki Wrocławskiej 2014
Komunikację z wyświetlaczem należy rozpocząć od odpowiedniego ustawienia stanu
linii RS, R/W i E. Przed transmisją bajtu powinno się ustawić linię E w stanie wysokim, a po
wystawieniu informacji na linie DB7…DB0 zmienić stan linii E na niski (zbocze opadające
wpisuje dane do sterownika). Aby mieć pewność co do zakończenia transmisji i wykonania
przez sterownik poprzedniego polecenia, należy wprowadzić w programie opóźnienie (np.
kilka ms) przed ustawieniem linii E ponownie w stan niski. Jest to związane z czasem
potrzebnym na wykonanie instrukcji lub zapis danych w pamięci sterownika.
Bajt zawierający dane lub instrukcję jest wysyłany przez linie DB7…DB0 odpowiednio
do rejestru danych lub rejestru instrukcji sterownika wyświetlacza LCD. W bajcie danych
zawarty jest kod znaku do wyświetlenia. Bajty z rejestru danych są zapisywane w kolejnych
komórkach pamięci DDRAM (ang. Display Data RAM) sterownika. Pamięć ta może
pomieścić maksymalnie 80 znaków (bajtów). Organizacja pamięci DDRAM sterownika
w wypadku wyświetlacza z jedną linią jest następująca:
pozycja na wyświetlaczu
1
2
3
adres pamięci DDRAM
$00
$01
$02
..............
78
79
80
$4D
$4E
$4F
38
39
40
Natomiast gdy wyświetlacz posiada dwie linie:
pozycja na wyświetlaczu
1
2
3
adres pamięci DDRAM (linia 1)
$00
$01
$02
...........
$25
$26
$27
adres pamięci DDRAM (linia 2)
$40
$41
$42
...........
$65
$66
$67
W zależności od rozmiaru wyświetlacza (czyli maksymalnej liczby znaków
wyświetlanych jednocześnie w jednej linii) oraz liczby linii, cała lub tylko część (tzw. okno)
zawartości pamięci DDRAM może być wyświetlona równocześnie.
7
7
Mikroprocesory i mikrosterowniki
 Wydział Elektroniki Mikrosystemów i Fotoniki
Politechniki Wrocławskiej 2014
Bajt instrukcji jest kodem rozkazu dla sterownika, zgodnie z poniższą tabelą:
Tabela 1. Kody rozkazów dla sterownika LCD HD44780
Rozkaz
Kod rozkazu
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
Clear display
0
0
0
0
0
0
0
1
Return home
0
0
0
0
0
0
1
x*
Entry mode set
0
0
0
0
0
1
I/D
S
Display on/off
0
0
0
0
1
D
C
B
Cursor or display shift
0
0
0
1
S/C
R/L
x
x
Function set
0
0
1
DL
N
F
x
x
Set CGRAM address
0
1
Set DDRAM address
1
Adres pamięci DDRAM
Read busy flag & address
BF
Adres pamięci DDRAM
Adres pamięci CGRAM
* x – dowolna wartość
Opis rozkazów sterownika:
Clear display
– wyczyszczenie wyświetlacza i ustawienie zapisu danych od adresu
początkowego pamięci DDRAM (czyli w lewym górnym rogu wyświetlacza).
Return home
– ustawienie zapisu danych od adresu początkowego pamięci DDRAM.
Entry mode set
– ustawienie przesuwu kursora lub okna podczas zapisu lub odczytu
danych:
S = ‘0’ – przesuwanie się kursora,
S= ‘1’ – przesuwanie się okna,
I/D = ‘1’ – inkrementacja adresu znaku (przesuw w prawo),
I/D = ‘0’ – dekrementacja adresu znaku (przesuw w lewo).
Display on/off
– włączanie/wyłączanie kursora i wyświetlacza:
D = ‘1’ – włączenie wyświetlacza,
D = ‘0’ – wyłączenie wyświetlacza,
C = ‘1’ – włączenie kursora,
C = ‘0’ – wyłączenie kursora,
B = ‘1’ – miganie kursora,
B= ‘0’ – brak migania kursora.
8
8
Mikroprocesory i mikrosterowniki
 Wydział Elektroniki Mikrosystemów i Fotoniki
Politechniki Wrocławskiej 2014
Cursor or display shift
– przesuwanie kursora lub okna (bez zmiany adresu w pamięci
DDRAM):
S/C = ‘0’ – przesuwa się kursor,
S/C = ‘1’ – przesuwa się okno,
R/L = ‘0’ – przesuw w lewo,
R/L = ‘1’ – przesuw w prawo.
Function set
– ustawienie długości danych interfejsu, liczby wyświetlanych linii oraz
rodzaju znaków:
DL = ‘0’ – interfejs 4-bitowy,
DL = ‘1’ – interfejs 8-bitowy,
N = ‘0’ – jedna linia wyświetlacza,
N= ‘1’ – dwie linie wyświetlacza,
F= ‘0’ – znaki 5 x 7 punktów,
F= ‘1’ – znaki 5 x 10 punktów.
Set CGRAM address
– ustawienie adresu pamięci RAM generatora znaków (ang. Character
Generator RAM). W pamięci CGRAM użytkownik może zapisać nowe wzory znaków do
wyświetlania.
Set DDRAM address
– ustawienie adresu komórki pamięci DDRAM, w której ma być
dokonany zapis lub odczyt.
Read busy flag & address
– odczyt flagi zajętości (BF) i adresu pamięci DDRAM. Gdy
linia R/W = ‘1’ a flaga BF = ‘1’, to sterownik znajduje się w trakcie wykonywania operacji.
9
9
Mikroprocesory i mikrosterowniki
 Wydział Elektroniki Mikrosystemów i Fotoniki
Politechniki Wrocławskiej 2014
W ogólności do poprawnej pracy sterownik HD44780 wymaga inicjalizacji
programowej! Należy zatem inicjalizację tę zaimplementować przed przystąpieniem do
wyświetlania znaków:
Rys.2. Algorytm inicjalizacji programowej sterownika HD44780 [2]
10
10
Mikroprocesory i mikrosterowniki
 Wydział Elektroniki Mikrosystemów i Fotoniki
Politechniki Wrocławskiej 2014
Tabela 2. Kody znaków zapisanych w CG ROM sterownika LCD HD44780 [2]
11
11
Mikroprocesory i mikrosterowniki
 Wydział Elektroniki Mikrosystemów i Fotoniki
Politechniki Wrocławskiej 2014
5. Przykładowe zadania do wykonania
1. a) Napisać krótki program, w którym następuje zapis i odczyt zmiennej programowej
w pamięci SRAM.
b) Napisać krótki program zawierający wywołanie podprogramu (np. za pomocą
instrukcji RCALL), a następnie w podprogramie umieścić kod zapisujący dowolną
wartość w komórce pamięci SRAM pod adresem $025F. Jak zmienia to przebieg
programu i czym to jest wywołane? (zadanie opcjonalne)
2. Napisać program, w którym następuje zapis i odczyt danych w komórce pamięci
EEPROM, według następującego schematu:
Po resecie mikrokontrolera odczytywana jest wartość z komórki pamięci EEPROM, a
następnie wyświetlana na diodach podłączonych do jednego z portów. Naciśnięcie
przycisku powoduje, że do tej komórki pamięci wpisywany jest aktualny wynik
przetwarzania (8 najstarszych bitów) ADC.
Należy ustawić kilkakrotnie różną wartość napięcia wejściowego dla przetwornika
ADC i sprawdzać czy po odłączeniu i ponownym włączeniu zasilania zapisana
wartość w pamięci EEPROM jest wciąż przechowywana.
3. Napisać program sterujący wyświetlaczem LCD. Wyświetlić swoje imię (pierwsza
linijka) i nazwisko (druga linijka). Należy skorzystać z wyświetlacza LCD ze
sterownikiem HD44780 dostępnym na makiecie.
4. Napisać program umieszczający w EEPROM swoje imię i NAZWISKO w kodach
wyświetlacza LCD ze sterownikiem HD44780,
5. Napisać program wyświetlający dane z EEPROM przygotowane programem z zadania
nr 4 na wyświetlaczu LCD.
6. Zdefiniować nowe znaki na wyświetlaczu LCD (zadanie opcjonalne).
6.
Literatura
[1] Dokumetacja techniczna mikrokontrolera AVR Atmega 8535
http://www.atmel.com/images/doc2502.pdf
[2] Dokumetacja techniczna sterownika HD44780 firmy Hitachi
http://datasheets.maximintegrated.com/en/ds/MAX7219-MAX7221.pdf
[3] R. Baranowski, Mikrokontrolery AVR Atmega w praktyce, Wydawnictwo BTC,
Warszawa 2005
12
12

Podobne dokumenty