Standardní komunikace s moduly probíhá paralelně. To ovšem vyžaduje poměrně značně širokou sběrnici, obsahující osm datových a tři řídící digitální linky plus jednu analogovou linku pro řízení kontrastu zobrazení, celkem tedy dvanáct vodičů. Smíříme-li se pouze s jednosměrnou komunikací (kdy lze data do LCD pouze zapisovat), napevno nastaveným kontrastem a poněkud komplikovanějším komunikačním protokolem při využití pouze čtyřbitové komunikace (což řadiče LCD modulů typu HD44780 nebo jejich ekvivalenty umožňují), sníží se počet potřebných vodičů na šest. Pro jednoduché aplikace, které jsou řízeny některým typem mikroprocesoru s redukovaným počtem vývodů (např. 87C751, 89C2051 nebo některé z řady PIC), je však i toto řešení neúnosné.
Například mikroprocesor 89C2051 má k dispozici jen patnáct vstupně-výstupních linek, to znamená, že LCD modul z nich spotřebuje plné dvě pětiny a to v nejpříznivějším případě. Vývody mikroprocesoru použité pro datovou sběrnici LCD modulu sice lze multiplexovat s jinými periferiemi, ale komplikuje to tvorbu software a navíc jsou většinou potřebné další podpůrné obvody. Ideální by bylo, kdyby LCD moduly komunikovaly sériově. Ty to sice přímo neumí, ale je možné vložit mezi řídící procesor a LCD modul sériový interface. Dále popsaný obvod umožňuje komunikaci s LCD moduly pomocí pouhých dvou vodičů a to včetně řízení kontrastu zobrazení LCD! Jediným omezením je, že komunikace probíhá pouze jednosměrně – data jsou do řadiče LCD jen zapisována a nelze je z LCD zpětně číst.
Pro vysílání sériových dat do LCD modulu jsou ideální
mikroprocesory obsahující UART nebo SPI jako interní periferii. Sériové
rozhraní je pak hardwarově řízeno přímo pomocí CPU mikroprocesoru a obslužný
software je tedy velmi jednoduchý. Mezi takové mikroprocesory patří např. téměř
všechny z typové řady xC51 a právě pro tento typ mikroprocesorů bude dále popsán
způsob připojení a programové obsluhy. Mikroprocesory, které nemají vestavěn UART nebo
SPI (87C751, některé z řady PIC apod.), musí sériovou komunikaci vytvářet softwarově.
Pro průměrně zkušeného programátora to ale není žádný problém.
Popis zapojení a funkce obvodů Obvodové schéma je na obrázku. Jádrem převodníku
je posuvný registr IO1 se sériovým vstupem a paralelními výstupy. Jeho
vnitřní struktura je zjednodušeně znázorněna na obrázku. Součástí
integrovaného obvodu IO1 je výstupní osmibitový latch registr, který dovoluje
příjem a posuv dat ze sériového vstupu, aniž by se měnily stavy paralelních
výstupů. Teprve po ukončení sériového přenosu jsou náběžnou hranou impulsu na
vstupu DCLK (Data Clock) zachycená data přenesena na třístavové výstupy QA až QH,
které jsou uvolněny logickou nulou na hradlovacím vstupu G (Gate). Výstup QH‘ pro
sériové rozšíření není v našem případě využit.
Sériová data ze vstupu DS (Data Seriál in) jsou zachycována a posouvána
náběžnou hranou impulsu na vstupu SCLK (Serial Clock). Celý obvod lze asynchronně nulovat logickou
nulou na resetovacím vstupu R (Reset).
S obvody řídícího mikroprocesoru je kromě napájení (stabilizované napětí 5 voltů přiváděné do bodů X1-4 “VCC” a X1-1 “GND”) převodník propojen pouhými dvěma signály přiváděnými na vstupy X1-3 “DATA” a X1-2 “CLOCK”. Průběhy těchto a dalších důležitých signálů znázorňuje obrázek průběhů. Na obou vstupech jsou zapojeny ochranné diody D3, D4 resp. D5, D6 eliminující záporné napěťové špičky resp. napěťové špičky větší než VCC a keramické kondenzátory C4 a C5 filtrující rušivé zákmity. Tyto napěťové špičky a zákmity mohou vznikat na delším propojovacím vedení. Pokud je převodník s mikroprocesorem propojen jen krátkým vedením (cca do 20 cm), není nutné uvedené součástky používat. Odpory R7 a R8 definují jednoznačně logickou jedničku na vstupech hradel IO2F, IO2D a současně částečně zvyšují strmost náběžných hran signálů “DATA” a “CLOCK”.
Signál “DATA” je tvarován na přesné obdélníky průchodem přes invertory IO2F, IO2E vybavené na vstupu schmittovým klopným obvodem a poté přiveden na vstup dat DS obvodu IO1. Zpoždění signálu v řádu jednotek nanosekund vznikající průchodem přes dva invertory je pro náš případ zanedbatelné. Obdobně je pomocí invertoru IO2D tvarován i hodinový signál “CLOCK”, který je po úpravě přiváděn na hodinový vstup SCLK obvodu IO1. Náběžná hrana upraveného signálu posouvá data ve vnitřní struktuře IO1. Vytvarovaný a invertovaný signál “CLOCK” je dále přiveden na monostabilní klopný obvod tvořený součástkami IO2B, D2, R2, C2. Náběžná hrana signálu nabíjí skokem přes diodu D2 kondenzátor C2 a udržuje napětí na něm a tím i na vstupu invertoru IO2B na vysoké úrovni po celou dobu, kdy je vstupní signál v logické jedničce. Při změně stavu vstupního signálu na logickou nulu je kondenzátor C2 pomalu vybíjen přes odpor R2. Po ukončení zápisu všech osmi bitů do vstupních registrů IO1 již kondenzátor C2 není udržován v nabitém stavu a po době dané časovou konstantou článku C2/R2 napětí na něm poklesne na úroveň logické nuly. To způsobí překlopení invertoru IO2B do výchozí polohy. Náběžná hrana na výstupu IO2B (tj. na vstupu DCLK IO1) následně přepíše stav výstupů QA až QH obvodu IO1 nově přijatými daty. Vliv neurčité logické úrovně na vstupu IO2B vznikající během vybíjení kondenzátoru C2 je odstraněn schmittovým klopným obvodem na vstupu IO2B. Volba hodnot součástek monostabilního klopného obvodu je poměrně kritická a závisí především na kmitočtu vstupního hodinového signálu. Nejdůležitější podmínkou je, aby časová konstanta článku R2/C2 pro pokles napětí na úroveň VLO byla delší než polovina periody hodinového signálu – jinými slovy aby po celou dobu zápisu dat zůstávalo napětí na C2 nad rozhodovací úrovní schmittova klopného obvodu na vstupu IO2B – viz obr. 4. Nesmí být ale zas moc dlouhá, aby náběžná hrana zapisovacího signálu DCLK nebyla příliš zpožděna za daty, protože to by vyžadovalo vkládat do obslužného software delší prodlevy a celou komunikaci by to neúměrně zpomalovalo. Na místě D2 doporučuji použít schottkyho diodu přednostně před univerzálními typy. Je rychlejší a má menší napěťový úbytek v propustném směru, což je důležité zejména při použití integrovaných obvodů řady HC (viz dále).
Protože pro zápis dat do LCD modulu postačuje jen šest paralelních výstupů QA až QF obvodu IO1, lze zbývající dva výstupy využít pro řízení kontrastu zobrazení LCD. Jedná se o dvoubitovou regulaci, kontrast je tedy možné řídit ve čtyřech stupních. Kontrast se nastavuje analogově napětím na vstupu VO LCD modulu. Potřebné napětí je vytvářeno odporovým děličem R3/R4. K jeho středu jsou připojeny pomocné odpory R5 a R6, které řídící napětí zvyšují nebo snižují podle toho, zda jsou výstupy invertorů IO2A a IO2C na vysoké nebo nízké úrovni. Výsledné napětí je filtrováno kondenzátorem C3. Kontrast LCD je nepřímo úměrný řídícímu napětí VO, proto logická nula na vstupech IO2A a IO2C kontrast snižuje a logická jednička jej naopak zvyšuje. Vzorce pro přibližný výpočet napětí řídícího kontrast jsou uvedeny na obrázku s průběhem MKO.
Resetovací signál pro IO1 je po připojení napájecího napětí generován článkem R1/C1. Dioda D1 urychluje vybití kondenzátoru C1 po odpojení napájecího napětí. Resetovací obvod není povinný, pro naprostou většinu aplikací stačí resetovací vstup R obvodu IO1 připojit přímo na napájecí napětí VCC, protože jednak jsou nulovány jen vstupní registry IO1 (viz vnitřní schéma obvodu) a na jeho výstupech QA až QH zůstávají po připojení napájení vždy náhodné úrovně a za druhé je beztak nutné umístit hned na začátek obslužného software převodníku inicializační sekvenci obsluhy LCD modulu, která vloží na výstupy IO1 definované hodnoty dat pro LCD modul.
Celý převodník včetně LCD modulu je napájen běžným stabilizovaným
napětím 5 voltů filtrovaným kondenzátory C6 a C7. Keramický kondenzátor C6 by měl
být umístěn co nejblíže k napájecím vývodům IC1.
Použité součástky Na žádnou součástku nejsou kladeny zvláštní nároky, lze
použít běžný sortiment komerčních výrobních řad. Obvody IO1 a IO2 mohou
být libovolného provedení (LS, ALS, HC, HCT, ACT …), musí se však
brát v úvahu jejich různé napěťové úrovně odpovídající
logickým hodnotám 0 a 1. Při změně typu IO1 a IO2 bude zcela jistě třeba změnit hodnoty
součástek C2 a R2 v monostabilním klopném obvodu. Jejich hodnoty jsou současně
závislé na kmitočtu hodinového signálu “CLOCK”, jak bylo uvedeno
výše. Kmitočet hodinového signálu rovněž rozhoduje o velikost kapacity
kondenzátorů C4 a C5 (jsou-li použity). Příliš velká kapacita kondenzátorů C4, C5
může signál znehodnotit až k nepoužitelnosti a naopak kondenzátory s příliš malou
kapacitou se vůbec neuplatní. Hodnota odporů R3 až R6 řídících kontrast zobrazení
je do jisté míry také ovlivňována provedením obvodu IC2, podstatně více
však typem LCD modulu. Bohužel, každý typ LCD modulu má úplně jinou závislost
skutečného kontrastu zobrazení na řídícím napětí. Při stejně velkém
napětí na vstupu VO může jeden modul úplně zčernat a na druhém nebude naopak vidět nic. Zde
není možné dát univerzální návod, hodnoty odporů R3 až R6 bude třeba
odzkoušet individuálně pro daný typ LCD modulu.
Hodnoty C2 a R2 uvedené ve schématu platí pro IO2 typu HCT a kmitočet signálu
“CLOCK” 1,333 MHz, který odpovídá kmitočtu oscilátoru 16 MHz
řídícího mikroprocesoru z řady xC51.
Hodnoty odporů R3 až R6 uvedené ve schématu byly odzkoušeny pro
šestnáctiznakový dvouřádkový LCD modul typu MC1602J-TRV (jeden z
nejlevnějších modulů dodávaný firmou GM Electronic). Volbu hodnot odporů pro jiné
typy LCD modulů usnadňuje soubor pro tabulkový kalkulátor MS Excel-97 a vyšší
verze, který je k dispozici na internetu.
Mechanická konstrukce Převodník je výhodné konstruovat na spojové desce
stejné velikosti jako má LCD modul a výstupy pro LCD umístit na přesně stejná
místa, kde má odpovídající vývody i LCD modul. Oba bloky pak lze
jednoduše mechanicky spojit distančními sloupky a rozebíratelné elektrické
propojení realizovat pomocí dutinkových a kolíkových lišt.
Připojení k mikroprocesoru a obsluha Již bylo zmíněno, že převodník je vhodný pro spolupráci
s mikroprocesory řady xC51. UART těchto procesorů může být nastaven do čtyř odlišných
pracovních módů pomocí bitů SM0 [9Fh] a SM1 [9Eh] registru SCON [98h]. Pro řízení
převodníku je třeba zvolit mód 0 (SM0 = SM1 = 0), ve kterém se UART chová jako
posuvný registr. Při vysílání datového byte z registru SBUF [99h] jsou pak na
portu P3.0 s alternativní funkcí RxD k dispozici sériová data a na portu P3.1 s
alternativní funkcí TxD synchronizační hodinový signál. Data se
přivádějí na vstup “DATA” a hodinový signál na vstup “CLOCK”
sériového převodníku. Rychlost komunikace a tedy i kmitočet hodinového signálu
jsou odvozeny přímo od oscilátoru mikroprocesoru vydělením jeho kmitočtu dvanácti a
nelze je programově ovlivnit.
Při zápisu dat do LCD modulu je nutné dodržet předepsané časování podle obrázku Mikroprocesor s převodníkem proto musí vykonat pro zápis jedné instrukce do LCD modulu šest cyklů přenosu dat, vždy po jednom byte. V prvním cyklu je na vstupy DB4-DB7 LCD modulu přiveden vyšší nibble datového byte, na vstup RS potřebná úroveň a na vstup E logická nula. V druhém cyklu zůstávají vstupy DB4-DB7 a RS stejné a na vstup E je přivedena logická jednička. V třetím cyklu zůstávají vstupy DB4-DB7 a RS stále stejné, na vstup E je přivedena logická nula. Čtvrtý cyklus je obdobný prvnímu, ale na vstupy DB4-DB7 je přiveden nižší nibble datového byte. Pátý cyklus je shodný s druhým a šestý se třetím. Bity pro řízení kontrastu zobrazení QH, QG musí být přenášeny v každém cyklu stejné (není-li ovšem právě během přenosu dat požadována změna kontrastu). Pokud je třeba pouze změnit kontrast bez zápisu nových dat do řadiče LCD, stačí přenést jediný byte (v jednom cyklu), ve kterém bity QH, QG určují požadovaný kontrast a bit E je na nízké úrovni. Ostatní bity přenášeného byte jsou v tomto případě nevýznamné.
Předem upozorňuji případné experimentátory, že není vhodné vynechávat
druhý a čtvrtý cyklus přenosu dat a logickou jedničku na vývod E přivádět současně s
daty a RS. To koliduje s předepsaným časováním, doba tAS by pak místo
požadovaných 140 ns byla nulová. Pro některé LCD moduly to fungovat může, ale jiné se
budou chovat naprosto nedefinovaně.
Na časování instrukcí zápisu do LCD modulu je závislý
maximální možný kmitočet hodinového signálu. Nejkritičtější je doba
tPWEH, která koresponduje s druhým a pátým cyklem přenosu dat. Jeden přenosový
cyklus sestává z osmi period hodinového signálu a jednoho kyvu monostabilního
obvodu R2/C2/D2/IC2/D. Jeho trvání by se mělo rovnat asi dvěma až čtyřem periodám
hodinového signálu. Celková doba jednoho přenosového cyklu (= tPWEH, tj.
minimálně 450 ns) tedy nesmí být kratší než dvanáct period
hodinového signálu, z toho vychází maximální kmitočet hodinového
signálu 26,7 MHz. To je hodnota dostatečně velká umožňující s rezervou použití
libovolného krystalu v obvodu oscilátoru mikroprocesoru řady xC51 (teoreticky až do 320 MHz). Směrem
dolů není volba kmitočtu hodinového signálu nijak omezena, LCD moduly mohou pracovat i ve
statickém režimu. Ovšem při extrémně nízkých kmitočtech pak
vycházejí nepoužitelné hodnoty časovacích součástek monostabilního obvodu.
Příklad připojení převodníku s LCD modulem k mikroprocesoru typu 89C2051. Toto zapojení je také vhodné pro testování funkcí převodníku pomocí demonstračního programu “LCD_DEMO” (viz dále) a pro vývoj a zkoušení vlastních způsobů programového řízení převodníku.
Závěrem Zapojení poskytuje mnoho možností spolupráce s různými typy LCD modulů
a různými řídícími procesory, mění se pouze hodnoty použitých
součástek. Všechny varianty převodníku ale mají společný způsob
ovládání, jehož koncepci popisovala předchozí kapitola. Průměrný
programátor si jistě snadno vytvoří vlastní software pro řízení
převodníku, pro začátečníky je k dispozici archiv s příklady softwarových utilit
a krátkým demonstračním programem “LCD_DEMO” pro řídící mikroprocesor.
Archiv dále obsahuje soubor tabulkového kalkulátoru MS Excel určený pro výpočet
hodnot odporů řídících kontrast zobrazení LCD.
Námětem pro další rozšíření možností převodníku může
být např. pouze dvoustavové řízení kontrastu zobrazení LCD výstupem QH IO1
a využití výstupu QG IO1 pro řízení jasu LED u podsvícených LCD
pomocí PWM regulace …
- Schéma zapojení pro tisk - lcd_serial_sch_big.gif
- Rutiny pro obsluhu displeje a makro pro EXCEL na výpočet R děliče pro regulaci kontrastu. - lcd_serial_examples.zip (115 kb)