Työskentely 1602-graafisen näytön kanssa arduinossa. LCD WH1602B Winstarilta. LCD-näytön ohjaus I2C-väylän kautta

On saapunut Arduino Nano, saapui sarja, joka sisälsi leipälaudan ja LCD-näytön. Taulukon näytössä lukee - 1602A, alla - QAPASS. Aloin veistää ensimmäistä laitetta, ja tietysti halusin näyttää tiedot näytöllä enkä vilkkuvia LEDejä.

Google auttoi, kertoi minulle, että tämä on merkkinäyttö; Jos et vääristä sitä, käytettävissä on todennäköisesti ASCII-merkkejä - numeroita, latinaa, joitain perusmerkkejä.

Seuraavat materiaalit auttoivat näytön käynnistämiseen: Merkkityyppisen LCD-näytön ohjaaminen PC-tulostinportista; Kuinka yhdistää Arduino merkki-LCD:hen ; Pwm Servo Driver Motor Control PDF.

Näyttö on melko yleinen ja sille on jo keksitty suojat - vaihtoehtoja on SPI:llä, likellä ja/tai I2C:llä, ja internet on täynnä reseptejä näihin tapauksiin. Mutta minulla oli vain alkuperäinen 16x2-näyttö ja Arduino, johon halusin kiinnittää sen.

Näytössä on toimintatapa ja tiedonsiirto nibbleinä, 4 bittiä kussakin, kun taas väylän alempia bittejä ei käytetä. Vain puolen dataväylän kytkeminen on kuvattu monissa paikoissa, enkä keksinyt kuinka kytkeä näyttö ja työskennellä sen kanssa 8 riviä pitkin. Olen varsin tyytyväinen siihen, miten se toimii.

Hyvä kuvaus näytöistä tämän tyyppistä Löysin sen täältä - http://greathard.ucoz.com/44780_rus.pdf. Ja tässä (http://arduino.ru/forum/programmirovanie/lcd-i2c-partizanit#comment-40748) on esimerkki merkkigeneraattorin määrittämisestä.

Yhteys

Näytöni mukana tuli juottamattomat kontaktit. Alusta asti halusin juottaa kaapelin, katkaista 16 johtoa duponteilla ja puhdistaa ne. Ja sitten kaivoin ympäriinsä valaassa ja löysin DuPont-kamman levyyn juottamista varten. Sieltä katkaisin 16 kontaktia ja juotin ne.
Näyttöni näytti tältä (ennen koskettimien juottamista):

Ensin liitin nastan 15 (A) +5 V:iin, 16 (K) maahan ja varmistin, että taustavalo toimii. Yleensä on oikein kytkeä katodi maahan 220 ohmin vastuksen kautta, minkä minä sitten tein.

Sitten liitin maadoituksen (1) ja virran (2). Arduino saa virtansa USB:stä, stabiloidusta 5V jännitteestä ja stabiloimattomasta 6-12V jännitteestä, korkein jännite valitaan automaattisesti. Nyt Arduino saa virtansa USB:stä, ja mietin, mistä saada 5 volttia. Kävi ilmi, että 5V on Arduino-nastassa, johon on kytketty ulkoinen stabiloitu 5V. Tai pikemminkin se osoittautui 4,7 V:ksi, mutta se riitti minulle.

Virran kytkemisen jälkeen, jos kaikki on kunnossa, yläriville syttyy kiinteät tuttusuorakulmiot.

Sitten yhdistämme kontrastipotentiometrin (nasta 3 V0). Heitämme yhden potentiometrin äärimmäisistä liittimistä maahan, toisen +5 V:iin, keskimmäisen näytön nastalle 3. 10K potentiometriä suositellaan. Minulla oli 50K whalesta, käytin sitä ensin. Säätö oli vain yhdestä reunasta, haluttu kontrasti oli tarpeen saada kiinni erittäin hienovaraisesti. Sitten löysin samanlaisen 5K:n toisesta valaasta ja asensin sen. Asetus venyi yhdestä reunasta puoleen kierrokseen. Ilmeisesti voit ottaa vielä pienemmän potentiometrin. 10K on luultavasti suositeltavaa, jotta piiri kuluttaa vähemmän. Kyllä, jouduin juottamaan vähän, juotin johdot duponteilla potentiometrien napoihin.

Testi luonnos

Otamme testiluonnoksen Arduino Studion esimerkeistä - "C:\Program Files (x86)\Arduino\libraries\LiquidCrystal\ex amples\HelloWorld\HelloWorld.ino", tarvitsee vain vaihtaa yhteystiedot omaan - LiquidCrystal lcd( 7, 6, 5, 4, 3, 2);

Periaatteessa tämä luonnos sisältää myös kuvauksen siitä, mitä mihin tahansa kytketään. Voit liittää sen siellä osoitetulla tavalla, jolloin sinun ei tarvitse muuttaa mitään.

// sisällytä kirjastokoodi: #include // alusta kirjasto liitännän nastojen numeroilla LiquidCrystal lcd(7, 6, 5, 4, 3, 2); void setup() ( // määritä LCD-näytön sarakkeiden ja rivien lukumäärä: lcd.begin(16, 2); // Tulosta viesti LCD-näytölle. lcd.print("hello, world!"); ) void loop() ( // aseta kohdistin sarakkeeseen 0, rivi 1 // (huomaa: rivi 1 on toinen rivi, koska laskenta alkaa nollasta): lcd.setCursor(0, 1); // tulostaa sekuntia nollauksesta: lcd.print(millis() / 1000); )

