Detailné zapojenie a programovanie LCD displejov s radičom HD44780

LCD displej je veľmi užitočná súčiastka, ktorá nájde svoje uplatnenie v mnohých Arduino projektoch. Mnohé aplikácie pre Arduino potrebujú priebežne, alebo v prípade potreby zobrazovať informácie a možnosť zobrazovania sa hodí aj pri ladení aplikácie, napríklad na vypísanie informácií o aktuálnom stave, hodnotách premenných a podobne.

Ak sa nespokojíte s výstupom na sériovú linku alebo hľadáte kvalitnejší výstup, ktorý nemusí byť pripojený k PC, pravdepodobne siahnete po LCD displeji. Pre začiatok je najlepším riešením viacriadkový LDC displej s možnosťou podsvietenia, takže displej je dobre čitateľný cez deň aj v tme.

Typy a vlastnosti znakových LCD displejov

Znakové displeje sa rozdeľujú na grafické a znakové. Grafický displej umožňuje na kontinuálnej matici bodov zobraziť grafické obrazce a samozrejme aj text rôznym fontom. Znakové displeje sú v podstate tiež maticové, akurát matice pre každý znak sú oddelené. Znakové displeje umožňujú zobraziť rôzne dlhý text v jednom, alebo viacerých riadkoch.

LCD displeje s radičom Hitachi HD44780 sa často používajú v kopírkach, priemyselných strojoch, automatoch, napríklad na lístky MHD v Bratislave. Vyrábajú sa s podsvietením v rozličných farebných kombináciách. Ponúkajú sa vo formátoch od 1 × 8 cez bežnejšie formáty 2 × 8, 2 × 16 až po 2 × 40, či dokonca 4 × 20 a 4 × 40. Väčšina sa vyrába s podsvietením, ktoré býva najčastejšie LED, ale vyskytuje sa napr. aj elektroluminiscenčné. Radiče bývajú obvykle kompatibilné.

Relatívne lacný LCD displej sa vyrába v rôznych veľkostiach (16x2, 16x4, 20x4…). Prvé číslo určuje počet znakov na riadku a druhé číslo určuje počet riadkov. Medzi hlavné výhody LCD displeja patria ich dobrá čitateľnosť aj na slnku, schopnosť pracovať pri nízkych teplotách a jednoduchosť použitia. My budeme používať displej s veľkosťou 16x2 typu 1602-A, ale pod týmto označením sa predávajú displeje viacerých výrobcov.

Rôzne typy znakových LCD displejov pre mikrokontroléry

Zapojenie LCD displeja k mikrokontroléru (napr. Arduino)

Displej sa obvykle dodáva bez naletovaných konektorov. Preto je ho potrebné pred prvým použitím doplniť o nejaké pohodlné konektory, ktoré umožnia jeho pohodlné pripájanie a odpájanie. Piny sú na displeji označené a obvykle sa nachádzajú na ľavom hornom okraji displeja. Pre pripojenie k mikropočítaču používajú alfanumerické LCD displeje rozhranie, ktoré pozostáva z troch riadiacich signálov a 8 dátových.

Pinout a funkcie pinov

Display má celkom 16 pinov. Tu sú dôležité piny a ich funkcie:

  • Vss (GND): Zem.
  • Vdd (+5V): Napájanie, typ. 5V.
  • Vo (V0): Kontrast. Tento vstup je určený na ovládanie kontrastu displeja analógovým napätím. Ak je zle nastavený kontrast, na displeji vôbec nič nevidno a často je potom považovaný za poškodený. Ten je možné nastaviť potenciometrom. Medzi vývody Vss, Vdd a Vo (piny 1, 2 a 3 displeja) sa odporúča zapojiť trimer, alebo potenciometer na nastavenie kontrastu.
  • RS (Register Select): Signál RS (Register Select) - výber registrov - na displeji pin č. 4. Nadradený mikrokontrolér musí byť schopný ovládať tento vstup, aby bolo možné správne prenášať príkazy pre ovládač displeja (RS = 0) a údaje na zobrazenie (RS = 1).
  • R/W (Read/Write): Zapisovanie alebo čítanie dát. V našom príklade sme natrvalo vynútili nízku úroveň na tomto vstupe LCD modulu a spojili sme ho s príkonom. Je to správne za predpokladu, že údaje uložíme len do displeja a nebudeme ich čítať.
  • EN (Enable): Signál EN (Enable) - povolenie zápisu do registrov - na displeji pin č. 6. Padajúca hrana na vstupe „E” (Enable) prepíše logické úrovne (pozostávajúce zo 4- alebo 8-bitových slovných údajov) zo vstupov DB0... DB7 do internej pamäte LCD modulu.
  • DB0 - DB7 (Data Bus): Dátové piny. Pre pripojenie sa však bežne používa len modifikované zapojenie so 4 datovými vodičmi (DB4-DB7).
  • A (Anóda podsvietenia): Kladný pól podsvetlenia displeja. Niektoré displeje sú čitateľné aj bez podsvetlenia, iné nie. Posledný rezistor je pripojený k podsvieteniu a limituje prúd cez LED diódu podsvietenia, pretože tak si to odo mňa vyžadoval datasheet.
  • K (Katóda podsvietenia): Záporný pól podsvetlenia.
