Produkty Novinky Články Návody Kontakty

Popis

Zobrazované znaky budeme do LCD displeje (resp. do jeho řadiče) přenášet přes datovou sběrnici paralelního portu. Řídící signály LCD displeje potřebné pro řízení komunikace s displejem připojíme k řídící sběrnici paralelního portu, konkrétně k signálům /Strobe a /Autofeed.
Pro jednoduchost bude LCD displej zapojen tak, že do něj bude možné pouze zapisovat. Nebudeme také využívat pokročilé vlastnosti displeje jako je možnost nahrát si vlastní znakovou sadu apod.
V následujícím textu si stručně uvedeme ty nejdůležitější informace o ovládání a komunikaci s LCD displejem. Zájemce o detailnější popis odkážu na stránky výrobceInformationhttp://www.ges.cz/sheets/d/dem16217syhly.pdf a články na webu HW.czInformationhttp://hw.cz/Teorie-a-praxe/Dokumentace/ART632-Inteligentni-displeje-a-jejich-pripojeni-k-PC.html a případně i osobní stránky jednoho radioamatéraInformationhttp://elektronika.kvalitne.cz/ATMEL/necoteorie/LCDmatice.html.

Ovládání LCD displeje

LCD displej, resp. jeho řadič HD44780 či kompatibilní obsahuje dvě interní paměti RAM. První z nich CGRAM je pamět znakového generátoru a slouží k dynamické změně sady znaků, které lze zobrazit na displeji. Toho se například využívá při zobrazování znaků specifických pro český jazyk.
Druhá paměť pro nás mnohem zajímavější je paměť DDRAM, což je v podstatě video paměť displeje. Každá adresa v této paměti odpovídá určité pozici na displeji. Zápisem kódu znaku do paměti DDRAM na danou adresu dojde k zobrazení znaku na displeji na příslušné pozici. Bohužel je paměť DDRAM organizována tak, že jednotlivé řádky na sebe nenavazují, tzn. že při posunu zobrazovaného textu musíme sami softwarově řešit korektní přechod znaků z konce prvního řádku na druhý. A to i přesto, že řadič displeje podporuje instrukci pro posun textu. Nepomůže nám ani automatický posun adresy DDRAM při zápisu znaku do DDRAM paměti. V tabulce 1.5 je seznam adres v DDRAM paměti a odpovídající pozice na LCD displeji. Adresy jsou uvedeny hexadicimálně.
- Sloupec
Řádek 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
1 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
2 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F
Tabulka 1.5 LCD displej - adresy znaků v paměti DDRAM (hexadecimálně)
Na obrázku 1.12 jsou uvedeny kódy znaků. Bity určující sloupec v mapě znaků tvoří vyšší půlbyte kódu znaku.
obrázek hwkit-lcd-mapa-znaku
Obrázek 1.12 LCD displej - kódy znaků
LCD displej se ovládá pomocí instrukcí přenášených po datové sběrnici. Samotné znaky k zobrazení se pak do paměti DDRAM přenesou v rámci režimu přenosu dat do interní RAM.
Seznam podporovaných instrukcí najdeme v tabulce 1.6. Některé z nich si zaslouží podrobnější komentář:
Instrukce Zapni/vypni displej/kurzor nevypíná vnitřní logiku displeje, ale pouze zobrazování znaků. Znaky uložené v paměti DDRAM tedy zůstanou zachovány.
Instrukce Nastav posun displeje/kurzoru umožňuje měnit pozici kurzoru nebo posouvat zobrazované znaky. Pozor na to, že řadič automaticky přesune znak z konce první řádky na druhou až když adresa znaku dosáhne hodnoty 0x3F (tato funkce je tedy pro víceřádkové displeje nepoužitelná - nutno řešit SW).
Instrukce Nastav vlastnosti displeje slouží pro nastavení typu komunikace a způsobu zobrazování. Je to první isntrukce posílaná do displeje při jeho inicializaci.
Instrukce Nastav adresu v paměti DDRAM umožňuje ovlivnit stav čítače adresy paměti DDRAM. Uvedená hodnota bude použita při následujícím přenosu dat z/do DDRAM paměti.
Instrukce Zapiš data do RAM, kdy je nastaven signál RS na log. 1, umožňuje přenést data do paměti CGRAM nebo DDRAM. Výběr paměti je proveden předchozí instrukcí Nastav adresu v paměti CGRAM/DDRAM, která nastavila do adresové čítače buď adresu CGRAM nebo adresu DDRAM. Po zápisu dat se automaticky sníží nebo zvýší o 1 stav adresového čítače dané paměti v závislosti na stavu bitu I/D (instrukce Nastav vstupní režim). Další znak tedy můžeme hned zapisovat aniž bychom předtím museli nastavit adresu. Pozor ovšem musíme dávat při přechodu mezi řádky, kdy musíme pro první znak na druhém řádku před jeho zápisem nastavit nejprve správnou adresu. Adresový čítač totiž sám tento přechod neprovede, ale jeho hodnota v případě displeje 2x16 by byla 0x10, tedy znak za posledním znakem prvního řádku.
Instrukce Signály Kód instrukce Doba
RS RW D7 D6 D5 D4 D3 D2 D1 D0
Smaž displej 0 0 0 0 0 0 0 0 0 1 1.53ms
Nastav kurzor na začátek 0 0 0 0 0 0 0 0 1 x 1.53ms
Nastav vstupní režim 0 0 0 0 0 0 0 1 I/D SH 39us
Zapni/vypni displej/kurzor 0 0 0 0 0 0 1 D C B 39us
Nastav posun displeje/kurzoru 0 0 0 0 0 1 S/C R/L x x 39us
Nastav vlastnosti displeje 0 0 0 0 1 DL N F x x 39us
Nastav adresu v CGRAM 0 0 0 1 A5 A4 A3 A2 A1 A0 39us
Nastav adresu v DDRAM 0 0 1 A6 A5 A4 A3 A2 A1 A0 39us
Vyčti příznak BUSY a adresu 0 1 BF A6 A5 A4 A3 A2 A1 A0 0us
Zapiš data do RAM 1 0 D7 D6 D5 D4 D3 D2 D1 D0 43us
Vyčti data z RAM 1 1 D7 D6 D5 D4 D3 D2 D1 D0 43us
Bit Význam hodnoty
I/D 0 = pohyb kurzoru doleva 1 = pohyb kurzoru doprava
SH 0 = posun displeje (znaků) vypnut 1 = posun displeje (znaků) zapnut
D 0 = displej (zobrazení) vypnut 0 = displej (zobrazení) zapnut
C 0 = zobrazení kurzoru vypnuto 1 = zobrazení kurzoru zapnuto
B 0 = blikání kurzoru vypnuto 1 = blikání kurzoru zapnuto
S/C 0 = posouvá se kurzor 1 = posouvá se displej (znaky)
R/L 0 = posun kurzoru/displeje doleva 1 = posun kurzoru/displeje doprava
DL 0 = 4bitová datová sběrnice 1 = 4bitová datová sběrnice
N 0 = jednořádkový displej 1 = dvouřádkový displej
F 0 = znak se skládá z 5x7 pixelů 1 = znak se skládá z 5x10 pixelů
BF 0 = řadič displeje čeká na instrukce 1 = řadič displeje provádí instrukci
Tabulka 1.6 LCD displej - seznam instrukcí
Jak už jsme naznačili v popisu schématu, při komunikaci s displejem budeme používat celou šířku datové sběrnice, tj. 8 bitů. Což je mimo jiné i vychozí nastavení displeje po zapnutí napájecího napětí. Protože máme vývod displeje R/W uzemněn, je možný pouze zápis do displeje. Proto při komunikaci s displejem nemůžeme použít dotazování se na připravenost displeje přijmout další instrukci (pomocí instrukce na vyčtení příznaku BUSY), ale musíme vždy počkat určitou minimální dobu, kterou trvá zpracování instrukce v displeji. Tyto doby jsou uvedeny v tabulce 1.6.
Průběh signálů při osmibitové komunikaci je zobrazen na obrázku 1.13. Z něj je patrné, že data musí být na sběrnici už stabilní před sestupnou hranou signálu E. Prakticky se to dělá tak, že nejprve umístíme na sběrnici data a pak vygenerujeme kladný impulz signálu E.
obrázek hwkit-lcd-8bit-interface
Obrázek 1.13 LCD displej - 8bitová komunikace
Incializace LCD displeje se provádí podle sekvence zobrazené na obrázku 1.14. Prodlevy mezi instrukcemi uvedené v inicializační sekvenci jsou skutečně ty nejmenší možné, které musíme dodržet,. Často bývá nutné je prodloužit, nastavit vlastnosti displeje několikrát apod., prostě inicializační sekvenci přizpůsobit konkrétnímu displeji a jeho zapojení.
obrázek hwkit-lcd-inicializace
Obrázek 1.14 LCD displej - inicializační sekvence