Siitä tulee jotain tällaista:

Muuten, käsiini tullut näyttö ei toimi ilman taustavaloa. Tarkoitan, se toimii, mutta et näe juuri mitään.

1602A Näytä yhteystiedot

# ottaa yhteyttä Nimi Kuinka muodostaa yhteys
1 VSS GND
2 VDD +5V
3 V0 Kontrasti - potentiometrin keskinapaan
4 RS (rekisteröinnin valinta) D7 Arduino
5 R/W (lue tai kirjoita) GND
6 E (Ota signaali käyttöön) D6 Arduino
7-14 D0-D7 D0-D3 - ei kytketty; D4-D7 - kytketty Arduinon nastoihin D5-D2
15 A Taustavalon anodi, kytketty +5V
16 K Taustavalon katodi, kytketty maahan 220 ohmin vastuksen kautta

Artikkelissa puhutaan LCD-näytön liittämisestä oikein Arduinoon, kaikki mitä sinun tarvitsee tietää LCD 1602:n ja LCD i2c:n liittämisestä.

HD44780-ohjaimen pohjalta luodut 1602 koon LCD-näytöt ovat edelleen yksi edullisimmista, yksinkertaisimmista ja kysytyimmistä kaikenlaisten elektronisten laitteiden kehittämiseen.

Ei ole yllättävää, että niitä voidaan nähdä sekä yksinkertaisissa yksiköissä, jotka on koottu kirjaimellisesti polveen, että vakavammissa teollisissa, esimerkiksi kahvinkeittimissä. Tällä näytöllä kootaan suosituimmat Arduinoon liittyvät moduulit ja suojukset, esimerkiksi LCD I2C-moduuli ja LCD-näppäimistösuoja.

Seuraavissa vaiheissa kerromme sinulle yksityiskohtaisesti kuvien avulla, kuinka LCD-näyttö kytketään Arduinoon ja näytetään tarvittavat tiedot näytöllä.

Vaihe 2. LCD 1602 Arduinolle

1602-näytöistä on kaksi erilaista mallia:

  • keltainen taustavalo mustilla kirjaimilla
  • tai (tätä tapahtuu paljon useammin) sininen taustavalo ja valkoinen.

HD44780-ohjaimen näyttöjen koko vaihtelee suuresti, mutta niitä ohjataan samalla tavalla. Yleisimmät mitat ovat 16 x 02 (eli 16 merkkiä kahdella rivillä) tai 20 x 04. Itse merkkien resoluutio on 5 x 8 pikseliä.

Useimmat näytöt eivät tue kyrillistä (poikkeuksena CTK-merkityt näytöt). Mutta tämä ongelma on osittain ratkaistavissa, ja artikkelissa kuvataan yksityiskohtaisesti, kuinka tämä tehdään.

Näytössä on 16-PIN liitin liitäntää varten. Tapit on merkitty laudan takapuolelle, se on seuraava:

  • 1 (VSS) – ohjaimen negatiivinen virtalähde.
  • 2 (VDD) – positiivinen virtalähde säätimelle.
  • 3 (VO) – kontrastin säätöasetukset.
  • 4 (RS) – rekisterin valinta.
  • 5 (R/W) – lukeminen ja kirjoittaminen, erityisesti kirjoittaminen, kun se on kytketty maahan.
  • 6 (E) – aktivointi (käytössä).
  • 7–10 (DB0-DB3) – matalan kertaluvun bitit kahdeksan bitin liitännästä.
  • 11–14 (DB4-DB7) – käyttöliittymän merkittävimmät bitit
  • 15 (A) – positiivinen anodi taustavalon virtalähteelle.
  • 16 (K) – negatiivinen katodi taustavalon virtalähteelle.

Vaihe 3. Liitä LCD-näyttö

Ennen näytön kytkemistä ja tiedon siirtämistä siihen kannattaa tarkistaa sen toimivuus. Kytke ensin jännite VSS- ja VDD-ohjaimeen, kytke taustavalo (A, K) päälle ja säädä sitten kontrastia.

Tällaisiin asetuksiin sopii 10 kOhm potentiometri, sen muoto ei ole tärkeä. +5V ja GND syötetään ulkohaaroihin, ja keskellä oleva jalka on kytketty VO-nastan.

Kun virta syötetään piiriin, sinun on saavutettava tarvittava kontrasti; jos se on säädetty väärin, kuva näytöllä ei ole näkyvissä. Kontrastin säätämiseksi sinun on "leitettävä" potentiometrillä. Kun piiri on koottu oikein ja kontrasti on säädetty oikein, näytön ylärivi tulee täyttää suorakulmioilla.

Jotta näyttö toimisi, käytetään erityistä Arduino IDE -ympäristöön rakennettua kirjastoa LiquidCrystal.h, josta kirjoitan alla. Se voi toimia 8- ja 4-bittisessä tilassa. Ensimmäisessä vaihtoehdossa käytetään vain vähiten merkitseviä ja merkittävimpiä bittejä ( BB0-DB7), toisessa vain nuoremmat ( BB4-DB7).

