1602 grafikus kijelzővel működik arduino-ban. LCD WH1602B a Winstartól. LCD képernyő vezérlés I2C buszon keresztül

Megérkezett Arduino Nano, érkezett egy készlet, benne kenyérsütővel és LCD kijelzővel. A tábla kijelzőjén ez áll: 1602A, lent - QAPASS. Elkezdtem faragni az első készüléket, és természetesen szerettem volna információkat megjeleníteni a kijelzőn, nem villogó LED-eket.

A Google segített, azt mondta, hogy ez egy karakteres kijelző; Ha nem torzítja el, akkor valószínűleg ASCII karakterek állnak rendelkezésre - számok, latin, néhány alapvető karakter.

A kijelző elindítását a következő anyagok segítették: Karakteres LCD vezérlése PC nyomtatóportról; Hogyan csatlakoztassuk az Arduino-t egy karakteres LCD-hez ; Pwm szervo meghajtó motorvezérlés PDF.

A kijelző elég elterjedt, és már pajzsokat is kitaláltak hozzá - SPI-vel, like-al és/vagy I2C-vel is vannak lehetőségek, és az internet tele van receptekkel ezekre az esetekre. De csak az eredeti 16x2-es kijelzőm és az Arduino volt meg, amihez csatolni akartam.

A kijelző működési és adatátviteli móddal rendelkezik nibblesben, egyenként 4 bites, míg a busz alacsony rendű bitjeit nem használják. Az adatbusznak csak a felének csatlakoztatását sok helyen leírják, és nem jöttem rá, hogyan kell a kijelzőt bekötni és 8 soron keresztül dolgozni vele. Nagyon elégedett vagyok a működésével.

Jó leírás a kijelzőkről ebből a típusból Itt találtam - http://greathard.ucoz.com/44780_rus.pdf. És itt (http://arduino.ru/forum/programmirovanie/lcd-i2c-partizanit#comment-40748) van egy példa a karaktergenerátor megadására.

Kapcsolat

A kijelzőm forrasztás nélküli érintkezőkkel érkezett. Kezdettől fogva szerettem volna a kábelt forrasztani, 16 vezetéket dupontokkal levágni, megtisztítani. Aztán ástam magam a bálnában, és találtam egy DuPont fésűt a táblához való forrasztáshoz. Innen 16 érintkezőt bontottam le és forrasztottam.
A kijelzőm valahogy így nézett ki (az érintkezők forrasztása előtt):

Először a 15-ös (A) érintkezőt +5V-ra, a 16-os (K)-t a földre csatlakoztattam, és megbizonyosodtam arról, hogy a háttérvilágítás működik. Általában helyes a katódot a földhöz kötni egy 220 ohmos ellenálláson keresztül, amit akkor tettem.

Ezután csatlakoztattam a földet (1) és a tápfeszültséget (2). Az Arduino USB-ről táplálható, 5V stabilizált feszültségről és nem stabilizált 6-12V-ról, automatikusan a legmagasabb feszültség kerül kiválasztásra. Most az Arduino USB-ről működik, és azon tűnődtem, hol szerezhetek 5 voltot. Kiderült, hogy az 5V az Arduino tűn van, ahová külső stabilizált 5V van csatlakoztatva. Illetve 4,7V lett, de nekem ennyi is elég volt.

A tápfeszültség csatlakoztatása után, ha minden rendben van, akkor a felső sor szilárd ismerős téglalapokkal világít.

Ezután csatlakoztatjuk a kontrasztpotenciométert (3 V0 érintkező). A potenciométer egyik szélső kivezetését a földre dobjuk, a másodikat +5V-ra, a középsőt a kijelző 3-as érintkezőjére. 10K-s potenciométer ajánlott. 50K volt bálnából, először használtam. A beállítás csak az egyik szélen történt, nagyon finoman kellett elkapni a kívánt kontrasztot. Aztán találtam egy hasonlót 5K-nál egy másik bálnában, és telepítettem. A beállítás egyik szélétől fél fordulatig nyúlt. Nyilvánvalóan vehetsz még kisebb potenciométert is. Valószínűleg 10K ajánlott, hogy az áramkör kevesebbet fogyasztson. Igen, kellett egy kis forrasztás, dupontokkal forrasztottam vezetékeket a potenciométerek kapcsaira.

Tesztvázlat

