Delo z grafičnim zaslonom 1602 v arduinu. LCD WH1602B proizvajalca Winstar. Nadzor LCD zaslona preko I2C vodila

Prispel je Arduino Nano, je prispel komplet, ki je vseboval mizo in LCD zaslon. Zaslon na plošči pravi - 1602A, spodaj - QAPASS. Začel sem klesati prvo napravo in seveda sem želel prikazati informacije na zaslonu in ne utripati LED.

Google je pomagal, povedal mi je, da je to prikaz znakov; Če ga ne popačite, so najverjetneje na voljo znaki ASCII - številke, latinica, nekateri osnovni znaki.

Naslednji materiali so pomagali pri zagonu zaslona: Pogon znakovnega LCD-ja iz tiskalniških vrat osebnega računalnika; Kako povezati Arduino z znakovnim LCD-jem; Pwm servo gonilnik za krmiljenje motorja PDF.

Zaslon je precej pogost in zanj so že izumili ščite - obstajajo možnosti s SPI, kot, in/ali z I2C, in internet je poln receptov za te primere. Vendar sem imel samo originalni zaslon 16x2 in Arduino, na katerega sem ga želel pritrditi.

Zaslon ima način delovanja in prenosa podatkov v grizih, po 4 bite, medtem ko se nižji biti vodila ne uporabljajo. Marsikje je opisano priklop samo polovice podatkovnega vodila, sam pa nisem ugotovil, kako priklopiti zaslon in delati z njim preko 8 vrstic. Zelo sem zadovoljen s tem, kako deluje.

Dober opis zaslonov te vrste Našel sem ga tukaj - http://greathard.ucoz.com/44780_rus.pdf. In tukaj (http://arduino.ru/forum/programmirovanie/lcd-i2c-partizanit#comment-40748) je primer določanja generatorja znakov.

Povezava

Moj zaslon je prišel z nezaspajkanimi kontakti. Od začetka sem želel spajkati kabel, z duponti prerezati 16 žic in jih očistiti. In potem sem pobrskal po kiti in našel DuPont glavnik za spajkanje na ploščo. Od tam sem prelomil 16 kontaktov in jih spajkal.
Moj zaslon je izgledal nekako takole (pred spajkanjem kontaktov):

Najprej sem priključil pin 15 (A) na +5V, 16 (K) na maso in se prepričal, da osvetlitev ozadja deluje. Na splošno je pravilno, da katodo povežem z maso preko upora 220 ohmov, kar sem potem tudi naredil.

Nato sem priključil maso (1) in napajanje (2). Arduino se lahko napaja iz USB-ja, iz stabilizirane napetosti 5V in iz nestabilizirane 6-12V, najvišja napetost se samodejno izbere. Zdaj se Arduino napaja iz USB-ja in sem se spraševal, kje dobiti 5 voltov. Izkazalo se je, da je 5V na zatiču Arduino, kjer je priključen zunanji stabilizirani 5V. Oziroma se je izkazalo, da je 4,7 V, vendar je bilo to dovolj zame.

Po priključitvi napajanja, če je vse v redu, zgornja vrstica zasveti s trdnimi pravokotniki poznavanja.

Nato priključimo kontrastni potenciometer (pin 3 V0). Enega od skrajnih sponk potenciometra vržemo na tla, drugega na +5V, srednjega na pin 3 zaslona. Priporočen je potenciometer 10K. Imel sem 50K od whale, prvi sem ga uporabil. Prilagajanje je bilo samo na enem robu, želeni kontrast je bilo treba ujeti zelo subtilno. Potem sem našel podobnega na 5K v drugem kitu in ga namestil. Nastavitev je segala od enega roba do pol obrata. Očitno lahko vzameš še manjši potenciometer. Verjetno je priporočljivo 10K, da vezje porabi manj. Ja, malo sem moral spajkati, z duponti sem spajkal žice na sponke potenciometrov.

Testna skica

Preskusno skico vzamemo iz primerov iz Arduino Studio - "C:\Program Files (x86)\Arduino\libraries\LiquidCrystal\ex amples\HelloWorld\HelloWorld.ino", le stike moramo spremeniti v naše - LiquidCrystal lcd( 7, 6, 5, 4, 3, 2);

Načeloma ta skica vsebuje tudi opis, kaj kam priključiti. Lahko ga povežete, kot je tam navedeno, potem vam ni treba ničesar spreminjati.