Mutta 8-bittisen tilan käyttäminen tässä näytössä on väärä päätös; nopeusetua ei juuri ole, koska sen virkistystaajuus on aina alle 10 kertaa sekunnissa. Tekstin näyttämiseksi sinun on liitettävä nastat DB7, DB6, DB5, DB4, E ja RS ohjaimen nastoihin. Ne voidaan liittää mihin tahansa Arduino-nastoihin, tärkeintä on asettaa oikea järjestys koodissa.

Jos haluttua symbolia ei vielä ole ohjaimen muistissa, voit määrittää sen manuaalisesti (yhteensä enintään seitsemän symbolia). Tarkasteltavana olevien näyttöjen solun laajennus on viisi kertaa kahdeksan pikseliä. Symbolin luomisen tehtävänä on kirjoittaa bitimaski ja sijoittaa ykkösiä paikkoihin, joissa pisteiden pitäisi palaa, ja nollia paikkoihin, joissa niiden ei pitäisi. Yllä käsitelty kytkentäkaavio ei ole aina hyvä, koska Arduinossa on käytössä vähintään kuusi digitaalista lähtöä.

Vaihe 4. Ohitusjärjestelmä

Tutkitaan vaihtoehtoa kiertää tämä ja tulla toimeen vain kahdella. Tarvitsemme ylimääräisen muunninmoduulin LCD:tä varten IIC/I2C:ksi. Alla olevista kuvista näkyy, kuinka se juotetaan näyttöön ja liitetään Arduinoon.

Mutta tämä yhteysvaihtoehto toimii vain erityisen kirjaston LiquidCrystal_I2C1602V1 kanssa, joka on kuitenkin helppo löytää Internetistä ja asentaa, minkä jälkeen voit käyttää sitä ilman ongelmia.

Vaihe 4: LiquidCrystal.h-kirjasto

LiquidCrystal.h-kirjaston voi ladata tämän sivun verkkosivustomme Libraries-osiosta tai virallisesta resurssista arduino.cc. Mutta voit myös ladata alla olevista linkeistä:

Vaihe 5. Luonnos (ohjelmakoodi)

Kun olet ladannut arkiston, vaihda LiquidCrystal-kansio Arduino-asennushakemistosi kirjastot-kansiossa.

Voit katsoa malliluonnoksen osoitteessa:

Tiedosto -> Esimerkit -> LiquidCrystal -> HelloWorld_SPI

Tai jos sinulla on englanninkielinen menu:

Tiedosto -> Esimerkit -> LiquidCrystal -> HelloWorld_SPI

Tämä päättää seuraavan oppituntimme. Toivotamme laadukkaita projekteja!

LCD-näyttö– toistuva vieras Arduino-projekteissa. Mutta monimutkaisissa piireissä meillä voi olla ongelma Arduino-porttien puutteesta johtuen tarpeesta yhdistää kilpi, jossa on monia, monia nastaa. Ratkaisu tähän tilanteeseen voisi olla I2C/IIC Adapteri, joka yhdistää lähes tavallisen Arduino 1602 -suojan Uno-, Nano- tai Mega-kortille vain 4 nastalla. Tässä artikkelissa tarkastellaan, kuinka voit yhdistää LCD-näytön I2C-liitännällä, mitä kirjastoja voit käyttää, kirjoittaa lyhyt esimerkkiluonnos ja tarkastella yleisiä virheitä.

Nestekidenäyttö LCD 1602 On hyvä valinta merkkijonojen tulostamiseen erilaisissa projekteissa. Se on edullinen, siellä on erilaisia ​​​​muunnoksia erilaisilla taustavalon väreillä, voit helposti ladata valmiita kirjastoja Arduino-luonnoksille. Mutta tämän näytön suurin haittapuoli on se, että näytössä on 16 digitaalista nastaa, joista vaaditaan vähintään 6. Siksi tämän LCD-näytön käyttö ilman i2c:tä lisää vakavia rajoituksia Arduino Uno- tai Nano-levyille. Jos kontakteja ei ole tarpeeksi, sinun on ostettava Arduino Mega -levy tai tallennettava yhteystiedot, mukaan lukien liittämällä näyttö i2c:n kautta.

Lyhyt kuvaus LCD 1602 -nastaista

Katsotaanpa tarkemmin LCD1602-nastat:

Jokaisella nastalla on oma tarkoituksensa:

  1. Maa GND;
  2. Virtalähde 5 V;
  3. Näytön kontrastin asettaminen;
  4. Komento, data;
  5. Tietojen kirjoittaminen ja lukeminen;
  6. Ota käyttöön;

7-14. Datalinjat;

  1. Plus taustavalo;
  2. Miinus taustavalo.

Näytön tekniset tiedot:

  • Merkkien näyttötyyppi, on mahdollista ladata symboleja;
  • LED-valot;
  • Ohjain HD44780;
  • Syöttöjännite 5V;
  • Muoto 16x2 merkkiä;
  • Käyttölämpötila-alue -20C - +70C, varastointilämpötila -30C - +80C;
  • Katselukulma 180 astetta.

LCD-näytön kytkentäkaavio Arduino-korttiin ilman i2C:tä

Vakiokaavio näytön liittämiseksi suoraan Arduino-mikro-ohjaimeen ilman I2C:tä on seuraava.

Liitettyjen koskettimien suuren määrän vuoksi ei välttämättä ole tarpeeksi tilaa tarvittavien elementtien liittämiseen. I2C:n käyttö vähentää johtojen lukumäärän 4:ään ja varattujen nastojen määrän 2:een.