A tesztvázlatot az Arduino Studio példáiból vettük át - "C:\Program Files (x86)\Arduino\libraries\LiquidCrystal\ex amples\HelloWorld\HelloWorld.ino", csak a névjegyeket kell módosítani a miénkre - LiquidCrystal lcd( 7, 6, 5, 4, 3, 2);

Ez a vázlat elvileg leírást is tartalmaz arról, hogy mit hova kell csatlakoztatni. Az ott jelzett módon csatlakoztathatja, akkor nem kell semmit módosítania.

// tartalmazza a könyvtár kódját: #include // inicializáljuk a könyvtárat az interfész érintkezők számaival LiquidCrystal lcd(7, 6, 5, 4, 3, 2); void setup() ( // beállítja az LCD "oszlopok és sorok számát: lcd.begin(16, 2); // Üzenet nyomtatása az LCD-re. lcd.print("hello, world!"); ) void loop() ( // állítsa a kurzort a 0. oszlop 1. sorára // (megjegyzés: az 1. sor a második sor, mivel a számlálás 0-val kezdődik): lcd.setCursor(0, 1); // kiírja a számot másodperc a visszaállítás óta: lcd.print(millis() / 1000); )

Valami ilyesmi derül ki:

Egyébként a kezembe került kijelző nem működik háttérvilágítás nélkül. Úgy értem, működik, de alig látsz valamit.

1602A Kapcsolatok megjelenítése

# kapcsolatba lépni Név Hogyan kell csatlakozni
1 VSS GND
2 VDD +5V
3 V0 Kontraszt - a potenciométer középső kivezetéséhez
4 RS (Regisztráció kiválasztása) D7 Arduino
5 R/W (írás vagy olvasás) GND
6 E (jel engedélyezése) D6 Arduino
7-14 D0-D7 D0-D3 - nincs csatlakoztatva; D4-D7 - az Arduino D5-D2 érintkezőihez csatlakozik
15 A Háttérvilágítású anód, +5V-ra kötve
16 K Háttérvilágítású katód, 220 Ohm-os ellenálláson keresztül földelve

A cikk arról szól, hogyan kell megfelelően csatlakoztatni az LCD-t az Arduino-hoz, minden, amit tudnia kell az LCD 1602 és az LCD i2c csatlakoztatásáról.

A HD44780 vezérlő alapján készült, 1602 méretű LCD kijelzők ma is az egyik legolcsóbb, legegyszerűbb és legkeresettebb bármilyen elektronikus eszköz fejlesztésére.

Nem meglepő, hogy mind egyszerű, szó szerint térdre szerelt egységekben, mind komolyabb ipari egységekben, például kávégépekben láthatók. Ezzel a kijelzővel szerelik össze a legnépszerűbb Arduino-hoz kapcsolódó modulokat és pajzsokat, például az LCD I2C modult és az LCD Keypad Shield-et.

A következő lépésekben részletesen, képekkel elmondjuk, hogyan kell az LCD-t az Arduino-hoz csatlakoztatni, és a szükséges információkat megjeleníteni a kijelzőn.

2. lépés: LCD 1602 az Arduino számára

Az 1602-es kijelzők két különböző kivitelben kaphatók:

  • 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érekkel.

A HD44780 vezérlő kijelzőinek mérete igen eltérő, 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 ez a probléma részben megoldható, és a cikk részletesen leírja, hogyan kell ezt megtenni.

A kijelző 16 PIN-es csatlakozóval rendelkezik a csatlakoztatáshoz. A csapok a tábla hátoldalán vannak jelölve, ez a következő:

  • 1 (VSS) – a vezérlő negatív tápegysége.
  • 2 (VDD) – a vezérlő pozitív tápellátása.
  • 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 az írás, ha a földre van csatlakoztatva.
  • 6 (E) – aktiválás (engedélyezés).
  • 7–10 (DB0-DB3) – alacsony rendű bitek a nyolcbites 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ápellátáshoz.
  • 16 (K) – negatív katód a háttérvilágítású tápellátáshoz.

3. lépés Csatlakoztassa az LCD kijelzőt

Mielőtt csatlakoztatná a kijelzőt és információt továbbítana rá, érdemes ellenőrizni a működőképességé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 kOhm-os potenciométer megfelelő, az alakja nem fontos. A +5V és a GND a külső lábakra van ellátva, a középső láb pedig a VO érintkezőhöz csatlakozik.

