LCD kijelző vezérlés.  HD44780 alapú LCD kijelző csatlakoztatása Arduinohoz.  Adja ki a Function set parancsot

LCD kijelző vezérlés. HD44780 alapú LCD kijelző csatlakoztatása Arduinohoz. Adja ki a Function set parancsot

Hogyan lehet barátkozni egy karakteres kijelzős Arduino táblával? Elég egyszerű! Alább minden rendben és részletekkel.

Ha információt szeretne kapni az Arduino-tól anélkül, hogy számítógéphez csatlakozna, és soros portra kívánna kimenni, használhat karakterkijelzőt. Nem olyan nehéz megtenni. A kommunikációból származó kényelem felbecsülhetetlen.
A munkához egy J204A karakteres LCD-kijelzőt használtam, amely a HD44780 chipre épült, és gyakran megtalálható az eBay-en LCD2004 néven. 4 sor, 20 karakter, fordított. Egy csomó mással együtt vásárolták az eBay-en, puszta fillérekért, darabonként 60-100 rubelért. Az orosz nyelv alapértelmezés szerint nem támogatott, de ez megoldható probléma, erről majd legközelebb. És a diagramon szereplő csatlakozók nincsenek forrasztva, forrasztópákával kell dolgoznia.
A könyvtár a kijelzőkkel való munkára szolgál. LiquidCrystal.h szerepel az alapértelmezett Arduino IDE-ben.

De az LCD2004 kijelzőhöz nem találtam adatlapot, de a neten rengeteg táblázat van a kijelzőn. De gyakorlatilag nem különböznek egymástól. A vezérlés és a csatlakozás teljesen azonos. A különbség csak a kijelzőn látható sorok/karakterek számában van. De ez egyáltalán nem befolyásolja, ha 1602-vel rendelkezik.

Az összes kapcsolat a táblázatban van meghatározva. Ha elveszi a kijelzőt és maga felé fordítja, akkor az érintkezők balról jobbra helyezkednek el, a táblázatban pedig egyre nagyobb számban jelennek meg. Az elérhetőségek oszlopban zárójelben az adatlapon szereplő megnevezés látható.

# Kapcsolatok Mire használják jegyzet
1 VSS (VSS) GND. Föld. Kijelző mikrokontroller tápegység. 0V
2 VDD (VCC) A kijelző mikrokontroller tápfeszültsége. +5V
3 V0 (VEE) Karakterkontraszt a kijelzőn. Jobb, ha potenciométeren keresztül csatlakozik. 0V-tól +5V-ig
4 RS (RS) Regisztrálja a kiválasztást.
5 RW (R/W) Olvasási/írási mód váltása. Húzzuk a földre, csak információt kell továbbítanunk a kijelzőre. 0-írás +5V-olvasás
6 E Órajelzés
7 D0 (DB0) Adat
8 D1 (DB1) Adatátvitel. (Nem használ) Adat
9 D2 (DB2) Adatátvitel. (Nem használ) Adat
10 D3 (DB3) Adatátvitel. (Nem használ) Adat
11 D4 (DB4) Adat
12 D5 (DB5) Adatátvitel. (Foglalt) Adat
13 D6 (DB6) Adatátvitel. (Foglalt) Adat
14 D7 (DB7) Adatátvitel. (Foglalt) Adat
15 A (LED+) +5V Feszültség, kijelző háttérvilágítás, kijelző fényereje potenciométerrel állítható. +5V
16 K (LED-) GND Ground, kijelző háttérvilágítás 0V

v

A kijelzőre történő adatátvitel két változatban lehetséges: 8 és 4 bites ciklusonként. Mert Az Arduinonak kevés kapcsolata van, 4-et fogunk használni - ez több mint elég ahhoz, hogy a kijelzőn megjelenő információkat az észlelést meghaladó sebességgel frissítsük.

Így kapcsoltam össze az egészet. Lehet, hogy káosznak tűnik, de van rendszer. Választhat piros, zöld, sárga és narancssárga vezetékek közül. A pirosak mindig +5V-ra mennek, a zöldek a GND-re, a sárga és a narancssárga pedig az Arduinohoz való csatlakozáshoz szükséges vezetékek, amelyek adatokat hordoznak.

A legfontosabb rész a kijelző fizikai csatlakoztatása. Kattintson a megnyitáshoz nagy felbontású ahol minden jól látható.
R1 - 200 OM ellenállás. A kijelző háttérvilágításán áthaladó áramot korlátozó ellenállás.
R2 - Potenciométer 10kOM ellenállásig. Forgatjuk a tollat, kiválasztjuk a karakterek kontrasztját.


És egy rendkívül egyszerű vázlat néhány sor megjelenítéséhez a képernyőn.

H> // A kijelzővel való munkavégzéshez csatlakoztatjuk a könyvtárat. /* LiquidCrystal lcd(rs, enable, d4, d5, d6, d7); hozzon létre egy LiquidCrystal típusú változót, és határozza meg, hogy az Arduino mely érintkezőkön keresztül működik együtt a kijelzővel. További információ erről a parancsról itt: http://arduino.cc/en/Reference/LiquidCrystalConstructor */ LiquidCrystal lcd(6, 7, 8, 9, 10, 11); void setup() ( lcd.begin(20, 4); // megjelenítési jellemzők meghatározása (soronként 20 karakter, 4 sor) // Az 1602-es megjelenítéshez adja meg az lcd.begin(16, 2); lcd.setCursor(1, 1); // Adja meg, hogy melyik pozícióból kezdje el a szöveg kiadását. a sorok és a karakterek 0-tól kezdődnek!!! // 1 máris a képernyő elejétől egy osztással elmozdítja a mutatót, és egy sorral az lcd.print( "compblog.vlukyanov" ); // szöveg nyomtatása a megadott pozíciótól kezdve. lcd.setCursor(7, 2); // nyomtatás a képernyő 8. karakterétől a harmadik sorban. lcd.print(.com") ; // nyomtatandó szöveg. ) void loop() ( // ne csinálj mást a ciklusban, minden már megtörtént a tábla inicializálása során. )