// vključi kodo knjižnice: #include // inicializiraj knjižnico s številkami vmesniških pinov LiquidCrystal lcd(7, 6, 5, 4, 3, 2); void setup() ( // nastavi število stolpcev in vrstic LCD-ja: lcd.begin(16, 2); // Natisni sporočilo na LCD. lcd.print("zdravo, svet!"); ) void loop() ( // nastavite kazalec na stolpec 0, vrstica 1 // (opomba: vrstica 1 je druga vrstica, saj se štetje začne z 0): lcd.setCursor(0, 1); // izpis števila sekund od ponastavitve: lcd.print(milis() / 1000); )

Izkazalo se je nekaj takega:

Mimogrede, zaslon, ki mi je prišel v roke, ne deluje brez osvetlitve ozadja. Mislim, deluje, a komaj kaj vidiš.

1602A Kontakti zaslona

# stik Ime Kako se povezati
1 VSS GND
2 VDD +5V
3 V0 Kontrast - na srednji terminal potenciometra
4 RS (izberi registracijo) D7 Arduino
5 R/W (branje ali pisanje) GND
6 E (omogoči signal) D6 Arduino
7-14 D0-D7 D0-D3 - ni povezan; D4-D7 - priključen na nožice D5-D2 Arduina
15 A Anoda za osvetlitev ozadja, priključena na +5V
16 K Katoda za osvetlitev ozadja, povezana z maso preko upora 220 Ohm

Članek govori o tem, kako pravilno povezati LCD na Arduino, zajeto je vse, kar morate vedeti o povezovanju LCD 1602 in LCD i2c.

LCD zasloni velikosti 1602, ustvarjeni na podlagi krmilnika HD44780, še vedno ostajajo eden najbolj dostopnih, preprostih in povpraševanih za razvoj kakršnih koli elektronskih naprav.

Ni presenetljivo, da jih je mogoče videti tako v preprostih enotah, sestavljenih dobesedno na kolenu, kot v bolj resnih industrijskih, na primer v aparatih za kavo. S tem zaslonom so sestavljeni najbolj priljubljeni moduli in ščiti, povezani z Arduinom, na primer LCD I2C modul in LCD Keypad Shield.

V naslednjih korakih vam bomo s slikami podrobno povedali, kako povezati LCD z Arduino in prikazati potrebne informacije na zaslonu.

Korak 2. LCD 1602 za Arduino

Zasloni 1602 so na voljo v dveh različnih oblikah:

  • rumena osvetlitev s črnimi črkami
  • ali (to se zgodi veliko pogosteje) modro osvetlitev z belimi.

Velikost zaslonov na krmilniku HD44780 se zelo razlikuje, vendar se upravljajo na enak način. Najpogostejše dimenzije so 16 x 02 (to je 16 znakov v dveh vrsticah) ali 20 x 04. Sami znaki imajo ločljivost 5 x 8 slikovnih pik.

Večina zaslonov ne podpira cirilice (z izjemo zaslonov z oznako CTK). Toda ta problem je delno rešljiv, članek pa podrobneje opisuje, kako to storiti.

Zaslon ima 16-pin konektor za povezavo. Zatiči so označeni na hrbtni strani plošče in so naslednji:

  • 1 (VSS) – negativno napajanje krmilnika.
  • 2 (VDD) – pozitivno napajanje krmilnika.
  • 3 (VO) – nastavitve nadzora kontrasta.
  • 4 (RS) – izbira registra.
  • 5 (R/W) – branje in pisanje, še posebej pisanje pri ozemljitvi.
  • 6 (E) – aktiviranje (omogoči).
  • 7–10 (DB0-DB3) – nižji biti iz osembitnega vmesnika.
  • 11–14 (DB4-DB7) – najpomembnejši biti iz vmesnika
  • 15 (A) – pozitivna anoda za napajanje osvetlitve ozadja.
  • 16 (K) – negativna katoda za napajanje osvetlitve ozadja.

Korak 3. Priključite LCD zaslon

Preden priključite zaslon in nanj prenesete informacije, je vredno preveriti njegovo funkcionalnost. Najprej priključite napetost na krmilnik VSS in VDD, vklopite osvetlitev ozadja (A, K), nato prilagodite kontrast.

Za takšne nastavitve je primeren potenciometer 10 kOhm, njegova oblika ni pomembna. +5V in GND se napajata na zunanjih nogah, noga v sredini pa je povezana z zatičem VO.

Ko je vezje napajano, morate doseči potreben kontrast; če je nastavljen nepravilno, slika na zaslonu ne bo vidna. Če želite prilagoditi kontrast, se morate "igrati" s potenciometrom. Ko je vezje pravilno sestavljeno in kontrast pravilno nastavljen, mora biti zgornja vrstica na zaslonu zapolnjena s pravokotniki.