Amikor áramot kap az áramkör, el kell érnie a szükséges kontrasztot; ha helytelenül van beállítva, akkor a kép nem lesz látható a képernyőn. 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 megjelenítés működéséhez egy speciális, Arduino IDE környezetbe épített könyvtárat használnak, a LiquidCrystal.h-t, amiről alább írok. 8 bites és 4 bites módban is működhet. Az első opcióban csak a legkisebb és legjelentősebb biteket használja ( BB0-DB7), a másodikban csak a fiatalabbak ( BB4-DB7).

De a 8 bites mód használata ezen a kijelzőn rossz döntés, szinte nincs sebességelőny, mivel a frissítési gyakoriság 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 csatlakoztathatók, a lényeg az, hogy a kódban a megfelelő sorrendet állítsuk be.

Ha a kívánt szimbólum még nincs a vezérlő memóriájában, akkor manuálisan is megadhatja (összesen legfeljebb hét szimbólum). A vizsgált kijelzők cellája öt x nyolc pixeles kiterjesztéssel rendelkezik. A szimbólumalkotás feladata egy kis maszk írása, és az egyes pontok elhelyezése olyan helyeken, ahol a pontoknak világítaniuk kell, és nullákat, ahol nem. A fent tárgyalt kapcsolási rajz nem mindig jó, mivel az Arduino legalább hat digitális kimenetet használ.

4. lépés: Bypass séma

Vizsgáljuk meg a lehetőséget, hogy megkerüljük ezt, és csak kettővel boldoguljunk. Szükségünk van egy további átalakító modulra az LCD-hez IIC/I2C-hez. Az alábbi képeken látható, hogyan forrasztják a kijelzőre és hogyan csatlakozik az Arduino-hoz.

De ez a csatlakozási lehetőség csak egy speciális LiquidCrystal_I2C1602V1 könyvtárral működik, amelyet azonban könnyű megtalálni az interneten és telepíteni, ami után gond nélkül használható.

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

A LiquidCrystal.h könyvtár letölthető weboldalunk Libraries részéből ezen az oldalon vagy az arduino.cc hivatalos forrásból. De letöltheti az alábbi linkekről is:

5. lépés: Vázlat (programkód)

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.

A vázlatmintát itt tekintheti meg:

Fájl -> Példák -> LiquidCrystal -> HelloWorld_SPI

Vagy ha van angol nyelvű menüje:

Fájl -> Példák -> LiquidCrystal -> HelloWorld_SPI

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

LCD kijelzö– gyakori vendég az Arduino projektekben. De összetett áramkörökben előfordulhat, hogy hiányoznak az Arduino portok, mivel sok-sok érintkezős pajzsot kell csatlakoztatni. A megoldás ebben a helyzetben az lehet I2C/IIC egy adapter, amely egy szinte szabványos Arduino 1602 pajzsot köt össze Uno, Nano vagy Mega kártyákkal, mindössze 4 tűvel. Ebben a cikkben megvizsgáljuk, hogyan csatlakoztathat LCD képernyőt I2C interfésszel, milyen könyvtárakat használhat, írunk egy rövid példavázlatot, és megnézzük a gyakori hibákat.

Folyadékkristályos kijelző LCD 1602 van jó választás karakterláncok kiadására különböző projektekben. Olcsó, különféle módosítások vannak különböző háttérvilágítási színekkel, könnyen letölthet kész könyvtárakat az Arduino vázlatokhoz. De ennek a képernyőnek a fő hátránya, hogy a kijelző 16 digitális tűvel rendelkezik, amelyből minimum 6. Ezért ennek az LCD képernyőnek az i2c nélküli használata komoly korlátozásokat jelent az Arduino Uno vagy Nano kártyák számára. Ha nincs elég érintkező, akkor vásárolnia kell egy Arduino Mega kártyát, vagy mentenie kell a névjegyeket, beleértve a kijelző i2c-n keresztüli csatlakoztatását is.

Az LCD 1602 lábak rövid leírása

Nézzük meg közelebbről az LCD1602 érintkezőit:

Mindegyik csapnak megvan a maga célja:

  1. Földi GND;
  2. Tápellátás 5 V;
  3. A monitor kontrasztjának beállítása;
  4. Parancs, adat;
  5. Adatok írása és olvasása;
  6. Engedélyezze;