Eredmény. Ha tudja, hogyan kapcsolódik ez az egész, és hogyan kell kódot írni, akkor az összes munka ideje 5 perc.

Ezenkívül a kijelző egyes funkciókat önállóan is elláthat, és lehetőség van bizonyos paraméterek beállítására is.

Például:

  • Szöveg görgetése;
  • Villogó kurzor pozíciója;
  • Be / Kikapcsolni.

És most a bónusz!
A kijelző háttérvilágítása energiát fogyaszt, amivel például spórolni szeretne az akkumulátorral. Ezt a lehetőséget magamnak választottam - a gomb megnyomásakor a kijelző háttérvilágítása 5 másodpercre bekapcsol.

H> // A kijelzővel való munkavégzéshez csatlakoztatjuk a könyvtárat. int gombInt = 0; // Hívandó megszakítási szám. int screenLed = 4; // Annak a tűnek a száma, amelyhez a képernyő csatlakozik. +5V illékony hosszú x = 5000; // LiquidCrystal time tárolására szolgáló változó lcd(6, 7, 8, 9, 10, 11); void setup() ( attachInterrupt(buttonInt, screenon, FALLING); // megszakítási beállítások lcd.begin(20, 4); pinMode(screenLed, OUTPUT); digitalWrite(screenLed,HIGH); // a kijelző bekapcsolása lcd.setCursor( 0 , 0); lcd.print("Start screenon test!"); ) // A funkció, amely a gombra kattintáskor végrehajtódik. void screenon() ( x = millis()+5000; // Emlékezzen a háttérvilágítás kikapcsolásának idejére. Jelenlegi futási idő +5 másodperc. digitalWrite(screenLed,HIGH); // Kapcsoljon feszültséget a kijelző háttérvilágítására. ) void loop () ( lcd.setCursor(0, 2); // lépjen a harmadik sorba lcd.print(x); // és írja ki a kijelző kikapcsolásának időpontját lcd.setCursor(0, 3); // ugrás a negyedik sor lcd.print( millis()); // aktuális futási idő nyomtatása if (x< millis()) // если время работы выключения наступило >( digitalWrite(screenLed,LOW); // majd kapcsolja ki a kijelzőt ) )

És az eredmény:

A HD44780 vezérlőn alapuló LCD 1602 kijelzők továbbra is az egyik legolcsóbb, legegyszerűbb és legkeresettebb kijelzők bármilyen típusú fejlesztéshez. elektronikus eszközök. Nem meglepő, hogy mind egyszerű, szó szerint térdre szerelt egységekben, mind komolyabb ipari egységekben, például kávéfőzőkben láthatók. Ilyen kijelzővel szerelik össze a legnépszerűbb Arduino témájú modulokat és pajzsokat, például az LCD I2C modult és az LCD Keypad Shield-et.

Ez a cikk részletesen elmagyarázza képekkel, hogyan csatlakoztassa az LCD-t az Arduino-hoz, és hogyan jelenítse meg az információkat.

1. lépés: Arduino LCD 1602

1602 kijelző van két különböző változat:

Sárga háttérvilágítás fekete betűkkel
- vagy (ez sokkal gyakrabban fordul elő) kék háttérvilágítás fehérrel.

A HD44780 vezérlő kijelzőinek méretei nagyon eltérőek, de a vezérlésük azonos. A leggyakoribb méretek a 16 x 02 (azaz 16 karakter két sorban) vagy a 20 x 04. Maguk a karakterek felbontása 5 x 8 pixel.

A legtöbb kijelző nem támogatja a cirill betűt (kivéve a CTK jelölésű kijelzőket). De egy ilyen probléma részben megoldható, majd a cikk részletezi, hogyan kell csinálni.

A kijelző 16 PIN-es csatlakozóval rendelkezik a csatlakoztatáshoz. A következtetések megvannak jelöléssel hátoldal díjakat, ez a következő:

1 (VSS) - a vezérlő teljesítménye mínuszra.
2 (VDD) - pozitív tápegység a vezérlőhöz.
3 (VO) - kontraszt szabályozási beállítások.
4 (RS) – regiszter kiválasztása.
5 (R/W) - olvasás és írás, különösen akkor írjon, ha földelve van.
6 (E) – aktiválás (engedélyezés).
7-10 (DB0-DB3) - alacsony bitek a nyolc bites interfészről.
11-14 (DB4-DB7) - az interfész legjelentősebb bitjei
15 (A) - pozitív anód a háttérvilágítás táplálására.
16 (K) - negatív katód a háttérvilágítás táplálására.

2. lépés: Az LCD csatlakoztatása

Mielőtt csatlakoztatná a kijelzőt és információt továbbítana rá, érdemes ellenőrizni a teljesítményét. Először kapcsoljon feszültséget a VSS és VDD vezérlőre, kapcsolja be a háttérvilágítást (A, K), majd állítsa be a kontrasztot. Az ilyen beállításokhoz egy 10 kΩ-os potenciométer megfelelő, az alakja nem fontos. A szélső lábakra +5V és GND kerül, a középső láb pedig a VO kimenetre van kötve.

Az áramkör áramellátása esetén el kell érni a szükséges kontrasztot, ha helytelenül van beállítva, akkor a képernyőn lévő kép nem lesz látható. A kontraszt beállításához "játszani" kell a potenciométerrel. Ha az áramkör megfelelően van összeállítva és a kontraszt megfelelően van beállítva, a képernyő felső sorát téglalapokkal kell kitölteni.

A kijelző működéséhez az Arduino IDE-be épített speciális LiquidCrystal.h könyvtárat használjuk, amiről alább írok. 8 bites és 4 bites módban is működhet. Az első változatban csak az alacsony és magas biteket (BB0-DB7), a másodikban csak az alacsony biteket (BB4-DB7) használják.