Schéma

Na obrázku 1.15 je zobrazeno schéma zařízení LCD displej, v tabulce 1.7 pak nalezneme seznam potřebných součástek.
obrázek hwkit-lcd-schema
Obrázek 1.15 LCD displej - schéma
Schéma samotné nepotřebuje příliš komentářů. LCD displej je typu STN, 2x16 znaků. Jinými slovy je to standardní dvouřádkový displej s řadičem HD44780 nebo kompatibilním. Zatímco displej samotný je zobrazovacím prvkem, řadič displeje se stará jednak o komunikaci displeje s okolím a jednak o řízení procesu zobrazování. V následujícím textu budeme ovšem pod pojmem LCD displej myslet celek, tzn. displej a řadič dohromady.
Pomocí konektoru JP1 připojujeme k LCD displeji napájení a zem a uzemňujeme vývod R/W displeje, tzn. že displej bude trvale přepnutý do režimu zápisu. Dále přes něj připojujeme trimr R5, kterým se nastavuje řídící napětí pro jas displeje.
Konektor JP2 slouží k propojení vývodu RS displeje se signálem /Strobe paralelního portu. Vývod RS slouží k přepínání zápisu dat / instrukcí. Jinými slovy logická hodnota na tomto vývodu říká, zda data na sběrnici jsou znakem nebo instrukcí. Dále přes konektor JP2 propojujme vývod E se signálem /Autofeed paralelního portu. Vývod E je vstupem, kterým se aktivuje řadič, něco jako chip select. Tento vstup se používá při operacích čtení a zápisu dat. A konečně jsou přes konektor JP2 připojeny i vodiče datové displeje na datovou sběrnici paralelního portu. V našem případě budeme využívat celou šířku datové sběrnice, tedy všech 8bitů, byť displej umí komunikovat i přes 4bitovou sběrnici.