LSD ekraani ühendus. Koolitus

Iga raadioamatöör jõuab pärast teatud arvu lihtsaid omatehtud projekte eesmärgini konstrueerida andurite ja nuppude abil midagi suurejoonelist. Lõppude lõpuks on palju huvitavam kuvada andmeid ekraanil, mitte pordi monitoril. Siis aga tekib küsimus: millist ekraani valida? Ja üldiselt, kuidas seda ühendada, mida on vaja ühendamiseks? Vastuseid neile küsimustele arutatakse käesolevas artiklis.

LCD 1602

Paljude kuvamisvõimaluste hulgas tahaksin eraldi välja tuua HD4478 kontrolleril põhineva LCD1602 ekraani. See ekraan on saadaval kahes värvitoonis: valged tähed sinisel taustal, mustad tähed kollasel taustal. LCD 1602 ühendamine Arduinoga ei tekita samuti probleeme, kuna seal on sisseehitatud raamatukogu ja pole vaja midagi täiendavat alla laadida. Näidikud erinevad mitte ainult hinna, vaid ka suuruse poolest. Sageli kasutavad raadioamatöörid 16 x 2, see tähendab 2 rida 16 tähemärgiga. Kuid on ka 20 x 4, kus on 4 rida 20 tähemärgiga. Mõõtmed ja värv ei mängi lcd 1602 ekraani ühendamisel Ardunoga mingit rolli, need on ühendatud ühtemoodi. Vaatenurk on 35 kraadi, ekraani reageerimisaeg on 250 ms. See võib töötada temperatuuril -20 kuni 70 kraadi Celsiuse järgi. Töötamise ajal kasutab see ekraani jaoks 4 mA ja taustvalgustuse jaoks 120 mA.

Kus seda kasutatakse?

See ekraan on populaarne mitte ainult raadioamatööride, vaid ka suurte tootjate seas. Näiteks printerid ja kohvimasinad kasutavad ka LCD1602. Selle põhjuseks on selle madal hind; Hiina saitidel maksab see ekraan 200–300 rubla. Sealt tasub osta, kuna meie kauplustes on selle kuva juurdehindlused väga kõrged.

Arduinoga ühendamine

LCD 1602 ühendamine Arduino Nano ja Unoga pole erinev. Ekraaniga saab töötada kahes režiimis: 4-bitine ja 8. 8-bitisega töötades kasutatakse nii madalat kui ka kõrgemat järjekorda ning 4-bitise puhul ainult madalat järku. 8-bitisega pole erilist mõtet töötada, kuna see lisab ühenduse loomiseks veel 4 kontakti, mis pole soovitatav, kuna kiirus pole suurem, ekraani värskenduste limiit on 10 korda sekundis. Üldiselt kasutatakse lcd 1602 ühendamiseks Arduinoga palju juhtmeid, mis tekitab mõningaid ebamugavusi, kuid on olemas spetsiaalsed varjendid, aga sellest hiljem. Foto näitab ekraani ühendamist Arduino Unoga:

Näidiskood:

#kaasa // Lisage vajalik LiquidCrystal raamatukogu lcd(7, 6, 5, 4, 3, 2); // (RS, E, DB4, DB5, DB6, DB7) void setup())( lcd.begin(16, 2); // Ekraani suuruse määramine lcd.setCursor(0, 0); // Kursori määramine algusesse 1 rida lcd.print("Tere, maailm!"); // Sisestage tekst lcd.setCursor(0, 1); // Seadke kursor 2. rea algusesse lcd.print("site") ; // Väljasta tekst ) tühisilmus ()( )

Mida kood teeb? Esimene samm on kuvariga töötamiseks raamatukogu ühendamine. Nagu eespool mainitud, on see teek juba Arduino IDE-s ja seda ei ole vaja täiendavalt alla laadida ja installida. Järgmisena määratakse kontaktid, mis on kontaktidega ühendatud: vastavalt RS, E, DB4, DB5, DB6, DB7. Seejärel määratakse ekraani suurus. Kuna töötame 16 tähemärgi ja 2 reaga versiooniga, kirjutame järgmised väärtused. Asetame kursori esimese rea algusesse ja kuvame oma esimese teksti Hello World. Järgmisena asetage kursor teisele reale ja kuvage saidi nimi. See on kõik! Kaaluti lcd 1602 ühendamist Arduino Unoga.

Mis on I2C ja miks seda vaja on?

Nagu eespool mainitud, võtab ekraani ühendamine palju kontakte. Näiteks mitme anduri ja LCD-ekraaniga töötades ei pruugi 1602 kontaktist lihtsalt piisata. Sageli kasutavad raadioamatöörid Uno või Nano versioone, millel pole palju kontakte. Siis mõtlesid inimesed välja spetsiaalsed kaitsekilbid. Näiteks I2C. See võimaldab ühendada ainult 4 kontaktiga ekraani. Seda on kaks korda rohkem. I2C moodulit müüakse nii eraldi, kus tuleb ise jootma, kui ka juba LCD 1602 ekraanile joodetuna.

Ühendus I2C mooduli abil