Za delovanje zaslona se uporablja posebna knjižnica, vgrajena v okolje Arduino IDE, LiquidCrystal.h, o kateri bom pisal v nadaljevanju. Deluje lahko v 8-bitnem in 4-bitnem načinu. Pri prvi možnosti se uporabita le najmanj pomemben in najpomembnejši bit ( BB0-DB7), v drugi pa le mlajši ( BB4-DB7).

Toda uporaba 8-bitnega načina na tem zaslonu je napačna odločitev; prednosti pri hitrosti skorajda ni, saj je njegova hitrost osveževanja vedno nižja od 10-krat na sekundo. Za prikaz besedila morate priključke DB7, DB6, DB5, DB4, E in RS povezati z zatiči krmilnika. Lahko jih povežete s poljubnimi zatiči Arduino, glavna stvar je, da nastavite pravilno zaporedje v kodi.

Če želenega simbola še ni v pomnilniku krmilnika, ga lahko določite ročno (skupaj do sedem simbolov). Celica v obravnavanih zaslonih ima razširitev pet krat osem slikovnih pik. Naloga ustvarjanja simbola je napisati bitno masko in postaviti enice na mesta, kjer bi pike morale svetiti, in ničle, kjer ne bi smele. Zgoraj obravnavani povezovalni diagram ni vedno dober, saj se na Arduinu uporablja vsaj šest digitalnih izhodov.

Korak 4. Shema obvoda

Raziščimo možnost, kako se temu izogniti in preživeti samo z dvema. Potrebujemo dodaten pretvorniški modul za LCD v IIC/I2C. Kako je prispajkan na zaslon in povezan z Arduinom, si lahko ogledate na spodnjih slikah.

Toda ta možnost povezave deluje samo s posebno knjižnico LiquidCrystal_I2C1602V1, ki pa jo je enostavno najti na internetu in namestiti, po kateri jo lahko uporabljate brez težav.

4. korak: Knjižnica LiquidCrystal.h

Knjižnico LiquidCrystal.h lahko prenesete iz razdelka Knjižnice našega spletnega mesta na tej strani ali iz uradnega vira arduino.cc. Prenesete pa ga lahko tudi s spodnjih povezav:

Korak 5. Skica (programska koda)

Ko prenesete arhiv, zamenjajte mapo LiquidCrystal v mapi knjižnic v namestitvenem imeniku Arduino.

Vzorec skice si lahko ogledate na:

Datoteka -> Primeri -> LiquidCrystal -> HelloWorld_SPI

Ali pa, če imate meni v angleščini:

Datoteka -> Primeri -> LiquidCrystal -> HelloWorld_SPI

To zaključuje našo naslednjo lekcijo. Želimo vam kvalitetne projekte!

LCD zaslon– pogost gost v projektih Arduino. Toda v kompleksnih vezjih imamo lahko problem pomanjkanja vrat Arduino zaradi potrebe po priključitvi oklopa, ki ima veliko, veliko zatičev. Rešitev v tej situaciji bi lahko bila I2C/IIC Adapter, ki povezuje skoraj standardni ščit Arduino 1602 na plošče Uno, Nano ali Mega z uporabo samo 4 pinov. V tem članku si bomo ogledali, kako lahko povežete LCD zaslon z vmesnikom I2C, katere knjižnice lahko uporabite, napisali bomo kratek primer skice in si ogledali pogoste napake.

Zaslon s tekočimi kristali LCD 1602 je dobra izbira za izpis znakovnih nizov v različnih projektih. Je poceni, obstajajo različne modifikacije z različnimi barvami osvetlitve ozadja, lahko preprosto prenesete že pripravljene knjižnice za skice Arduino. Toda glavna pomanjkljivost tega zaslona je dejstvo, da ima zaslon 16 digitalnih zatičev, od katerih je potrebnih najmanj 6. Zato uporaba tega LCD zaslona brez i2c doda resne omejitve za plošče Arduino Uno ali Nano. Če ni dovolj stikov, boste morali kupiti ploščo Arduino Mega ali shraniti stike, vključno s povezavo zaslona prek i2c.

Kratek opis LCD 1602 pinov

Oglejmo si podrobneje nožice LCD1602:

Vsak od žebljičkov ima svoj namen:

  1. Ozemljitev GND;
  2. Napajanje 5 V;
  3. Nastavitev kontrasta monitorja;
  4. Ukaz, podatki;
  5. Pisanje in branje podatkov;
  6. Omogoči;

7-14. Podatkovne linije;

  1. Plus osvetlitev ozadja;
  2. Minus osvetlitev ozadja.