7-14. Adatvonalak;

  1. Plusz háttérvilágítás;
  2. Mínusz a háttérvilágítás.

Kijelző specifikációi:

  • Karakter megjelenítési típus, lehetőség van szimbólumok betöltésére;
  • LED lámpák;
  • Vezérlő HD44780;
  • Tápfeszültség 5V;
  • 16x2 karakteres formátum;
  • Üzemi hőmérséklet tartomány -20C és +70C között, tárolási hőmérséklet -30C és +80C között;
  • Betekintési szög 180 fok.

Az LCD csatlakozási rajza az Arduino kártyához i2C nélkül

A monitor I2C nélküli Arduino mikrokontrollerhez való közvetlen csatlakoztatásának szabványos diagramja a következő.

A csatlakoztatott érintkezők nagy száma miatt előfordulhat, hogy nincs elég hely a szükséges elemek csatlakoztatásához. Az I2C használatával a vezetékek száma 4-re, a foglalt érintkezők száma pedig 2-re csökken.

Hol vásárolhat LCD képernyőket és pajzsokat az Arduino számára

Az 1602-es LCD-kijelző (és a 2004-es verzió) meglehetősen népszerű, így a hazai webáruházakban és a külföldi oldalakon is könnyen megtalálható. Íme néhány link a leginkább elérhető lehetőségekhez:

LCD1602+I2C kék képernyős modul, Arduino kompatibilis Egy egyszerű LCD1602 kijelző (zöld háttérvilágítás) olcsóbb, mint 80 rubel Nagy LCD2004 képernyő I2C HD44780-zal Arduinohoz (kék és zöld háttérvilágítás)
1602-es kijelző IIC adapterrel és kék háttérvilágítással Az LCD1602 másik változata forrasztott I2C modullal IIC/I2C/TWI/SPI portos adaptermodul 1602-es pajzshoz, kompatibilis az Arduino-val
RGB háttérvilágítású kijelző! LCD 16×2 + billentyűzet + Buzzer Shield Arduino-hoz Pajzs Arduino-hoz gombokkal és képernyővel LCD1602 LCD 1602 LCD kijelző 3D nyomtatóhoz (Smart Controller for RAMPS 1.4, Text LCD 20×4), SD és MicroSD kártyaolvasó modul

Az I2C protokoll leírása

Mielőtt megvitatná a kijelző Arduino-hoz i2c adapteren keresztüli csatlakoztatását, beszéljünk röviden magáról az i2C protokollról.

I2C/IIC(Inter-Integrated Circuit) egy eredetileg kommunikációra létrehozott protokoll integrált áramkörök belül elektronikai eszköz. A fejlesztés a Philips tulajdona. Az i2c protokoll egy 8 bites busz használatán alapul, amely a vezérlőelektronikában lévő blokkok kommunikálásához szükséges, valamint egy címzési rendszeren, melynek köszönhetően ugyanazon a vezetékeken keresztül több eszközzel is kommunikálhatunk. Egyszerűen csak adatokat továbbítunk egyik vagy másik eszközre, az adatcsomagokhoz hozzáadva a kívánt elem azonosítóját.

A legtöbb egyszerű áramkör Az I2C tartalmazhat egy mestereszközt (leggyakrabban egy Arduino mikrokontroller) és több szolgát (például egy LCD-kijelzőt). Minden eszköznek van egy címe 7 és 127 között. Nem lehet két azonos című eszköz ugyanabban az áramkörben.

Az Arduino tábla támogatja az i2c hardverét. Az A4 és A5 érintkezők segítségével csatlakoztathatja az eszközöket ezzel a protokollal.

Az I2C működésének számos előnye van:

  • A működéshez csak 2 vonal szükséges - SDA (adatvonal) és SCL (szinkronizálási vonal).
  • Számos vezető eszköz csatlakoztatása.
  • Csökkentett fejlesztési idő.
  • Csak egy mikrokontroller szükséges a teljes eszközkészlet vezérléséhez.
  • Az egy buszra csatlakoztatható mikroáramkörök számát csak a maximális kapacitás korlátozza.
  • Magas fokú adatbiztonság az áramkörökbe épített speciális túlfeszültség-szűrő szűrőnek köszönhetően.
  • Egyszerű eljárás a felmerülő hibák diagnosztizálására és a hibák gyors hibakeresésére.
  • A busz már magába az Arduinóba integrálva van, így nincs szükség további buszinterfész fejlesztésére.