LCD 1602 ühendamine Arduino Nanoga I2C-ga võtab vähe ruumi, ainult 4 kontakti: maandus, toide ja 2 andmeväljundit. Ühendame Arduino toite ja maanduse vastavalt 5 V ja GND-ga. Ühendame ülejäänud kaks kontakti: SCL ja SDA mis tahes analoogkontaktidega. Fotol näete näidet lcd 1602 ühendamisest I2C mooduliga arduinoga:

Programmi kood

Kui ilma moodulita kuvariga töötamiseks oli vaja kasutada ainult ühte teeki, siis mooduliga töötamiseks on vaja kahte teeki. Üks neist on juba Arduino IDE-s - Wire. Teine teek, LiquidCrystal I2C, tuleb eraldi alla laadida ja installida. Teegi installimiseks Arduinosse tuleb allalaaditud arhiivi sisu laadida juurkataloogi Libraries. Näidisprogrammi koodi kasutades I2C:

#kaasa #kaasa LiquidCrystal_I2C lcd(0x27,16,2); // Ekraani seadistamine void setup() ( lcd.init(); lcd.backlight(); // Lülitage ekraani taustvalgustus sisse lcd..setCursor(8, 1); lcd.print("LCD 1602"); ) void loop( ) ( // Seadke kursor teisele reale ja nullmärgile. lcd.setCursor(0, 1); // Kuvab sekundite arvu Arduino käivitamisest lcd.print(millis()/1000); )

Nagu näete, on kood peaaegu sama.

Kuidas lisada oma sümbolit?

Nende kuvarite probleem on see, et kirillitsa tähestikku ja sümboleid ei toetata. Näiteks peate ekraanile laadima mõne sümboli, et see seda kajastaks. Selleks võimaldab ekraan luua kuni 7 oma sümbolit. Kujutage ette tabelit:

0 0 0 1 0
0 0 0 0 1
1 1 0 0 1
0 0 0 0 1
1 1 0 0 1
0 0 0 0 1
0 0 0 1 0
0 0 0 0 0

Kui 0 - seal pole midagi, kui 1 - see on maalitud ala. Ülaltoodud näites näete "naeratava naeratuse" sümboli loomist. Kasutades Arduino näidisprogrammi, näeks see välja järgmine:

#kaasa #kaasa // Lisage vajalik teek // Naeratuse sümboli baidi bitimask naeratus = ( B00010, B00001, B11001, B00001, B11001, B00001, B00010, ); LiquidCrystal lcd(7, 6, 5, 4, 3, 2); // (RS, E, DB4, DB5, DB6, DB7) void setup())( lcd.begin(16, 2); // Ekraani suuruse määramine lcd.createChar(1, smile); // Loo märginumber 1 lcd.setCursor(0, 0); // Seadke kursor 1. rea algusesse lcd.print("\1"); // Kuvab naerunäo (märgi number 1) - "\1" ) void loop ())( )

Nagu näete, loodi bitmask samamoodi nagu tabel. Kui see on loodud, saab seda kuval muutujana kuvada. Pidage meeles, et mällu saate salvestada ainult 7 tähemärki. Põhimõtteliselt sellest piisab. Näiteks kui teil on vaja näidata kraadi sümbolit.

Probleemid, mille korral ekraan ei pruugi töötada

Mõnikord ekraan ei tööta. Näiteks lülitub see sisse, kuid ei näita märke. Või ei lülitu üldse sisse. Esiteks kontrollige, kas olete kontaktid õigesti ühendanud. Kui kasutasite LCD 1202 ühendust Arduinoga ilma I2Cta, on juhtmete vahele väga lihtne takerduda, mistõttu ekraan ei pruugi korralikult töötada. Samuti peaksite veenduma, et ekraani kontrastsus on suurenenud, kuna minimaalse kontrasti korral pole isegi näha, kas LCD 1602 on sisse lülitatud või mitte. Kui see ei aita, võib probleem peituda kontaktide jootmises, seda I2C mooduli kasutamisel. Teine levinud põhjus, miks ekraan ei pruugi töötada, on I2C-aadressi vale seadistus. Fakt on see, et tootjaid on palju ja nad võivad panna erineva aadressi, peate selle siin parandama:

LiquidCrystal_I2C lcd(0x27,16,2);

Sulgudes näete kahte väärtust, 0x27 ja 16.2 (16.2 on kuva suurus ja 0x27 on I2C aadress). Nende väärtuste asemel võite proovida määrata 0x37 või 0x3F. Noh, teine ​​põhjus on lihtsalt vigane LCD 1602. Arvestades, et peaaegu kõik Arduino jaoks on valmistatud Hiinas, ei saa olla 100% kindel, et ostetud toode pole defektne.

LCD 1602 plussid ja miinused