Specifikacije zaslona:

  • Vrsta prikaza znakov, možno je nalaganje simbolov;
  • LED luči;
  • krmilnik HD44780;
  • Napajalna napetost 5V;
  • Format 16x2 znakov;
  • Temperaturno območje delovanja od -20C do +70C, temperaturno območje skladiščenja od -30C do +80C;
  • Vidni kot 180 stopinj.

Diagram povezave LCD na ploščo Arduino brez i2C

Standardni diagram za priključitev monitorja neposredno na mikrokrmilnik Arduino brez I2C je naslednji.

Zaradi velikega števila povezanih kontaktov morda ne bo dovolj prostora za povezavo potrebnih elementov. Uporaba I2C zmanjša število žic na 4 in zasedenih nožic na 2.

Kje kupiti LCD zaslone in ščite za Arduino

LCD zaslon 1602 (in verzija 2004) je precej popularen, zato ga zlahka najdete tako v domačih spletnih trgovinah kot tudi na tujih straneh. Tukaj je nekaj povezav do najbolj razpoložljivih možnosti:

LCD1602+I2C modri zaslonski modul, združljiv z Arduino Preprost zaslon LCD1602 (zelena osvetlitev) cenejši od 80 rubljev Velik zaslon LCD2004 z I2C HD44780 za Arduino (modra in zelena osvetlitev ozadja)
Zaslon 1602 z adapterjem IIC in modro osvetlitvijo Druga različica LCD1602 s spajkanim modulom I2C Port IIC/I2C/TWI/SPI adapterski modul za 1602 ščit, združljiv z Arduino
RGB osvetljen zaslon! LCD 16×2 + tipkovnica + brenčalo za Arduino Ščit za Arduino z gumbi in zaslonom LCD1602 LCD 1602 LCD zaslon za 3D tiskalnik (pametni krmilnik za RAMPS 1.4, tekstovni LCD 20×4), modul za branje kartic SD in MicroSD

Opis protokola I2C

Preden razpravljamo o povezovanju zaslona z Arduinom prek adapterja i2c, se na kratko pogovorimo o samem protokolu i2C.

I2C/IIC(Inter-Integrated Circuit) je protokol, prvotno ustvarjen za komunikacijo integrirana vezja znotraj elektronska naprava. Razvoj pripada Philipsu. Protokol i2c temelji na uporabi 8-bitnega vodila, ki je potrebno za komunikacijo blokov v nadzorni elektroniki, in sistema naslavljanja, zahvaljujoč kateremu lahko prek istih žic komunicirate z več napravami. Preprosto prenesemo podatke na eno ali drugo napravo, pri čemer podatkovnim paketom dodamo identifikator želenega elementa.

Večina preprosto vezje I2C lahko vsebuje eno glavno napravo (najpogosteje mikrokrmilnik Arduino) in več podrejenih (na primer LCD zaslon). Vsaka naprava ima naslov v območju od 7 do 127. V istem vezju ne smeta biti dve napravi z enakim naslovom.

Plošča Arduino podpira i2c v strojni opremi. Za povezavo naprav, ki uporabljajo ta protokol, lahko uporabite nožice A4 in A5.

Delovanje I2C ima več prednosti:

  • Delovanje zahteva samo 2 liniji - SDA (podatkovna linija) in SCL (sinhronizacijska linija).
  • Povezovanje velikega števila vodilnih naprav.
  • Skrajšan razvojni čas.
  • Za krmiljenje celotnega sklopa naprav je potreben samo en mikrokrmilnik.
  • Možno število mikrovezij, priključenih na eno vodilo, je omejeno le z največjo zmogljivostjo.
  • Visoka stopnja varnosti podatkov zaradi posebnega filtra za dušenje prenapetosti, vgrajenega v tokokroge.
  • Preprost postopek za diagnosticiranje nastajajočih okvar in hitro odpravljanje napak.
  • Vodilo je že integrirano v sam Arduino, zato ni potrebe po razvoju dodatnega vmesnika vodila.

Napake:

  • Na liniji je kapacitivna omejitev - 400 pF.
  • Težko je programirati krmilnik I2C, če je na vodilu več različnih naprav.
  • Pri velikem številu naprav postane težko izolirati napako, če ena od njih pomotoma preide nizko.

i2c modul za LCD 1602 Arduino

Najhitrejši in najbolj priročen način uporabe zaslona i2c v Arduinu je nakup že pripravljenega zaslona z vgrajeno podporo za protokol. A teh zaslonov ni prav veliko in niso poceni. Izdelanih pa je bilo že ogromno različnih standardnih zaslonov. Zato je danes najbolj dostopna in priljubljena možnost nakup in uporaba ločenega modula I2C - adapterja, ki izgleda takole:

Na eni strani modula vidimo i2c pine - ozemljitev, napajanje in 2 za prenos podatkov. Na drugem adapterju vidimo zunanje napajalne priključke. In seveda ima plošča veliko zatičev, s katerimi je modul spajkan na standardne zatiče zaslona.


Izhodi i2c se uporabljajo za povezavo s ploščo Arduino. Po potrebi priklopimo zunanje napajanje za osvetlitev ozadja. Z vgrajenim trimerjem lahko nastavimo vrednosti kontrasta po meri J

Na trgu lahko najdete module LCD 1602 z že spajkanimi adapterji, njihova uporaba je kar se da poenostavljena. Če ste kupili ločen adapter, ga boste morali najprej spajkati na modul.

Priključitev LCD zaslona na Arduino preko I2C

Za povezavo potrebujete samo ploščo Arduino, zaslon, testno ploščo, povezovalne žice in potenciometer.

Če uporabljate poseben ločen adapter i2c, ga morate najprej spajkati na zaslonski modul. Tam je težko narediti napako, lahko sledite tej shemi.


LCD monitor s podporo za i2c je na ploščo povezan s štirimi žicami - dve žici za podatke, dve žici za napajanje.

  • Nožica GND je povezana z GND na plošči.
  • Zatič VCC je na 5V.
  • SCL se priključi na pin A5.
  • SDA je priključen na pin A.

In to je vse! Brez mreže žic, v katere se je zelo enostavno zaplesti. Hkrati pa lahko vso kompleksnost implementacije protokola i2C preprosto zaupamo knjižnicam.

Knjižnice za delo z LCD zaslonom i2c

Za interakcijo z Arduino in LCD 1602 prek vodila I2C boste potrebovali vsaj dve knjižnici:

  • Knjižnica Wire.h za delo z I2C je že vključena v standard Arduino program IDE.
  • Knjižnica LiquidCrystal_I2C.h, ki vključuje najrazličnejše ukaze za krmiljenje monitorja preko vodila I2C in omogoča enostavnejšo in krajšo skico. Dodatno morate namestiti knjižnico Po priključitvi zaslona morate dodatno namestiti knjižnico LiquidCrystal_I2C.h

Ko na skico povežemo vse potrebne knjižnice, ustvarimo objekt in lahko uporabljamo vse njegove funkcije. Za testiranje naložimo naslednji standardni primer skice.

#vključi #vključi // Vključno s knjižnico //#include // Povezovanje alternativne knjižnice LiquidCrystal_I2C lcd(0x27,16,2); // Določite naslov I2C (najpogostejša vrednost), kot tudi parametre zaslona (v primeru LCD 1602 - 2 vrstici po 16 znakov //LiquidCrystal_PCF8574 lcd(0x27); // Možnost za nastavitev praznine knjižnice PCF8574( ) ( lcd.init (); // Inicializacija zaslona lcd.backlight(); // Povezovanje osvetlitve ozadja lcd.setCursor(0,0); // Nastavitev kazalca na začetek prve vrstice lcd.print(" Pozdravljeni"); // Vnašanje besedila v prvo vrstico lcd.setCursor(0,1); // Nastavitev kazalca na začetek druge vrstice lcd.print("ArduinoMaster"); // Vnašanje besedila v drugo vrstico ) void loop() ( )

Opis funkcij in metod knjižnice LiquidCrystal_I2C:

  • home() in clear() - prva funkcija vam omogoča vrnitev kazalca na začetek zaslona, ​​​​druga naredi isto, vendar hkrati izbriše vse, kar je bilo prej na monitorju.
  • write(ch) – omogoča tiskanje enega znaka ch na zaslon.
  • cursor() in noCursor() – prikaže/skrije kazalec na zaslonu.
  • blink() in noBlink() – kurzor utripa/ne utripa (če je bil njegov prikaz prej omogočen).
  • display() in noDisplay() – omogoča povezavo/onemogočanje zaslona.
  • scrollDisplayLeft() in scrollDisplayRight() – pomakne zaslon za en znak levo/desno.
  • autoscroll() in noAutoscroll() – omogočata omogočanje/onemogočanje načina samodejnega premikanja. V tem načinu je vsak nov znak zapisan na istem mestu in izpodriva prej zapisano na zaslonu.
  • leftToRight() in rightToLeft() – Nastavitev smeri prikazanega besedila – od leve proti desni ali od desne proti levi.
  • createChar(ch, bitmap) – ustvari znak s kodo ch (0 – 7) z uporabo niza bitnih slik bitne slike za ustvarjanje črno-belih točk.

Alternativna knjižnica za delo z zaslonom i2c

