Lekce 12
Část 5
LCD indikátor 16×2
Dnes budeme pokračovat ve studiu LCD indikátor znaků, který je schopen vypisovat určité znaky ve dvou řádcích po 16 znacích.
V minulém díle jsme dokončili a zkontrolovali zápis kódu pro funkci, která na displeji zobrazí libovolný znak.
Nyní je čas napsat funkci pro zobrazení celého řádku na obrazovce, protože její výstup znak po znaku není úplně pohodlný. Přidejme tuto funkci těsně před funkci main() a předáme jí pole znaků neurčité velikosti
//—————————————-
prázdnotastr_lcd( charstr1)
{
}
//—————————————-
Zavolejte tuto funkci v main(), poté, co jsme nejprve odstranili veškerý zobrazovaný kód znak po znaku
LCD_ini(); //Inicializace displeje
setpos(0,0);
str_lcd( "Ahoj světe!");
Dále začneme psát tělo funkce výstupu řetězce. Pojďme deklarovat proměnnou pro symbol v těle funkce. Naše proměnná bude trochu jiného typu. U tohoto typu se zpravidla lépe rozpoznávají kódy znaků. Samozřejmě můžete experimentovat s jinými typy
prázdnotastr_lcd( charstr1)
wchar_tn;
Dále podle toho uspořádáme smyčku a budeme střídavě iterovat všechny přenášené znaky v poli a zobrazovat je na displeji. Využijeme také možnost reprezentace nulového znaku "n" a až do tohoto bodu budeme třídit postavy
Wchar_tn;
pro( n=0; str1[ n]!=""; n++)
sendchar( str1[ n]);
Pojďme shromáždit kód a zkontrolovat fungování kódu v Proteus
Nyní můžete zkusit zobrazit řádek na jiném místě obrazovky. Pojďme napsat kód v main()
str_lcd( "Ahoj světe!");
setpos(2,1);
str_lcd( "řetězec 2");
zatímco(1)
Pojďme shromáždit kód a podívat se na výsledek
Všechno funguje! Skvělý!
No, samozřejmě, ještě musíme vidět, jak bude kód fungovat na živém displeji s živým ovladačem. K tomu provedeme flash ovladač
Funkce formulujeme do samostatného modulu
S kódem jsme se dostali do takového stavu, že se náš hlavní a jediný soubor s kódem zaplnil natolik, že je nyní těžké v něm vůbec něco najít. Jak s tím můžeme bojovat? Budeme proti tomu bojovat zformátováním kódu funkce pro jedno zařízení nebo sběrnici nebo nějakou technologii do samostatného modulu. Kompetentní modul se obvykle skládá z hlavičkového souboru a souboru implementace funkce. Udělejme to tedy pro náš LCD displej. Toto celé je také nutné k tomu, že pokud píšeme nový projekt, tak k němu tyto soubory jednoduše připojíme, pokud budeme potřebovat LCD displej. To bude naše takzvaná zobrazovací knihovna. Knihovny jsou samozřejmě obvykle zapsány a zkompilovány do samostatného souboru lib, ale v tomto případě obvykle chybí zdrojový kód a data knihovny nelze upravovat. A naše knihovna bude zcela opravitelná a bude nám v budoucnu velmi užitečná.
Před vytvořením této knihovny však vytvoříme hlavní hlavičkový soubor a nazveme jej main.h, abychom do tohoto souboru vložili všechny zahrnuté knihovny, různé globální proměnné a substituce maker.
K tomu klikneme pravým tlačítkem myši na náš projekt ve stromě projektu Test09 a v kontextové nabídce vyberte podnabídku Přidat, a v něm již položku vybereme Nový předmět
A v dialogovém okně, které se otevře, vyberte typ souboru, který vytvoříme, " Zahrnout soubor"A dole v názvu souboru změníme IncFile1 na hlavní a poté stiskněte tlačítko Přidat.
Podle toho vytvoříme soubor main.c s následujícím obsahem
#ifndefMAIN_H_
#definovatMAIN_H_
#endif/* MAIN_H_ */
To je velmi dobre. Například. V Keilu, když programujeme STM regulátory, musíme to všechno napsat ručně. Zde tato směrnice říká, že pokud byl soubor již zahrnut do spustitelného kódu, aby jej preprocesor znovu nezahrnul.
Do tohoto souboru umístíme spojení všech hlavičkových souborů knihoven a všech substitucí maker a v souboru Test09.c toto vše samozřejmě smažeme
#ifndefMAIN_H_
#definovatMAIN_H_
#definovatF_CPU8 000 000 UL
#zahrnout
#zahrnout
#zahrnout
#zahrnout
#zahrnout
//—————————————-
#definovate1PORTD|=0b00001000// nastaví řádek E na 1
#definovate0PORTD&=0b11110111// nastaví řádek E na 0
#definovatrs1PORTD|=0b00000100// nastavíme řádek RS na 1 (data)
#definovatrs0PORTD&=0b11111011// nastavte řádek RS na 0 (příkaz)
//—————————————-
#endif/* MAIN_H_ */
Nestačí však zahrnout tento hlavičkový soubor do Průzkumníka řešení, musíme jej také zahrnout do souboru Test09.c zahrnout do kódu hned na začátku
#zahrnout"hlavní.h"
//—————————————-
Pojďme projekt sestavit a znovu zkontrolovat jeho funkčnost.
Nyní začněme vytvářet naši knihovnu zobrazení.
K tomu vytvoříme hlavičkový soubor stejným způsobem jako main.h lcd.h
#zahrnout
#zahrnout"lcd.h"
A naopak do souboru lcd.h zahrneme soubor hlavní.h
#ifndefLCD_H_
#definovatLCD_H_
#zahrnout"hlavní.h"
Není třeba se obávat možnosti nějaké křížové smyčky – směrnice tomu zabrání.
Také převezmeme všechny substituce maker ze souboru main.h do souboru lcd,h a smažeme je v main.h
#zahrnout"hlavní.h"
//—————————————-
prázdnotaLCD_ini( prázdnota);
prázdnotasetpos( nepodepsanýcharX, nepodepsanýy);
prázdnotastr_lcd( charstr1);
prázdnotasendchar( nepodepsanýcharC);
//—————————————-
A abychom všechny funkce pro práci s displejem převzali ze souboru Test09.c, vytvoříme nyní další soubor - lcd.c. Bude obsahovat kód pro implementaci všech funkcí
Soubor se vytvoří úplně stejným způsobem, jen místo „Zahrnout soubor“ vybereme typ souboru „Soubor C“.
Soubor lcd.c byl vytvořen. Už v něm nebudou žádné direktivy, jediný bude komentář autora, který smažeme, abychom nezasahovali.
Do tohoto souboru zahrneme také hlavičkový soubor lcd.h
#zahrnout"lcd.h"
//—————————————-
Nyní do tohoto souboru přeneseme kompletně všechny funkce určené pro práci s displejem ze souboru Test09.c. Zůstanou v něm pouze dvě funkce - port_ini A hlavní().
Proto vážně uvolníme hlavní soubor aplikace, aby byl čitelnější.
To nám ale nestačí. V souboru Test09.c nyní nebude „viditelná“ žádná funkce. Proto musíme funkce, které budeme používat v jiných souborech, deklarovat, nebo na nich, jak se říká, vytvářet prototypy. To se obvykle provádí v souboru záhlaví. Prototypy vytvoříme v hlavičkovém souboru lcd.h. Prototyp je velmi jednoduchý na výrobu. Záhlaví funkce se všemi argumenty (vše kromě těla) se zapíše nebo obvykle zkopíruje a na konec se umístí středník. Budeme potřebovat funkce pro inicializaci displeje, umístění na displeji a zobrazení řádku na displeji. Prozatím nebudeme vypisovat symboly samostatně, takže nevytváříme prototyp pro odpovídající funkci. Zde jsou naše prototypy
#zahrnout"hlavní.h"
//—————————————-
prázdnotaLCD_ini( prázdnota);
prázdnotasetpos( nepodepsanýcharX, nepodepsanýy);
prázdnotastr_lcd( charstr1);
//—————————————-
#definovate1PORTD|=0b00001000// nastaví řádek E na 1
Nyní shromáždíme soubor, spustíme jej v Proteus a zkontrolujeme jeho funkčnost. Pojďme si to také ověřit v praxi. Pokud vše funguje, udělali jsme vše správně. Projekt na celou lekci je přiložen níže a je dostupný přes odkaz „Zdrojový kód“.
V dnešní lekci jsme se tedy hodně naučili. Naučili jsme se pracovat se znakovým displejem a připojit jej k AVR ovladači. V rámci této lekce jsme se také naučili správně psát kód a používat modulární programování.
Zobrazení příspěvku: 11 438
Uživatel často potřebuje přijímat nějaké vizuální informace z elektronického zařízení. Pokud lze informaci prezentovat v symbolické podobě, pak jednou z možností jejího zobrazení je použití symbolických indikátorů z tekutých krystalů (LCD, nebo v zahraničním označení LCD). Dnes budeme hovořit o symbolických indikátorech realizovaných na bázi kontrolérů Hitachi HD44780, Samsung KS 0066 a podobné.
Jako příklad uvedu LCD Winstar Wh1602D-TMI-CT#, které mám k dispozici pro provádění experimentů. O tomto LCD jsem se již zmiňoval v článku, jehož grafický vývoj dnes využiji.
Detailní datový list Na LCD WINSTAR WH1602D-TMI-CT:
Kategorie: | Dokumenty |
Datum: | 22.03.2015 |
Zjednodušený obvod LCD může být reprezentován následovně:
Základem indikátoru je matrice z tekutých krystalů, přivedením napětí na její prvek můžeme pozorovat bod na obrazovce. U znakových LCD se tato matice skládá z určitého počtu známých míst, která jsou seskupena do řádků a sloupců. Velikost známého místa v pixelech je často 5x8 pixelů. Označení mého indikátoru obsahuje čísla 1602 a to znamená, že můj indikátor může zobrazit 2 řádky po 16 znacích. Kódování také zahrnuje: kód výrobce a typ indikátoru, přítomnost podsvícení, barvu, tabulku kódů a tak dále.
Systém označení indikátorů WINSTAR
Zobrazit/skrýt legendu
1. Kód výrobce: WINSTAR DISPLAY CO,LTD
2. Typ indikátoru:
- H- symbolický (syntetizující znaky)
- C- grafická barva s pasivní maticí CSTN (ColorSTN)
- X- grafika s matricí TAB (Automatické lepení pásky– krystal je namontován na třívrstvé polyamidové podkladové pásce)
- Ó- grafika s matricí OZUBENÉ KOLO (čip Na Sklo- krystal na skle)
3. Horizontální rozlišení:
- počet znaků na řádek pro indikátory typu znaků
- počet vodorovných bodů pro indikátory grafického typu
4. Vertikální rozlišení:
- počet řádků pro indikátory typu postavy
- počet svislých bodů pro indikátory grafického typu
5. Kód modelu
- Kóduje geometrické rozměry používané ovladačem
6. Typ podsvícení:
- N- bez podsvícení
- B- elektroluminiscenční, barva záře - modrá
- D- elektroluminiscenční, barva záře - zelená
- W- elektroluminiscenční, barva záře - bílá
- Y— LED, barva svitu — žlutozelená
- A— LED, barva záře — jantarová
- R— LED, barva svitu — červená
- G— LED, barva svitu — zelená
- T— LED, barva žhavení — bílá
- P- LED, barva svitu - modrá
- F— lampa se studenou katodou (CCFL), barva světla — bílá
7. Technologie výroby LCD
- B- TN šedá, pozitivní
- N— TN, negativní
- G- STN šedá, pozitivní
- Y— STN žlutozelená, pozitivní
- M— STN modrá, negativní
- F— FSTN pozitivní
- T- FSTN negativní
- H- HTN šedá, pozitivní
- já— HTN černá, negativní
- TN (Twisted Nematic) - Krystalová struktura má spirálový typ
- STN (Super Twisted Nematic) - matice skládající se z LCD prvků s proměnnou průhledností
- FSTN (Film kompenzovaný STN) — STN-matrice s filmovou kompenzací. Technologie umožňuje větší pozorovací úhel
- HTN (Homeotropní Twisted Nematic) - displeje jsou založeny na silnějším molekulárním zkroucení (typicky 110°) ve srovnání s konvenčními TN kroucenými nematicemi (90°). Poskytuje široký pozorovací úhel a vylepšený kontrast. Vlastnosti jsou lepší než technologie STN. Nízké provozní napětí (2,5 V a nejnižší cena mezi nematiky činí jejich použití výhodné v přenosných samostatných zařízeních).
8. Polarizátor, pozorovací úhel, rozsah provozních teplot
- A— RF, 6:00, N.T.
- D- RF, 12:00, N.T.
- G- RF, 6:00, W.T.
- J— RF, 12:00, W.T.
- B— TF, 6:00, N.T.
- E— TF, 12:00, N.T.
- H— TF, 6:00, W.T.
- K— TF, 12:00, W.T.
- C— TM, 6:00, N.T.
- F— TM, 12:00, N.T.
- já— TM, 6:00, W.T.
- L- TM, 12:00, W.T.
- RF (Reflexní LCD) - LCD indikátor, který funguje pouze na odrazu světla. Obraz je viditelný pouze při dostatečném okolním osvětlení.
- TF - (Transflexní LCD) - displej z tekutých krystalů, který světlo odráží i vyzařuje (sám svítí).
- TM (Transmisivní LCD) - světlo vstupuje přes LCD ze strany podsvícení. Má vysokou kvalitu obrazu v interiéru a obvykle velmi špatnou (černá obrazovka) na slunci.
- N.T.— normální teplotní rozsah 0...+50ºC W.T.— rozšířený teplotní rozsah -20...+70ºC
9. Další možnosti
První dva znaky jsou generátor znaků:
- C.T./C.P.— latina/cyrilice
- E.P./ET/E.E./EN/E.C./ES— latinský/evropský
- J.P./JT/JS/JN- latina/japonština
- HP/H.S.— hebrejsky
3–4 znaky:
- T- teplotní kompenzace
- E nebo EZ— edge BL (podsvícení LED jsou umístěny po obvodu). Může také chybět symbol.
- K nebo LB— eco BL (LED diody jsou umístěny rovnoměrně za obrazovkou)
- PROTI- vestavěný zdroj záporného napětí
- N- bez vestavěného zdroje záporného napětí
10. Další informace:
# - kompatibilita se standardem RoHS
Poznámka(výrobce čipu ovladače):
- xS - Samsung
- xP - Sunplus
- xT - Sitronix
- xE - Epson
- xU - UMC
Pomocí tohoto systému zápisu jsem zjistil, že mám v rukou indikátor syntetizující znak Winstar, zobrazení znaků v 16 sloupcích a 2 řádcích pomocí ovladače KS 0066 nebo jeho ekvivalent, s bílým LED osvětlením po obvodu, s modrým negativem transmisivní- matice, pozorovací úhel „v 6 hodinách“, rozsah provozních teplot -20...+70ºC s generátorem znaků, včetně azbuky a kompatibilní se standardem RoHS(neobsahuje žádné škodlivé složky, což zřejmě znamená, že při montáži byla použita bezolovnatá pájka).
Indikátory založené na ovladačích HD44780, KS066U
Indikátor je řízen vestavěným ovladačem. Ovladač je obvykle Hitachi HD44780, Samsung KS0066U nebo jejich četné analogy a klony. Indikátory vyráběné ruskou společností MELT používají ovladač PCF8576.
Řadič má jednobajtové paměťové buňky ( DDRAM), jejichž obsah se skutečně zobrazuje na obrazovce podle tabulky zaznamenané v CGRAM. Paměťových buněk je obvykle více než symbolů na LCD, takže při adresování symbolů se musíte podívat na datový list. Potřebujeme napsat kód požadovaného symbolu na požadovanou pozici a ovladač se postará o zbytek sám.
Pro výběr pozice slouží virtuální kurzor ovládaný příkazy (číslo aktuální paměťové buňky, AC). Dá se to zviditelnit. Ve výchozím nastavení se při psaní znaku do buňky kurzor posune o jednu pozici dopředu.
Tabulka kódů indikátorů se obvykle skládá ze tří částí:
- 0×00-0×07 – generátor postav ke stažení, vámi vytvořené postavy
- 0×20-0xFF - ASCII kódy, standardní znaková sada a anglická abeceda
- 0xA0-0xFF - symboly národních abeced a další, s vynecháním znaků, které odpovídají anglickým.
Zobrazit/skrýt tabulku kódů s azbukou
Příklad: hexadecimální kód 0x4A odpovídá písmenu J, kód 0xB6 - písm a.
Nejvýznamnější čtyři bity určují sloupec vybraného znaku v tabulce, nejméně významné určují řádek. Můžete si vytvořit vlastní tabulku symbolů tak, že ji zapíšete CGRAM. Každý znak vyžaduje 5 bajtů (jeden bajt na sloupec). Jedničky v každém bajtu definují významné pixely. Například pro kódování čísel pixel po pixelu 8 budete potřebovat následující sekvenci: 0x6c,0×92,0×92,0×92,0x6c.
Konvertor azbuky
Chcete-li převést text obsahující znaky azbuky na kódy odpovídající výše uvedené tabulce, zadejte požadovaný text do textového pole. Níže získaný výsledek lze zkopírovat a použít ve vašich programech k zobrazení tohoto textu na LCD.
Původní text:
Kódovaný text:
Tabulka příkazových kódů:
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | Účel |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | Čištění obrazovky, A.C.=0, adresování A.C. na DDRAM |
0 | 0 | 0 | 0 | 0 | 0 | 1 | — | A.C.=0, adresování DDRAM, posuny jsou vymazány, začátek řádku je adresován na začátku DDRAM |
0 | 0 | 0 | 0 | 0 | 1 | I/D | S | Vybírá směr pohybu kurzoru nebo obrazovky |
0 | 0 | 0 | 0 | 1 | D | C | B | Vyberte režim zobrazení |
0 | 0 | 0 | 1 | S/C | R/L | — | — | Příkaz posunu kurzoru/obrazovky |
0 | 0 | 1 | D.L. | N | F | — | — | Definování parametrů skenování a šířky datové sběrnice |
0 | 1 | AC5 | AC4 | AC3 | AC2 | AC1 | AC0 | Přiřazení k pultu A.C. adresy v regionu CGRAM |
1 | AC6 | AC5 | AC4 | AC3 | AC2 | AC1 | AC0 | Přiřazení k pultu A.C. adresy v regionu DDRAM |
Tabulka hodnot příznaků:
Vlajka | Význam |
I/D | Režim offsetu čítače AC adresy, 0 - snížení, 1 - zvýšení |
S | Příznak režimu posunu obsahu obrazovky. 0 - obrazovka není posunuta, 1 - po zapsání dalšího kódu do DDRAM se obrazovka posune ve směru určeném příznakem I/D: 0 - doprava, 1 - doleva. Shift nemění obsah DDRAM. Změní se pouze interní ukazatele na umístění viditelného začátku řádku v paměti DDRAM |
S/C | Příkaz Flag, který spolu s příznakem R/L provede operaci posunu obsahu obrazovky (stejně jako v předchozím případě, beze změn v DDRAM) nebo kurzoru. Definuje objekt posunutí: 0 — kurzor je posunut, 1 — obrazovka je posunuta |
R/L | Příkaz příznak, který společně s příznakem S/C provádí operaci posunu obrazovky nebo kurzoru. Určuje směr posunu: 0 — doleva, 1 — doprava |
D/L | Příznak definující šířku datové sběrnice: 0 - 4 bity, 1 - 8 bitů |
N | Režim skenování obrazu na LCD: 0 - jeden řádek, 1 - dva řádky |
F | Velikost matice znaků: 0 - 5×8 bodů, 1 - 5×10 bodů |
D | Přítomnost obrazu: 0 - zakázáno, 1 - povoleno |
C | Kurzor ve tvaru podtržítka: 0 - vypnuto, 1 - povoleno |
B | Kurzor v podobě blikajícího známého místa: 0 - vypnuto, 1 - zapnuto |
Přiřazení pinů ovladače:
- DB0-DB7— odpovědný za příchozí/odchozí data
- R.S.- vysoká úroveň znamená, že signál na výstupech DB0-DB7 je datový, nízká úroveň znamená příkaz
- W/R— určuje směr dat (čtení/zápis). Protože operace čtení dat z indikátoru je obvykle nenárokovaná, můžete tento vstup neustále nastavovat na nízkou úroveň
- E— puls s dobou trvání alespoň 500 ms na tomto pinu určuje signál pro čtení/zápis dat z pinů DB0-DB7, RS a W/R
- V 0— slouží k nastavení kontrastu obrazu
- A, K- napájení podsvícení (anoda a katoda), pokud je k dispozici
- V CC A GND- napájení pro LCD indikátor
K ovládání LCD indikátoru je zapotřebí 6 nebo 10 pinů, v závislosti na tom, zda je zvolen režim výměny dat 4 nebo 8 bitů. Chcete-li snížit požadovaný počet pinů mikrokontroléru, můžete pracovat ve 4bitovém režimu. V tomto případě na závěry DB4-DB7 Nejprve se přenesou čtyři nejvýznamnější bity dat/příkazu a poté čtyři nejméně významné bity. závěry DB0-DB3 zůstane nevyužitý.
Jeden ovladač ovládá omezený počet postav. Na indikační desce může být 1, 2, 4, 8 ovladačů a možná i více.
Dokumentace ovladače:
Ovladač Samsung KS0066U
Ovladač Hitachi HD44780
Kategorie: | Dokumenty |
Datum: | 21.03.2015 |
přeloženo do ruské verze:
Kategorie: | Dokumenty |
Datum: | 21.03.2015 |
Indikátory od různých výrobců jsou často kompatibilní a zaměnitelné, mohou se však lišit rozměry, montáží, kontakty atd. Při výběru nového vývoje a hledání náhrady se proto prosím řiďte katalogy výrobců:
Tabulka kompatibility pro znakové LCD indikátory od různých výrobců:
Zobrazit/skrýt tabulku
Typ | Winstar | TÁT | Data Vision | Bolymin | Sluneční | Mikrošpičky | Wintek | Říše |
8×2 | WH0802A | MT-8S2A | DV-0802 | BC0802A | SC0802A | MTC-0802X | WM-C0802M | AC082A |
10×1 | — | MT-10S1 | — | — | — | — | — | — |
12×2 | WH1202A | — | — | BC1202A | — | — | — | — |
16×1 | WH1601A | — | DV-16100 | BC1601A1 | SC1601A | MTC-16100X | WM-C1601M | AC161A |
WH1601B | — | — | BC1601B | SC1601B | — | — | — | |
WH1601L | MT-16S1A | DV-16100 | BC1601D1 | SC1601D | MTC-16101X | WM-C1601Q | AC161B | |
— | — | DV-16120 | — | — | — | — | AC161J | |
16×2 | WH1602L | MT-16S2R | DV-16210 | BC1602E | SC1602E | MTC-16201X | WM-C1602Q | AC162E |
— | — | — | — | SC1602N | — | — | — | |
WH1602D | MT-16S2J | DV-16230 | BC1602B1 | SC1602B | MTC-16202X | WM-C1602N | AC162A | |
— | — | DV-16235 | — | — | MTC-16203X | — | — | |
WH1602C | MT-16S2D | DV-16236 | BC1602D | SC1602D | — | — | — | |
WH1602A | MT-16S2H | DV-16244 | BC1602H | SC1602C | MTC-16204X | WM-C1602K | — | |
WH1602B | — | DV-16252 | BC1602A | SC1602A | MTC-16205B | WM-C1602M | — | |
WH1602M | — | DV-16257 | BC1602F | SC81602F | — | — | — | |
— | — | DV-16275 | — | — | — | — | — | |
— | — | DV-16276 | — | — | — | — | — | |
16×4 | WH1604A | MT-16S4A | DV-16400 | BC1604A1 | SC1604A | MTC-16400X | WM-C1604M | AC164A |
WH1604B | — | — | — | — | — | — | — | |
20×1 | — | — | DV-20100 | — | — | — | — | — |
— | MT-20S1L | — | — | — | — | — | — | |
20×2 | WH2002A | MT-20S2A | DV-20200 | BC2002A | SC2002A | MTC-20200X | WM-C2002M | AC202A |
WH2002M | — | — | — | — | — | — | — | |
WH2002L | MT-20S2M | DV-20210 | BC2002B | SC2002C | MTC-20201X | WM-C2002P | AC202B | |
— | — | DV-20211 | — | — | — | — | AC202D | |
— | — | DV-20220 | — | — | — | — | — | |
— | — | DV-20206-1 | — | — | — | — | — | |
20×4 | WH2004A | MT-20S4A | DV-20400 | BC2004A | SC2004A | MTC-20400X | WM-C2004P | AC204A |
— | — | — | — | SC2004G | — | — | — | |
— | — | — | — | SC2004C | — | — | — | |
WH2004L | — | DV-20410 | BC2004B | — | MTC-20401X | WM-C2004R | AC204B | |
24×1 | — | MT-24S1L | — | — | — | — | — | — |
24×2 | WH2402A | MT-24S2A | DV-24200 | BC2402A | SC2402A | MTC-24200X | WM-C2402P | AC242A |
— | MT-24S2L | — | — | — | — | — | — | |
40×2 | WH4002A | — | DV-40200 | BC4002A | SC4002A | MTC-40200X | WM-C4002P | AC402A |
40×4 | WH4004A | — | DV40400 | BC4004A | SC4004A | MTC-40400X | WM-C4004M | AC404A |
— | — | — | — | SC4004C | — | — | — |
Napájení, nastavení kontrastu a podsvícení
Je třeba dávat pozor na polaritu připojení napájení k LCD indikátoru a také se ujistit, že napájecí napětí je v rozsahu +4,5...5,5 V. Nepozornost věnovaná těmto bodům může vést k selhání indikátoru!
LCD indikátory umožňují upravit kontrast pomocí děliče napětí. Před výstupem dat do indikátoru se musíte ujistit, že napětí řízení kontrastu je v provozním rozsahu. Hodnoty rezistorů se u různých výrobců LCD indikátorů liší. Některé modely indikátorů mají na desce místa pro instalaci takového děliče a stačí tam připájet požadované hodnoty odporu. Kontrast indikátoru závisí na úhlu pohledu. Pokud je indikátor „na dvanácté hodině“, musíte se na takový indikátor podívat tak, aby byl pod úrovní očí, pokud „nula hodin“, pak je určen pro pozorování v úrovni očí ( kolmo k rovině obrazovky). Pokud je indikátor „v šest hodin“, měl by být použit při pozorování nad úrovní očí. Tento bod je třeba vzít v úvahu při nákupu.
Výkon podsvícení
Pokud má indikátor podsvícení, kolíky pro něj jsou obvykle umístěny samostatně. Je nutné jej připojit ke zdroji, nastavením jmenovitého proudu pomocí externího rezistoru R (viz. datový list). Pro můj indikátor by jmenovité napětí na anodě mělo být 3,5 V a proud 40 mA. Na základě toho je hodnota odporu omezujícího proud:
Někteří výrobci mají na desce indikátoru místo pro instalaci takového odporu, musíte připájet příslušnou hodnotu, uzavřít propojku a podsvícení bude napájeno ze stejné linky jako indikátor.
Jak hodnotíte tuto publikaci?
- Modul FC-113 je založen na čipu PCF8574T, což je 8bitový posuvný registr - vstupně-výstupní „expandér“ pro sériovou sběrnici I2C. Na obrázku je mikroobvod označen DD1.
- R1 je trimovací rezistor pro nastavení kontrastu LCD displeje.
- Jumper J1 slouží k zapnutí podsvícení displeje.
- Piny 1…16 se používají pro připojení modulu k pinům LCD displeje.
- Kontaktní plošky A1...A3 jsou potřebné pro změnu I2C adresy zařízení. Připájením příslušných propojek můžete změnit adresu zařízení. Tabulka ukazuje shodu adres a propojek: „0“ odpovídá rozpojenému obvodu, „1“ nainstalované propojce. Ve výchozím nastavení jsou všechny 3 propojky otevřené a adresa zařízení 0x27.
2 Schéma připojení LCD displeje k Arduinu přes I2C protokol
Modul je připojen k Arduinu standardním způsobem pro sběrnici I2C: pin SDA modulu je připojen k analogovému portu A4, pin SCL je připojen k analogovému portu A5 Arduina. Modul je napájen +5 V z Arduina. Samotný modul je připojen piny 1…16 k odpovídajícím pinům 1…16 na LCD displeji.
3 Knihovna pro práci přes I2C protokol
Nyní potřebujeme knihovnu pro práci s LCD přes rozhraní I2C. Můžete použít například tento (odkaz v řádku "Stáhnout ukázkový kód a knihovnu").
Stažený archiv LiquidCrystal_I2Cv1-1.rar rozbalit do složky \knihovny\, který se nachází v adresáři Arduino IDE.
Knihovna podporuje sadu standardních funkcí pro LCD obrazovky:
Funkce | Účel |
---|---|
Tekutý krystal() | vytvoří proměnnou typu LiquidCrystal a přijímá parametry připojení displeje (čísla pinů); |
začít() | inicializace LCD displeje, nastavení parametrů (počet řádků a znaků); |
Průhledná() | vymazání obrazovky a návrat kurzoru do výchozí pozice; |
Domov() | vrátit kurzor do výchozí polohy; |
setCursor() | nastavení kurzoru na danou pozici; |
napsat() | zobrazí symbol na LCD obrazovce; |
tisk() | zobrazuje text na LCD obrazovce; |
kurzor() | ukazuje kurzor, tzn. podtržení pod místem dalšího znaku; |
noCursor() | skryje kurzor; |
blikat() | kurzor bliká; |
noBlink() | Zrušit blikání; |
noDisplay() | vypnutí displeje při ukládání všech zobrazených informací; |
Zobrazit() | zapnutí displeje při ukládání všech zobrazených informací; |
scrollDisplayLeft() | posuňte obsah displeje o 1 pozici doleva; |
scrollDisplayRight() | posuňte obsah displeje o 1 pozici doprava; |
automatické rolování() | povolit automatické posouvání; |
noAutoscroll() | zakázat automatické posouvání; |
zleva do prava() | nastavuje směr textu zleva doprava; |
zprava doleva() | směr textu zprava doleva; |
createChar() | vytvoří vlastní znak pro obrazovku LCD. |
4 Skica pro výstup textu na LCD obrazovku přes I2C sběrnici
Otevřeme ukázku: Soubor Samples LiquidCrystal_I2C CustomChars a trochu to předěláme. Zobrazíme zprávu, na jejímž konci bude blikající symbol. Komentáře ke kódu komentují všechny nuance náčrtu.
#zahrnout
Mimochodem, znaky napsané příkazem lcd.createChar();, zůstávají v paměti displeje i po vypnutí napájení, protože zapsáno na zobrazení ROM 1602.
5 Vytvořte si vlastní symboly pro LCD displej
Pojďme se blíže podívat na problematiku tvorby vlastních symbolů pro LCD obrazovky. Každý znak na obrazovce se skládá z 35 bodů: 5 širokých a 7 vysokých (+1 rezervní řádek pro podtržení). Na řádku 6 výše uvedeného náčrtu definujeme pole 7 čísel: (0x0, 0xa, 0x1f, 0x1f, 0xe, 0x4, 0x0). Převedeme hexadecimální čísla na binární: {00000, 01010, 11111, 11111, 01110, 00100, 00000} . Tato čísla nejsou nic jiného než bitové masky pro každý ze 7 řádků symbolu, kde "0" označuje světlý bod a "1" tmavý bod. Například symbol srdce určený jako bitová maska se objeví na obrazovce, jak je znázorněno na obrázku.
6 Ovládání LCD obrazovky přes I2C sběrnici
Nahrajeme skicu do Arduina. Na obrazovce se objeví nápis, který jsme určili s blikajícím kurzorem na konci.
7 Co je pozadu I2C sběrnice
Jako bonus se podívejme na časový diagram pro zobrazení latinských znaků „A“, „B“ a „C“ na LCD displeji. Tyto znaky jsou uloženy v paměti ROM displeje a zobrazují se na obrazovce jednoduše přenosem jejich adres na displej. Schéma je převzato z pinů RS, RW, E, D4, D5, D6 a D7 displeje, tzn. již po převodníku FC-113 “I2C paralelní sběrnice”. Dá se říci, že se ponoříme trochu hlouběji do hardwaru.
Časový diagram výstupu latinských znaků „A“, „B“ a „C“ na LCD displeji 1602
Diagram ukazuje, že znaky, které jsou na displeji ROM (viz str. 11 datového listu, odkaz níže), jsou přenášeny ve dvou kouscích, z nichž první určuje číslo sloupce tabulky a druhý - číslo řádku. V tomto případě jsou data „zablokována“ na okraji signálu na lince E(Povolit) a řádek R.S.(Výběr registru) je ve stavu logické jedničky, což znamená, že se data přenášejí. Nízký stav na lince RS znamená, že jsou odesílány instrukce, což vidíme před odesláním každého znaku. V tomto případě je přenášen instrukční kód pro návrat vozíku do polohy (0, 0) LCD displeje, což lze také zjistit prostudováním technického popisu displeje.
A ještě jeden příklad. Tento časový diagram zobrazuje výstup symbolu srdce na LCD displeji.
Opět první dva impulsy Umožnit dodržovat pokyny Domov()(0000 0010 2) - vraťte vozík do polohy (0; 0) a druhé dva - výstup na LCD displej uložený v paměťové buňce 3 10 (0000 0011 2) symbol "Srdce" (pokyn lcd.createChar(3, srdce); skica).
A jeho analogy, například S6A0069, KS0066 atd. Tyto LCD indikátory jsou textové a mohou zobrazovat text a pseudografické symboly. Jejich známá velikost je 5x8 pixelů, LCD indikátory se dodávají v různých velikostech a s různým rozlišením, například: 8 znaků na 2 řádcích - 8x2, 16x2, 20x2, 40x2, 16x4, 20x4 atd.
V této lekci se podíváme na 4bitové připojení LCD indikátoru k mikrokontroléru AVR a psaní programu v .
Tyto LCD indikátory mají následující závěry:
VSS – Gnd (výkon minus)
VDD – Vcc (Napájení 5V)
VO – Nastavení kontrastu matice LCD
RS – řídicí linka RS
RW (Read/Write) – Řídící linka RW
E (Enable) – Řídicí linka E
D0 – D0 Data Line (nepoužívá se ve 4bitovém režimu)
D1 – D1 Data Line (nepoužívá se ve 4bitovém režimu)
D2 – D2 Data Line (nepoužívá se ve 4bitovém režimu)
D3 – D3 Data Line (nepoužívá se ve 4bitovém režimu)
D4 – Datový řádek D4
D5 – Datový řádek D5
D6 – Datový řádek D6
Datová linka D7 – D7
A – Anoda LED podsvícení displeje
K – Podsvícení displeje LED katoda
Pozornost! Různé LCD indikátory mají své vlastní umístění pinů, přesné umístění pinů můžete zjistit v technické dokumentaci (datasheet) pro váš LCD indikátor.
LCD indikační pin VO řídí kontrast LCD matice v závislosti na napájecím napětí přiváděném na tento pin. Pokud není potřeba číst informace z displeje, je pin RW připojen k napájení mínus.
Příklad 4bitového připojení LCD indikátoru k mikrokontroléru Attiny2313:
Podřetězcový rezistor RV1 upravuje jas LCD indikátoru.
V BASCOM-AVR musíte před ovládáním LCD indikátoru označit, které piny displeje jsou připojeny ke kterým portům mikrokontroléru, k tomu slouží příkaz Config Lcdpin, příklad použití tohoto příkazu: Config Lcdpin = Pin, Db4 = Portb .4, Db5 = Portb.5, Db6 = Portb.6, Db7 = Portb.7, E = Portb.3, Rs = Portb.2 a také zadejte rozlišení indikátoru LCD pomocí příkazu Config Lcd, příklad: Config Lcd = 16 * 2 a inicializujte LCD indikátor příkazem Initlcd, poté bude LCD indikátor připraven k použití.
Zde je seznam příkazů pro práci s LCD indikátorem v BASCOM-AVR:
KonfiguraceLcdpin– Nastavení konfigurace pinů LCD indikátoru a mikrokontroléru
Konfigurace LCD– Nastavení rozlišení LCD indikátoru
Initlcd– Inicializace LCD indikátoru
LCD– Zobrazení textu na LCD indikátoru, příklad: LCD „Ahoj“
Cls– Čištění LCD indikátoru
Lokalizovaty,X– Umístěte kurzor na pozici x, y
Spodní linie– Přesuňte kurzor na spodní řádek
Horní linie– Přesuňte kurzor na horní řádek
Shiftlcd vpravo– Posuňte obraz indikátoru LCD o jedno správné místo
Shiftlcd vlevo– Posuňte obraz indikátoru LCD o jedno místo doleva
Kurzor vypnutý– Zakázat kurzor
Kurzor zapnut– Povolit kurzor
Kurzor bliká– Povolit blikající kurzor
Kurzor na Noblink– Zakázat blikající kurzor
Pozornost! Při použití LCD indikátoru s rozlišením 8x2 v BASCOM-AVR jej nakonfigurujte jako 16x2, protože BASCOM-AVR nemá konfiguraci pro LCD indikátor s rozlišením 8x2.
Příklad programu v BASCOM-AVR pro výše uvedené schéma:
$regfile = "attiny2313.dat" $crystal = 8000000 Konfigurace Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.3 , Rs = Portb .2 Konfigurace Lcd = 16 * 2 Initlcd Cls Vyhledejte 1 , 1 Lcd "Ahoj," Lowerline Lcd "world!" Konec
Zde je návod, jak to všechno funguje s indikátorem LCD 8x2:
Pojistkové bity pro firmware:
Soubory k lekci (projekt v , zdroj, firmware) si můžete stáhnout níže
Na žádost pracovníků a svých slibů jsem se rozhodl popsat práci s ikonickým 16x2 LCD v prostředí CodeVisionAVR. Začněme popisem samotného LCD. Alfanumerický LCD displej s vestavěným čipem Hitachi HD44780 může zobrazovat znaky v jednom, dvou nebo čtyřech termínech po 8, 16, 20 nebo 40 znacích. V tomto článku se budu zabývat LCD 16x2 (16 znaků, 2 řádky). Tento displej pro fyzické připojení k MK má 16 pinů (umístění kolíků závisí na výrobci). Podívejme se na tato zjištění. Bez dalších řečí jsem ukradl nápis v MELT. V zásadě je vhodný pro jakékoli LCD.
No, myslím, že není třeba vysvětlovat, proč je potřeba ten či onen pin. Vše je tam napsáno v ruštině. Ale je tu pár malých ale. 1) LCD displeje lze vyrábět ve dvou verzích: 5 voltů nebo 3,3. 2) V napájecím obvodu není vždy instalován odpor omezující proud. Podívejte se pozorně, může tam být jen propojka. (Tímto způsobem jsem spálil podsvícení dvou displejů.) 3) Obvod pro připojení rezistoru pro nastavení kontrastu.
Tak a teď jak tento zázrak připojit k MK. Budeme pracovat s ATmega8 a quartz na 4 MHz. Zde je skutečný diagram.
Jak vidíte, není nic složitého. První tři číslice portu D slouží pro ovládání a poslední čtyři pro data. S těmito displeji se dá pracovat i na 8bitové sběrnici, ale rozdávat 4 nohy navíc je podle mě škoda. Proto budeme pracovat na 4bitové sběrnici. Vymysleli jsme obvod, nyní se podíváme na softwarovou část. Chcete-li inicializovat displej a přepnout jej do 4bitového režimu, musíte spustit několik příkazů. Ale předtím bych chtěl vysvětlit, jak fungují řídicí bity. Bit RS je zodpovědný za to, co bude LCD přijímat. Li RS = 0, pak odešleme příkaz a if 1
pak data. Pokud bit RW=0, pak zapíšeme na LCD, a pokud 1
, pak čteme. Bit E jen stroboskop. To znamená, že jakmile chceme zadat příkaz nebo data, pak poté, co nastavíme všechny bity na nohách, jednoduše je nastavíme na 1
bit E a pak to znovu upustíme 0
. 1 - Zapněte napájení 2 - Pauza po dobu alespoň 20 ms 3 - Příkaz na 4 bity. sběrnice 4 - Udržujte pauzu alespoň 40 µs 5 - Příkaz pro 4 bity. pneumatiky (RS=0), (RW=0), (D7=0), (D6=0), (D5=1), (D4=1) 6 - Udržujte pauzu alespoň 40 µs 7 - Příkaz pro 4 bity. pneumatiky (RS=0), (RW=0), (D7=0), (D6=0), (D5=1), (D4=1) 8 - Udržujte pauzu alespoň 40 µs 9 - Příkaz pro 4 bity. pneumatiky (RS=0), (RW=0), (D7=0), (D6=0), (D5=1), (D4=0) 10 - Udržujte pauzu alespoň 40 µs. 11 - Nastavte parametry (RS=0), (RW=0), (D7=0), (D6=0), (D5=1), (D4=0) (RS=0), (RW=0), (D7= 1), (D6=0), (D5=0), (D4=0) 12 - Vypněte displej (RS=0), (RW=0), (D7=0), (D6=0), (D5=0), (D4=0) (RS=0), (RW=0), (D7= 0), (D6=0), (D5=1), (D4=0) 13 - Vymažte obrazovku (RS=0), (RW=0), (D7=0), (D6=0), (D5=0), (D4=0) (RS=0), (RW=0), (D7= 0), (D6=0), (D5=0), (D4=1) 14 - Režim zadávání dat (RS=0), (RW=0), (D7=0), (D6=0), (D5=0), (D4=0) (RS=0), (RW=0), (D7= 0), (D6=1), (D5=1),(D4=0) Oh jak. Nyní po tomto žvanění je náš displej připraven přijímat data. Co bude dál. A pak se podívejme na příkazy LCD. Pro přenos příkazů/dat na LCD přes 4bitovou sběrnici jsou zapotřebí dva průchody. Nejprve přeneseme nejvýznamnější 4 bajty a jako druhé přeneseme spodní 4 bajty. Od této chvíle budu všechny příkazy psát ve dvojicích. Příkaz pro vymazání indikátoru a umístění kurzoru do levého horního rohu. RS=0, RW=0, D4=0, D5=0, D6=0, D7=0 (E=1 pak 0) RS=0, RW=0, D4=0, D5=0, D6=0, D7=1 (E=1 pak 0) Příkaz pro přesun kurzoru do levé pozice. (X znamená, koho zajímá, jaká je hodnota)
RS=0, RW=0, D4=0, D5=0, D6=0, D7=0 (E=1 pak 0) RS=0, RW=0, D4=0, D5=0, D6=1, D7=X (E=1 pak 0) Příkaz nastavuje směr posunu kurzoru (ID=0/1 doleva/doprava). Při zápisu do DDRAM také zobrazit rozlišení posunu (SH=1). RS=0, RW=0, D4=0, D5=0, D6=0, D7=0 (E=1 pak 0) RS=0, RW=0, D4=0, D5=1, D6=ID, D7=SH (E=1 pak 0) Příkaz pro zapnutí displeje (D=1) a výběr kurzoru (A, B). A=0, B=0 Neexistuje žádný kurzor, nic nebliká A=0, B=1 Neexistuje žádný kurzor, celý symbol bliká A=1, B=0 Kurzor ve formě podtržení, nebliká A=1, B=1 Kurzor se zobrazí jako podtržení a bliká RS=0, RW=0, D4=0, D5=0, D6=0, D7=0 (E=1 pak 0) RS=0, RW=0, D4=1, D5=D, D6=A, D7=B (E=1 pak 0) Displej/příkaz posunu kurzoru (SC=0/1 kurzor/zobrazení RL=0/1 doleva/doprava). RS=0, RW=0, D4=0, D5=0, D6=0, D7=1 (E=1 pak 0) RS=0, RW=0, D4=SC, D5=RL, D6=X, D7=X (E=1 pak 0) Příkaz pro nastavení šířky sběrnice (DL=0/1 4/8 bitů) Stejně jako stránky generátoru znaků R. RS=0, RW=0, D4=0, D5=0, D6=1, D7=DL (E=1 pak 0) RS=0, RW=0, D4=1, D5=0, D6=P, D7=0 (E=1 pak 0) Příkaz pro nastavení adresy další operace s umístěním kurzoru tam a výběrem oblasti CGRAM (Vaše vlastní vymyšlené znaky). RS=0, RW=0, D4=0, D5=1, D6=ACG, D7=ACG (E=1 pak 0) RS=0, RW=0, D4=ACG, D5=ACG, D6=ACG, D7=ACG (E=1 pak 0) Příkaz pro nastavení adresy následné operace a výběr oblasti paměti DDRAM (Garacter Generator). RS=0, RW=0, D4=0, D5=1, D6=PŘIDAT, D7=PŘIDAT (E=1 pak 0) RS=0, RW=0, D4=PŘIDAT, D5=PŘIDAT, D6=PŘIDAT, D7=ADD (E=1 pak 0) Příkaz Zápis dat do aktuální oblasti. RS=1, RW=0, D4=DATA, D5=DATA, D6=DATA, D7=DATA (E=1 pak 0) RS=1, RW=0, D4=DATA, D5=DATA, D6=DATA, D7=DATA (E=1 pak 0) Příkaz Načíst data do aktuální oblasti. RS=1, RW=1, D4=DATA, D5=DATA, D6=DATA, D7=DATA (E=1 pak 0) RS=1, RW=1, D4=DATA, D5=DATA, D6=DATA, D7=DATA (E=1 pak 0) To jsou vlastně všechny příkazy. Existuje také příkaz pro přečtení příznaku obsazenosti, ale já ho nepoužívám, jen mezi každým příkazem čekám alespoň 40 µs. To je vše. Nyní, po přečtení tohoto pojednání, vypijte šálek čaje nebo kávy a zapomeňte na to všechno. Jelikož všechny tyhle svinstva přebírají funkce z knihovny CodeVisionAVR. Vytvoříme nový projekt, jak již bylo popsáno. Pro ty, kteří to neznají, přejděte sem, zbytek přejděte na kartu v generátoru kódu LCD a vybrat si PORTD.
co jsme s tím udělali? Nejprve jsme programu řekli, že chceme pracovat s LCD displejem (výběrem záložky LCD). Pak jsme si řekli, že to připojíme k portu D. Níže uvedený rozevírací seznam umožňuje vybrat počet znaků na řádek. Protože výchozí nastavení je 16
a chceme pracovat s 16x2 LCD, pak nemusíme nic měnit. Níže jsou jako nápověda namalovány nožičky portů pro správné připojení LCD k MK. To je vše, uložte projekt a podívejte se na nově vygenerovaný kód. První věc, které musíte věnovat pozornost, je část kódu za direktivou preprocesoru #zahrnout
Další funkce. void lcd_puts(char *str) Tato funkce vytiskne řetězec umístěný v SRAM od aktuální pozice. Příklad: lcd_gotoxy(0,0); lcd_puts("ŘÁDEK"); Vidíme:
Další funkce. void lcd_putsf(char *str) Tato funkce vytiskne řetězec umístěný ve FLASH od aktuální pozice. Příklad: lcd_gotoxy(0,0); lcd_putsf("ŘÁDEK"); Vidíme:
No a funkce „Eraser“ celý tento nepořádek uzavře. void lcd_clesr(void) Zavoláním této funkce vymažete vše, co je na displeji, a kurzor se přesune úplně vlevo na horní řádek. Takto si pro začátek můžete na LCD displeji zobrazit slova a čísla pomocí připravených funkcí. Nyní si povíme, jak zobrazit hodnotu proměnných. Pro tyto účely budeme potřebovat další knihovnu. No, ti, co programovali v C na PC, by o tom měli vědět. Jmenuje se to stdio.h Dostaneme se na samotný vrchol programu a za direktivou preprocesoru #zahrnout
Naučili jsme se tedy, jak zobrazit formátovaný text na LCD. Dále stručně projdu typy transformací. i d- Pro výstup celé číslo se znaménkem v desítkové soustavě u- Výstup dekadického celého čísla bez znaménka E -d.d e-d
E- Chcete-li zobrazit reálná data s pohyblivou řádovou čárkou -d.d E-d
F- Chcete-li zobrazit reálná data s pohyblivou řádovou čárkou -d.d
X- Pro výstup v hexadecimální soustavě malými písmeny X- Pro výstup v hexadecimální soustavě velkými písmeny C- Pro výstup na symbol Pokud píšete %-05d pak znamení "-"
vynutí jeho zarovnání doleva a prázdná místa nebudou vyplněna nulami. Pokud se pokusíte vytisknout číslo s pohyblivou řádovou čárkou, budete velmi překvapeni. Číslo nebude vytištěno. Je to přepadení)) Problém spočívá v nastavení kompilátoru. Aby kompilátor začal rozumět formátu plovák musíte to trochu upravit. K tomu jdeme Projekt->Konfigurovat a přejděte na kartu C kompilátor. V majetku Vlastnosti (s)printf: Vybrat plovák, šířka, přesnost. To je vše. Zkuste to, experimentujte. Pokud máte nějaké dotazy, pište na fórum. Hodně štěstí!