Vaatame LCD 1602 ekraani plusse ja miinuseid.

  • Hind. Seda moodulit saab osta väga soodsa hinnaga Hiina kauplustest. Hind on 200-300 rubla. Mõnikord müüakse seda isegi koos I2C mooduliga.
  • Lihtne ühendada. Tõenäoliselt ei ühenda tänapäeval keegi LCD 1602 ilma I2C-ta. Ja selle mooduliga võtab ühendus ainult 4 kontakti, juhtmete "võrke" ei teki.
  • Programmeerimine. Tänu valmis teekidele on selle mooduliga töötamine lihtne, kõik funktsioonid on juba kirjutatud. Ja kui teil on vaja oma sümbolit lisada, kulub selleks vaid paar minutit.
  • Selle kasutamise ajal tuhandete raadioamatööride poolt pole suuri puudusi tuvastatud, on ainult defektsete ostude juhtumeid, kuna peamiselt kasutatakse ekraanide Hiina versioone.

Selles artiklis vaadeldi 1602 ühendamist Arduinoga ja pakuti ka näiteid selle kuvariga töötamiseks mõeldud programmidest. See on tõesti üks parimaid omas kategoorias; pole asjata, et tuhanded raadioamatöörid valivad selle oma projektide jaoks!

1602 mõõtmega LCD-ekraanid, mis põhinevad kontrolleril HD44780, on ühed lihtsaimad, taskukohasemad ja populaarsemad kuvarid erinevate elektroonikaseadmete arendamiseks. Seda võib leida nii põlvele kokkupandud seadmetest kui ka tööstusseadmetest, nagu näiteks kohvimasinad. Selle kuva põhjal on kogutud populaarseimad Arduino-teemalised moodulid ja kilbid, nagu ja.

Selles artiklis räägime teile, kuidas see Arduinoga ühendada ja teavet kuvada.

Kasutatud komponendid (osta Hiinast):

. Juhtpaneel

. Ühendusjuhtmed

Nendel ekraanidel on kaks kujundust: kollane taustavalgus mustade tähtedega või, mis on tavalisem, sinine valgete tähtedega taustvalgus.

HD44780 kontrolleri ekraanide suurus võib olla erinev, kuid neid juhitakse samamoodi. Levinumad mõõtmed on 16x02 (st 16 tähemärki kahel real) või 20x04. Sümbolite endi eraldusvõime on 5x8 pikslit.

Enamik ekraane ei toeta kirillitsa tähestikku; see on ainult CTK-ga kuvaritel. Kuid me võime proovida seda probleemi osaliselt lahendada (jätkub artiklis).

Kuva väljundid:

Ekraanil on ühendamiseks 16-pin pistik. Tihvtid on märgitud tahvli tagaküljele.

1 (VSS) – kontrolleri toiteallikas (-)
2 (VDD) – kontrolleri toiteallikas (+)
3 (VO) – kontrasti juhttihvt
4 (RS) – Registreeri valik
5 (R/W) – lugemine/kirjutamine (kirjutusrežiim, kui see on maandusega ühendatud)
6 (E) – luba (strobe langusel)
7-10 (DB0-DB3) – 8-bitise liidese madala järgu bitid
11-14 (DB4-DB7) – liidese kõrgetasemelised bitid
15 (A) - anoodi (+) taustvalgustuse toiteallikas
16 (K) - katood (-) taustvalgustuse toiteallikas

Enesetesti režiim:

Enne ühenduse loomist ja teabe kuvamist oleks hea mõte uurida, kas ekraan töötab või mitte. Selleks peate juhtseadmele endale pinge panema ( VSS ja VDD), lülitage sisse taustvalgustus ( A ja K) ja reguleerige ka kontrasti.

Kontrastsuse reguleerimiseks kasutage 10 kOhm potentsiomeetrit. Pole tähtis, mis kuju see saab. Välistele jalgadele antakse +5V ja GND, keskjalg on ühendatud väljundiga V.O.

Pärast vooluahelale toite andmist on vaja saavutada õige kontrast; kui see pole õigesti seadistatud, ei kuvata ekraanil midagi. Kontrastsuse reguleerimiseks mängige potentsiomeetriga.

Kui ahel on õigesti kokku pandud ja kontrastsus on õigesti reguleeritud, tuleks ülemine rida täita ekraanil ristkülikutega.

Teabe väljund:

Kuvari juhtimiseks kasutatakse Arduino IDE-sse sisseehitatud LiquidCrystal.h teeki.

Raamatukogu funktsionaalsus

//Kursoriga töötamine lcd.setCursor(0, 0); // Kursori määramine (lahtri number, rida) lcd.home(); // Seadke kursor nulli (0, 0) lcd.kursor(); // Kursori nähtavuse lubamine (allajoonitud) lcd.noCursor(); // Kursori nähtavuse eemaldamine (allajoonitud) lcd.blink(); // Kursori vilkumise lubamine (kursor 5x8) lcd.noBlink(); // Kursori vilkumise väljalülitamine (kursor 5x8) //Teabeväljund lcd.print("sait"); // Teabe väljund lcd.clear(); // Tühjendage ekraan, (kustutage kõik andmed) seadke kursor nulli lcd.rightToLeft(); // Salvestamine toimub paremalt vasakule lcd.leftToRight(); // Kirjutamine toimub vasakult paremale lcd.scrollDisplayRight(); // Nihutab kõike ekraanil ühe tähemärgi võrra paremale lcd.scrollDisplayLeft(); // Nihutab kõike ekraanil ühe tähemärgi võrra vasakule //Spioonidele kasulik teave :) lcd.noDisplay(); // Ekraanil olev teave muutub nähtamatuks, andmeid ei kustutata // kui hetkel, kui see funktsioon on aktiivne, ei kuvata midagi, siis LCD ekraan(); // Funktsiooni display() kutsumisel kogu teave, mis oli