V nekaterih primerih lahko pride do napak pri uporabi navedene knjižnice z napravami, opremljenimi s krmilniki PCF8574. V tem primeru lahko kot alternativo predlagamo knjižnico LiquidCrystal_PCF8574.h. Razširja LiquidCrystal_I2C, zato z njegovo uporabo ne bi smelo biti težav.

Težave pri povezovanju LCD zaslona i2c

Če po nalaganju skice na zaslonu ne vidite nobenega sporočila, poskusite z naslednjimi koraki.

Najprej lahko povečate ali zmanjšate kontrast monitorja. Pogosto znaki preprosto niso vidni zaradi načina kontrasta in osvetlitve ozadja.

Če to ne pomaga, preverite, ali so kontakti pravilno povezani in ali je napajanje za osvetlitev priključeno. Če ste uporabili ločen adapter i2c, ponovno preverite kakovost spajkanja kontaktov.

Drug pogost razlog za manjkajoče besedilo na zaslonu je lahko napačen naslov i2c. Najprej poskusite spremeniti naslov naprave v skici iz 0x27 0x20 ali v 0x3F. Različni proizvajalci imajo lahko programirane različne privzete naslove. Če to ne pomaga, lahko zaženete skico optičnega bralnika i2c, ki pregleda vse povezane naprave in določi njihov naslov s surovo silo. Primer skice skenerja i2c.

Če zaslon še vedno ne deluje, poskusite odspajkati adapter in priključiti LCD kot običajno.

Zaključek

V tem članku smo preučili glavne težave pri uporabi LCD zaslona v kompleksnih projektih Arduino, ko moramo shraniti proste pine na ploščo. Preprost in poceni adapter i2c vam bo omogočil priključitev LCD zaslona 1602, ki bo zavzel samo 2 analogna zatiča. V mnogih situacijah je to lahko zelo pomembno. Cena za udobje je potreba po uporabi dodatnega modula - pretvornika in knjižnice. Po našem mnenju to ni visoka cena za udobje in toplo priporočamo uporabo te funkcije v projektih.

Kaj je sestavni del velikega števila elektronskih naprav? Seveda sredstva za prikaz in grafični izpis podatkov. Za uporabnika je vedno bolj priročno in prijetno, ko je rezultat "pametne škatle" viden vizualno. Zato bomo danes na STM32 povezali zaslon za prikaz besedila in številk. Junak naših poskusov bo precej priljubljen zaslon Winstar. Mimogrede, v komentarjih se je pojavilo pomembno pojasnilo, da je metodologija v bistvu enaka za vse prikaze, ki temeljijo na HD44780. Hvala JekaKey za pomemben dodatek)

Najprej mora biti zaslon povezan s krmilnikom. Prenesite podatkovni list in poiščite pinout WH1602. Poglej tukaj:

Kot veš, zaslon WH1602 ima 16 zatičev. Poglejmo vsakega posebej...

Zatiči Vss, Vdd in K morajo biti priključeni na maso in na napajanje, to je točno tako, kot je navedeno v tabeli, ni presenečenj in o čem bi se sploh pogovarjali)

Pin številka 3 se uporablja za nastavitev kontrasta - če tja priklopimo +5V, ne bomo videli čisto nič, če pa pin kratko sklenemo z maso, bomo občudovali dve vrsti črnih kvadratkov 😉 To nam seveda ne ustreza , zato moramo tja obesiti potenciometer (upor) s spremenljivim uporom), da prilagodimo kontrast. Najboljšo vidljivost znakov zagotavlja napetost 0,5-0,7 V na tem prikazovalnem zatiču.

RS pin je že pin, ki ga bomo sami krmilili z mikrokontrolerjem. Nizka raven napetosti (0) na tem zatiču pomeni, da bo zdaj sledil ukaz, visoka raven (1) pomeni, da bodo zdaj podatki, ki jih je treba zapisati v pomnilnik zaslona.

Pin R/W - tukaj je jasno, ali preberemo podatke (npr. zastavica zaslona zaseden), v tem primeru je na tem pinu 1, ali pa zapišemo ukaz/podatke na zaslon, potem imamo tukaj 0.

DB7 – DB0 – podatkovno vodilo in to pove vse)

Pin E je tako imenovani Enable signal. Za to je potreben. Za delo z zaslonom - snemanje podatkov ali izdajo ukaza - moramo na ta pin izdati pozitiven impulz. To pomeni, da bo postopek izgledal takole:

  1. Na zatičih RS, R/W, DB7 - DB0 - potrebni signali, ki ustrezajo našemu ukazu.
  2. Enega dobavimo za pin E.
  3. Zhdems (v skladu s podatkovnim listom - najmanj 150 ns)
  4. Na nožico E uporabimo nizko raven (0).