De a 8 bites mód használata ezen a kijelzőn rossz döntés, sebességben szinte semmi előnye nincs, hiszen a frissítési gyakorisága mindig kevesebb, mint 10-szer másodpercenként. Szöveg megjelenítéséhez csatlakoztatnia kell a DB7, DB6, DB5, DB4, E és RS érintkezőket a vezérlő érintkezőihez. Bármilyen Arduino tűhöz csatlakoztathatja őket, a lényeg az, hogy beállítsa a helyes sorrendet a kódban.

Ha a kívánt karakter még nincs a vezérlő memóriájában, akkor manuálisan is meghatározható (összesen legfeljebb hét karakter). A vizsgált kijelzők cellája ötször nyolc ponttal rendelkezik. A szimbólum létrehozásának feladata egy bitmaszk felírása, és egyet elhelyezni olyan helyeken, ahol pontoknak kell égniük, és nullákat ott, ahol nem.

A fent tárgyalt csatlakozási séma nem mindig jó, mert az Arduino legalább hat digitális kimenetet használ.

3. lépés: Áthidalási séma

Vizsgáljuk meg a módját, hogyan kerülhetjük meg ezt, és boldoguljunk kettővel. További LCD IIC/I2C átalakító modulra van szükség. Az alábbi képeken látható, hogyan forrasztják a kijelzőre és hogyan erősítik az Arduino-hoz.

De ez a csatlakozási lehetőség csak a speciális LiquidCrystal_I2C1602V1 könyvtárral működik, amelyet azonban könnyű megtalálni a weben és telepíteni, ami után probléma nélkül használhatja.

4. lépés: LiquidCrystal.h Library

A LiquidCrystal.h könyvtár letölthető a hivatalos forrásból - . Az alábbi linkekről is letöltheti:

Vázlat

Miután letöltötte az archívumot, cserélje ki a LiquidCrystal mappát az Arduino telepítési könyvtárának könyvtárak mappájában.

Példavázlatot láthatsz benne Fájl -> Példák -> LiquidCrystal -> HelloWorld_SPI(Fájl -> Példák -> LiquidCrystal -> HelloWorld_SPI).

Ezzel lezárjuk következő leckénket. Minőségi projekteket kívánunk!

Mi a lényeges része egy nagy szám elektronikus eszközök? Természetesen a jelzés és a grafikus adatkiadás eszközei. Mindig kényelmesebb és kellemesebb a felhasználó számára, ha az "okosdoboz" eredménye vizuálisan is látható. Ezért ma egy kijelzőt fogunk csatlakoztatni az STM32-höz a szöveg és a számok megjelenítéséhez. Kísérleteink hőse a Winstar egy meglehetősen népszerű bemutatója lesz. A kommentekben egyébként egy fontos pontosítás jelent meg, miszerint a technika alapjában véve minden kijelzőnél ugyanaz. HD44780. Köszönjük JekaKeynek a fontos kiegészítést)

Először is, a kijelzőt ténylegesen csatlakoztatni kell a vezérlőhöz. Töltse le az adatlapot, és keresse meg a WH1602 kivezetést. Nézz ide:

Amint tudod, kijelző WH1602 16 tűje van. Nézzük meg mindegyiket egyenként...

A Vss, Vdd és K érintkezőket a földre és a tápfeszültségre kell kötni, vagyis közvetlenül a táblázat szerint, nincs meglepetés, és még nincs is miről beszélni)

A 3-as tű a kontraszt beállítását szolgálja - ha oda +5V-ot kapcsolunk, akkor nem látunk semmit, ha pedig rövidre zárjuk a csapot a földhöz, akkor két sor fekete négyzetben gyönyörködünk 😉 Ez természetesen nem felel meg nekünk, így fel kell akasztani egy potenciométert (változó ellenállású ellenállás) a kontraszt beállításához. A karakterek legjobb láthatóságát ezen a kijelzőtüske 0,5-0,7 V-os feszültsége biztosítja.

Az RS pin már egy kimenet, amelyet mi magunk fogunk vezérelni egy mikrokontroller segítségével. Az alacsony feszültségszint (0) ezen a tűn azt jelenti, hogy most parancs következik, magas szint(1) - ez azt jelenti, hogy most lesznek adatok a kijelző memóriájába írandók.

Pin R / W - itt egyértelmű, vagy beolvassuk az adatokat (például a kijelző foglalt jelzőjét), ebben az esetben ez a pin 1, vagy a parancsot / adatokat írjuk a kijelzőre, akkor itt 0 van.

DB7 - DB0 - adatbusz, és ez mindent elmond)

Az E tű az úgynevezett engedélyezési jel. Ő kell ehhez. Ahhoz, hogy a kijelzővel dolgozhassunk - adatokat írjunk vagy parancsot adjunk - pozitív impulzust kell adnunk ennek a tűnek. Vagyis az eljárás így fog kinézni:

  1. Az RS, R / W, DB7 - DB0 érintkezőkön - a csapatunknak megfelelő szükséges jelek.
  2. Adja meg az egyiket az E kimenethez.
  3. Zhdems (az adatlap szerint - legalább 150 ns)
  4. Az E kimenetre alacsony szintet (0) alkalmazunk.

A kijelző háttérvilágításának működtetéséhez 4,2 V feszültséget kell helyeznie az A / Vee lábra.

Így történik a kommunikáció a WH1602 kijelzővel.

Kitaláltuk a WH1602 kapcsolatot, de mielőtt a példára térnénk, nézzük meg, hogy általában milyen parancsokat ért a kijelzőnk. Ehhez bemászunk az adatlapba, és találunk egy érdekes táblázatot:

Leírja az összes parancsot és jelet, amelyeknek a megfelelő WH1602 lábakon kell lenniük minden egyes parancshoz. Például törölni akarjuk a kijelzőt, nézzük a táblázatot, és itt a megfelelő parancs! tiszta kijelző!