Ekraan ise võib töötada kahes režiimis:

8-bitine režiim - selleks kasutatakse nii madalaid kui ka kõrgeid bitte (BB0-DB7)

4-bitine režiim - selleks kasutatakse ainult kõige vähem olulisi bitte (BB4-DB7)

8-bitise režiimi kasutamine sellel kuval ei ole soovitatav. Selle tööks on vaja veel 4 jalga ja kiirust praktiliselt pole, sest Selle ekraani värskendussagedus on piiratud< 10раз в секунду.

Teksti väljastamiseks tuleb ühendada kontaktid RS, E, DB4, DB5, DB6, DB7 kontrolleri kontaktidega. Neid saab ühendada mis tahes Arduino tihvtidega, peaasi, et koodis õige järjestus paika panna.

Näidiskood:

#kaasa LiquidCrystal lcd(7, 6, 5, 4, 3, 2); tühine seadistamine()(lcd.begin(16, 2); // Määrake ekraani suurus lcd.setCursor(0, 0); lcd.print("Tere, maailm!"); // Kuva teksti lcd.setCursor (0, 1); // Viige kursor 2. rea algusesse lcd.print("sait"); // Väljundtekst ) tühine silmus (){ }

Looge oma sümbolid

Tekstiväljundi oleme sorteerinud, ingliskeelsed tähed on ekraani sees kontrolleri mällu ühendatud ja nendega probleeme pole. Aga mida teha, kui vajalikku sümbolit kontrolleri mälus pole?

Pole probleemi, vajaliku sümboli saab luua käsitsi (kokku kuni 7 sümbolit). Vaadeldavate ekraanide lahtri eraldusvõime on 5x8 pikslit. Sümboli loomise ülesandeks on vaid natuke maski kirjutamine ja ühtede paigutamine kohtadesse, kus punktid peaksid põlema ja nullid sinna, kus mitte.

Allolevas näites joonistame naerunäo.

Näidiskood

//Testitud Arduino IDE 1.0.5 peal#kaasa #kaasa // Lisage vajalik teek // Naeratuse sümboli bitmask baidi naeratus = ( B00010, B00001, B11001, B00001, B11001, B00001, B00010, ); LiquidCrystal lcd(7, 6, 5, 4, 3, 2); // (RS, E, DB4, DB5, DB6, DB7) tühine seadistamine()(lcd.begin(16, 2); // Määrake ekraani suurus lcd.createChar(1, naeratus); // Looge sümbol number 1 lcd.setCursor(0, 0); // Seadke kursor 1 rea algusesse lcd.print("\1"); // Kuva naeratav nägu (märk number 1) - "\1") tühine silmus (){ }

Boonus

Kommentaarides saatis kogukonna liige sümbolite generaatori lingi

  • igorka

      märgigeneraator nagu ülal,
      Ma tegin seda, sest ma ei olnud nõrk)

Seekord tahan teile rääkida, kuidas ühendada ekraan Nokia 1202 mobiiltelefonilt Atmega8 mikrokontrolleriga. Programmeerime CodeVision keskkonnas. Ma võin siin ja seal eksida. Ei läinud kaua, kui sain aru, mis on mis. Mul pole programmeerimise kogemust ja ma ei kirjutanud teeki kuvariga töötamiseks. Need kopeeriti ühest projektist Internetis. Kõik vajalikud funktsioonid on seal kirjas ning ladina tähtedega ja kirillitsas on 5 * 8 font. Samuti on paar märki 12*16 ja 24*32, mida teekide autor oma seadmes kasutas. Kui need eemaldate, võtab 5*8 font enda alla umbes 700 baiti mikrokontrolleri välklampi. Seetõttu tuleb projekti mikrokontroller võtta “rasvamaks”, minu puhul kasutasin Atmega8. Täiesti piisavalt. Kõik failid – allikad, raamatukogu jne, .

Indikaatori ühendusskeem

LCD-ekraani MK-ga ühendamise skemaatiline diagramm

Joonistasin ühendusskeemi. Ekraani toiteks on vaja 3,3 V pinget. Kui toite mikrokontrolleri 5V-st, paigaldage takistijagurid ja mikroskeem 78L33. Kui kogu vooluring saab toide 3,3 V, pole takistijagajaid vaja. Tundub, et Atmega8A saab töötada 3,3 V pingest eeldusel, et sagedus ei ole kõrgem kui 8 MHz. Mina isiklikult pole proovinud. Mul on kõik kokku pandud 5 V toitega silumisplaadile. Mitte mingil juhul ei tohiks ekraani enda ette panna suure mahutavusega elektrolüüti. Töötamise alguses saadab kontroller kuvarile lähtestamiskäsud. Kondensaatori laadimine võtab aega. Laadimise ja ekraani tööle asumise ajal möödub mõni aeg ja see ei saa lähtestamiskäsku. Loomulikult on need millisekundid, kuid sel juhul on mõju märgatav.