Mistä ostaa LCD-näyttöjä ja suojia Arduinolle

LCD-näyttö 1602 (ja versio 2004) on melko suosittu, joten löydät sen helposti sekä kotimaisista verkkokaupoista että ulkomaisista sivustoista. Tässä muutamia linkkejä suosituimpiin vaihtoehtoihin:

LCD1602+I2C Blue Screen Module, Arduino-yhteensopiva Yksinkertainen LCD1602-näyttö (vihreä taustavalo) halvempi kuin 80 ruplaa Suuri LCD2004-näyttö, jossa I2C HD44780 Arduinolle (sininen ja vihreä taustavalo)
1602-näyttö IIC-sovittimella ja sinisellä taustavalolla Toinen versio LCD1602:sta juotetulla I2C-moduulilla Portti IIC/I2C/TWI/SPI-sovitinmoduuli 1602-suojalle, yhteensopiva Arduinon kanssa
RGB-taustavalaistu näyttö! LCD 16×2 + näppäimistö + Summerisuoja Arduinolle Shield Arduinolle painikkeilla ja näytöllä LCD1602 LCD 1602 LCD-näyttö 3D-tulostimelle (Smart Controller for RAMPS 1.4, Text LCD 20×4), SD- ja MicroSD-kortinlukijamoduuli

I2C-protokollan kuvaus

Ennen kuin keskustelemme näytön liittämisestä Arduinoon i2c-sovittimen kautta, puhutaanpa lyhyesti itse i2C-protokollasta.

I2C/IIC(Inter-Integrated Circuit) on protokolla, joka on alun perin luotu viestintää varten integroidut piirit sisällä elektroninen laite. Kehitys kuuluu Philipsille. i2c-protokolla perustuu 8-bittisen väylän käyttöön, jota tarvitaan ohjauselektroniikan lohkojen kommunikointiin, sekä osoitusjärjestelmään, jonka ansiosta voit kommunikoida samojen johtojen kautta useiden laitteiden kanssa. Me yksinkertaisesti siirrämme tiedot jollekin laitteelle lisäämällä halutun elementin tunnisteen datapaketteihin.

Eniten yksinkertainen piiri I2C voi sisältää yhden päälaitteen (useimmiten Arduino-mikro-ohjaimen) ja useita orjia (esimerkiksi LCD-näytön). Jokaisen laitteen osoite on välillä 7 - 127. Samassa piirissä ei saa olla kahta laitetta, joilla on sama osoite.

Arduino-levy tukee i2c:tä laitteistossa. Voit käyttää liittimiä A4 ja A5 laitteiden yhdistämiseen tällä protokollalla.

I2C-toiminnalla on useita etuja:

  • Toiminta vaatii vain 2 riviä - SDA (datalinja) ja SCL (synkronointilinja).
  • Useiden johtavien laitteiden yhdistäminen.
  • Lyhentynyt kehitysaika.
  • Vain yksi mikro-ohjain tarvitaan ohjaamaan koko laitesarjaa.
  • Yhteen väylään kytkettyjen mikropiirien mahdollista määrää rajoittaa vain enimmäiskapasiteetti.
  • Korkea tietoturvataso piireihin sisäänrakennetun erityisen ylijännitesuojan ansiosta.
  • Yksinkertainen menettely uusien vikojen diagnosointiin ja vikojen nopeaan korjaamiseen.
  • Väylä on jo integroitu itse Arduinoon, joten lisäväyläliitäntää ei tarvitse kehittää.

Virheet:

  • Linjalla on kapasitiivinen raja - 400 pF.
  • I2C-ohjaimen ohjelmointi on vaikeaa, jos väylällä on useita eri laitteita.
  • Kun laitteita on paljon, vian eristäminen on vaikeaa, jos yksi niistä virheellisesti laskee.

i2c-moduuli LCD 1602 Arduinolle

Nopein ja kätevin tapa käyttää i2c-näyttöä Arduinossa on ostaa valmiiksi valmistettu näyttö, jossa on sisäänrakennettu protokollatuki. Mutta näitä näyttöjä ei ole kovin paljon, eivätkä ne ole halpoja. Mutta valtava määrä erilaisia ​​​​standardinäyttöjä on jo valmistettu. Siksi edullisin ja suosituin vaihtoehto tänään on ostaa ja käyttää erillistä I2C-moduulia - sovitinta, joka näyttää tältä:

Moduulin toisella puolella näemme i2c-nastat - maadoitus, teho ja 2 tiedonsiirtoa varten. Toisessa sovittimessa näemme ulkoiset virtaliittimet. Ja tietysti levyllä on monia nastaa, joilla moduuli juotetaan tavallisiin näytön nastoihin.


i2c-lähtöjä käytetään yhdistämään Arduino-korttiin. Tarvittaessa kytkemme ulkoisen virtalähteen taustavaloa varten. Sisäänrakennetulla trimmerillä voimme asettaa mukautettuja kontrastiarvoja J

Markkinoilta löytyy LCD 1602 -moduuleja, joissa on valmiiksi juotetut sovittimet, joiden käyttöä on yksinkertaistettu mahdollisimman paljon. Jos ostit erillisen sovittimen, sinun on ensin juotettava se moduuliin.

LCD-näytön yhdistäminen Arduinoon I2C:n kautta

Yhdistämistä varten tarvitset itse Arduino-levyn, näytön, leipälevyn, liitäntäjohdot ja potentiometrin.

