Tomasz Charoński Mateusz Lango Architektura Systemów Komputerowych
Wprowadzenie Inteligentne wyświetlacze alfanumeryczne LCD są elementem coraz częściej spotykanym w sprzęcie powszechnego użytku: od urządzeń gospodarstwa domowego (pralki, lodówki), poprzez systemy alarmowe, na medycznym sprzęcie profesjonalnym skończywszy. Coraz częściej spotyka się wyświetlacze potrafiące oprócz pokazywania podstawowych cyfr z zakresu 0 9, wyświetlać pełen zestaw liter alfabetu łacińskiego, cyfr oraz dodatkowych znaków tak interpunkcyjnych jak i semigraficznych. W większości są to tzw. wyświetlacze tekstowe, co odróżnia je od bliźniaczych i podobnie wyglądających, wyświetlaczy graficznych LCD.
Wprowadzenie Wyświetlacze tekstowe Wyświetlacze tekstowe charakteryzują się tym, że ich pole odczytowe składa się od kilkunastu do kilkudziesięciu jednakowych pól, złożonych z matryc punktów. Za pomocą każdej takiej matrycy (przeważnie: 5 na 8 punktów) możliwe jest wyświetlenie dowolnego znaku. W praktyce matryca znaku składa się z 5 x 7 pól, natomiast dolny, ósmy rząd pięciu punktów jest wykorzystywany do wyświetlania generowanego automatycznie znaku kursora. Poszczególne matryce w wyświetlaczach tekstowych są oddzielone przerwą tak między sobą (w kolumnie) jak i w rzędzie, w przypadku wyświetlaczy składających się z kilku linii. Tak więc w informacji wyświetlonej na wyświetlaczu tekstowym wszystkie litery są fizycznie oddzielone małą przerwą, dzięki której poszczególne znaki nie zlewają się ze sobą, tworząc w ten sposób czytelny tekst.
Wprowadzenie Wyświetlacze tekstowe Wyświetlacze tekstowe charakteryzują się tym, że ich pole odczytowe składa się od kilkunastu do kilkudziesięciu jednakowych pól, złożonych z matryc punktów. Za pomocą każdej takiej matrycy (przeważnie: 5 na 8 punktów) możliwe jest wyświetlenie dowolnego znaku. W praktyce matryca znaku składa się z 5 x 7 pól, natomiast dolny, ósmy rząd pięciu punktów jest wykorzystywany do wyświetlania generowanego automatycznie znaku kursora. Poszczególne matryce w wyświetlaczach tekstowych są oddzielone przerwą tak między sobą (w kolumnie) jak i w rzędzie, w przypadku wyświetlaczy składających się z kilku linii. Tak więc w informacji wyświetlonej na wyświetlaczu tekstowym wszystkie litery są fizycznie oddzielone małą przerwą, dzięki której poszczególne znaki nie zlewają się ze sobą, tworząc w ten sposób czytelny tekst.
Wprowadzenie Wyświetlacze tekstowe Wyświetlacze tekstowe charakteryzują się tym, że ich pole odczytowe składa się od kilkunastu do kilkudziesięciu jednakowych pól, złożonych z matryc punktów. Za pomocą każdej takiej matrycy (przeważnie: 5 na 8 punktów) możliwe jest wyświetlenie dowolnego znaku. W praktyce matryca znaku składa się z 5 x 7 pól, natomiast dolny, ósmy rząd pięciu punktów jest wykorzystywany do wyświetlania generowanego automatycznie znaku kursora. Poszczególne matryce w wyświetlaczach tekstowych są oddzielone przerwą tak między sobą (w kolumnie) jak i w rzędzie, w przypadku wyświetlaczy składających się z kilku linii. Tak więc w informacji wyświetlonej na wyświetlaczu tekstowym wszystkie litery są fizycznie oddzielone małą przerwą, dzięki której poszczególne znaki nie zlewają się ze sobą, tworząc w ten sposób czytelny tekst.
Wprowadzenie Wyświetlacze tekstowe i graficzne - porównanie Niestety, przez tą właściwość nie jest możliwe np. płynne (punkt po punkcie) przesuwanie napisu (taka możliwość istnieje w graficznych wyświetlaczach LCD).
Wprowadzenie Potrzeba mikrosterownika W przypadku prostych wyświetlaczy, np. 7-segmentowych LCD, każdy z segmentów danej cyfry jest sterowany, (czyli gaszony i zapalany) oddzielnie. Najczęściej taki sposób sterowania wymusza wyprowadzenie poszczególnych segmentów wszystkich cyfr na zewnątrz, co zwiększa liczbę końcówek do np. 32 w przypadku wyświetlacza 4-cyfrowego (4 x 7 segmentów = 28 + 4 kropki dziesiętne = 32). A teraz spójrzmy na wyświetlacz tekstowy LCD. Aby w taki sposób wyświetlić 4 znaki, wyświetlacz musiałby mieć aż 140 wyprowadzeń (140 = 4 matryce po 35 punktów, każda matryca ma 5 x 7 punktów)!
Wprowadzenie Potrzeba mikrosterownika 2 Dlatego producenci inteligentnych tekstowych wyświetlaczy LCD musieli uprościć sterowanie dodatkowym elementem, tworząc nie tylko sam wyświetlacz LCD (pole odczytowe), ale cały moduł sterujący. W skład takiego modułu wchodzi zazwyczaj także specjalizowany układ scalony nazywany kontrolerem sterującym wyświetlacza. Układ taki montowany jest fizycznie technologią montażu powierzchniowego na cienkiej płytce drukowanej, która jednocześnie stanowi podstawę, do której za pomocą metalowej klamry przymocowane jest szklane pole odczytowe. Całość stanowi bardzo zwartą konstrukcję, a co najciekawsze, mimo dość dużej złożoności pobiera zazwyczaj mniej niż 2 miliampery prądu przy zasilaniu 5V.
Wprowadzenie Potrzeba mikrosterownika 3 Istnieje na rynku wielu producentów takich modułów, a wśród nich kilka standardów określających interfejs obsługi wyświetlaczy. Najbardziej jednak rozpowszechnionym jest standard opracowany przed laty przez japońską firmę Hitachi, a wdrożony w postaci mikrosterownika o nazwie HD44780. Celem tej prezentacji będzie zaprezentowanie sposobu programowania dwu-wierszowego, alfanumerycznego wyświelacza LCD sterowanego przy pomocy mikrosterownika HD44780
Rodzaje pamięci Generator znaków Generator znaków jest to pamięć ROM z umieszczonymi kombinacjami zgaszonych i zapalonych pikseli dla każdej matrycy znaku. Dlatego też aby wyświetlić literę wystarczy podać jej kod, bez konieczności opisywania wszystkich pikseli. Pamięć ta nazywana jest CG ROM (Character Generator ROM). Pamięć generatora znaków Pamięć generatora znaków pozwala na zapisanie 8 zdefiniowanych przez użytkownika symboli. Ponieważ na znaki definiowane przez użytkownika zarezerwowano 16 adresów to kody wzięte parami 0 i 8, 1 i 9... dają ten sam znak. Pamięć ta nazywana jest CG RAM (Character Generator RAM) i jej zawartość jest tracona po wyłączeniu zasilania.
Rodzaje pamięci Generator znaków Generator znaków jest to pamięć ROM z umieszczonymi kombinacjami zgaszonych i zapalonych pikseli dla każdej matrycy znaku. Dlatego też aby wyświetlić literę wystarczy podać jej kod, bez konieczności opisywania wszystkich pikseli. Pamięć ta nazywana jest CG ROM (Character Generator ROM). Pamięć generatora znaków Pamięć generatora znaków pozwala na zapisanie 8 zdefiniowanych przez użytkownika symboli. Ponieważ na znaki definiowane przez użytkownika zarezerwowano 16 adresów to kody wzięte parami 0 i 8, 1 i 9... dają ten sam znak. Pamięć ta nazywana jest CG RAM (Character Generator RAM) i jej zawartość jest tracona po wyłączeniu zasilania.
Rodzaje pamięci 2 Pamięć wyświetlania Pamięć wyświetlania jak nazwa wskazuje przechowuje aktualnie wyświetlane znaki. Operacja wyświetlenia znaku to po prostu operacja zapisu do tej pamięci. Pamięć ta nazywana jest DD RAM (Dispaly Data RAM) i niezależnie od wielkości wyświetlacza może przechowywać 80 znaków.
Rodzaje pamięci 3 Przestrzeń adresowa pamięci wyświetlania Adresy pamięci wyświetlania, dla wygody programistów zostały zdefiniowane w następujący sposób: Dla trybu 1-liniowego dostępne są adresy 0-4f (79 10 ) Dla trybu 2-liniowego dostępne są adresy 0-27 (39 10 ) dla pierwszej linii tekstu i 40 (64 10 )- 67 (103 10 )
Wyprowadzenia Rozmieszczenie wyprowadzeń typowego modułu LCD przedstawia poniższa fotografia : RS-Register Select 0 rejestr instrukcji (do zapisu) lub flaga zajętości (do odczytu) 1 rejestr danych (zapis lub odczyt)
Wyprowadzenia Rozmieszczenie wyprowadzeń typowego modułu LCD przedstawia poniższa fotografia : RS-Register Select 0 rejestr instrukcji (do zapisu) lub flaga zajętości (do odczytu) 1 rejestr danych (zapis lub odczyt) Rejestr instrukcji Rejestr 8-bitowy, który przechowuje kody instrukcji np. wyczyszczenie wyświetlacza, a także adresy dla pamięci DDRAM i CGRAM
Wyprowadzenia Rozmieszczenie wyprowadzeń typowego modułu LCD przedstawia poniższa fotografia : RS-Register Select 0 rejestr instrukcji (do zapisu) lub flaga zajętości (do odczytu) 1 rejestr danych (zapis lub odczyt) Rejestr danych Rejestr 8-bitowy, który tymczasowo przechowuje dane, która mają być odczytane (zapisane) z (do) pamięci DDRAM i CGRAM. Transfer rejestr pamięć dokonuje się automatycznie.
Wyprowadzenia Rozmieszczenie wyprowadzeń typowego modułu LCD przedstawia poniższa fotografia : R/W -Read/Write 0 zapis 1 odczyt
Wyprowadzenia Rozmieszczenie wyprowadzeń typowego modułu LCD przedstawia poniższa fotografia : E-Enable Rozpoczyna zapis/odczyt danych zbocze opadające.
Wyprowadzenia Rozmieszczenie wyprowadzeń typowego modułu LCD przedstawia poniższa fotografia : Wniosek Aby sterować wyświetlaczem potrzebujemy 11 bitów (D0-D7, RS, R/W, E), a port P2 ma ich tylko 8.
Wyprowadzenia 2 Na szczęście sterownik HD44780 umożliwia komunikację w trybie 4- bitowym i z myślą o takiej komunikacji została przygotowana płytka laboratoryjna. Jak możemy zobaczyć, bity D0-D3 nie zostały w ogóle przylutowane. Znaczenie poszczególnych bitów portu P2 przedstawia tabelka. bit 7 6 5 4 3 2 1 0 symbol RS - E R/W D6 D7 D4 D5
Inicjalizacja Po podłączeniu zasilania wewnętrzny układ resetujący (Internal Reset Circuit) automatycznie przeprowadzi proces inicjalizacji z wartościami domyślnymi takimi jak: wyświetlacz jednoliniowy, komunikacja 8-bitowa itd. Ponieważ te ustawienia nie odpowiadają nam, musimy przeprowadzić inicjalizację sami.
Inicjalizacja 2 Krok RS R/W D7 D6 D5 D4 1 0 0 0 0 1 DL 2 0 0 0 0 1 DL 0 0 N F - - 3 0 0 0 0 0 0 0 0 1 D C B 4 0 0 0 0 0 0 Function Set Instrukcja ta ustawia najważniejsze parametry pracy wyświetlacza. DL=0 ustawia komunikację 4-bitową. Komunikacja 8-bitowa Podczas wykonywania tej instrukcji urządzenie pracuje w trybie 8-bitowym, dlatego też nie ma możliwości ustawienia pozostałych bitów Function Set, co skutkuje koniecznością ponownego wysłania tej instrukcji
Inicjalizacja 2 Krok RS R/W D7 D6 D5 D4 1 0 0 0 0 1 0 2 0 0 0 0 1 DL 0 0 N F - - 3 0 0 0 0 0 0 0 0 1 D C B 4 0 0 0 0 0 0 Function Set Instrukcja ta ustawia najważniejsze parametry pracy wyświetlacza. DL=0 ustawia komunikację 4-bitową. Komunikacja 8-bitowa Podczas wykonywania tej instrukcji urządzenie pracuje w trybie 8-bitowym, dlatego też nie ma możliwości ustawienia pozostałych bitów Function Set, co skutkuje koniecznością ponownego wysłania tej instrukcji
Inicjalizacja 2 Krok RS R/W D7 D6 D5 D4 1 0 0 0 0 1 0 2 0 0 0 0 1 DL 0 0 N F - - 3 0 0 0 0 0 0 0 0 1 D C B 4 0 0 0 0 0 0 Function Set Powtórzenie instrukcji w celu ustawienia pozostałych bitów rozkazu. DL=0 ustawia komunikację 4-bitową N ilość linii F ustawia czcionkę 0 oznacza czcionkę 5 x 8 1 oznacza czcionkę 5 x 10 przy wyborze wyświetlania dwuliniowego wybór czcionki nie jest możliwy (domyślnie 5 x 8).
Inicjalizacja 2 Krok RS R/W D7 D6 D5 D4 1 0 0 0 0 1 0 2 0 0 0 0 1 0 0 0 N F - - 3 0 0 0 0 0 0 0 0 1 D C B 4 0 0 0 0 0 0 Display on/off control Ustawia opcje wyświetlania D=1 wyświetlacz włączony, przy wyświetlaczu wyłączonym dane zostają zapisywane tylko do DDRAM bez odwzorowania na wyświetlaczu C=1 wyświetlenie kursora (poziomej kreski) B=1 wyświetlenie kursora migającego (ang. blinking)
Inicjalizacja 2 Krok RS R/W D7 D6 D5 D4 1 0 0 0 0 1 0 2 0 0 0 0 1 0 0 0 N F - - 3 0 0 0 0 0 0 0 0 1 D C B 4 0 0 0 0 0 0 0 0 0 1 I/D S Entry mode set I/D adres inkrementowany (dla I/D=1) lub dekrementowany (dla I/D=0) po wypisaniu znaku. Inkrementacja powoduje ruch kursora w prawo. S=1 przesunięcie wyświetlacza I/D=1 w prawo I/D=0 w lewo Będzie się wydawało, że kursor stoi w miejscu, ale wyświetlany tekst się przesunął(w obu liniach naraz jeśli jesteśmy w trybie pracy wyświetlacza 2-liniowego)
Zadanie 1 Wyświetlenie napisu 1 Przepnij kabel mikrokontrolera portu P2 do wyświetlacza LCD. 2 Zainicjalizuj układ w trybie 4-bitowym. 3 Pamiętając o znaczeniu kolejnych bitów i korzystając z tabeli znaków spróbuj wyświetlić napis zawierający jeden znak diakrytyczny, zastępując go na razie łacińskim odpowiednikiem. 7 6 5 4 3 2 1 0 RS - E R/W D6 D7 D4 D5 RS R/W D7 D6 D5 D4 0 0 0 0 1 0 0 0 0 0 1 0 0 0 N F - - 0 0 0 0 0 0 0 0 1 D C B 0 0 0 0 0 0 0 0 0 0 I/D S Wskazówka nazwa MACRO zmienna1 ;KOD ENDM
Zadanie 1 Znaki predefiniowane w pamięci CG ROM Tabela przedstawia zdefiniowane przez producenta znaki czcionki 5 x 7 znajdujące się w pamięci CG ROM. 8-bitowy adres znaku odczytujemy łącząc nagłówki Starszy i Młodszy.
Zadanie 2 Animacja Za pomocą instrukcji Cursor & display shift zrealizuj ciągłe przesuwanie się wyświetlonego wcześniej napisu w prawo, dobierając odpowiednie opóźnienie między przesunięciami. RS R/W D7 D6 D5 D4 0 0 0 0 0 1 0 0 S/C R/L - - Cursor & display shift S/C=1 przesuwanie napisu: R/L=1 w prawo R/L=0 w lewo
Definiowanie własnego znaku 1 Pamięć CG RAM pozwala nam na zdefiniowanie 8 własnych znaków. Aby tego dokonać, musimy: 1 Ustawić wskaźnik pamięci do zapisu na początku któregoś z pierwszych ośmiu 8-bajtowych obszarów pamięci CG RAM za pomocą instrukcji Set CG RAM address. 2 Zapisać pod wskazany adres tablicę bitów o rozmiarze 5 x 8, przy czym ostatnia linia pozostaje wyzerowana (jest ona przeznaczona na wskazanie pozycji kursora) za pomocą instrukcji Write data to CG RAM. Po zapisaniu w całości żądanego znaku do tablicy, możemy go wyświetlać podobnie jak znaki predefiniowane, podając odpowiedni adres pamięci DD RAM. Należy jednak pamiętać, że zapisane przez nas własne znaki nie są zachowywane w pamięci po wyłączeniu zasilania.
Definiowanie własnego znaku 2 Krok RS R/W D7 D6 D5 D4 1 0 0 0 1 adres CG RAM 0 0 adres CG RAM 2 1 0 I linia do zapisu 1 0 I linia do zapisu 1 0 II linia do zapisu 1 0 II linia do zapisu 1 0 III linia do zapisu 1 0 III linia do zapisu 1 0 IV linia do zapisu 1 0 IV linia do zapisu 1 0 V linia do zapisu 1 0 V linia do zapisu 1 0 VI linia do zapisu 1 0 VI linia do zapisu 1 0 VII linia do zapisu 1 0 VII linia do zapisu 1 0 0 0 0 0 1 0 0 0 0 0 Warto zwrócić uwagę, że trzy pierwsze bity każdego bajtu (linii) są nieistotne. Liczy się 5 najmłodszych bitów.
Zadanie 3 Definiowanie własnego znaku W wyświetlonym wcześniej napisie znak diakrytyczny został zastąpiony łacińskim odpowiednikiem. Zdefiniuj odpowiedni własny znak i spraw, by napis wyświetlał się już zgodnie z pisownią języka polskiego.
Zadanie 3 Pomocnicza tabela z zapisem bitowym polskich znaków diakrytycznych Zapis dziesiętny należy przekształcić na zapis dwójkowy, a następnie podzielić go na 4 bity starsze i 4 bity młodsze, by w końcu odpowiednio przesłać cały bajt.
Koniec Dziękujemy za przeniesienie się z nami w magiczny świat przygód z wyświetlaczem LCD HD44780.