Nullákat adunk az RS, R / W, DB7, DB6, DB5, DB4, DB3, DB2, DB1 érintkezőkhöz és egy egységet a DB0 lábhoz. Kész, mi a következő lépés? Így van, egy az E tűn, majd várj egy kicsit, és engedd le az E-t ismét nullára. Ennyi, a kijelző törlődik 😉 Csak a következő parancs végrehajtása előtt kell szünetet tartani, az adatlapon minden parancsnál jelezve. Hatékonyabb lesz a foglalt jelző lekérdezése, amint visszaállítja 0-ra, folytathatja a munkát. Van egy speciális parancs is ennek a zászlónak az olvasásához, így ezzel minden világos) Lépjünk tovább ...

És tulajdonképpen az elmélettel ennyi, már lehet próbálni írni valamit. A kijelzővel való munka megkönnyítése érdekében készítettem egy kis könyvtárat, most nézzük meg, hogyan használható. A kezdéshez töltse le

2 fájl áll rendelkezésünkre, az MT_WH1602.c és az MT_WH1602.h. A másodikat letépjük, itt meg kell választanunk a következtetéseket és a használt vezérlőt.

Egyébként a kijelzőm így van csatlakoztatva:

RS-PC2
R/W-PB10
E-PB14
DB7-PD2
DB6-PC12
DB5-PA8
DB4-PA10
DB3-PA15
DB2-PD11
DB1-PA3
DB0-PA5

Nyissa meg az MT_WH1602.h fájlt:

#define PLATFORM (STM32F10x)

Ezután válassza ki a mikrokontroller érintkezőit, amelyekhez a kijelző csatlakozik. Először is állítsuk be, hogy mely portokat használjuk. Itt, amikor csatlakozom, GPIOA-t, GPIOB-t, GPIOC-t és GPIOD-ot használok, ezt írjuk:

Hasonlóan a mikrokontroller többi lábához is.

A beállításokkal készen vagyunk, folytassuk) A cikk elején megadott parancsok meghívásához az MT_WH1602.c fájl a következő függvényeket tartalmazza (a parancsok nevei alapján vannak elnevezve, így szerintem itt minden világos ):

void MT_WH1602_ClearDisplay(void ) ; void MT_WH1602_ReturnHome(void ) ; void MT_WH1602_EntryModeSet (bool ID-cím, bool shift) ; void MT_WH1602_DisplayOnOff (bool Dbit, bool Cbit, bool Bbit) ; void MT_WH1602_CursorOrDisplayShift (bool SCbit, bool RLbit) ; void MT_WH1602_FunctionSet (bool DLbit, bool Nbit, bool Fbit) ; void MT_WH1602_SetCGRAMaddress (uint8_t cím) ; void MT_WH1602_SetDDRAMAddress (uint8_t cím) ; bool MT_WH1602_ReadBusy(void ) ; void MT_WH1602_WriteData(uint8_t data) ;

Egyes parancsoknál paramétereket kell átadnunk a függvénynek, például:

void MT_WH1602_DisplayOnOff (bool Dbit, bool Cbit, bool Bbit) ;

Nézd meg a parancstáblázatot:

Látjuk, hogy a Display ON / OFF parancs nem csak be- és kikapcsolja a kijelzőt, hanem aktiválja/deaktiválja a kurzort és a kurzor villogását is. Az adatlapon ezeket a parancsbiteket D-nek, C-nek és B-nek jelöljük, majd ezeket paraméterként adjuk át a függvénynek. Ha engedélyeznünk kell a kijelzőt és a kurzort, de ki kell kapcsolnunk a kurzor villogását, akkor a következőképpen hívjuk meg a parancsot:

MT_WH1602_DisplayOnOff(1, 1, 0);

Általában minden egyszerű 😉

Röviden: alkotunk új projekt, adja hozzá a könyvtárat a WH1602 kijelzővel való munkavégzéshez, hozzon létre egy üres .c fájlt, és kezdje el kitölteni kóddal:

// Tartalmazza a könyvtárfájlt#include "MT_WH1602.h" /*******************************************************************/ int main(void ) ( // Az inicializálási függvény meghívása, e nélkül sehol =)() ; // Most el kell végeznünk a kijelző kezdeti konfigurációját // A dokumentáció és az internet ezt javasolja ;) MT_WH1602_FunctionSet(1 , 0 , 0 ) ; MT_WH1602_Delay(1000 ) ; MT_WH1602_FunctionSet(1 , 0 , 0 ) ; MT_WH1602_Delay(1000 ) ; MT_WH1602_FunctionSet(1 , 0 , 0 ) ; MT_WH1602_Delay(1000 ) ; MT_WH1602_FunctionSet(1 , 1 , 1 ) ; MT_WH1602_Delay(1000 ) ; MT_WH1602_DisplayOnOff(1 , 0 , 0 ) ; MT_WH1602_Delay(1000 ) ; MT_WH1602_ClearDisplay() ; MT_WH1602_Delay(2000 ) ; // Itt vettem a késleltetés első értékeit egy példaként, ami eszembe jutott) // Általában ellenőrizni kell a kijelző foglalt jelzőt // Most jelenítsünk meg olyasmit, mint a webhelyünk neve MT_WH1602_WriteData(0x6D ) ; MT_WH1602_Késleltetés(100 ) ; MT_WH1602_WriteData(0x69 ) ; MT_WH1602_Késleltetés(100 ) ; MT_WH1602_WriteData(0x63 ) ; MT_WH1602_Késleltetés(100 ) ; MT_WH1602_WriteData(0x72 ) ; MT_WH1602_Késleltetés(100 ) ; MT_WH1602_WriteData(0x6F ) ; MT_WH1602_Késleltetés(100 ) ; MT_WH1602_WriteData(0x74 ) ; MT_WH1602_Késleltetés(100 ) ; MT_WH1602_WriteData(0x65 ) ; MT_WH1602_Késleltetés(100 ) ; MT_WH1602_WriteData(0x63 ) ; MT_WH1602_Késleltetés(100 ) ; MT_WH1602_WriteData(0x68 ) ; MT_WH1602_Késleltetés(100 ) ; MT_WH1602_WriteData(0x6E ) ; MT_WH1602_Késleltetés(100 ) ; MT_WH1602_WriteData(0x69 ) ; MT_WH1602_Késleltetés(100 ) ; MT_WH1602_WriteData(0x63 ) ; MT_WH1602_Késleltetés(100 ) ; MT_WH1602_WriteData(0x73 ) ; MT_WH1602_Késleltetés(100 ) ; MT_WH1602_WriteData(0x2E ) ; MT_WH1602_Késleltetés(100 ) ; MT_WH1602_WriteData(0x72 ) ; MT_WH1602_Késleltetés(100 ) ; MT_WH1602_WriteData(0x75 ) ; MT_WH1602_Késleltetés(100 ) ; míg (1 ) ( __NOP() ; ) ) /*******************************************************************/