Jos käytät erityistä erillistä i2c-sovitinta, sinun on ensin juotettava se näyttömoduuliin. Siellä on vaikea tehdä virhettä, voit seurata tätä järjestelmää.


LCD-näyttö, jossa on i2c-tuki, on kytketty levyyn neljällä johdolla - kaksi johtoa datalle, kaksi johtoa virtaa varten.

  • GND-nasta liitetään kortin GND:hen.
  • VCC-nasta on 5V.
  • SCL liitetään nastaan ​​A5.
  • SDA on kytketty nastan A.

Ja se on kaikki! Ei johtoverkkoja, joihin on erittäin helppo sotkeutua. Samalla voimme yksinkertaisesti uskoa kaiken i2C-protokollan toteuttamisen monimutkaisuuden kirjastoille.

Kirjastot i2c LCD-näytön kanssa työskentelemiseen

Jotta voit olla vuorovaikutuksessa Arduinon ja LCD 1602:n kanssa I2C-väylän kautta, tarvitset vähintään kaksi kirjastoa:

  • I2C:n kanssa työskentelemiseen tarkoitettu Wire.h-kirjasto sisältyy jo standardiin Arduino ohjelma IDE.
  • LiquidCrystal_I2C.h-kirjasto, joka sisältää laajan valikoiman komentoja näytön ohjaamiseen I2C-väylän kautta ja jonka avulla voit tehdä luonnoksesta yksinkertaisemman ja lyhyemmän. Sinun on asennettava lisäksi kirjasto Kun olet kytkenyt näytön, sinun on asennettava lisäksi LiquidCrystal_I2C.h-kirjasto

Kun olet yhdistänyt kaikki tarvittavat kirjastot luonnokseen, luomme objektin ja voimme käyttää kaikkia sen toimintoja. Testausta varten ladataan seuraava vakioesimerkkiluonnos.

#sisältää #sisältää // Mukaan lukien kirjasto //#include // Vaihtoehtoisen kirjaston yhdistäminen LiquidCrystal_I2C lcd(0x27,16,2); // Määritä I2C-osoite (yleisin arvo) sekä näytön parametrit (LCD 1602:n tapauksessa - 2 16 merkin riviä //LiquidCrystal_PCF8574 lcd(0x27); // Vaihtoehto PCF8574-kirjastolle void setup( ) ( lcd.init (); // Näytön alustaminen lcd.backlight(); // Taustavalon kytkeminen lcd.setCursor(0,0); // Kohdistimen asettaminen ensimmäisen rivin alkuun lcd.print(" Hei"); // Tekstin kirjoittaminen ensimmäiselle riville lcd.setCursor(0,1); // Aseta kohdistin toisen rivin alkuun lcd.print("ArduinoMaster"); // Kirjoita tekstiä toiselle riville ) void loop() ( )

LiquidCrystal_I2C-kirjaston toimintojen ja menetelmien kuvaus:

  • home() ja clear() - ensimmäinen toiminto mahdollistaa kursorin palauttamisen näytön alkuun, toinen tekee saman, mutta samalla poistaa kaiken, mikä oli näytössä aiemmin.
  • write(ch) – voit tulostaa yhden merkin ch näytölle.
  • cursor() ja noCursor() – näyttää/piilottaa kohdistimen näytöllä.
  • blink() ja noBlink() – kohdistin vilkkuu/ei vilku (jos sen näyttö oli käytössä aiemmin).
  • display() ja noDisplay() – voit kytkeä näytön tai poistaa sen käytöstä.
  • scrollDisplayLeft() ja scrollDisplayRight() – vierittää näyttöä yhden merkin vasemmalle/oikealle.
  • autoscroll() ja noAutoscroll() – voit ottaa automaattisen vieritystilan käyttöön tai poistaa sen käytöstä. Tässä tilassa jokainen uusi merkki kirjoitetaan samaan paikkaan, mikä syrjäyttää näytölle aiemmin kirjoitetun.
  • leftToRight() ja rightTo Left() – Näytettävän tekstin suunnan asettaminen – vasemmalta oikealle tai oikealta vasemmalle.
  • createChar(ch, bitmap) – luo merkin koodilla ch (0–7) käyttämällä joukkoa bittikarttakarttoja luomaan mustavalkoisia pisteitä.

Vaihtoehtoinen kirjasto i2c-näytön kanssa työskentelemiseen

Joissakin tapauksissa saattaa ilmetä virheitä käytettäessä määritettyä kirjastoa PCF8574-ohjaimilla varustettujen laitteiden kanssa. Tässä tapauksessa LiquidCrystal_PCF8574.h-kirjastoa voidaan ehdottaa vaihtoehtona. Se laajentaa LiquidCrystal_I2C:tä, joten sen käytössä ei pitäisi olla ongelmia.

Ongelmia i2c-lcd-näytön kytkemisessä

Jos et näe näytössä viestiä luonnoksen lataamisen jälkeen, kokeile seuraavia vaiheita.

Ensinnäkin voit lisätä tai vähentää näytön kontrastia. Usein merkit eivät yksinkertaisesti näy kontrastin ja taustavalotilan vuoksi.

Jos tämä ei auta, tarkista, onko koskettimet kytketty oikein ja onko taustavalon virta kytketty. Jos käytit erillistä i2c-sovitinta, tarkista koskettimien juottamisen laatu uudelleen.