Na nogo A/Vee morate priključiti 4,2 V, da napajate osvetlitev zaslona.

Tako poteka komunikacija z zaslonom WH1602.

Ugotovili smo, kako povezati WH1602, a preden preidemo na primer, poglejmo, katere ukaze naš zaslon na splošno razume. Če želite to narediti, gremo v podatkovni list in poiščemo zanimivo tabelo:

Tukaj so opisani vsi ukazi in signali, ki bi morali biti na ustreznih zatičih WH1602 za vsak določen ukaz. Na primer, želimo počistiti zaslon, pogledamo tabelo in tukaj je ukaz, ki ga potrebujemo! Čisti zaslon!

Na pine RS, R/W, DB7, DB6, DB5, DB4, DB3, DB2, DB1 dodamo ničle, na pin DB0 pa ena. Končano! Kaj je naslednje? Tako je, ena na nožici E, nato počakajte nekaj časa in ponovno znižajte E na nič. To je to, zaslon je počiščen 😉 Tik pred izvajanjem naslednjega ukaza se morate ustaviti, kar je navedeno v podatkovnem listu za vsak ukaz. Učinkoviteje bi bilo vprašati oznako zasedenosti; takoj ko je ponastavljena na 0, lahko nadaljujete z delom. Obstaja tudi poseben ukaz za branje te zastavice, tako da je s tem vse jasno) Gremo naprej ...

In pravzaprav je vse s teorijo, lahko že poskusite kaj napisati. Za lažje delo z zaslonom sem naredil majhno knjižnico, zdaj pa poglejmo, kako jo lahko uporabimo. Najprej prenesite

Na razpolago dobimo 2 datoteki, MT_WH1602.c in MT_WH1602.h. Odtrgamo drugega, tukaj moramo izbrati uporabljene zatiče in krmilnik.

Mimogrede, moj zaslon je povezan takole:

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

Odprite datoteko MT_WH1602.h:

#define PLATFORMA (STM32F10x)

Nato izberite nožice mikrokrmilnika, na katere je priključen zaslon. Najprej nastavimo, katera vrata uporabljamo. Ko se povežem, uporabljam GPIOA, GPIOB, GPIOC in GPIOD, pišemo:

Podobno velja za druge noge mikrokontrolerjev.

Končali smo z nastavitvijo, nadaljujmo) Za klic ukazov, podanih na začetku članka, datoteka MT_WH1602.c vsebuje naslednje funkcije (poimenovane so po imenih ukazov, zato mislim, da je vse jasno) :

void MT_WH1602_ClearDisplay(void) ; void MT_WH1602_ReturnHome(void) ; void MT_WH1602_EntryModeSet (bool IDaddress, 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 naslov); void MT_WH1602_SetDDRAMAddress (uint8_t naslov); bool MT_WH1602_ReadBusy(void); void MT_WH1602_WriteData(podatki uint8_t);

Za nekatere ukaze moramo funkciji posredovati parametre, na primer:

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

Poglejmo ukazno tabelo:

Vidimo, da ukaz Display ON/OFF ne le vklopi/izklopi zaslon, ampak tudi aktivira/deaktivira kazalec in utripanje kazalca. V podatkovnem listu so ti ukazni biti označeni kot D, C in B in jih kot parametre posredujemo funkciji. Če moramo vklopiti zaslon in kazalec, vendar onemogočiti utripanje kazalca, pokličemo ukaz na naslednji način:

MT_WH1602_DisplayOnOff(1, 1, 0);

Na splošno je vse preprosto 😉

Skratka ustvarjamo nov projekt, dodajte knjižnico za delo z zaslonom WH1602, ustvarite prazno datoteko .c in jo začnite polniti s kodo:

// Vključi datoteko knjižnice#include "MT_WH1602.h" /*******************************************************************/ int main(void) ( // Pokličite inicializacijsko funkcijo, brez nje ne moremo =)() ; // Zdaj moramo narediti začetno konfiguracijo zaslona // Dokumentacija in internet priporočata, da to storite ;) 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) ; // Na primer, vzel sem prve vrednosti zakasnitve, ki so mi prišle na misel) // Na splošno morate preveriti zastavico zasedenosti zaslona // Zdaj prikažimo nekaj, na primer ime naše strani MT_WH1602_WriteData(0x6D) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x69) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x63) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x72) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x6F) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x74) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x65) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x63) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x68) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x6E) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x69) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x63) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x73) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x2E) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x72) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x75) ; MT_WH1602_Delay(100) ; medtem ko (1 ) ( __NOP() ; ) ) /*******************************************************************/

Končano, preverimo)


Kot lahko vidite, vse deluje pravilno)