Hibák:

  • Van egy kapacitív korlát a vonalon - 400 pF.
  • Nehéz programozni egy I2C vezérlőt, ha több különböző eszköz van a buszon.
  • Nagyszámú eszköz esetén megnehezíti a hiba elkülönítését, ha az egyik hibásan lemerül.

i2c modul LCD 1602 Arduino-hoz

Az i2c kijelző használatának leggyorsabb és legkényelmesebb módja az Arduino-ban, ha kész képernyőt vásárol beépített protokolltámogatással. De nincs túl sok ilyen képernyő, és nem is olcsók. De már rengeteg különböző szabványos képernyőt gyártottak. Ezért ma a legkedvezőbb és legnépszerűbb lehetőség egy külön I2C modul vásárlása és használata - egy adapter, amely így néz ki:

A modul egyik oldalán i2c érintkezőket látunk - föld, táp és 2 az adatátvitelhez. A másik adapteren külső tápcsatlakozókat látunk. És természetesen a táblán sok csap található, amelyekkel a modult a szabványos képernyőtüskékre forrasztják.


Az i2c kimenetek az Arduino kártyához való csatlakozásra szolgálnak. Szükség esetén külső tápellátást csatlakoztatunk a háttérvilágításhoz. A beépített trimmerrel egyéni kontrasztértékeket állíthatunk be J

A piacon találhatunk LCD 1602 modulokat már forrasztott adapterekkel, használatuk a lehető legegyszerűbb. Ha külön adaptert vásárolt, akkor azt először a modulhoz kell forrasztania.

Az LCD-képernyő csatlakoztatása az Arduino-hoz I2C-n keresztül

A csatlakoztatáshoz magára az Arduino kártyára, egy kijelzőre, egy kenyérsütőtáblára, csatlakozó vezetékekre és egy potenciométerre van szükség.

Ha speciális különálló i2c adaptert használ, először forrasztania kell a képernyőmodulhoz. Ott nehéz hibázni, követheti ezt a sémát.


Az i2c támogatással rendelkező LCD monitor négy vezetékkel csatlakozik az alaplaphoz - két vezeték az adatokhoz, két vezeték az áramellátáshoz.

  • A GND tű csatlakozik a GND-hez az alaplapon.
  • A VCC tűje 5V-on van.
  • Az SCL az A5 érintkezőhöz csatlakozik.
  • Az SDA az A érintkezőhöz csatlakozik.

És ez minden! Nincsenek dróthálók, amelyekbe nagyon könnyű belegabalyodni. Ugyanakkor egyszerűen a könyvtárakra bízhatjuk az i2C protokoll megvalósításának minden bonyolultságát.

Könyvtárak az i2c LCD kijelzővel való munkavégzéshez

Az Arduino és az LCD 1602 I2C buszon keresztüli interakciójához legalább két könyvtárra lesz szüksége:

  • Az I2C-vel való munkavégzéshez használható Wire.h könyvtár már benne van a szabványban Arduino program IDE.
  • A LiquidCrystal_I2C.h könyvtár, amely sokféle parancsot tartalmaz a monitor I2C buszon keresztüli vezérléséhez, és lehetővé teszi a vázlat egyszerűbbé és rövidebbé tételét. Ezenkívül telepítenie kell a könyvtárat A kijelző csatlakoztatása után telepítenie kell a LiquidCrystal_I2C.h könyvtárat is.

Miután az összes szükséges könyvtárat a vázlathoz csatlakoztattuk, létrehozunk egy objektumot, és használhatjuk annak összes funkcióját. A teszteléshez töltsük be a következő szabványos példavázlatot.

#beleértve #beleértve // A könyvtárat is beleértve //#include // Alternatív könyvtár csatlakoztatása LiquidCrystal_I2C lcd(0x27,16,2); // Adja meg az I2C címet (a leggyakoribb érték), valamint a képernyő paramétereit (LCD 1602 esetén - 2 sor, egyenként 16 karakter //LiquidCrystal_PCF8574 lcd(0x27); // Opció a PCF8574 könyvtárhoz void setup( ) ( lcd.init (); // A kijelző inicializálása lcd.backlight(); // A háttérvilágítás csatlakoztatása lcd.setCursor(0,0); // A kurzor beállítása az első sor elejére lcd.print(" Hello"); // Szöveg beírása az első sorba lcd.setCursor(0,1); // Állítsa a kurzort a második sor elejére lcd.print("ArduinoMaster"); // Szöveg beírása a második sorba ) void loop() ( )