Schéma zapojenia pinov LCD displeja 1602

Módy pripojenia: 4-bitový a 8-bitový

LCD displej môže komunikovať v 4-bitovom alebo 8-bitovom móde. Pri 8-bitovom móde sú zapojené všetky dátové piny D0-D8 a prenáša sa naraz všetkých 8 bitov. Nevýhodou je obsadenie viacerých portov na mikrokontrolérovej doske.

V obvyklom štvorbitovom móde sa však využíva iba štyri dátové vodiče D4 až D7 a osembitové dáta sa prenášajú na dva krát. Najskôr sa pošlú 4 horné bity a potom 4 dolné bity. Je to nepatrne pomalšie. V tomto príklade nadradený mikrokontrolér ovláda LCD modul pomocou výstupných signálov. Zmenou výstupných signálov riadi logické úrovne na vstupoch zobrazovacieho modulu.

Zapojenie pomocou I2C modulu

Ak je pre konkrétnu konštrukciu veľa aj 6 pinov pri 4-bitovom zapojení, môžete displej pripojiť cez sériovú zbernicu I2C. Nepotrebujete špeciálny displej, k dispozícii sú dosky, ktoré sa nasadia na 16 pinový konektor displeja a pripojiť pomocou dvoch dátových pinov (SDA a SCL) + dvoch pinov na napájanie.

I2C modul pre LCD displej 1602

Programovanie LCD displeja s Arduino

Platformy ako Arduino nevyžadujú, aby používateľ vedel, ako jednotlivé komponenty fungujú. Základnú dosku môžete jednoducho pripojiť k rozširujúcemu modulu/nadstavbe a spustiť funkčnú aplikáciu. Avšak pre pochopenie spôsobu ovládania LCD modulu sú základné znalosti pamäťových systémov a digitálnych obvodov vo všeobecnosti nevyhnutné. Je potrebné poznať také pojmy ako vysoká, nízka logická úroveň, tvar vlny, údaje, 8-bitové číslo, bajt, bit, zostupná a stúpajúca hrana.

Alfanumerické displeje využívajú ako radič obvod Hitachi HD44780 a vývojové prostredie pre Arduino umožňuje prilinkovať knižnicu, ktorá podporuje všetky LCD displeje s týmto radičom. Program pre Arduino vyžaduje knižnicu LiquidCrystal.h, ktorá by však mala byť už nainštalovaná. Pre I2C pripojenie si z webu stiahnete knižnicu LiquidCrystal_I2C a uložíte ju do adresára libraries.

Inicializácia a základné príkazy

Pred zobrazením informácií na displeji musíte nastaviť mikrokontrolér. Poinformujeme mikrokontrolér, ku ktorému je pripojený displej. Slúži na to funkcia lcd(), v ktorej zoznam argumentov inštruuje procesor, kde sú jednotlivé signály privedené. Dátové a riadiace piny displeja môžete pripojiť na ľubovoľný digitálny dátový vývod Arduina, samozrejme to musíte deklarovať pri inicializácii softvérovej knižnice.

Radič HD44780 je univerzálnou sústavou určenou na podporu LCD obrazoviek s rôznym počtom znakov (stĺpcov a riadkov). To spôsobuje, že ovládač „nevie", aká obrazovka je pripojená, keď je napájanie zapnuté a je potrebné ho nakonfigurovať pre správnu prevádzku. V Arduino sa na to používa funkcia begin(), ktorej argumenty sú počet stĺpcov a počet riadkov. Napríklad, pre displej 16x2, je to lcd.begin(16, 2);

Príkladom jednej z najjednoduchších inštrukcií je 0000 0001, ktorým sa vymaže celý zobrazený obsah a kurzor sa vráti do počiatočenej pozície 0,0. Vzorový program používa aj funkciu clear() na čistenie obrazovky. Je dobré ju použiť ako prvú, po inicializácii LCD modulu, pretože sa môžeme stretnúť s displejmi, ktoré po inicializácii zobrazujú náhodné znaky.