Toinen yleinen syy tekstin puuttumiseen näytöltä voi olla väärä i2c-osoite. Yritä ensin muuttaa luonnoksen laiteosoite 0x27 0x20:sta tai 0x3F:stä. Eri valmistajilla voi olla ohjelmoitu erilaisia ​​oletusosoitteita. Jos tämä ei auta, voit suorittaa i2c-skanneriluonnoksen, joka skannaa kaikki liitetyt laitteet ja määrittää niiden osoitteen raa'alla voimalla. Esimerkki i2c-skannerin luonnoksesta.

Jos näyttö ei vieläkään toimi, yritä irrottaa sovitin ja kytkeä LCD-näyttö tavalliseen tapaan.

Johtopäätös

Tässä artikkelissa tarkastelimme LCD-näytön käytön pääkysymyksiä monimutkaisissa Arduino-projekteissa, kun meidän on tallennettava ilmaisia ​​​​nastaja laudalle. Yksinkertaisen ja edullisen i2c-sovittimen avulla voit liittää 1602 LCD-näytön, joka vie vain 2 analogista nastaa. Monissa tilanteissa tämä voi olla erittäin tärkeää. Hinta mukavuuden vuoksi on lisämoduulin - muuntimen ja kirjaston - käyttö. Mielestämme tämä ei ole korkea hinta mukavuudesta, ja suosittelemme tämän ominaisuuden käyttöä projekteissa.

Mikä on olennainen osa suurta määrää elektronisia laitteita? Tietenkin osoitusvälineet ja tietojen graafinen tulostus. Käyttäjälle on aina mukavampaa ja mukavampaa, kun ”älylaatikon” tulos näkyy visuaalisesti. Siksi tänään yhdistämme näytön STM32:een tekstin ja numeroiden näyttämiseksi. Kokeilujemme sankari on melko suosittu Winstarin näyttö. Muuten, kommentteihin ilmestyi tärkeä selvennys, että menetelmä on periaatteessa sama kaikille näytöille perustuen HD44780. Kiitos JekaKeylle tärkeästä lisäyksestä)

Ensin näyttö on liitettävä ohjaimeen. Lataa tietolomake ja etsi WH1602-liitin. Kuulehan:

Kuten tiedät, näyttö WH1602 siinä on 16 nastaa. Katsotaanpa jokaista erikseen...

Pinnat Vss, Vdd ja K on kytkettävä maahan ja virtaan, eli täsmälleen kuten taulukossa on ilmoitettu, ei ole yllätyksiä eikä edes keskusteltavaa)

Nastalla numero 3 säädetään kontrastia - jos laitamme sinne +5V, emme näe juuri mitään, ja jos oikosuljemme tapin maahan, ihailemme kahta riviä mustia neliöitä 😉 Tämä ei tietenkään sovi meille , joten meidän on ripustettava sinne potentiometri (vastus) muuttuvalla resistanssilla) kontrastin säätämiseksi. Parhaan merkkien näkyvyyden tarjoaa 0,5-0,7 V jännite tässä näyttönastassa.

RS-nasta on jo nasta, jota ohjaamme itse mikro-ohjaimella. Matala jännitetaso (0) tässä nastassa tarkoittaa, että nyt seuraa komento, korkea taso (1) tarkoittaa, että näyttömuistiin kirjoitetaan nyt tietoja.

Pin R/W - tässä on selvää, joko luemme tiedot (esimerkiksi näytä varattu-lippu), tässä tapauksessa tässä nastassa on 1 tai kirjoitamme komennon/tiedot näytölle, niin meillä on tässä 0.

DB7 – DB0 – dataväylä, ja se kertoo kaiken)

Pin E on niin kutsuttu Enable-signaali. Tähän häntä tarvitaan. Jotta voimme työskennellä näytön kanssa - tallentaa tietoja tai antaa komennon - meidän on annettava positiivinen pulssi tälle nastalle. Eli menettely näyttää tältä:

  1. Nastoissa RS, R/W, DB7 - DB0 - komentoamme vastaavat tarvittavat signaalit.
  2. Toimitamme yhden tappiin E.
  3. Zhdems (tietolomakkeen mukaan - vähintään 150 ns)
  4. Käytämme matalaa tasoa (0) nastalle E.

Sinun on kytkettävä 4,2 V A/Vee-jalkaan näytön taustavalon virran saamiseksi.

Näin tiedonsiirto WH1602-näytön kanssa tapahtuu.

Olemme selvittäneet WH1602:n kytkemisen, mutta ennen kuin siirrymme esimerkkiin, katsotaanpa, mitä komentoja näyttömme yleensä ymmärtää. Tätä varten menemme tietolomakkeeseen ja löydämme mielenkiintoisen taulukon:

Tässä on kuvattu kaikki komennot ja signaalit, joiden pitäisi olla WH1602:n vastaavissa nastoissa jokaista komentoa varten. Haluamme esimerkiksi tyhjentää näytön, katsomme taulukkoa ja tässä on komento, jota tarvitsemme! Selkeä näyttö!