A LiquidCrystal_I2C könyvtár funkcióinak és módszereinek leírása:

  • home() és clear() - az első funkció lehetővé teszi a kurzor visszaállítását a képernyő elejére, a második ugyanezt teszi, ugyanakkor töröl mindent, ami korábban a monitoron volt.
  • write(ch) – lehetővé teszi egyetlen ch karakter kinyomtatását a képernyőre.
  • cursor() és noCursor() – megjeleníti/elrejti a kurzort a képernyőn.
  • blink() és noBlink() – a kurzor villog/nem villog (ha a megjelenítése korábban engedélyezve volt).
  • display() és noDisplay() – lehetővé teszi a kijelző csatlakoztatását/letiltását.
  • scrollDisplayLeft() és scrollDisplayRight() – görgeti a képernyőt egy karakterrel balra/jobbra.
  • autoscroll() és noAutoscroll() – lehetővé teszi az automatikus görgetés mód engedélyezését/letiltását. Ebben a módban minden új karakter ugyanarra a helyre kerül, és kiszorítja a képernyőre korábban írottakat.
  • leftToRight() és rightTo Left() – A megjelenített szöveg irányának beállítása – balról jobbra vagy jobbról balra.
  • createChar(ch, bitmap) – létrehoz egy karaktert ch kóddal (0–7), bittérképes bittérképek tömbjét használva fekete-fehér pontok létrehozásához.

Alternatív könyvtár az i2c kijelzővel való munkavégzéshez

Bizonyos esetekben hibák léphetnek fel, amikor a megadott könyvtárat PCF8574 vezérlőkkel felszerelt eszközökkel használja. Ebben az esetben a LiquidCrystal_PCF8574.h könyvtár javasolható alternatívaként. Kibővíti a LiquidCrystal_I2C-t, így nem lehet probléma a használatával.

Problémák az i2c lcd kijelző csatlakoztatásakor

Ha a vázlat feltöltése után nem lát semmilyen üzenetet a kijelzőn, próbálkozzon a következő lépésekkel.

Először is növelheti vagy csökkentheti a monitor kontrasztját. A karakterek gyakran egyszerűen nem láthatók a kontraszt és a háttérvilágítási mód miatt.

Ha ez nem segít, ellenőrizze, hogy az érintkezők megfelelően vannak-e csatlakoztatva, és hogy a háttérvilágítás csatlakoztatva van-e. Ha külön i2c adaptert használt, akkor ellenőrizze újra az érintkezők forrasztásának minőségét.

A képernyőről hiányzó szöveg másik gyakori oka lehet a helytelen i2c-cím. Először próbálja meg megváltoztatni az eszköz címét a vázlatban 0x27 0x20-ról 0x3F-re. A különböző gyártók eltérő alapértelmezett címeket programozhatnak be. Ha ez nem segít, akkor futtathatja az i2c szkenner vázlatot, amely minden csatlakoztatott eszközt átvizsgál, és nyers erővel meghatározza a címüket. Példa egy i2c szkenner vázlatára.

Ha a képernyő továbbra sem működik, próbálja meg kiforrasztani az adaptert, és a szokásos módon csatlakoztassa az LCD-t.

Következtetés

Ebben a cikkben megvizsgáltuk az LCD-képernyő használatának főbb kérdéseit összetett Arduino-projektekben, amikor szabad tűket kell mentenünk a táblán. Egy egyszerű és olcsó i2c adapter lehetővé teszi egy 1602-es LCD képernyő csatlakoztatását, amely mindössze 2 analóg érintkezőt foglal el. Ez sok esetben nagyon fontos lehet. Az ár a kényelem kedvéért egy további modul - konverter és könyvtár - használatának szükségessége. Véleményünk szerint ez nem túl magas ár a kényelemért, ezért erősen javasoljuk ennek a funkciónak a használatát projektekben.

Mi az, ami sok elektronikai eszköz szerves részét képezi? Természetesen az adatok jelzésének és grafikus kimenetének 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 módszertan alapvetően minden megjelenítésnél azonos HD44780. Köszönjük JekaKeynek a fontos kiegészítést)