Kuva pinout diagramm

Nokia 1202 ekraanil on 9-bitine SPI-liides. Meie valitud mikrokontrolleril seda luksust pole. Seetõttu kasutame kuvariga suhtlemiseks mitte riistvara, vaid tarkvara SPI-d, niiöelda "no-brainer". Ma ei ütle teile, kuidas CodeVisionis uusi projekte luua - mõelge ise. Ütlen ainult, et kõik PORTB-viigud peavad olema konfigureeritud väljundina. Projekti seadetes tuleb teha linnuke " Salvestage globaalsed konstandid välkmällu" See toiming on vajalik selleks, et fontide massiive ja meie pilte salvestataks välkmälu.


Niisiis, me lõime projekti. Valisime mikrokontrolleri, määrasime kella sageduse ja konfigureerisime projekti. Mis järgmiseks? Ja siis peate lisama kuvariga töötamiseks teegid ja viivitusteekid. Pakkige arhiiv lahti. Seal on kaks faili. Need tuleb kopeerida konkreetsetesse kaustadesse. Loodan, et installisite CodeVisioni otse C:\ draivi. Kui jah, siis kopeerige failid sobivatele teedele:

C:\cvavreval\inc faili 1100.inc jaoks ja
C:\cvavreval\lib faili 1100.h jaoks.


Samuti tahan öelda, et failis saab muuta mikrokontrolleri tihvtide määramist 1100.h. Siis ühendusskeem muutub. Alustame kodeerimisega. Näidakem lihtsalt mõnda pealdist põhifondis 5*8. Kohe alguses lisame raamatukogud.

#kaasa< 1100.h>// kuva raamatukogu
#kaasa // viivitusteek

Päris allosas, enne peamist while(1)() tsüklit, lähtestame kuva ja tühjendame selle.

lcd_init(); // kuva lähtestamine
lcd_clear(); // ekraani tühjendamine

Samuti paneme oma pealdise põhitsükli ette. Laske kontrolleril esmalt kuvada teade ekraanil ja seejärel pöörlema ​​põhiahelas. Me kirjutame seda:

print_string("Väljasta silt",5,0);
print_string("Mida iganes me tahame",0,1);
print_string("BUCKER",10,2);

Ma arvan, et siin on kõik selge. Esimene number on ekraanil kuvatav x-koordinaat. See võib võtta väärtuse vahemikus 0 kuni 96. Teine on string. See on 0 kuni 7. Põhimõtteliselt mahub sinna 8 ja pool rida, aga poolt rida me ei loe. Kompileerime ja välgutame. Vaatame tulemust. Saate ka Proteuse installida ja testida. Kontrolleri saab seadistada töötama sisemisest generaatorist projektis määratud sagedusel käivitusviivitusega 64 ms. Lisan koostatud projektiga arhiivi. Sagedus 8 MHz.


Aga nagu ma juba alguses kirjutasin, on raamatukogus ka muid sümboleid. Tõsi, seal pole tähti, on ainult numbrid. Teeme nüüd ülesande pisut keerulisemaks. Las kiri ei ole inertne, vaid muutub. Oletame, et see loeb 0 kuni 9 intervalliga 1 sekund. Kui see jõuab 9-ni, lähtestatakse see nullile ja käivitub uuesti. Võtame suured arvud mõõtmetega 24*32. Noh, alustame. Võite võtta eelmise projekti ja kustutada kolm "print_string" rida. Kohe pärast teekide lisamist deklareerime teatud globaalse muutuja m.

söe m = 0;

Võite lihtsalt kirjutada:

Sel juhul omistatakse sellele automaatselt väärtus 0. Põhiahelasse kirjutame järgmise:

char_24_32(m,35,2); //sümboli väljundfunktsioon 24*32
viivitus_ms(1000); // oodake 1 sekund
m++; // lisage muutujale m 1
kui(m>9)m=0; // Seisukord. Kui muutuja m on suurem kui 9, siis on m 0.

Tegin programmi tööst lühikese video

Püüan teile rääkida, kuidas pilte joonistada ja neid ekraanil kuvada. Kuidas luua massiive ja funktsioone nende väljastamiseks ning kuidas pilti ümber pöörata. Teegid laenati saidilt cxem.net. Materjal ette valmistatud Boozer.

Arutage artiklit EKRAANI ÜHENDAMINE MIKROKONTROLLERIGA

Mis on suure hulga elektroonikaseadmete lahutamatu osa? Muidugi, andmete näitamise ja graafilise väljastamise vahendid. Kasutajale on alati mugavam ja meeldivam, kui “nutikasti” tulemus on visuaalselt näha. Seetõttu ühendame täna STM32-ga ekraani, et kuvada teksti ja numbreid. Meie katsete kangelaseks saab Winstari üsna populaarne väljapanek. Muide, kommentaaridesse ilmus oluline täpsustus, et metoodika on põhimõtteliselt sama kõigi näidikute puhul, mis põhinevad. HD44780. Aitäh JekaKeyle olulise lisa eest)