Kész, ellenőrizze)


Amint látja, minden megfelelően működik)

Egyébként valahogy szem elől tévesztettem azt a kérdést, hogy mit írjak a kijelzőre, hogy ez vagy az a karakter megjelenjen. Íme a tábla az adatlapról:

Tehát annak meghatározásához, hogy milyen értéket írjunk a kijelző memóriájába, a táblázat tetejére írt és balra írt számokat kell venni egy adott karakterhez. Például az "A" karakter. Megnézzük - ez a karakter a 0100-as oszlopnak (0x4) és a 0001-es sornak (0x1) felel meg. Kiderült, hogy az „A” karakter megjelenítéséhez 0x41 értéket kell írnia a kijelzőre.

Most már minden úgy tűnik =) A WH1602 kijelző csatlakoztatását és működését kitaláltuk, úgyhogy hamarosan találkozunk!

P.S. Amikor a könyvtárral dolgoztam, nem teszteltem a foglalt jelző beolvasásának funkcióját, így ha hirtelen valami nem működik úgy, ahogy kellene, írjon, kitaláljuk)

Ez az utasítás bemutatja, hogyan csatlakozhat az Arduino-hoz, és hogyan használhatja a 16x2-es és 20x4-es LCD-képernyőket.

Ezek a kijelzők beépített alacsony fogyasztású LED-es háttérvilágítással rendelkeznek, és +5 V-ról működnek. Az LCD-kijelzők csatlakoztatásához 6 érintkezőre van szükség. Bármilyen tűt használhat az Arduino-n!

Az utasítás az Adafruit LCD képernyők alapján készült - kék-fehér 16x2, RGB 16x2 LCD, valamint kék-fehér 20x4, RGB 20x4. Ha más gyártó LCD képernyőjét használod, akkor nincs 100%-os garancia a működésére (bár az esetek 99%-ában működni fog).

Karakter vs grafikus LCD - Mi a különbség?

Rengeteg különféle LCD-képernyő létezik. Ebben a cikkben a karakteres LCD-ket fogjuk megvizsgálni. Az ilyen képernyők nagyszerű lehetőséget kínálnak szöveg megjelenítésére. Az ikonok megjelenítését is személyre szabhatja, de ezeknek az ikonoknak a mérete nem haladhatja meg a 7 pixelt (nagyon kicsi!).

Az alábbi képen egy 16 karakteres, kétsoros LCD monitor látható:

Ha alaposan megnézi, kis téglalapokat fog látni, ahol szimbólumok jelennek meg. Minden téglalap egy különálló pixelrács. Összehasonlításképpen az alábbiakban látható a grafikus LCD képernyő:

A grafikus folyadékkristályos kijelző egy nagy pixelrácsot tartalmaz (in ezt a példát- 128x64). Lehet rajta szöveget megjeleníteni, de jobb a képeket megjeleníteni. A grafikus LCD-k általában nagyobbak, több érintkezőjük van a csatlakozáshoz, és valamivel nehezebben használhatók, mint a szöveges LCD-k.

Ebben a cikkben csak a szöveges/karakteres képernyőkkel foglalkozunk!

LCD képernyők különböző modelljei

Miután korlátoztuk a kérdéses képernyők típusát, nézzük meg, melyek azok.


Bár csak szöveg megjelenítésére szolgálnak, különböző modellek és formai tényezők vannak: a bal felső sarokban egy 20x4-es LCD kék alapon fehér szöveggel, a jobb felsőben egy 16x4-es, zöld alapon fekete szöveggel, a bal alsó sarokban egy 16x2-es, kék alapon fehér, szürke alapon fekete szöveggel 16x1-es szöveg látható.

A jó hír az, hogy ezek a képernyők felcserélhetők. Ha az egyiket testre szabta, lecserélheti egy másik modellre. Az Arduino vázlatot kissé módosítani kell, de a vezetékek ugyanazok!


Ebben a részben egy sínnel és 16 érintkezős LCD képernyőket használunk a csatlakoztatáshoz (lásd a fenti képet). Van még egy LCD 2 sínnel, 8 érintkezős csatlakozással (az alábbi ábrán).


A második modell forrasztás nélküli áramköri laphoz való csatlakoztatása nehezebb.

Karakteres LCD-képernyő csatlakoztatása Arduino-hoz

Érintkezősínek felszerelése


Az LCD-képernyőn kívül további pántokra lesz szüksége. Először egy 10 kΩ-os potenciométer. A potenciométer segítségével beállítjuk a kijelző kontrasztját. Minden LCD-képernyőn különböző kontrasztbeállítások vannak, így nem nélkülözheti a beállítást. Ezenkívül szüksége lesz egy 0,1"-es tűsínre.


Ha az érintkezőkkel ellátott sín túl hosszú, akkor divatos a felesleges érintkezőket egyszerűen levágni!

Az LCD-re kell forrasztania a tűket.

Forrasztáskor nagyon ügyeljen arra, hogy ne sértse meg a Breadboardot! Először "megragadhatja" az első és 16 érintkezőt, majd forraszthatja a többit.


Tápellátás és háttérvilágítás

Csatlakoztassa a tápellátást és a világítást

Magyarázatok


Kezdünk érdekes dolgokkal foglalkozni! Szerelje fel az LCD-t a kenyérsütőtáblára.


A kenyérsütőtáblát az Arduinónkról tápláljuk. Csatlakoztassa a +5 V-ot a piros sínhez és a Gnd-t a kékhez.