Mimogrede, nekako sem izgubil izpred oči vprašanje, kaj napisati na zaslonu, da se prikaže ta ali oni znak. Tukaj je ploščica iz podatkovnega lista:

Torej, da bi ugotovili, katero vrednost zapisati v pomnilnik zaslona, ​​morate vzeti številke, zapisane zgoraj in levo v tej tabeli za določen simbol. Na primer, simbol "A". Poglejmo - ta simbol ustreza stolpcu 0100 (0x4) in vrstici 0001 (0x1). Izkazalo se je, da morate za prikaz simbola "A" na zaslon zapisati vrednost 0x41.

To je zdaj to =) Povezavo in delovanje zaslona WH1602 smo uredili, tako da se vidimo!

P.S. Pri delu s knjižnico nisem preizkusil funkcije branja zastavice zasedeno, tako da, če nenadoma nekaj ne deluje, kot bi moralo, pišite, bomo ugotovili)

Včasih se soočimo s problemom oddajanja različnih informacij iz Arduina v zunanji svet. Pogosto je uporaba serijskih vrat nemogoča, neprijetna in nedonosna.

Zaslon znakov je eden najpreprostejših in najcenejših načinov prikaza informacij, saj ima svoj mikrokrmilnik, ki shranjuje kodirane znake. Ta sistem poenostavlja uporabo teh zaslonov, a hkrati omejuje njihovo uporabo samo na izhod besedilne informacije, za razliko od grafičnih prikazov.

V primeru si bomo ogledali zaslon Winstar wh1602l1, enega najpogostejših zaslonov na krmilniku hd44780. Poleg tega lahko priključite LCD 2004 in druge podobne.
Prvi dve števki označujeta število znakov v vrstici, druga pa število vrstic, tako da ima izbrani prikaz 2 vrstici po 16 znakov.
Ta način povezave vključuje zasedbo vsaj 6 vrat mikrokrmilnika Arduino. Po potrebi lahko besedilni zaslon 1602 povežete prek vmesnika I2C (2 vrata).

Od dodatnih elementov, ki jih potrebujemo spremenljivi upor, za nadzor kontrasta. Sicer pa je vse povezano po shemi, po datasheet in izbranih izhodih Arduino v programu.

Nožici 15 in 16 na zaslonu sta odgovorni za osvetlitev ozadja; lahko jo izklopite ali pa svetlost samodejno prilagodite, ko na Arduino priključite fotorezistor kot senzor svetlosti.

V našem primeru bomo prebrali podatke iz serijskih vrat in jih prikazali na zaslonu:

#vključi // Povežite knjižnico za delo z zasloni znakov LiquidCrystal lcd(13, 11, 5, 4, 3, 2); // (RS, E, D4, D5, D6, D7) povežite izhode zaslona glede na zaporedje, R/W – GND, saj bomo zapisovali podatke na zaslon in ne brali void setup() ( lcd.begin( 16, 2); // Inicializacija LCD 1602 // lcd.begin(20, 4); // Inicializacija LCD 2004 Serial.begin(9600); // Zagon serijskih vrat ) void loop() ( if (Serial.available) ()) // Če podatki prihajajo iz vrat, potem... ( delay(100); lcd.clear(); // Popolnoma počisti zaslon, medtem ko (Serial.available() > 0) // Če podatki prihajajo iz vrata večja od 0, potem ... ( lcd.write(Serial.read()); // Preberi vrednosti iz serijskih vrat in jih prikaži na zaslonu ) ) )

Kodo lahko zakomplicirate in izpišete uro realnega časa DS1307 na Arduino na vaš LCD1602.

Zdaj pa si podrobneje oglejmo vse funkcije v knjižnici LiquidCrystal:

Prva in najpomembnejša stvar je, da s to knjižnico ne morete prikazati ruskih črk, tudi če ima zaslon te znake v pomnilniku. To težavo je mogoče rešiti z drugimi knjižnicami ali z zapisovanjem vrednosti s šestnajstiško kodo.

lcd.print();- najpreprostejši in najpogosteje uporabljen za prikaz informacij.

lcd. jasno(); - uporablja se za čiščenje zaslona.

lcd.setCursor(x, l); - postavi kazalec na določeno mesto.

X – sprememba položaja v liniji

Y – sprememba vrstice

Na primer, lcd.setCursor(0, 0); to je zgornja leva celica.

lcd.home(); - postavi kazalec na položaj 0, 0

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

lcd. scrollDisplayLeft(); - premik levo

lcd. scrollDisplayRight(); - premik desno

Lcd.createChar(Ime, niz); - ustvarjanje lastnega znaka.

Na primer, znak stopnje izgleda takole:

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




Vrh