Esiteks tuleb ekraan kontrolleriga ühendada. Laadige alla andmeleht ja otsige üles pistik WH1602. Vaata siia:

Nagu sa tead, ekraan WH1602 on 16 tihvti. Vaatame igaüht eraldi...

Pins Vss, Vdd ja K tuleb ühendada maandusega ja toiteallikaga, st täpselt nii, nagu tabelis näidatud, pole üllatusi ega isegi midagi arutada)

Kontrastsuse reguleerimiseks kasutatakse tihvti nr 3 - kui paneme sinna +5V peale, siis ei näe me absoluutselt mitte midagi ja kui tihvti maandusega lühistada, siis imetleme kahte rida musti ruute 😉 See meile loomulikult ei sobi , seega peame kontrasti reguleerimiseks riputama sinna muutuva takistusega potentsiomeetri (takisti). Tähemärkide parima nähtavuse tagab selle ekraanipistiku pinge 0,5-0,7 V.

RS-tihvt on juba tihvt, mida me ise mikrokontrolleri abil juhime. Madal pingetase (0) sellel viigul tähendab, et nüüd järgneb käsk, kõrge tase (1) tähendab, et nüüd on andmed, mis tuleb ekraanimällu kirjutada.

Pin R/W - siin on selge, kas loeme andmeid (näiteks kuvatakse hõivatud lipp), sel juhul on sellel tihvtil 1 või kirjutame käsu/andmed ekraanile, siis on meil siin 0.

DB7 – DB0 – andmesiin ja see ütleb kõik)

Pin E on nn lubamissignaal. Selleks on teda vaja. Ekraaniga töötamiseks – andmete salvestamiseks või käsu väljastamiseks – peame sellele kontaktile andma positiivse impulsi. See tähendab, et protseduur näeb välja selline:

  1. Kontaktidel RS, R/W, DB7 - DB0 - meie käsule vastavad vajalikud signaalid.
  2. Tarnime ühe tihvtile E.
  3. Zhdems (andmelehe järgi - vähemalt 150 ns)
  4. Rakendame tihvtile E madala taseme (0).

Ekraani taustvalgustuse toiteks peate A/Vee jalale panema 4,2 V pinge.

Nii toimub side WH1602 kuvariga.

Oleme välja mõelnud WH1602 ühendamise, kuid enne näite juurde liikumist vaatame, milliseid käske meie ekraan üldiselt mõistab. Selleks läheme andmelehele ja leiame huvitava tabeli:

Siin on kirjeldatud kõiki käske ja signaale, mis peaksid olema WH1602 vastavatel kontaktidel iga konkreetse käsu jaoks. Näiteks tahame ekraani tühjendada, vaatame tabelit ja siin on käsk, mida vajame! Selge ekraan!

Nullid rakendame viigudele RS, R/W, DB7, DB6, DB5, DB4, DB3, DB2, DB1 ja ühte viigule DB0. Tehtud! Mis edasi? Täpselt nii, üks tihvti E peal, siis oota veidi ja langeta E uuesti nulli. See on kõik, ekraan tühjeneb 😉 Vahetult enne järgmise käsu täitmist peate pausi tegema, mis on märgitud iga käsu andmelehel. Tõhusam oleks hõivatud lipu küsitlemine; niipea, kui see nullitakse, saate tööd jätkata. Selle lipu lugemiseks on ka spetsiaalne käsk, nii et sellega on kõik selge) Liigume edasi...

Ja tegelikult on kõik teooriaga, saab juba proovida midagi kirjutada. Kuvariga töötamise hõlbustamiseks tegin väikese raamatukogu, nüüd vaatame, kuidas seda kasutada saab. Esiteks laadige alla

Meie käsutuses on 2 faili, MT_WH1602.c ja MT_WH1602.h. Rebime teise ära, siin peame valima tihvtid ja kasutatava kontrolleri.

Muide, minu ekraan on ühendatud järgmiselt:

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

Avage fail MT_WH1602.h:

#define PLATVORM (STM32F10x)

Järgmisena valige mikrokontrolleri tihvtid, millega ekraan on ühendatud. Kõigepealt määrame, milliseid porte me kasutame. Ühenduse loomisel kasutan GPIOA, GPIOB, GPIOC ja GPIOD, kirjutame:

Samamoodi ka teiste mikrokontrolleri jalgade puhul.

Oleme seadistusega valmis, jätkame) Artikli alguses antud käskude kutsumiseks sisaldab fail MT_WH1602.c järgmisi funktsioone (need on nimetatud käskude nimede järgi, nii et arvan, et kõik on selge) :

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

Mõne käsu puhul peame funktsioonile edastama parameetrid, näiteks:

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

Vaatame käsutabelit:

Näeme, et käsk Display ON/OFF mitte ainult ei lülita ekraani sisse/välja, vaid ka aktiveerib/desaktiveerib kursori ja kursori vilkumise. Andmelehel on need käsubitid tähistatud kui D, C ja B ning edastame need funktsiooni parameetritena. Kui peame ekraani ja kursori sisse lülitama, kuid kursori vilkumise keelama, kutsume käsku järgmiselt:

MT_WH1602_DisplayOnOff(1, 1, 0);

Üldiselt on kõik lihtne 😉

Lühidalt, loome uue projekti, lisame teegi WH1602 kuvariga töötamiseks, loome tühja .c-faili ja hakkame seda koodiga täitma:

// Kaasake teegi fail#include "MT_WH1602.h" /*******************************************************************/ int main(void) ( // Kutsuge initsialiseerimisfunktsioon, me ei saa ilma selleta hakkama =)() ; // Nüüd peame tegema esialgse kuva konfiguratsiooni // Dokumentatsioon ja Internet soovitavad seda teha ;) 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) ; // Näiteks võtsin esimesed viivituse väärtused, mis meelde tulid) // Üldiselt peate kontrollima kuva hõivatud lippu // Kuvame nüüd midagi, näiteks meie saidi nime 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) ; samas (1 ) ( __NOP() ; ) ) /*******************************************************************/

Valmis, kontrollime)


Nagu näete, töötab kõik õigesti)

Muide, mul läks millegipärast silmist ära küsimus, mida ekraanile kirjutada, et seda või teist tegelast kuvada. Siin on plaat andmelehelt:

Seega selleks, et määrata, millist väärtust kuvamällu kirjutada, peate võtma konkreetse sümboli jaoks selle tabeli ülaosas ja vasakule kirjutatud numbrid. Näiteks sümbol "A". Vaatame - see sümbol vastab veerule 0100 (0x4) ja reale 0001 (0x1). Selgub, et sümboli “A” kuvamiseks tuleb ekraanile kirjutada väärtus 0x41.

See on nüüd kõik =) Oleme lahendanud WH1602 kuvari ühenduse ja toimimise, nii et näeme varsti!

P.S. Raamatukoguga töötades ei testinud ma hõivatud lipu lugemise funktsiooni, nii et kui äkki midagi ei tööta nii nagu peaks, kirjutage, me mõtleme selle välja)

  • FC-113 moodul põhineb PCF8574T kiibil, mis on 8-bitine nihkeregister – I2C jadasiini sisend-väljund “laiend”. Joonisel on mikrolülitus tähistatud DD1.
  • R1 on trimmitakisti LCD-ekraani kontrasti reguleerimiseks.
  • Ekraani taustvalgustuse sisselülitamiseks kasutatakse hüppajat J1.
  • Pinge 1…16 kasutatakse mooduli ühendamiseks LCD-ekraani tihvtidega.
  • Seadme I2C aadressi muutmiseks on vaja kontaktplaate A1...A3. Sobivate džemprite jootmisega saate muuta seadme aadressi. Tabelis on näidatud aadresside ja džemprite vastavus: "0" vastab avatud vooluringile, "1" - paigaldatud hüppajale. Vaikimisi on kõik 3 hüppajat avatud ja seadme aadress 0x27.

2 LCD-ekraani ühendusskeem Arduinoga I2C protokolli kaudu

Moodul on ühendatud Arduinoga I2C siini jaoks standardsel viisil: mooduli SDA pin on ühendatud analoogporti A4, SCL pin on ühendatud Arduino analoogporti A5. Mooduli toiteallikaks on Arduino +5 V. Moodul ise on ühendatud tihvtide 1…16 abil LCD-ekraani vastavate tihvtidega 1…16.


3 Raamatukogu tööle I2C protokolli kaudu

Nüüd vajame I2C liidese kaudu LCD-ga töötamiseks raamatukogu. Võite kasutada näiteks seda (link real "Laadi näidiskood ja teek").

Allalaaditud arhiiv LiquidCrystal_I2Cv1-1.rar pakkige lahti kausta \raamatukogud\, mis asub Arduino IDE kataloogis.

Teek toetab LCD-ekraanide standardfunktsioonide komplekti:

FunktsioonEesmärk
Vedelkristall() loob LiquidCrystal tüüpi muutuja ja võtab vastu kuvaühenduse parameetrid (pin-numbrid);
alusta () LCD-ekraani lähtestamine, parameetrite seadistamine (ridade ja märkide arv);
selge () ekraani tühjendamine ja kursori viimine algasendisse;
Kodu() vii kursor algasendisse;
setCursor() kursori seadmine etteantud asukohta;
kirjuta () kuvab sümboli LCD-ekraanil;
print() kuvab teksti LCD-ekraanil;
kursor() näitab kursorit, st. allakriipsutamine järgmise tähemärgi koha alla;
noCursor() peidab kursori;
vilkuma () kursori vilkumine;
noBlink() Tühista vilkumine;
noDisplay() ekraani väljalülitamine kogu kuvatava teabe salvestamise ajal;
kuva () ekraani sisselülitamine kogu kuvatava teabe salvestamise ajal;
scrollDisplayLeft() kerige ekraani sisu 1 asendi võrra vasakule;
scrollDisplayRight() kerige ekraani sisu 1 asendi võrra paremale;
automaatne kerimine() lubage automaatne kerimine;
noAutoscroll() automaatse kerimise keelamine;
vasakult paremale() määrab teksti suuna vasakult paremale;
paremalt vasakule() teksti suund paremalt vasakule;
looChar() loob LCD-ekraanile kohandatud märgi.

