3.pdf

(547 KB) Pobierz
1265528 UNPDF
Podręczny poradnik elektronika
Alfanumeryczne
wyświetlacze LCD
część III
Inteligentne wyświetlacze alfanumeryczne LCD są elementem coraz częściej spotyka−
nym w sprzęcie powszechnego użytku: od urządzeń gospodarstwa domowego, poprzez
systemy alarmowe, na medycznym sprzęcie profesjonalnym skończywszy. Dla wielu elektroników
amatorów, chcących wykorzystać te efektowne elementy we własnych konstrukcjach są one
często tylko marzeniem. W wielu przypadkach powodem takiego stanu rzeczy nie jest bynajmniej
ich cena, lecz brak wiedzy o praktycznych sposobach na zmuszenie tego elementu do wyświetla−
nia „tego co akurat w danej chwili chcemy...”
W niniejszym artykule autor w przystępny sposób stara się zapoznać czytelników z tymi elemen−
tami, budzącymi często podziw i westchnienie niejednego początkującego konstruktora.
Praca ze sterowaniem
4−bitowym
Jak już wiesz, do komunikacji z modu−
łem oprócz sygnałów sterujących
(RW,RS,E) służy osiem linii danych:
D0...D7. Jednak każdy wyświetlacz teks−
towy ze sterownikiem HD44780 może
także pracować będąc sterowanym tylko
za pomocą 4 linii danych – D7...D4. W ta−
kim przypadku linie D3...D0 są ignorowa−
ne i mogą w związku z tym pozostać nie
podłączone. W tabeli 2 pokazana jest
zresztą instrukcja „Function Set” w któ−
rej bit D4 odpowiada za ustalenie, jaki ro−
dzaj komunikacji wybierze użytkownik
po włączeniu zasilania modułu. Jeżeli bit
ten ustawimy, moduł komunikować się
będzie poprzez 8−bitową szynę danych,
jeżeli zaś wyzerujemy go, komunikacja
będzie 4−bitowa. W tym ostatnim przy−
padku, aby przesłać kompletną instruk−
cję lub daną do wyświetlacza (a także ją
odczytać), należy wykonać to w dwóch
etapach. W pierwszym należy przesłać
starszy półbajt instrukcji lub danej, a na−
stępnie młodszy. Tak wiec np. aby wy−
świetlić literę „S” (kod: 01010011) trze−
ba najpierw podać na linie D7...D4 kom−
binację pierwszych czterech bitów czyli:
„0101”, a następnie wysłać drugą poło−
wę: „0011”. Oczywiście przed każdą po−
łówką należy odpowiednio ustawić syg−
nały RS i RW oraz uaktywnić transmisję
sygnałem E (także za każdym razem).
Różnica polega tylko na tym, że po prze−
słaniu pierwszego półbajtu nie jest po−
trzebne sprawdzanie flagi zajętości, lub
czekanie przez, podany w tabeli 2, czas,
w którym moduł wykonuje wewnętrzną
operację. Dzięki temu ogólny czas obsłu−
gi interfejsu 4−bitowego, szczególnie
w układach mikroprocesorowych, nie
jest o wiele dłuższy niż przy pełnym 8−bi−
towym interfejsie.
Pod koniec opisu modułów LCD poka−
żę przykładowy sposób podłączenia wy−
świetlacza poprzez interfejs zarówno
8 jak i 4−bitowy.
C=0: kursor wygaszony,
B=0 wyłączona funkcja migania
kursora lub znaku
– nastawy: „Entry Mode Set”:
I/D=1 : +1 (zwiększanie adresu),
S=0: bez przesuwania
– pamięć wyświetlania DD RAM jest
wypełniona spacjami, zaś pamięć CG
RAM jest wypełniona przypadkowymi
danymi.
Rozpoczęcie pracy w takim przypadku
może się odbyć w sposób normalny, czy−
li np. jak podano w przykładzie z tabeli 4.
Jeżeli zaś czas narastania napięcia po
włączenia zasilania modułu nie mieści
się w podanych wcześniej granicach,
niezbędne jest wykonanie procedury ini−
cjującej przez układ sterujący użytkowni−
ka. Kolejne kroki takiej operacji dla inter−
fejsu 4 i 8−bitowego podane są na
rysunku 8 ii 9.
W praktyce przypadek kiedy zasilanie
nie spełnia wymogów umożliwiających
prawidłową inicjalizację modułu jest bar−
dzo rzadki, szczególnie gdy w zasilaczu
pracuje monolityczny stabilizator napięcia
np. 7805, a kondensator filtrujący zasila−
nie po stronie wtórnej stabilizatora nie
jest zbyt duży (47uF...220uF). W każdym
razie w przypadku kiedy moduł odmówi
„posłuszeństwa” po załączeniu zasilania,
pomimo wprowadzania komend i instruk−
cji w celu wyświetlenia czegoś na disple−
ju LCD, należy zastosować programową
procedurę inicjalizacyjną, taką jak omó−
wiona wcześniej.
Inicjalizacja – czyli co się
dzieje po włączeniu
zasilania
Jak każde inteligentne urządzenie mo−
duły LCD, po dołączeniu do nich zasilania,
przez jakiś określony czas wykonują auto−
matyczną procedurę inicjalizacji swych
„wnętrzności”.
W przypadku modułów z HD44780
czas ten wynosi z reguły 10 ms. Moduł
realizuje funkcję „zerowania” dzięki wbu−
dowanemu w moduł układowi „reset”.
Podczas tego okresu wyświetlacz nie
przyjmuje żadnych rozkazów, toteż
w układach sterujących warto przewi−
dzieć możliwość opóźnienia o wspomnia−
ny czas (najlepiej z zapasem: 20ms) po
ustabilizowaniu się napięcia zasilania na
poziomie 4,5V lub więcej. W przypadku
kiedy po włączeniu zasilania czas narasta−
nia napięcia spełnia wymogi modułu, czy−
li zawiera się w granicach 0,1ms...10ms
przy wzroście od 0,2V do 4,5V, układ re−
setu pracuje poprawnie zapewniając pra−
widłową inicjalizację wyświetlacza. W ta−
kim przypadku wartości początkowe re−
jestrów wewnętrznych są następujące:
– panel LCD wygaszony (“display clear”)
– nastawy „Function Set”:
DL=1 : 8−bitowa szyna danych,
N=0 : wyświetlanie w trybie 1
liniowym,
F=0 : matryca znaku 5x7 punktów;
– nastawy „Display ON/OFF”:
D=0 : wyświetlacz wygaszony,
Struktura wewnętrznych
pamięci modułu
Jak wspomniałem wcześniej, moduł
posiada trzy rodzaje wewnętrznej pamię−
ci, powtórzmy je sobie:
36
E LEKTRONIKA DLA WSZYSTKICH 1/98
1265528.049.png
Podręczny poradnik elektronika
– CG ROM : pamięć generatora znaków,
jest to pamięć stała (ROM) z zapisany−
mi danymi, na podstawie których wy−
świetlany jest jeden ze 160 znaków.
Zawartość CG ROM podałem wcześ−
niej w tabeli na rysunku 4.
– DD RAM : pamięć typu RAM o pojem−
ności 80 znaków (bajtów) przechowu−
jąca kody znaków do wyświetlenia na
panelu LCD. Pamięć ta może być zapi−
sywane lub odczytywana przez ze−
wnętrzny układ sterujący.
– CG RAM : pamięć typu RAM o pojem−
ności 64 bajtów przeznaczona na defi−
niowanie znaków przez użytkownika.
Poniżej zapoznam cię dokładnie ze
strukturą tych pamięci i ich znaczeniem
dla pracy modułu.
Pamiięć CG ROM.. Znaczenie tej pa−
mięci zostało już wyjaśnione, a struktura
została przedstawiona na rysunku 4.
W artykule nie podano wyglądu znaków
kiedy moduł pracuje w trybie 5x10 punk−
tów. Po pierwsze dlatego, że nie wszyst−
kie moduły mogą pracować w tym trybie,
po drugie: różnica w wyglądzie znaków
z matrycy 5x7 i 5x10 jest niewielka, różni
się tylko ostatnie 16 znaków o kodach:
Rys. 8. Programowa inicjalizacja modułu z interfejsem 8−bitowym
Rys. 9. Programowa inicjalizacja modułu z interfejsem 4−bitowym
240...255. Znaki te nie wchodzą w skład
alfabetu łacińskiego, a są symbolami z in−
nych zbiorów znaków. Jeżeli kogoś inte−
resuje zawartość i wygląd tych znaków,
powinien sprawdzić to w praktyce, kupu−
jąc wyświetlacz, ewentualnie przestudio−
wać literaturę [1]. Pamięć CG ROM jest
adresowana (tak właściwie to jest adre−
sowany cały blok bajtów opisujący kon−
kretny znak) poprzez wpisanie kodu zna−
ku do wyświetlenia przy RS=1 i RW=0.
Nie jest możliwa ingerencja i modyfikacja
tej pamięci, ani nie jest możliwe dołącze−
nie np. zewnętrznej pamięci tego typu.
Na rynku elektronicznym istnieją wer−
sje wyświetlaczy tekstowych LCD zgod−
nych programowo z opisywanym tu stan−
dardem, lecz zawartość pamięci CG
ROM poszczególnych modeli w zakresie
kodów: 128...255 może się nieco różnić.
Są to jednak znaki spoza naszego alfabe−
tu, toteż nie stanowi to dużego problemu
dla użytkownika, szczególnie że może on
zawsze zdefiniować swój nietypowy
znak korzystając z pamięci CG RAM.
Pamiięć DD RAM.. Pamięć ta służy do
przechowywania kodów znaków do wy−
świetlenia, jej pojemność dla każdego
modułu opartego o sterownik HD44780
wynosi 80 bajtów (znaków). Jak już
wiesz, w przypadku kiedy panel LCD wy−
E LEKTRONIKA DLA WSZYSTKICH 1/98
37
1265528.050.png 1265528.051.png 1265528.052.png 1265528.001.png 1265528.002.png 1265528.003.png 1265528.004.png 1265528.005.png 1265528.006.png 1265528.007.png 1265528.008.png 1265528.009.png 1265528.010.png 1265528.011.png 1265528.012.png 1265528.013.png 1265528.014.png
Podręczny poradnik elektronika
świetlacza ma mniejsza „długość” , wyświetlana jest tylko
część tekstu, zawartego w DD RAM. Pozostała część pamięci
może być wykorzystana przez programistę jako pamięć RAM
dowolnego wykorzystania. W praktyce jednak zapisuje się do
niej maksymalnie dużo komunikatów (które mają być wyświet−
lone), by potem w razie potrzeby, poprzez zwykłe przesunięcie
tekstu (poprzez komendy przesuwające) pokazać żądany tekst.
Innym sposobem, szczególnie przydatnym dla początkujących
w dziedzinie obsługi wyświetlaczy tego typu, jest zapis do pa−
mięci DD RAM tylko tej części tekstu, która może być wyświet−
lona. Jeżeli potrzeba pokazać coś innego, wystarczy polece−
niem „clear display” wyczyścić pamięć DD RAM a potem zapi−
sać nowy, żądany tekst.
Kolejne komórki DD RAM są oczywiście ponumerowane,
w tym przypadku będzie to zakres 0...79 (80 znaków), w zapisie
szesnastkowym: 00h...4Fh. Takim zapisem będziemy się posłu−
giwać w dalszej części opisu pamięci wyświetlacza.
Dla trybu jednoliniowego, kiedy w instrukcji „Function Set”
(patrz tabela 2) bit N=0 organizacja pamięci DD RAM jest nastę−
pująca:
Dla przykładu w najbardziej popularnym wyświetlaczu LCD
2x16 znaków struktura „widocznej” DD RAM jest następująca:
Kiedy realizowane jest przesuwanie, struktura DD RAM przy−
jmuje postać:
F
W przypadku, gdy wyświetlacz posiada panel LCD o mniej−
szej (<80) liczbie pozycji, wyświetlana jest tylko część tekstu,
np. dla panelu 1x8 mamy:
Jak widać, w trybie 2−liniowym, przy przesuwaniu tekst prze−
suwany jest w obrębie każdej linii osobno, można powiedzieć,
że „zapętla” się w obszarze jednej linii. Ta właściwość jest bar−
dzo przydatna szczególnie przy demonstracyjnym przesuwaniu
komunikatów wieloliniowych.
Istnieją modele wyświetlaczy 1x16 znaków np. Hitachi typ
LM020, w którym pomimo 1 linii wyświetlającej 16 znaków
przyporządkowanie poszczególnych matryc na panelu LCD do
adresów w DD RAM jest nieco inne:
Podczas wykonania operacji przesuwania tekstu adres podą−
ża jak pokazano poniżej:
Dla przykładu struktura pamięci 16−znakowego wyświetlacza
(1x16) ma postać:
Dla tego modelu LCD podczas inicjalizacji powinna być wpi−
sana instrukcja „Function set” z bitem N=1, czyli praca w try−
bie 2−liniowym, inaczej aktywna będzie tylko połowa (8 znaków)
wyświetlacza.
Dla większych modułów, wieloliniowych modułów LCD układ
adresów w zależności od pozycji znaku i linii jest następujący:
Przy przesuwaniu zawartość pamięci wygląda następująco:
W trybie dwuliniowym, kiedy w instrukcji „Function Set”
(patrz tabela 2) bit N=1 organizacja pamięci DD RAM jest nieco
inna
Jak widać w tym przypadku pamięć DD RAM jest podzielo−
na na dwie części, po 40 bajtów pojemności każda. Pierwsza
część (linia) zawiera adresy 00...27h (0...39), druga zaś adresy:
40h...67h (64...103).
Kiedy wyświetlacz ma mniej (np. 2x8) znaków w linii niż 40,
adresy są oczywiście ułożone w następujący sposób:
W przypadku przesuwania zawartości DD RAM w trybie 2−li−
niowym adresy w liniach 1 i 2 wyglądają następująco:
Ważną informacją jest to, że każdorazowe wpisanie danej do
pamięci CG RAM powoduje automatyczną inkrementację liczni−
ka adresu. Dzięki temu nie jest konieczne ustawianie go za każ−
dym razem przed wpisanie kolejnej litery tekstu.
Po tej sporej liczbie przykładów warto poeksperymentować
z nawet najtańszym, zakupionym modułem tekstowym LCD.
Zapewniam cię, że każdy zgodny z omawianym standardem,
tak czy inaczej, da się „opanować” nawet przez mało doświad−
czonego w tej materii elektronika.
Pamiięć CG RAM.. Przyszła wreszcie pora na przedstawienie
zasad wprowadzania zdefiniowanych przez użytkownika zna−
38
E LEKTRONIKA DLA WSZYSTKICH 1/98
1265528.015.png 1265528.016.png 1265528.017.png 1265528.018.png 1265528.019.png 1265528.020.png 1265528.021.png 1265528.022.png 1265528.023.png 1265528.024.png 1265528.025.png 1265528.026.png 1265528.027.png 1265528.028.png 1265528.029.png 1265528.030.png 1265528.031.png 1265528.032.png 1265528.033.png 1265528.034.png 1265528.035.png 1265528.036.png 1265528.037.png 1265528.038.png
Podręczny poradnik elektronika
ków. Do tego celu służy właśnie CG
RAM. Jak już wiesz, jej pojemność to 64
bajty, co pozwala na zdefiniowanie 8 zna−
ków, każdy opisany jest przez 8 bajtów,
a każdy z tych bajtów opisuje 1 wiersz
matrycy pojedynczego znaku. Skoro po−
wiedziałem wcześniej, że matryca znaku
ma postać w tym wypadku 5x7, to po co
ten ósmy bajt? – a no po nic. Jest on po
prostu „marnowany”. Tak samo jest z bi−
tami w danym bajcie, opisującym wiersz,
istotne jest tylko 5 najmłodszych bitów,
bo przecież matryca ma 5 kolumn. Jeżeli
dwa ostatnie zdania nie są zbyt jasne, po−
może ci z pewnością rysunek 10.
Teraz już chyba powinieneś wiedzieć
dlaczego powiedziałem wcześniej że
część bitów jest „marnowana”. Jest to
jednak tylko pozorne marnotrawstwo,
bowiem dzięki takiemu ułożeniu informa−
cji w pamięci CG RAM możliwe jest lo−
giczne i kolejne adresowanie definiowa−
nych komórek. W tabellii 5 pokazano
strukturę pamięci CG RAM.
Dla przykładu jako pierwszy znak
(kod=00h) zdefiniowano „szachownicę”,
pod kodem 02h znak „karo”, ostatnim zde−
finiowanym znakiem są cztery poziome li−
nie. Bity oznaczone gwiazdką nie mają zna−
czenia przy definiowaniu matrycy znaku.
Ósmy wprowadzany kolejno bajt
(wiersz) matrycy znaku nie jest istotny, ze
względu na zastosowane matryce LED:
5x7, zwykle należy wpisać 00h.
Tak więc, aby zdefiniować np. 4 nowe
znaki, należy najpierw wykonać instruk−
cję ustawienia adresu w CG RAM na po−
zycję 0 (patrz tabela 2): „Set CG RAM Ad−
dress” i
RS RW D7...D0
0 0 01000000
Następnie należy kolejno wpisywać
wszystkie bajty, po kolei od pierwszego,
Rys. 10. Matryca definiowanego znaku, a bajty ją opisujące
opisującego pierwszy (górny) wiersz mat−
rycy pierwszego znaku, aż do ostatniego
31−ego (32−gi jest i tak równy „0” więc
nie ma potrzeby go wpisywać) bajtu, opi−
sującego ostatni wiersz 4−tej matrycy de−
finiowanego znaku.
Tak samo jak w przy−
padku pamięci DD RAM
po każdym wpisie danej do tej pamięci
licznik adresu jest automatycznie inkre−
mentowany, toteż nie jest potrzebne
ustawianie adresu za każdym razem za
pomocą instrukcji „Set CG RAM Ad−
dress”.
Obok w tabellii 6 przedstawiam 2 kom−
plety danych (po 64 bajty), umożliwiają−
cych zdefiniowanie 16 polskich
znaków, w pierwszym przypadku
są to litery małe: „ąćęłńóśż”,
w drugim duże: „ĄĆĘŁŃÓŚŻ”.
Dzięki tym danym nie będziesz
musiał samodzielnie męczyć się
z rysowaniem „kropka po kropce”
każdej polskiej litery.
Oczywiście po zdefiniowaniu
wszystkich 8 znaków ich kolejne
kody będą zgodne z tabelą na
rysunku 4, czyli np. znak „ą” bę−
dzie miał kod 00h, znak „ć” kod
01, itd., aż do kodu 07.
Ciąg dalszy w następnym
numerze EdW.
Słławomiir Surowiińskii
Tabela 5
Tabela 6
E LEKTRONIKA DLA WSZYSTKICH 1/98
39
1265528.039.png 1265528.040.png 1265528.041.png 1265528.042.png 1265528.043.png 1265528.044.png 1265528.045.png 1265528.046.png 1265528.047.png 1265528.048.png
Zgłoś jeśli naruszono regulamin