Ezt követően csatlakoztatjuk az LCD képernyőnk háttérvilágítását. Csatlakoztassa a 16-os érintkezőt a gnd-hoz és a 15-öst a +5V-hoz. A legtöbb LCD-képernyő háttérvilágítási ellenállással rendelkezik.

Ha nincs ellenállás a modulon, akkor hozzá kell adni egyet az 5 V és a 15. érintkező közé. Az ellenállások értékének kiszámításához ellenőrizze a háttérvilágítás maximális áramát és a feszültségesés hozzávetőleges értékét az adatlapon. Vonja le a feszültségesést 5 V-ból, majd ossza el vele maximális erőáramerősséget és felfelé kerekítve a legközelebbi magasabb szabványos ellenállásértékre. Például, ha a feszültségesés 3,5 V, és az áramerősség 16 mA, az ellenállás értéke a következő lenne: (5 - 3,5)/0,016 = 93,75 ohm, vagy 100 ohm a normál értékre kerekítve. Ha nem talál adatlapot, használjon 220 ohmos ellenállást. Igaz, ebben az esetben elég halvány lehet a háttérvilágítás.


Csatlakoztassa az Arduinót az áramellátáshoz. A háttérvilágításnak világítania kell.

Egyébként néhány olcsó LCD képernyőn nincs háttérvilágítás!

A kontraszt beállításának sémája

Kontraszt áramkör

Magyarázatok


Szerelje be a potenciométert. A képen az 1. tűtől jobbra található.


Csatlakoztassa a potenciométer egyik oldalát a +5V-hoz, a másik oldalát pedig a Gnd-hez. Csatlakoztassa a potenciométer középső tűjét az LCD-kijelző 3. érintkezőjéhez.


Most összekapcsoljuk a képernyőnk logikáját - ez a háttérvilágítástól különálló áramkör! Az 1-es érintkező a Gnd-ra, a 2-es érintkező +5V-ra megy.


Kapcsolja be az Arduino-t. Ha az LCD-monitor háttérvilágítással rendelkezik, annak világítania kell. Forgassa el a potenciométer gombját, hogy lássa az első sorban lévő pixelek első téglalapját.

Ha minden működött, gratulálok. Ez azt jelenti, hogy a logika, a világítás és a kontraszt működik! Ha nem sikerült, ne folytassa az utasítás következő lépéseivel, amíg ki nem derítette, mi a hiba!

Végső csatlakozás

D0–D7, RS, EN és RW. A D0-D7 azok a tűk, amelyek a kijelzőre küldött értékeket tárolják. Az RS láb jelzi a vezérlőnek, hogy adatokat (például ASCII karaktert) fogunk megjeleníteni, vagy vezérlő bájtról van szó (például a kurzor pozíciójának megváltoztatása). Az EN pin az "engedélyezés" rövidítése, ezzel a tűvel jelezzük az LCD-nek, hogy az adatok készen állnak a beolvasásra. Az RW pin az irány beállítására szolgál - a kijelzőről szeretnénk megjeleníteni (általában) vagy kiolvasni (ritkábban használt) adatokat.

Nem kell mindegyik érintkezőt csatlakoztatni az Arduinohoz. Például nem kell RW-t használni, ha csak adatokat jelenítünk meg a képernyőn, így elég a Gnd lábra "húzni". Ráadásul az LCD képernyővel 8 helyett 4 tűvel lehet kommunikálni. Valószínűleg természetes kérdésként merül fel, hogy milyen esetekben használnak 8 tűt? Valószínűleg ez befolyásolja az adatátviteli sebességet. Vagyis 8 névjegy használatával 4 helyett 2-szeresére növelheti az információcsere sebességét. NÁL NÉL ez az eset, a sebesség nem fontos, ezért az LCD-t 4 tűvel kötjük össze az Arduino-val.

Tehát 6 tűre van szükségünk: RS, EN, D7, D6, D5 és D4.

Az LCD képernyővel való munkához a LiquidCrystal könyvtárat fogjuk használni, amely nagyban leegyszerűsíti a tűk beállításának folyamatát. Ennek a könyvtárnak az egyik előnye, hogy az Arduino bármely érintkezőjét használhatja az LCD érintkezők csatlakoztatásához. Így ennek az útmutatónak a végén könnyen kicserélheti a tűket, ha ez kritikus fontosságú a projektje szempontjából.

Végső kijelző csatlakozás

Magyarázatok


Ahogy fentebb említettük, nem fogjuk használni az RW tűt, ezért lehúzzuk a földre. Ez az 5-ös tű.


Miután csatlakoztattuk az RS-t - ez a 4-es érintkező. A barna vezetéket használjuk, hogy az Arduino 7-es digitális érintkezőjéhez csatlakoztassuk.


Fehér vezetékkel csatlakoztassa az EN pin - pin # 6 az Arduino digitális # 8 digitális tűjéhez.


Az adatkapcsolatokon jött a sor. A DB7 a 14-es érintkező az LCD-n. A narancssárga vezetékkel csatlakozik az Arduino 12-es érintkezőjéhez.