4 Sketš teksti väljastamiseks LCD-ekraanile I2C siini kaudu

Avame näidise: Faili näidised LiquidCrystal_I2C CustomChars ja muudame seda veidi. Kuvame teate, mille lõpus on vilkuv sümbol. Koodi kommentaarid kommenteerivad kõiki visandi nüansse.

#kaasa // sisaldab Wire teeki #include // LCD teegi ühendamine #define printByte(args) write(args); // uint8_t süda = (0x0,0xa,0x1f,0x1f,0xe,0x4,0x0); // sümboli “süda” bitimask LiquidCrystal_I2C lcd(0x27, 16, 2); // Määrake 16x2 LCD-ekraanile aadress 0x27 void setup() ( lcd.init(); // LCD-ekraani lähtestamine lcd.backlight(); // lülita sisse ekraani taustvalgustus lcd.createChar(3, heart); // loome 3. mälulahtrisse “südame” sümboli lcd.home(); // asetage kursor vasakusse ülanurka, positsioonile (0,0) lcd.!"); // prindib tekstirea lcd.setCursor(0, 1); // liigutage kursor 2. reale, märk 1 lcd.print( " i "); // prindib sõnumi real 2 lcd.printByte(3); // prindib sümboli "süda", mis asub 3. lahtris lcd.print(" Arduino "); } void loop() (// viimase märgi vilkumine lcd.setCursor(13, 1); // kursori viimine reale 2, märk 1 lcd.print("\t"); viivitus(500); lcd.setCursor(13, 1); // kursori viimine reale 2, märk 1 lcd.print(" "); viivitus(500); }

Muide, käsuga kirjutatud märgid lcd.createChar();, jäävad kuvari mällu ka pärast toite väljalülitamist, sest kirjutatud ROM 1602 kuvamiseks.

5 Looge oma sümbolid LCD-ekraani jaoks

Vaatame lähemalt LCD-ekraanide jaoks oma sümbolite loomise küsimust. Iga märk ekraanil koosneb 35 punktist: 5 laiust ja 7 kõrget (+1 varujoon allajoonimiseks). Ülaltoodud visandi 6. real määratleme 7 numbri massiivi: (0x0, 0xa, 0x1f, 0x1f, 0xe, 0x4, 0x0). Teisenda kuueteistkümnendarvud kahendarvuks: {00000, 01010, 11111, 11111, 01110, 00100, 00000} . Need numbrid pole midagi muud kui sümboli iga seitsme rea bitimaskid, kus "0" tähistab heledat punkti ja "1" tumedat punkti. Näiteks ilmub ekraanile bitmaskina määratud südamesümbol, nagu on näidatud joonisel.

6 LCD ekraani juhtimine I2C bussi kaudu

Laadime visandi Arduinosse üles. Ekraanile ilmub silt, mille määrasime vilkuva kursoriga lõpus.


7 Mis on taga I2C buss

Boonusena vaatame ajaskeemi ladina tähtede "A", "B" ja "C" LCD-ekraanil kuvamiseks. Need märgid salvestatakse kuvari ROM-i ja kuvatakse ekraanil lihtsalt nende aadresside kuvarile edastamisega. Diagramm on võetud kuvari RS, RW, E, D4, D5, D6 ja D7 tihvtidelt, st. juba pärast FC-113 “I2C paralleelsiini” muundurit. Võib öelda, et sukeldume riistvarasse veidi sügavamale.


Ladina tähtede “A”, “B” ja “C” väljundi ajastusskeem LCD-ekraanil 1602

Diagrammil on näha, et kuvari ROM-is olevad märgid (vt andmelehe lk 11, link allpool) edastatakse kahes niblis, millest esimene määrab tabeli veeru numbri ja teine ​​- rea number. Sel juhul lukustatakse andmed liinil oleva signaali servas E(Luba) ja rida R.S.(Register select) on loogilises olekus, mis tähendab, et andmeid edastatakse. Madal olek RS-real tähendab juhiste saatmist, mida näeme enne iga märgi edastamist. Sel juhul edastatakse vedelkristallekraani positsioonile (0, 0) tagasipöördumise juhiskood, mille saab teada ka kuvari tehnilist kirjeldust uurides.

Ja veel üks näide. See ajastusskeem näitab südame sümboli väljundit LCD-ekraanil.


Jälle kaks esimest impulssi Luba järgida juhiseid Kodu()(0000 0010 2) - viige kelk tagasi asendisse (0; 0) ja kaks teist - sisestage mälulahtrisse 3 salvestatud LCD-ekraanile 10 (0000 0011 2) sümbol "Süda" (juhis lcd.createChar(3, süda); eskiis).