Először a kijelzőt a vezérlőhöz kell csatlakoztatni. 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 mindegyiket külön...

A Vss, Vdd és K érintkezőket a földre és a tápfeszültségre kell csatlakoztatni, vagyis pontosan úgy, ahogy a táblázatban látható, nincs meglepetés, és még nincs mit megvitatni)

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

Az RS pin már egy tű, 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, a magas szint (1) azt jelenti, hogy most már adatokat kell írni a kijelző memóriájába.

Pin R/W - itt egyértelmű, vagy kiolvassuk az adatokat (például a foglalt jelző megjelenítése), ebben az esetben ezen a tűn 1 van, vagy kiírjuk a parancsot/adatokat a kijelzőre, akkor itt 0 van.

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

Az E tű az úgynevezett engedélyezési jel. Erre van szükség. A kijelzővel való munkához - adatok rögzítéséhez vagy parancs kiadásához - pozitív impulzust kell kiadnunk erre a tűre. Vagyis az eljárás így fog kinézni:

  1. Az RS, R/W, DB7 - DB0 lábakon - a parancsunknak megfelelő szükséges jelek.
  2. Egyet biztosítunk az E tűhöz.
  3. Zhdems (az adatlap szerint - legalább 150 ns)
  4. Az E tűre 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 csatlakoztatását, de mielőtt továbblépnénk a példára, nézzük meg, hogy általában milyen parancsokat ért a kijelzőnk. Ehhez bemegyünk az adatlapba, és találunk egy érdekes táblázatot:

Itt található az összes parancs és jel, amelynek a WH1602 megfelelő érintkezőin kell lennie az egyes parancsokhoz. Például törölni akarjuk a kijelzőt, ránézünk a táblázatra, és itt van a parancs, amire szükségünk van! Tiszta kijelző!

Nullákat alkalmazunk az RS, R/W, DB7, DB6, DB5, DB4, DB3, DB2, DB1 lábakra, egyet pedig a DB0 érintkezőre. Kész, mi a következő lépés? Így van, egy az E tűn, majd várjon egy kicsit, és ismét csökkentse az E-t nullára. Ennyi, a kijelző törlődik 😉 Közvetlenül a következő parancs végrehajtása előtt szünetet kell tartani, minden parancs adatlapján jelezve. Hatékonyabb lenne a foglalt jelző lekérdezése; amint visszaáll 0-ra, folytathatja a munkát. Ennek a zászlónak az olvasására van egy speciális parancs is, így ezzel minden világos) Menjünk tovább...

És tulajdonképpen minden az elmélettel van, 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ó. Először is 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 kell kiválasztani a tűket é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 csak állítsuk be, hogy mely portokat használjuk. Csatlakozáskor GPIOA-t, GPIOB-t, GPIOC-t és GPIOD-ot használok, ezt írjuk:

Hasonlóan más mikrokontroller lábakhoz.

A beállítással 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 nevéből kaptuk a nevét, így szerintem 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ézzük a parancstáblázatot:

Látjuk, hogy a Display ON/OFF parancs nem csak a kijelzőt kapcsolja be/ki, hanem a kurzort és a kurzor villogását is aktiválja/deaktiválja. Az adatlapon ezeket a parancsbiteket D-nek, C-nek és B-nek jelöljük, és ezeket paraméterként adjuk át a függvénynek. Ha be kell kapcsolnunk a kijelzőt és a kurzort, de le kell tiltanunk 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, adjon hozzá egy 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) ( // Hívja meg az inicializálási függvényt, nem tudjuk nélküle =)() ; // Most el kell végeznünk a kezdeti megjelenítési konfiguráció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) ; // Például vettem az első késleltetési értékeket, amelyek eszembe jutottak) // Általában ellenőrizni kell a kijelző foglalt jelzőt // Most jelenítsünk meg valamit, például a webhelyünk nevét 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, nézzük)


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 megjelenítsem ezt vagy azt a karaktert. Í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 szimbólumhoz. Például az „A” szimbólum. Lássuk - ez a szimbólum a 0100-as oszlopnak (0x4) és a 0001-es sornak (0x1) felel meg. Kiderült, hogy az „A” szimbólum megjelenítéséhez 0x41 értéket kell beírni a kijelzőbe.

Most ennyi =) A WH1602 kijelző csatlakoztatását és működését elintéztük, ú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)