Három adattű maradt, a DB6 (sárga #13-as tű), a DB5 (12-es tű zöld) és a DB4 (kék #11-es tű). Az Arduino 11-es, 10-es és 9-es érintkezőihez csatlakoznak.


A Csatlakozás eredményeként a bal oldali fotóhoz hasonlót kap.

Karakteres LCD használata

Ideje feltölteni a vázlatot az Arduino-ra, hogy vezérelhessük az LCD-képernyőt. A LiquidCrystal könyvtár alapértelmezés szerint telepítve van az Arduino IDE-ben. Tehát csak le kell töltenünk az egyik példát, és egy kicsit módosítanunk kell a csatlakoztatáshoz használt érintkezőkhöz.

Nyissa meg a Fájl→Példák→LiquidCrystal→HelloWorld vázlatot.

A gombostűkkel kapcsolatos információk frissítése. A következő sort keresem:

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

És módosítsd a következőre:

Most összeállíthatja és feltöltheti a vázlatot az Arduino-ba.


Ha szükséges, állítsa be a kontrasztot.


Természetesen az LCD kijelzőt bármilyen méretben használhatja. Például az alábbi kép a 20x4 LCD működését mutatja be.


Vagy fekete szöveg zöld alapon:


A zöld alapon fekete szöveget tartalmazó képernyők egyik előnye a háttérvilágítás kikapcsolása.


Hány sort használunk

Lássuk, hogyan kezeli az LCD a hosszú üzeneteket, és hogyan használ több sort. Például, ha módosítja a következő sort:

lcd.print("helló, világ!");

A következőhöz:

lcd.print("helló, világ! ez egy hosszú, hosszú üzenet");

A 16x2-es LCD mindent levág a 16. karakter után:


De egy 20x4-es LCD-kijelző az első sortól a harmadikig hordozza a nem megjelenített karaktereket (a második sor a negyediken folytatódik). Nem túl kényelmes, de ebben a szakaszban el kell viselnie. Tehát hosszú karakterláncok megjelenítésekor számolja meg a karaktereket, hogy ne lépje túl a megengedett hosszt.


LCD RGB háttérvilágítással

Ezek a képernyők ugyanúgy működnek, mint a normál képernyők, de három LED (piros, zöld, kék) van a háttérvilágításhoz, így különböző színek megvilágítás.

Miután csatlakoztatta az LCD-t, és a fenti utasítások szerint ellenőrizte, csatlakoztassa a LED-eket az Arduino PWM analóg érintkezőihez a szín finomhangolásához. Ha Arduino Uno-t használ, három szabad PWM tűnek kell maradnia. csatlakoztassa a piros LED-et (az LCD 16-os érintkezője) a Digital 3-hoz, a zöld LED-et (17-es érintkező) a Digital 5-höz, a kék LED-et (18-as érintkező az LCD-n) a 6-oshoz. Az LCD-modul már rendelkezik ellenállásokkal, így Ön nincs szükség további csatlakoztatásra.


Most töltse fel az alábbi vázlatot az Arduino-ba.

// tartalmazza a könyvtárakat a vázlatban:

#beleértve

#beleértve

#define REDLITE 3

#define GREENLITE 5

#define BLUELITE 6

// deklaráljuk az általunk használt kapcsolatok számát

// adatátvitelhez

LiquidCrystal lcd(7, 8, 9, 10, 11, 12);

// a fényerő 0 -> 255 tartományban változtatható

int fényerő = 255;

// Állítsa be az oszlopok és sorok számát az LCD-n:

lcd.begin(16, 2);

// üzenet megjelenítése az LCD-n.

lcd.print("RGB 16x2 kijelző");

lcd.setCursor(0,1);

lcd.print("Többszínű LCD");

pinMode(REDLITE, OUTPUT);

pinMode(GREENLITE, OUTPUT);

pinMode(KÉK, KIMENET);

fényerő = 100;

for (int i = 0; i< 255; i++) {

setBacklight(i, 0, 255-i);

for (int i = 0; i< 255; i++) {

setBacklight(255-i, i, 0);

for (int i = 0; i< 255; i++) {

setBacklight(0, 255-i, i);

void setBacklight(uint8_t r, uint8_t g, uint8_t b) (

// állítsd be a piros LED-et - világosabb, mint a többi!

r = térkép(r, 0, 255, 0, 100);

g = térkép(g, 0, 255, 0, 150);

r = térkép(r, 0, 255, 0, fényerő);

g = térkép(g, 0, 255, 0, fényerő);

b = térkép(b, 0, 255, 0, fényerő);

// közös anód, tehát fordítsd meg!

r = térkép(r, 0, 255, 255, 0);

g = térkép(g, 0, 255, 255, 0);

b = térkép(b, 0, 255, 255, 0);

Serial.print("R = "); Serial.print(r, DEC);

Serial.print(" G = "); Serial.print(g, DEC);

Serial.print(" B = "); Serial.println(b, DEC);

analogWrite(REDLITE, r);

analogWrite(GREENLITE, g);

analógWrite(KÉK, b);

Ennek a vázlatnak az eredménye az alábbi videóban látható.

CreateChar parancs

Valószínűleg speciális karaktereket szeretne használni. Például, ha egy projektet hőmérséklet-érzékelővel (hőelem) használ, akkor a (°) szimbólum jól fog jönni.

Ezt a createChar paranccsal lehet megtenni. Ezenkívül találhat egy nagyszerű webhelyet, amely elvégzi az új szimbólumok létrehozásának minden piszkos munkáját!

Hagyja észrevételeit, kérdéseit és ossza meg személyes tapasztalat lent. A beszélgetés során gyakran születnek új ötletek, projektek!

Az elektronika iránti szenvedélyem teljes ideje alatt történetesen több gyártó LCD-jét használtam. DataVision, WINSTAR, Uniworld Technology Corp.. A vezérlő típusában, a tűk számában és a vonalak hosszában különböztek, ugyanakkor mindegyiknek azonos volt a csatlakozási séma, parancsrendszere és ugyanaz a program szolgálta ki őket a mikrokontrollerről. Ezért bár most a kijelzőről fogunk beszélni WINSTAR WH0802A, az alábbiak mindegyike más gyártók karakteres LCD-jére vonatkozik.

Tehát csatlakoztatjuk a WH0802A-YGH-CT kijelzőt a mikrokontrollerhez

A WH0802A egy 2 soros, 8 karakteres kijelző, beépített KS0066 vezérlővezérlővel.
Elemezzük a kijelző kimenetek célját.

Egyes kijelzőknek kettő van további kimenet– háttérvilágítás kimenetek +LED és –LED. Sőt, ha vannak következtetések, ez nem jelenti azt, hogy van háttérvilágítás is. Valamint fordítva. A kijelzőmnek van háttérvilágítása, de nincs vezérlőtüske.

Alapértelmezés szerint a WH0802A-YGH-CT kijelző háttérvilágítása le van tiltva. A bekapcsolásához néhány egyszerű műveletet kell végrehajtania, nevezetesen két jumpert kell felszerelni, és egy áramkorlátozó ellenállást forrasztani (lásd az RK, JF és RA fotót).

Kijelző bekötési rajza

azt tipikus séma kapcsolja be a karakteres LCD-t. A kijelző háttérvilágításának vezérlési sémáját nem fogjuk használni, de minden esetre lerajzoltam.

Start kód

Az áramkör tápellátása után el kell forgatnia a kontrasztszabályozót (R1 ellenállás). Ha a felső sor megjelenik a képernyőn, az azt jelenti, hogy él, és ideje elkezdeni a kódírást. A kezdeti szakaszban 8 bites buszt fogunk használni. Az első eredmények eléréséhez két függvényt kell írnunk - egy függvényt az adatok írására és egy függvényt a parancsok írására. Csak egy sorban különböznek egymástól - adatok írásakor az RS jelnek 1-nek, parancs írásakor az RS-nek 0-nak kell lennie. Az olvasási funkciókat még nem fogjuk használni, így az R / W jel mindig 0 lesz.

A 8 bites busz írási ciklusa így néz ki:
1. Állítsa be az RS-t (0 - parancs, 1 - adat)
2. Írja ki az adatbájt értékét a DB7…DB0 buszra
3. Állítsa be az E=1-et
4. Program késleltetés 1
5. Állítsa be az E=0-t
6. Program késleltetés 2

A karakteres LCD vezérlőnek nincs végtelen sebessége, ezért egyes műveletek között szoftveres késleltetéseket alkalmaznak. Az első a villogó jel egy ideig tartásához szükséges, a második, hogy a vezérlőnek legyen ideje adatot írni vagy parancsot végrehajtani. A késleltetési értékek mindig a kijelzővezérlő leírásában szerepelnek, és mindig legalább a minimális értéküket be kell tartani, különben elkerülhetetlenek a vezérlő működésének meghibásodásai.

Általában a kijelzővezérlőnek van egy úgynevezett foglalt jelzője - BF. Ha a jelző 1, akkor a vezérlő foglalt, ha 0, akkor szabad. A második szoftveres késleltetés helyett leolvashatja a foglalt jelzőt, és ellenőrizheti, hogy a kijelzővezérlő szabad-e. De mivel az első eredményeket gyorsan szeretnénk elérni, a foglalt zászlóval később foglalkozunk.

//karakteres LCD csatlakoztatása az AVR-hez
#beleértve
#beleértve

//port, amelyre az LCD adatbusz csatlakozik
#define PORT_DATA PORTD
#define PIN_DATA PIND
#define DDRX_DATA DDRD

//port, amelyhez a vezérlőtűk csatlakoznak
#define PORT_SIG PORTB
#define PIN_SIG PINB
#define DDRX_SIG DDRB

// mikrokontroller pin-számai
//amelyhez LCD vezérlőtűk csatlakoznak
#define RS 5
#define RW 6
#define EN 7

// makrók a bitekkel való munkához
#define ClearBit(reg, bit) reg &= (~(1<<(bit)))
#define SetBit(reg, bit) reg |= (1<<(bit))

#define F_CPU 8000000
#define _delay_us(us) __delay_cycles((F_CPU / 1000000) * (us));
#define _delay_ms(ms) __delay_cycles((F_CPU / 1000) * (ms));

//parancsbeviteli függvény
üres LcdWriteCom( előjel nélküli char adat)
{
ClearBit(PORT_SIG, RS); // állítsa az RS-t 0-ra
PORT_DATA = adat; // adatok kimenete a buszra
SetBit(PORT_SIG, EN); // állítsa az E-t 1-re
_delay_us(2);
ClearBit(PORT_SIG, EN); // állítsa az E-t 0-ra
_delay_us(40);

//adatírási funkció

üres LcdWriteData( előjel nélküli char adat)
{
SetBit(PORT_SIG, RS); //állítsd az RS-t 1-re
PORT_DATA = adat; // adatok kimenete a buszra
SetBit(PORT_SIG, EN); //állítsd az E-t 1-re
_delay_us(2);

ClearBit(PORT_SIG, EN); // állítsa az E-t 0-ra

delay_us(40);
}

int fő( üres )
{
míg (1);
Visszatérés 0;
}

Itt nincsenek bonyolult helyek, mindennek világosnak kell lennie. Lépj tovább.

Minden LCD-t használat előtt inicializálni kell. Az inicializálási folyamatot általában a kijelzővezérlő adatlapja írja le. De még ha nincs is ott információ, a sorrend valószínűleg ilyen lesz.

1. Tálaljuk az ételt

2. Várjon >40ms

3. Adja ki a Function set parancsot

DL– bit a buszszélesség beállításához
0-4 bites busz, 1-8 bites busz

N– bit a kijelző sorok számának beállításához
0 - egysoros mód, 1 - kétsoros mód

F- font beállítás bit
0 - 5*8 formátum, 1 - 5*11 formátum

* - nem számít, mi lesz ezekben a bitekben

4. Adja ki a Display ON / OFF parancsot

D– kijelző engedélyező/letiltható bit
0 - kijelző kikapcsolva, 1 - kijelző bekapcsolva

C– kurzor engedélyezési/letiltási bit
0 - kurzor letiltva, 1 - kurzor engedélyezve

B– villogás engedélyező bit
0 - villogó kurzor engedélyezve, 1 - villogó kurzor letiltva

5. Adja ki a Clear Display parancsot


6. Várakozás > 1,5 ms

7. Adja ki az Entry Mode Set parancsot

I/D– a DDRAM (megjelenítő adat RAM) címének növelésének/csökkentésének sorrendje
0 - a kurzor balra mozog, a cím 1-gyel csökken, 1 - a kurzor jobbra mozog, a cím 1-gyel nő

SH– a teljes kijelző eltolási sorrendje
0 - nincs eltolás, 1 - eltolás az I / D jelnek megfelelően történik - ha 0 - a kijelző jobbra van tolva, 1 - a kijelző balra van eltolva

Példánkban az inicializálási függvény így fog kinézni