Käytämme nollia nastoihin RS, R/W, DB7, DB6, DB5, DB4, DB3, DB2, DB1 ja yhtä nastoihin DB0. Valmis! Mitä seuraavaksi? Aivan oikein, yksi nastalle E, odota sitten hetki ja laske E uudelleen nollaan. Siinä se, näyttö tyhjennetään 😉 Juuri ennen seuraavan komennon suorittamista pitää tauko, joka ilmoitetaan kunkin komennon tietolomakkeessa. Olisi tehokkaampaa pollata varattu lippu; heti kun se palautetaan nollaan, voit jatkaa työskentelyä. Tämän lipun lukemiseen on myös erityinen komento, joten kaikki on selvää tästä) Jatketaan...

Ja itse asiassa kaikki on teorian kanssa, voit jo yrittää kirjoittaa jotain. Näytön kanssa työskentelyn helpottamiseksi tein pienen kirjaston, katsotaan nyt miten sitä voidaan käyttää. Ensin lataa

Meillä on käytössämme 2 tiedostoa, MT_WH1602.c ja MT_WH1602.h. Revimme toisen irti, tässä meidän on valittava nastat ja käytetty ohjain.

Muuten, näyttöni on kytketty seuraavasti:

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

Avaa tiedosto MT_WH1602.h:

#define PLATFORM (STM32F10x)

Valitse seuraavaksi mikro-ohjaimen nastat, joihin näyttö on liitetty. Määritetään ensin, mitä portteja käytämme. Kun muodostan yhteyden, käytän GPIOA, GPIOB, GPIOC ja GPIOD, kirjoitamme:

Samoin muille mikro-ohjaimen jaloille.

Asennus on valmis, jatketaan) Artikkelin alussa annettujen komentojen kutsumiseksi MT_WH1602.c-tiedosto sisältää seuraavat toiminnot (ne on nimetty komentojen nimien mukaan, joten mielestäni kaikki on selvää) :

void MT_WH1602_ClearDisplay(void ) ; void MT_WH1602_ReturnHome(void ) ; void MT_WH1602_EntryModeSet (bool ID-osoite, 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-osoite) ; void MT_WH1602_SetDDRAMAddress (uint8_t-osoite) ; bool MT_WH1602_ReadBusy(void ) ; void MT_WH1602_WriteData(uint8_t data) ;

Joillekin komennoille meidän on välitettävä parametreja funktiolle, esimerkiksi:

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

Katsotaanpa komentotaulukkoa:

Näemme, että Display ON/OFF -komento ei vain kytke näyttöä päälle/pois, vaan myös aktivoi/poistaa kursorin ja kursorin vilkkumisen. Tietolomakkeessa nämä komentobitit on merkitty D:ksi, C:ksi ja B:ksi, ja välitämme ne parametreina funktiolle. Jos meidän on kytkettävä näyttö ja kohdistin päälle, mutta estettävä kohdistimen vilkkuminen, kutsumme komentoa seuraavasti:

MT_WH1602_DisplayOnOff(1, 1, 0);

Yleensä kaikki on yksinkertaista 😉

Lyhyesti sanottuna luomme uusi projekti, lisää kirjasto WH1602-näytön käyttöä varten, luo tyhjä .c-tiedosto ja aloita sen täyttäminen koodilla:

// Sisällytä kirjastotiedosto#include "MT_WH1602.h" /*******************************************************************/ int main(void) ( // Kutsu alustusfunktio, emme tule toimeen ilman sitä =)() ; // Nyt meidän on tehtävä näytön ensimmäinen konfiguraatio // Dokumentaatio ja Internet suosittelevat tätä ;) MT_WH1602_FunctionSet(1, 0, 0); MT_WH1602_Viive(1000 ); MT_WH1602_FunctionSet(1, 0, 0); MT_WH1602_Viive(1000 ); MT_WH1602_FunctionSet(1, 0, 0); MT_WH1602_Viive(1000 ); MT_WH1602_FunctionSet(1, 1, 1); MT_WH1602_Viive(1000 ); MT_WH1602_DisplayOnOff(1, 0, 0); MT_WH1602_Viive(1000 ); MT_WH1602_ClearDisplay() ; MT_WH1602_Viive(2000) ; // Esimerkiksi otin ensimmäiset mieleen tulleet viivearvot) // Yleensä sinun on tarkistettava näytön varattu lippu // Näytä nyt jotain, kuten sivustomme nimi MT_WH1602_WriteData(0x6D) ; MT_WH1602_Viive(100) ; MT_WH1602_WriteData(0x69) ; MT_WH1602_Viive(100) ; MT_WH1602_WriteData(0x63) ; MT_WH1602_Viive(100) ; MT_WH1602_WriteData(0x72) ; MT_WH1602_Viive(100) ; MT_WH1602_WriteData(0x6F) ; MT_WH1602_Viive(100) ; MT_WH1602_WriteData(0x74) ; MT_WH1602_Viive(100) ; MT_WH1602_WriteData(0x65) ; MT_WH1602_Viive(100) ; MT_WH1602_WriteData(0x63) ; MT_WH1602_Viive(100) ; MT_WH1602_WriteData(0x68) ; MT_WH1602_Viive(100) ; MT_WH1602_WriteData(0x6E) ; MT_WH1602_Viive(100) ; MT_WH1602_WriteData(0x69) ; MT_WH1602_Viive(100) ; MT_WH1602_WriteData(0x63) ; MT_WH1602_Viive(100) ; MT_WH1602_WriteData(0x73) ; MT_WH1602_Viive(100) ; MT_WH1602_WriteData(0x2E) ; MT_WH1602_Viive(100) ; MT_WH1602_WriteData(0x72) ; MT_WH1602_Viive(100) ; MT_WH1602_WriteData(0x75) ; MT_WH1602_Viive(100) ; while (1 ) ( __NOP() ; ) ) /*******************************************************************/

