<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title> LCD2L4P02A </title>
<meta name="keywords" content="LCD Hitachi HD44780 display tlačítka piezoelement">
<meta name="description" content="Modul dvouřádkového LCD displeje se čtyřmi tlačítky a piezoelementem">
<!-- AUTOINCLUDE START "Page/Head.cs.ihtml" DO NOT REMOVE -->
<link rel="StyleSheet" href="../../../../../Web/CSS/MLAB.css" type="text/css" title="MLAB základní styl">
<link rel="StyleSheet" href="../../../../../Web/CSS/MLAB_Print.css" type="text/css" media="print">
<link rel="shortcut icon" type="image/x-icon" href="../../../../../Web/PIC/MLAB.ico">
<script type="text/javascript" src="../../../../../Web/JS/MLAB_Menu.js"></script>
<!-- AUTOINCLUDE END -->
</head>
<body lang="cs">
<!-- AUTOINCLUDE START "Page/Header.cs.ihtml" DO NOT REMOVE -->
<!-- ============== HLAVICKA ============== -->
<div class="Header">
<script type="text/javascript">
<!--
SetRelativePath("../../../../../");
DrawHeader();
// -->
</script>
<noscript>
<p><b> Pro zobrazení (vložení) hlavičky je potřeba JavaScript </b></p>
</noscript>
</div>
<!-- AUTOINCLUDE END -->
<!-- AUTOINCLUDE START "Page/Menu.cs.ihtml" DO NOT REMOVE -->
<!-- ============== MENU ============== -->
<div class="Menu">
<script type="text/javascript">
<!--
SetRelativePath("../../../../../");
DrawMenu();
// -->
</script>
<noscript>
<p><b> Pro zobrazení (vložení) menu je potřeba JavaScript </b></p>
</noscript>
</div>
<!-- AUTOINCLUDE END -->
<!-- ============== TEXT ============== -->
<div class="Text">
<p class="Title">
Modul LCD displeje se čtyřmi tlačítky a piezoelementem
</p>
<p class=Autor>
Milan Horkel, Jakub Kákona
</p>
<p class="Subtitle">
Modul LCD2L4P obsahuje dvouřádkový LCD displej s obvyklým Hitachi
řadičem a čtveřici tlačítek. Dále je vybaven piezoelementem
s oddělovačem 74HC04. Modul se používá jako univerzální
uživatelský interfejs při pokusech s mikroprocesorovými
konstrukcemi.
</p>
<p class="Subtitle">
<img width="565" height="348" src="LCD2L4P02A_files/image001.jpg"
alt="Pohled na modul displeje">
</p>
<p>
<a href="../LCD2L4P02A.cs.pdf"><img class="NoBorder"
src="../../../../../Web/PIC/FileIco_PDF.ico"
alt="Acrobat"> PDF verze</a>
</p>
<h1> Technické parametry </h1>
<table>
<tr>
<th> Parametr </th>
<th> Hodnota </th>
<th> Poznámka </th>
</tr>
<tr>
<td> Napájení </td>
<td> +5V nebo +3V/-2V </td>
<td> Záporné napětí pro řízení kontrastu </td>
</tr>
<tr>
<td> Spotřeba </td>
<td> cca 1mA </td>
<td> Při +5V (dle displeje, bez zvuku) </td>
</tr>
<tr>
<td> Displej </td>
<td> LCD, 2 řádky po 16 znacích </td>
<td> Hitachi řadič </td>
</tr>
<tr>
<td> Tlačítka </td>
<td> 4 spínací tlačítka do země </td>
<td> Volitelný pull-up odpor </td>
</tr>
<tr>
<td> Piezoelement </td>
<td> 1ks </td>
<td> Buzený z obvodu 74HC04 protitaktně </td>
</tr>
<tr>
<td> Rozměry </td>
<td> 61 x 101 x 22 mm </td>
<td> Výška nad nosnou deskou </td>
</tr>
</table>
<h1> Popis konstrukce </h1>
<h2> Úvodem </h2>
<p>
Na modulu je osazen obyčejný standardní dvouřádkový LCD displej
s Hitachi řadičem (to jsou skoro všechny dostupné řádkové
displeje). Z displeje je vyveden jen 4 bitový interfejs a
příslušné řídící signály. Pomocí propojek je možné připojit trimr pro
řízení kontrastu displeje a trvale nastavit řídící signál RW na režim
jen zápis (v obvyklých konstrukcích se z LCD displeje nic nečte,
ušetří se vývod procesoru).
</p>
<p>
Pod displejem jsou umístěna 4 velká spínací tlačítka do země. Pomocí
řady propojek označené „PULL UPS“ je možné připojit pull-up odpory
do plusu (hodnota 10k).
</p>
<p>
Pod displejem je schovaný piezoelement, který je buzený protitaktně
z obvodu 74HC04.
</p>
<h2> Zapojení modulu </h2>
<p>
<img width="382" height="145" src="LCD2L4P02A_files/image002.png"
alt="Schéma zdroje">
</p>
<p>
Dioda D1 je ochranná dioda proti přepólování napájení.
</p>
<p>
<img width="805" height="408" src="LCD2L4P02A_files/image003.png"
alt="Schéma displeje">
</p>
<p>
Standardní napájení je +5V, ale v případě potřeby může být
napájení menší. Aby bylo na displeji něco vidět, je třeba dosáhnout
rozdílu kladného napájecího napětí a napětí pro kontrast
(označené Vo) cca 5V. Napětí pro kontrast pak bude záporné.
Napájecí proud pro řízení kontrastu je velmi malý a dá se snadno
nastřídat. Při sníženém napájecím napětí je podstatně snížena spotřeba.
Spotřebu lze u některých displejů dále snížit zvětšením odporů na
displeji (dělič pro výrobu interních napětí pro displej, odpory jsou
zapojené v sérii a někdy mají zbytečně malou hodnotu).
</p>
<p>
Odpory 1k jsou zapojeny proto, aby při experimentech nebylo tak snadné
poškodit výstupy z displeje. Pokud se do displeje jen zapisuje je
třeba uzemnit signál RW. Proto je J4 tam, kde je.
</p>
<p>
Podsvícení je jen propojeno na displej. Podsvícení bývá realizováno LED
diodami zapojenými v sérii a je jej třeba budit zdrojem proudu.
</p>
<p>
<img width="385" height="595" src="LCD2L4P02A_files/image004.png"
alt="Schéma tlačítek">
</p>
<p>
Zapojení tlačítek je přímočaré. Odpory R6 až R9 jsou volitelné
(propojkami J9) pull-up odpory. Tlačítka jsou napevno zapojená „do země“.
</p>
<p>
Piezoelement (pod displejem) je buzen protitaktně přímo z výstupů
obvodu U2. Aby volný vstup nechytal rušení (brum), je zapojení doplněno
odporem RX, který zajišťuje stabilní úroveň na vstupu, pokud není buzen
z vnějšku.
</p>
<p>
<img width="775" height="275" src="LCD2L4P02A_files/image005.png"
alt="Schéma budiče piezoelementu">
</p>
<h1> Osazení a oživení </h1>
<h2> Osazení </h2>
<p>
Před osazením LCD displeje nezapomeneme osadit piezoelement. Ten se
lepí na mezikruží vystřižené z oboustranně lepící samolepky.
Vznikne tak tlaková komůrka a výsledný zvuk je mnohem silnější.
Mezikruží musí být nalepeno tak, aby dírka byla uvnitř.
</p>
<p>
<img width="202" height="210" src="LCD2L4P02A_files/image008.jpg"
alt="Nalepené mezikruží">
<img width="219" height="210" src="LCD2L4P02A_files/image009.jpg"
alt="Nalepený piezoelement">
</p>
<p>
Displej je přichycen šrouby M2.5 a mezi desku displeje a plošný spoj
modulu musíme vložit distanční válečky, například 1 nebo 2 matičky M3.
Displej nesmí být opřen o plošný spoj ani o piezoelement.
</p>
<p>
Propojovací hřebínek na LCD je vhodné zapájet až po přišroubování
displeje.
</p>
<p>
<img width="230" height="210" src="LCD2L4P02A_files/image010.jpg"
alt="Osazený rezistor RX">
</p>
<p>
Odpor RX bohužel nemá na plošném spoji plošky a musí se tak přibastlit
pomocí kousku drátu. Obrázek napoví. Když se neosadí, bude piezoelement
chytat brumy z nepřipojeného vstupu. Vyzkoušejte si to, CMOS
obvody jsou proklatě citlivé.
</p>
<p>
Při mytí desky pozor na tlačítka. Pokud do nich zateče rozpuštěná
kalafuna je třeba je opatrně rozebrat (snadné) a vyčistit.
</p>
<p>
<img width="539" height="329" src="LCD2L4P02A_files/image006.jpg"
alt="Osazení, pohled ze strany součástek">
</p>
<p>
<img width="542" height="135" src="LCD2L4P02A_files/image007.jpg"
alt="Osazení, pohled ze strany spojů">
</p>
<table class="Soupiska">
<tr>
<th> Počet </th>
<th> Reference </th>
<th> Hodnota </th>
<th> Pouzdro </th>
</tr>
<tr>
<th colspan="4"> Odpory </th>
</tr>
<tr>
<td> 4x </td>
<td> R1, R2, R3, R4 </td>
<td> 1k </td>
<td> R0805 </td>
</tr>
<tr>
<td> 4x </td>
<td> R6, R7, R8, R9 </td>
<td> 10k </td>
<td> R0805 </td>
</tr>
<tr>
<td> 1x </td>
<td> R5 </td>
<td> 47k </td>
<td> R0805 </td>
</tr>
<tr>
<td> 1x </td>
<td> RX </td>
<td> 1M </td>
<td> R0805 </td>
</tr>
<tr>
<th colspan="4"> Odporové trimry </th>
</tr>
<tr>
<td> 1x </td>
<td> P1 </td>
<td> 47k </td>
<td> PT10V </td>
</tr>
<tr>
<th colspan="4"> Keramické kondenzátory </th>
</tr>
<tr>
<td> 1x </td>
<td> C1 </td>
<td> 100nF </td>
<td> C0805 </td>
</tr>
<tr>
<th colspan="4"> Tantalové kondenzátory </th>
</tr>
<tr>
<td> 1x </td>
<td> C2 </td>
<td> 4u7/16V </td>
<td> ELYTB </td>
</tr>
<tr>
<th colspan="4"> Polovodiče </th>
</tr>
<tr>
<td> 1x </td>
<td> D1 </td>
<td> 1N4004 </td>
<td> DO41 </td>
</tr>
<tr>
<td> 1x </td>
<td> U1 </td>
<td> LCD_MODULE </td>
<td> LCD_SC1602A </td>
</tr>
<tr>
<td> 1x </td>
<td> U2 </td>
<td> 74HC04/SO </td>
<td> SO14_150 </td>
</tr>
<tr>
<th colspan="4"> Mechanické součástky </th>
</tr>
<tr>
<td> 4x </td>
<td> SW1,SW2,SW3,SW4 </td>
<td> P-DT6GE </td>
<td> PUSH120 </td>
</tr>
<tr>
<td> 1x </td>
<td> J4 </td>
<td> JUMP1 </td>
<td> JUMP1 </td>
</tr>
<tr>
<td> 3x </td>
<td> J2, J5, J7 </td>
<td> JUMP2 </td>
<td> JUMP2 </td>
</tr>
<tr>
<td> 1x </td>
<td> J6 </td>
<td> JUMP3 </td>
<td> JUMP3 </td>
</tr>
<tr>
<td> 1x </td>
<td> J1 </td>
<td> JUMP2X3 </td>
<td> JUMP2X3 </td>
</tr>
<tr>
<td> 2x </td>
<td> J8, J9 </td>
<td> JUMP2X4 </td>
<td> JUMP2X4 </td>
</tr>
<tr>
<td> 1x </td>
<td> J3 </td>
<td> JUMP2X8 </td>
<td> JUMP2X8 </td>
</tr>
<tr>
<td> 1x </td>
<td> SP1 </td>
<td> KBI-2734 </td>
<td> JUMP2 </td>
</tr>
<tr>
<th colspan="4"> Konstrukční součástky </th>
</tr>
<tr>
<td> 2x </td>
<td> </td>
<td colspan="2"> Jumper </td>
</tr>
<tr>
<td> 4x </td>
<td> </td>
<td colspan="2"> Šroub M2.5x8, válcová hlava </td>
</tr>
<tr>
<td> 4x </td>
<td> </td>
<td colspan="2"> Matice M2.5 </td>
</tr>
<tr>
<td> 4x </td>
<td> </td>
<td colspan="2"> Matice M3 </td>
</tr>
<tr>
<td> 4x </td>
<td> </td>
<td colspan="2"> Šroub M3x12, křížový, válcová hlava </td>
</tr>
<tr>
<td> 4x </td>
<td> </td>
<td colspan="2"> Podložka M3 </td>
</tr>
<tr>
<td> 4x </td>
<td> </td>
<td colspan="2"> Sloupek M3x5 </td>
</tr>
</table>
<h2> Oživení </h2>
<p>
Pokud je plošný spoj a součásti v pořádku, není co oživovat. Pro
otestování je vhodné použít některý z příkladů z tohoto webu.
Jsou připraveny příklady v jazyce C pro procesory PIC i AVR.
</p>
<h1> Ovládání LCD displeje s HD44780 </h1>
<h2> Úvodem o řadiči </h2>
<p>
Většina jednořádkových, dvouřádkových a čtyřřádkových LCD displejů je
řízena stařičkým Hitachi řadičem HD44780 nebo některým z jeho
klonů.
</p>
<p>
Řadič obsahuje paměť RAM (nazývanou DD RAM) pro zapisované znaky o
kapacitě 2x40 znaků.
</p>
<p>
Dále obsahuje paměť RAM (nazývanou CG RAM) pro definici 8
uživatelských znaků.
</p>
<p>
K řadiči může být připojen vlastní LCD displej (sklo) s různě
zapojenými segmenty. Některé delší jednořádkové displeje jsou ve
skutečnosti dvouřádkové (levá polovina displeje je první řádka a pravá
polovina displeje je druhá řádka). Čtyřřádkové displeje jsou ve
skutečnosti dvouřádkové s tím, že segmenty jsou fyzicky na skle
umístěny do dvou řádek.
</p>
<p>
Řadič samotný umí jen režim jednořádkový a dvouřádkový. Po resetu je
nastaven jednořádkový režim a proto po zapnutí napájení u dvouřádkového
displeje svítí první řádka dokud nedojde ke správné inicializaci.
</p>
<h2> Řízení </h2>
<p>
LCD displej se ovládá zápisem do řídících registrů (RS=0), do paměti
pro zobrazovaný text (DD RAM) nebo do paměti definice znaků
(CG RAM). Z pamětí DD RAM a CG RAM je možné rovněž
číst ale tato funkce nebývá potřebná a je možné trvale čtení
deaktivovat (RW=0).
</p>
<p>
Zápis (i čtení) může buď probíhat najednou po 8 bitech nebo nadvakrát
po 4 bitech. Druhý způsob je výhodný z hlediska snížení počtu
portů procesoru, ke kterému je displej připojen. Pozor, pro čtyřbitový
provoz se používají vývody D7 až D4.
</p>
<p>
Obsah paměti DD RAM definuje (v ASCII kódu + japonské znaky), co
se bude zobrazovat. První polovina paměti RAM je vyhrazena pro první
řádku a druhá polovina pro druhou řádku. Není-li displej 2x40 znaků
(nebo čtyřřádkový 4x20 znaků) je vidět jen kus, výřez, z celé
DD RAM paměti.
</p>
<p>
Uživatelsky definované znaky (celkem 8 kusů) jsou zobrazovány když se
do DD RAM zapíše kód 0 až 7 nebo 8 až 15. Tvar znaků je uložen v
CG RAM po řádcích.
</p>
<p>
Je možné volit, zda se při zápisu znaků do DD RAM automaticky
zvyšuje adresa do které se zapisuje nebo zda se posouvá okno. Posouvání
okna je možné řídit nezávisle a je tak možné snadno realizovat běžící
text.
</p>
<p>
Pozor na časování. Některé instrukce potřebují pro své provedení delší
čas. Pokud nečteme stav busy bitu, je třeba počkat příslušnou dobu
v čekací smyčce. Některé displeje mohou být o něco pomalejší a pak
se nepovede inicializace. Rychlost displeje je také závislý na jeho
napájení (5V nebo 3.3V). Konzervativní hodnoty časů jsou uvedeny
v tabulce.
</p>
<table>
<tr>
<th rowspan="2"> Instrukce </th>
<th colspan="2" class="Center"> Řízení </th>
<th colspan="8" class="Center"> Datová sběrnice </th>
</tr>
<tr>
<th> RS </th>
<th> RW </th>
<th> D7 </th>
<th> D6 </th>
<th> D5 </th>
<th> D4 </th>
<th> D3 </th>
<th> D2 </th>
<th> D1 </th>
<th> D0 </th>
</tr>
<tr>
<td> <b>Smaž displej a nuluj adresu DD</b> (2ms) </td>
<td> 0 </td>
<td> 0 </td>
<td> 0 </td>
<td> 0 </td>
<td> 0 </td>
<td> 0 </td>
<td> 0 </td>
<td> 0 </td>
<td> 0 </td>
<td> 1 </td>
</tr>
<tr>
<td> <b>Nuluj adresu DD na 0 a zruš posunutí</b> (2ms) </td>
<td> 0 </td>
<td> 0 </td>
<td> 0 </td>
<td> 0 </td>
<td> 0 </td>
<td> 0 </td>
<td> 0 </td>
<td> 0 </td>
<td> 1 </td>
<td> * </td>
</tr>
<tr>
<td> <b>Nastavení pohybu kurzoru</b> (40µs) </td>
<td> 0 </td>
<td> 0 </td>
<td> 0 </td>
<td> 0 </td>
<td> 0 </td>
<td> 0 </td>
<td> 0 </td>
<td> 1 </td>
<td> ID </td>
<td> S </td>
</tr>
<tr>
<td> <b>Nastavení módu displeje</b> (40µs) </td>
<td> 0 </td>
<td> 0 </td>
<td> 0 </td>
<td> 0 </td>
<td> 0 </td>
<td> 0 </td>
<td> 1 </td>
<td> D </td>
<td> C </td>
<td> B </td>
</tr>
<tr>
<td> <b>Okamžitý posuv kurzoru nebo textu</b> (40µs) </td>
<td> 0 </td>
<td> 0 </td>
<td> 0 </td>
<td> 0 </td>
<td> 0 </td>
<td> 1 </td>
<td> SC </td>
<td> RL </td>
<td> * </td>
<td> * </td>
</tr>
<tr>
<td> <b>Nastavení funkce displeje</b> (40µs) </td>
<td> 0 </td>
<td> 0 </td>
<td> 0 </td>
<td> 0 </td>
<td> 1 </td>
<td> DL </td>
<td> N </td>
<td> F </td>
<td> * </td>
<td> * </td>
</tr>
<tr>
<td> <b>Nastavení adresy CG</b> (40µs) </td>
<td> 0 </td>
<td> 0 </td>
<td> 0 </td>
<td> 1 </td>
<td> A5 </td>
<td> A4 </td>
<td> A3 </td>
<td> A2 </td>
<td> A1 </td>
<td> A0 </td>
</tr>
<tr>
<td> <b>Nastavení adresy DD</b> (40µs) </td>
<td> 0 </td>
<td> 0 </td>
<td> 1 </td>
<td> A6 </td>
<td> A5 </td>
<td> A4 </td>
<td> A3 </td>
<td> A2 </td>
<td> A1 </td>
<td> A0 </td>
</tr>
<tr>
<td> <b>Čtení adresy a busy bitu</b> </td>
<td> 0 </td>
<td> 1 </td>
<td> BF </td>
<td> A6 </td>
<td> A5 </td>
<td> A4 </td>
<td> A3 </td>
<td> A2 </td>
<td> A1 </td>
<td> A0 </td>
</tr>
<tr>
<td> <b>Zápis dat</b> (40µs) </td>
<td> 1 </td>
<td> 0 </td>
<td> D7 </td>
<td> D6 </td>
<td> D5 </td>
<td> D4 </td>
<td> D3 </td>
<td> D2 </td>
<td> D1 </td>
<td> D0 </td>
</tr>
<tr>
<td> <b>Čtení dat</b> (40µs) </td>
<td> 1 </td>
<td> 1 </td>
<td> D7 </td>
<td> D6 </td>
<td> D5 </td>
<td> D4 </td>
<td> D3 </td>
<td> D2 </td>
<td> D1 </td>
<td> D0 </td>
</tr>
</table>
<table>
<tr>
<th> Bit </th>
<th> Popis </th>
</tr>
<tr>
<td> S=1 </td>
<td> Při zápisu/čtení dat se bude posouvat celý displej (směr určuje bit ID) </td>
</tr>
<tr>
<td> S=0 </td>
<td> Při zápisu/čtení dat se bude posouvat jen kursor (směr určuje bit ID) </td>
</tr>
<tr>
<td> ID=1 </td>
<td> Při zápisu/čtení dat je ukazatel adresy inkrementován </td>
</tr>
<tr>
<td> ID=0 </td>
<td> Při zápisu/čtení dat je ukazatel adresy dekrementován </td>
</tr>
<tr>
<td> B=1 </td>
<td> Blikající znak na pozici kurzoru </td>
</tr>
<tr>
<td> B=0 </td>
<td> Znak nebliká </td>
</tr>
<tr>
<td> C=1 </td>
<td> Zapnutí kurzoru </td>
</tr>
<tr>
<td> C=0 </td>
<td> Vypnutí kurzoru </td>
</tr>
<tr>
<td> D=1 </td>
<td> Zapnutí displeje </td>
</tr>
<tr>
<td> D=0 </td>
<td> Vypnutí displeje </td>
</tr>
<tr>
<td> RL=1 </td>
<td> Okamžitý posuv doprava </td>
</tr>
<tr>
<td> RL=0 </td>
<td> Okamžitý posuv doleva </td>
</tr>
<tr>
<td> SC=1 </td>
<td> Okamžitý posuv textu </td>
</tr>
<tr>
<td> SC=0 </td>
<td> Okamžitý posuv kurzoru </td>
</tr>
<tr>
<td> F=1 </td>
<td> Znaky v rastru 5x10 </td>
</tr>
<tr>
<td> F=0 </td>
<td> Znaky v rastru 5x7 (běžné) </td>
</tr>
<tr>
<td> N=1 </td>
<td> Počet řádek displeje 2 nebo 4 </td>
</tr>
<tr>
<td> N=0 </td>
<td> Počet řádek displeje 1 (některé jednořádkové displeje jsou
dvouřádkové – místo řádek mají levou a pravou polovinu) </td>
</tr>
<tr>
<td> DL=1 </td>
<td> Přenos dat 8 bitů </td>
</tr>
<tr>
<td> DL=0 </td>
<td> Přenos dat 4 bity (používají se vodiče D7 až D4) </td>
</tr>
<tr>
<td> BF=1 </td>
<td> Busy – probíhá vnitřní operace </td>
</tr>
<tr>
<td> BF=0 </td>
<td> Ready – je možné posílat instrukce </td>
</tr>
</table>
<h1> Programové vybavení </h1>
<p>
Na tomto webu jsou připraveny knihovní funkce pro ovládání LCD displeje
pro procesory PIC a AVR napsané v jazyce C.
</p>
</div>
<!-- AUTOINCLUDE START "Page/Footer.cs.ihtml" DO NOT REMOVE -->
<!-- ============== PATIČKA ============== -->
<div class="Footer">
<script type="text/javascript">
<!--
SetRelativePath("../../../../../");
DrawFooter();
// -->
</script>
<noscript>
<p><b> Pro zobrazení (vložení) hlavičky je potřeba JavaScript </b></p>
</noscript>
</div>
<!-- AUTOINCLUDE END -->
</body>
</html>