Néha szembesülünk azzal a problémával, hogy az Arduino-ból különféle információkat továbbítunk a külvilág felé. A soros port használata gyakran lehetetlen, kényelmetlen és veszteséges.

A karaktermegjelenítés az információmegjelenítés egyik legegyszerűbb és legolcsóbb módja, mivel saját mikrokontrollerrel rendelkezik, amely a kódolt karaktereket tárolja. Ez a rendszer leegyszerűsíti ezeknek a kijelzőknek a használatát, ugyanakkor a használatukat csak a kimenetre korlátozza szöveges információk, ellentétben a grafikus kijelzőkkel.

A példában a Winstar wh1602l1 kijelzőt nézzük meg, amely a hd44780 vezérlő egyik leggyakoribb kijelzője. Ezenkívül csatlakoztathatja az LCD 2004-et és más hasonlókat.
Az első két számjegy a soronkénti karakterek számát, a második pedig a sorok számát jelöli, így a kiválasztott kijelzőn 2 sor 16 karakterből áll.
Ez a csatlakozási mód magában foglalja az Arduino mikrokontroller legalább 6 portjának lefoglalását. Szükség esetén az 1602-es szöveges kijelzőt az I2C interfészen keresztül (2 port) csatlakoztathatja.

A további elemek közül, amelyekre szükségünk van változtatható ellenállás, a kontraszt szabályozására. Egyébként minden a diagram szerint, az adatlap és a programban kiválasztott Arduino kimenetek szerint van bekötve.

A háttérvilágításért a kijelző 15-ös és 16-os érintkezője felel, amely kikapcsolható, vagy automatikusan beállítható a fényerő, ha fényerő-érzékelőként fotoellenállást csatlakoztatunk az Arduino-hoz.

Példánkban a soros portról beolvasunk adatokat és megjelenítjük a kijelzőn:

#beleértve // Csatlakoztassa a könyvtárat a karakterkijelzőkkel való munkához LiquidCrystal lcd(13, 11, 5, 4, 3, 2); // (RS, E, D4, D5, D6, D7) csatlakoztassa a kijelzőkimeneteket a sorrendnek megfelelően, R/W – GND, mivel adatokat írunk a kijelzőre és nem olvasunk void setup() ( lcd.begin() 16, 2); // LCD 1602 inicializálása // lcd.begin(20, 4); // LCD 2004 Serial.begin(9600) inicializálása; // A soros port indítása ) void loop() ( if (Serial.available) ()) // Ha az adatok a portról származnak, akkor... ( delay(100); lcd.clear(); // Teljesen törölje a képernyőt, miközben (Serial.available() > 0) // Ha az adatok innen származnak a port nagyobb, mint 0, akkor ... ( lcd.write(Serial.read()); // Értékek beolvasása a soros portról és megjelenítése a kijelzőn ) ) )

Bonyolíthatja a kódot, és kiadhatja az Arduino DS1307 valós idejű óráját az LCD1602-re.

Most nézzük meg közelebbről a könyvtár összes funkcióját Folyékony kristály:

Az első és legfontosabb dolog az, hogy ezzel a könyvtárral nem lehet orosz betűket megjeleníteni, még akkor sem, ha a kijelző memóriájában vannak ezek a karakterek. Ez a probléma megoldható más könyvtárakkal, vagy hexadecimális kóddal értékek írásával.

lcd.print();- a legegyszerűbb és leggyakrabban használt, információk megjelenítésére használt.

lcd. egyértelmű(); - a kijelző tisztítására szolgál.

lcd.setCursor(x, y); - a kurzort egy adott helyre helyezi.

X – pozíció változása a sorban

Y – sorváltás

Például lcd.setCursor(0, 0); ez a bal felső cella.

lcd.home(); - a kurzort a 0, 0 pozícióba helyezi

lcd.home(); = lcd.setCursor(0, 0);

lcd. scrollDisplayLeft(); - balra váltás

lcd. scrollDisplayRight(); - váltson jobbra

Lcd.createChar(Név, sor); - saját jel létrehozása.

Például a fokjel így néz ki:

Celc = (B00111, B00101, B00111, B00000, B00000, B00000, B00000, B00000);




Top