Valmis, tarkistetaan)


Kuten näet, kaikki toimii oikein)

Muuten, unohdin jotenkin silmistäni kysymyksen siitä, mitä kirjoittaa näytölle, jotta tämä tai tuo hahmo näytetään. Tässä on levy datalehdestä:

Joten määrittääksesi, mikä arvo kirjoitetaan näytön muistiin, sinun on otettava tämän taulukon yläreunaan ja vasemmalle kirjoitetut numerot tietylle symbolille. Esimerkiksi symboli "A". Katsotaanpa - tämä symboli vastaa saraketta 0100 (0x4) ja riviä 0001 (0x1). Osoittautuu, että symbolin “A” näyttämiseksi sinun on kirjoitettava näyttöön arvo 0x41.

Siinä se nyt =) Olemme selvittäneet WH1602-näytön kytkennän ja toiminnan, joten nähdään pian!

P.S. Kirjaston kanssa työskennellessäni en testannut varattu-lipun lukemisen toimintoa, joten jos jokin ei yhtäkkiä toimi niin kuin pitäisi, kirjoita, selvitämme sen)

Joskus kohtaamme ongelman tuottaa erilaisia ​​tietoja Arduinosta ulkomaailmaan. Usein sarjaportin käyttö on mahdotonta, hankalaa ja kannattamatonta.

Merkkien näyttö on yksi yksinkertaisimmista ja halvimmista tavoista näyttää tietoa, koska siinä on oma mikrokontrolleri, joka tallentaa koodatut merkit. Tämä järjestelmä yksinkertaistaa näiden näyttöjen käyttöä, mutta samalla rajoittaa niiden käytön vain ulostuloon tekstitietoa, toisin kuin graafiset näytöt.

Esimerkissä tarkastellaan Winstar wh1602l1 -näyttöä, joka on yksi yleisimmistä hd44780-ohjaimen näytöistä. Lisäksi voit liittää LCD 2004:n ja muita vastaavia.
Kaksi ensimmäistä numeroa osoittavat merkkien määrän rivillä ja toinen rivien lukumäärän, joten valitussa näytössä on kaksi 16 merkin riviä.
Tämä liitäntätapa sisältää vähintään 6 Arduino-mikro-ohjaimen portin varaamisen. Tarvittaessa voit liittää 1602-tekstinäytön I2C-liitännän kautta (2 porttia).

Tarvitsemme lisäelementtejä muuttuva vastus, säätääksesi kontrastia. Muuten kaikki on kytketty kaavion, tietolomakkeen ja ohjelmassa valittujen Arduino-lähtöjen mukaan.

Näytön nastat 15 ja 16 vastaavat taustavalosta; se voidaan sammuttaa tai kirkkautta voidaan säätää automaattisesti, kun Arduinoon kytketään valovastus kirkkausanturiksi.

Esimerkissämme luemme tiedot sarjaportista ja näytämme ne näytöllä:

#sisältää // Liitä kirjasto merkkinäyttöjä varten LiquidCrystal lcd(13, 11, 5, 4, 3, 2); // (RS, E, D4, D5, D6, D7) kytke näytön lähdöt järjestyksen mukaan R/W – GND, koska kirjoitamme tiedot näytölle emmekä lue void setup() ( lcd.begin() 16, 2); // Alusta LCD 1602 // lcd.begin(20, 4); // Alusta LCD 2004 Serial.begin(9600); // Käynnistä sarjaportti ) void loop() ( if (Serial.available) ()) // Jos tiedot tulevat portista, niin... ( delay(100); lcd.clear(); // Tyhjennä näyttö kokonaan, kun (Serial.available() > 0) // Jos tiedot tulevat portti on suurempi kuin 0, sitten ... ( lcd.write(Serial.read()); // Lue arvot sarjaportista ja näytä ne näytöllä ) ) )

Voit monimutkaista koodia ja lähettää DS1307-reaaliaikakellon Arduinossa LCD1602:een.

Katsotaanpa nyt lähemmin kaikkia kirjaston toimintoja Nestekide:

Ensimmäinen ja tärkein asia on, että tätä kirjastoa käyttämällä et voi näyttää venäläisiä kirjaimia, vaikka näytöllä olisi nämä merkit muistissa. Tämä ongelma voidaan ratkaista joko muilla kirjastoilla tai kirjoittamalla arvoja heksadesimaalikoodilla.

lcd.print();- yksinkertaisin ja yleisimmin käytetty, jota käytetään tietojen näyttämiseen.

lcd. asia selvä(); - käytetään näytön puhdistamiseen.

lcd.setCursor(x, y); - asettaa kohdistimen tiettyyn paikkaan.

X – linjan sijainnin muutos

Y – rivinvaihto

Esimerkiksi lcd.setCursor(0, 0); tämä on ylävasen solu.

lcd.home(); - asettaa kohdistimen kohtaan 0, 0

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

lcd. scrollDisplayLeft(); - vaihda vasemmalle

lcd. scrollDisplayRight(); - vaihda oikealle

Lcd.createChar(Nimi, joukko); - oman merkin luominen.

Esimerkiksi tutkintomerkki näyttää tältä:

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




Ylös