Funkcia print() napíše na display text. Argumenty pre jej vyvolanie sú údaje, ktoré sa majú zobraziť, napríklad číslo alebo text. Print umiestni zobrazené znaky z aktuálnej pozície kurzora. Iným užitočným a často používaným príkazom je nastavenie aktuálnej pozície kurzora, teda miesto na displeji, kam sa bude vypisovať text. Na displeji sa čísluje od (0,0) => kurzor na 1. znak, 1. riadku definujeme ako lcd.setCursor(0,0);.

Ako používať LCD obrazovku s Arduinom (lekcia č. 21)

Práca s pamäťou displeja a špeciálnymi znakmi

DDRAM je pamäť aktuálne zobrazených znakov (Display Data RAM). Každý zobrazený znak zodpovedá jednej pozícii v DDRAM. Prvý riadok má adresy od 0 po 39 pre 40 znakov a to aj vtedy, ak má displej v skutočnosti menej pozícií. Druhý riadok má pridelené adresy 64 až 103. Tretí riadok má potom vložené adresy 40 až 63 a štvrtý riadok 104 až 159.

Displej (resp. jeho radič HD44780) okrem iného obsahuje aj malú pamäť vyhradenú na užívateľom vytvorené znaky (CGRAM). Môže ich byť max. 8. V pamäti ROM má napevno uložené definície 208 znakov v matici 5 × 8 bodov a 32 znakov v matici 5 × 10 bodov. Zlou správou pre našinca je, že tam nie sú znaky so slovenskou diakritikou. Tie môžete v matici 5 × 8 bodov definovať do pamäte typu CGRAM. Pre zobrazenie znaku, ktorý nie je v bežnej ASCII tabuľke, je potrebné pozrieť sa do tabuľky znakov HD44780 radiča. Napríklad pre znak stupeň (°) si ho nájdeme vo stĺpci 1101 a na riadku xxxx1111.

Ak chcete vytvoriť úplne vlastný znak, ktorý nie je ani v tabuľke, je to tiež možné. Jednotlivé znaky sa skladajú z pixelov, konkrétne 8 na výšku a 5 na šírku. Môžeme displeju povedať, ktoré pixely chceme rozsvietiť.

Príklad definície vlastného znaku v CGRAM na LCD displeji

Pokročilé funkcie a tipy

Často však potrebujeme vypisovať aj hodnoty premenných a náročnejšie formátované výstupy. Ak vám chýba funkcia printf() s jej rozsiahlymi formátovacími možnosťami, oceníte ukážku využitia pomocou jej sesterskej funkcie sprintf(), ktorá vám pripraví požadovaný reťazec na výstup. Doba trvania (execution time) je stanovená pre oscilátor s frekvenciou 270 kHz.

Pripravená knižnica netestuje príznak BF (busy flag). Namiesto testu bitu BF registra AC funkcia busy_flag len počká cca 1ms (čas ktorý väčšine príkazov displeja vyhovuje). Ako zaujímavosť navyše pridávame aj originálny manuál k radiču od firmy Hitachi z roku 1980.

Poznámky k displejom Opel a ich zapojeniu

Zákazníci často hľadajú schémy zapojenia palubných displejov, napríklad pre vozidlá Opel. Je dôležité si uvedomiť, že displeje používané v automobiloch, ako napríklad v Opeli, môžu byť odlišného typu od bežných alfanumerických LCD displejov s radičom HD44780, ktoré sa pripájajú k Arduinu. V Opeli sa často stretávame s VFD (vakuovými fluorescenčnými) displejmi, ktoré majú odlišnú technológiu a zapojenie.

Oprava tohto displeja je náročná na vybavenie asi aj znalosti. V servisoch hlavne používajú diagnostiku a iné prístroje len málokde. Bohužiaľ, v poskytnutom texte nie je konkrétna schéma zapojenia palubného displeja pre Opel. Diskusia sa sústredí skôr na problémy s opravou a nedostupnosťou oficiálnych schém pre amatérske opravy.

Ak teda hľadáte schéma zapojenia pre palubný displej Opel, je potrebné hľadať špecifické materiály pre daný model vozidla a typ displeja (či už je to VFD alebo iný automobilový displej), ktoré sa líšia od zapojenia štandardných HD44780 LCD modulov pre hobby projekty s Arduinom. Zásadná vec, ktorú treba zdôrazniť, je, že zapojenia pre všetky veľkosti (štandardných) displejov sú rovnaké! Jediná zmena nastáva v kóde na riadku lcd.begin(20,4);. Ale to platí pre bežné, programovateľné LCD displeje, nie pre integrované automobilové systémy.

tags: #elektroinstalacia #lcd #opel