Veza sa LSD ekranom. Obuka

Svaki radio-amater nakon određenog broja jednostavnih domaćih projekata dolazi do cilja da pomoću senzora i tipki konstruira nešto grandiozno. Na kraju krajeva, mnogo je zanimljivije prikazati podatke na displeju, a ne na monitoru porta. Ali onda se postavlja pitanje: koji ekran odabrati? I općenito, kako ga povezati, šta je potrebno za povezivanje? Odgovori na ova pitanja bit će razmatrani u ovom članku.

LCD 1602

Među brojnim opcijama prikaza, posebno bih izdvojio LCD1602 displej baziran na HD4478 kontroleru. Ovaj ekran je dostupan u dvije boje: bijela slova na plavoj pozadini, crna slova na žutoj pozadini. Povezivanje LCD 1602 na Arduino također neće uzrokovati probleme, jer postoji ugrađena biblioteka i nema potrebe za preuzimanjem bilo čega dodatnog. Displeji se razlikuju ne samo po cijeni, već i po veličini. Radio amateri često koriste 16 x 2, odnosno 2 reda od 16 znakova. Ali postoji i 20 x 4, gdje postoje 4 reda od 20 znakova. Dimenzije i boja ne igraju nikakvu ulogu u povezivanju lcd 1602 displeja na Arduno, oni su povezani na isti način. Ugao gledanja je 35 stepeni, vreme odziva ekrana je 250 ms. Može raditi na temperaturama od -20 do 70 stepeni Celzijusa. Tokom rada koristi 4 mA za ekran i 120 mA za pozadinsko osvetljenje.

Gdje se koristi?

Ovaj zaslon je popularan ne samo među radio amaterima, već i među velikim proizvođačima. Na primjer, štampači i aparati za kafu također koriste LCD1602. To je zbog niske cijene; ​​ovaj ekran košta 200-300 rubalja na kineskim stranicama. Vrijedi ga kupiti tamo, jer su u našim trgovinama cijene za ovaj displej vrlo visoke.

Povezivanje na Arduino

Povezivanje LCD 1602 na Arduino Nano i Uno se ne razlikuje. Sa ekranom možete raditi u dva načina: 4 bita i 8. Kod rada sa 8-bitnim koriste se i bitovi nižeg i visokog reda, a sa 4-bitnim samo oni nižeg reda. Nema posebne svrhe raditi sa 8-bitnim, jer će dodati još 4 kontakta za povezivanje, što nije preporučljivo, jer brzina neće biti veća, ograničenje za ažuriranje ekrana je 10 puta u sekundi. Općenito, za povezivanje lcd 1602 na Arduino koristi se puno žica, što uzrokuje neke neugodnosti, ali postoje posebni štitovi, ali o tome kasnije. Fotografija prikazuje povezivanje displeja sa Arduino Uno:

Primjer koda:

#include // Dodajte potrebnu LiquidCrystal biblioteku lcd(7, 6, 5, 4, 3, 2); // (RS, E, DB4, DB5, DB6, DB7) void setup())( lcd.begin(16, 2); // Postavi veličinu ekrana lcd.setCursor(0, 0); // Postavi kursor na početak 1 reda lcd.print("Zdravo, svijet!"); // Iznesite tekst lcd.setCursor(0, 1); // Postavite kursor na početak reda 2 lcd.print("site") ; // Izlaz teksta ) void loop ()( )

Šta radi kod? Prvi korak je povezivanje biblioteke za rad sa ekranom. Kao što je gore spomenuto, ova biblioteka je već uključena u Arduino IDE i ne mora se dodatno preuzimati i instalirati. Zatim se određuju kontakti koji su spojeni na pinove: RS, E, DB4, DB5, DB6, DB7, redom. Zatim je podešena veličina ekrana. Pošto radimo sa verzijom sa 16 znakova i 2 reda, pišemo sljedeće vrijednosti. Postavljamo kursor na početak prvog reda i prikazujemo naš prvi tekst Hello World. Zatim postavite kursor na drugi red i prikažite naziv stranice. To je sve! Razmatrano je povezivanje LCD 1602 na Arduino Uno.

Šta je I2C i zašto je potreban?

Kao što je gore spomenuto, povezivanje ekrana zauzima puno kontakata. Na primjer, kada radite s više senzora i LCD zaslonom, 1602 pina jednostavno neće biti dovoljne. Radio amateri često koriste Uno ili Nano verzije, koje nemaju mnogo kontakata. Tada su ljudi smislili posebne štitove. Na primjer, I2C. Omogućava vam da povežete ekran sa samo 4 pina. Ovo je duplo više. I2C modul se prodaje odvojeno, gdje ga trebate sami zalemiti, i već je zalemljen na LCD 1602 displej.

Povezivanje pomoću I2C modula

Povezivanje LCD 1602 sa Arduino Nano sa I2C zauzima malo prostora, samo 4 pina: uzemljenje, napajanje i 2 izlaza podataka. Povezujemo napajanje i uzemljenje na 5V i GND na Arduinu, respektivno. Preostala dva kontakta: SCL i SDA povezujemo na bilo koje analogne pinove. Na fotografiji možete vidjeti primjer povezivanja lcd 1602 na arduino sa I2C modulom:

Programski kod

Ako je za rad sa ekranom bez modula bilo potrebno koristiti samo jednu biblioteku, onda su za rad sa modulom potrebne dvije biblioteke. Jedan od njih je već uključen u Arduino IDE - Wire. Druga biblioteka, LiquidCrystal I2C, mora se posebno preuzeti i instalirati. Da biste instalirali biblioteku u Arduino, sadržaj preuzete arhive mora biti učitan u korijenski direktorij Libraries. Primjer programskog koda koji koristi I2C:

#include #include LiquidCrystal_I2C lcd(0x27,16,2); // Postavite void setup() ( lcd.init(); lcd.backlight(); // Uključite pozadinsko osvjetljenje ekrana lcd..setCursor(8, 1); lcd.print("LCD 1602"); ) void loop( ) ( // Postavite kursor na drugi red i nulti znak. lcd.setCursor(0, 1); // Prikazuje broj sekundi od pokretanja Arduina lcd.print(millis()/1000); )

Kao što vidite, kod je skoro isti.

Kako dodati vlastiti simbol?

Problem kod ovih displeja je što ne postoji podrška za ćirilično pismo i simbole. Na primjer, trebate učitati neki simbol u ekran tako da ga može odražavati. Da biste to učinili, zaslon vam omogućava da kreirate do 7 vlastitih simbola. Zamislite sto:

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

Ako je 0 - tu nema ničega, ako je 1 - ovo je obojeno područje. U gornjem primjeru možete vidjeti kreiranje simbola "nasmiješenog smajlija". Koristeći primjer programa u Arduinu to bi izgledalo ovako:

#include #include // Dodajte potrebnu biblioteku // Bit maska ​​bajta simbola osmijeha smile = ( 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); // Postavi veličinu ekrana lcd.createChar(1, osmijeh); // Kreiraj broj karaktera 1 lcd.setCursor(0, 0); // Postavite kursor na početak reda 1 lcd.print("\1"); // Prikaži smajli (znak broj 1) - "\1" ) praznina petlja ())( )

Kao što vidite, bitmask je kreiran isto kao i tabela. Jednom kreiran, može se prikazati kao varijabla na ekranu. Zapamtite da u memoriju možete pohraniti samo 7 znakova. U principu, ovo je dovoljno. Na primjer, ako trebate prikazati simbol stepena.

Problemi u kojima ekran možda neće raditi

Postoje slučajevi kada ekran ne radi. Na primjer, uključuje se, ali ne prikazuje znakove. Ili se uopšte ne uključuje. Prvo provjerite da li ste ispravno spojili pinove. Ako ste koristili LCD 1202 vezu s Arduinom bez I2C, vrlo je lako zapetljati se u žice, što može uzrokovati da zaslon ne radi ispravno. Takođe treba da vodite računa o povećanju kontrasta ekrana, jer se sa minimalnim kontrastom ne vidi ni da li je LCD 1602 uključen ili ne. Ako to ne pomogne, onda možda problem leži u lemljenju kontakata, to je kada se koristi I2C modul. Još jedan uobičajeni razlog zašto ekran možda ne radi je netačna postavka I2C adrese. Činjenica je da postoji mnogo proizvođača, i oni mogu staviti drugu adresu, morate to ispraviti ovdje:

LiquidCrystal_I2C lcd(0x27,16,2);

U zagradama možete vidjeti dvije vrijednosti, 0x27 i 16.2 (16.2 je veličina ekrana, a 0x27 je I2C adresa). Umjesto ovih vrijednosti, možete pokušati postaviti 0x37 ili 0x3F. Pa, drugi razlog je jednostavno neispravan LCD 1602. S obzirom da je gotovo sve za Arduino proizvedeno u Kini, ne možete biti 100% sigurni da kupljeni proizvod nije neispravan.

Prednosti i mane LCD 1602

Pogledajmo prednosti i nedostatke LCD 1602 ekrana.

  • Cijena. Ovaj modul se može kupiti po vrlo pristupačnoj cijeni u kineskim trgovinama. Cijena je 200-300 rubalja. Ponekad se čak prodaje zajedno sa I2C modulom.
  • Jednostavan za povezivanje. Vjerovatno ovih dana niko ne povezuje LCD 1602 bez I2C. A sa ovim modulom, veza traje samo 4 kontakta, neće biti "mreža" žica.
  • Programiranje. Zahvaljujući gotovim bibliotekama, rad sa ovim modulom je lak, sve funkcije su već napisane. A ako trebate dodati vlastiti simbol, potrebno je samo nekoliko minuta.
  • Tokom njegove upotrebe od strane hiljada radio-amatera, nisu uočeni veći nedostaci, samo postoje slučajevi neispravne kupovine, jer se uglavnom koriste kineske verzije displeja.

Ovaj članak se bavio povezivanjem 1602 sa Arduinom, a takođe je dao primere programa za rad sa ovim ekranom. Zaista je jedan od najboljih u svojoj kategoriji; nije slučajno da ga hiljade radio amatera biraju za svoje projekte!

LCD displeji od 1602 dimenzije, bazirani na HD44780 kontroleru, jedan su od najjednostavnijih, najpristupačnijih i najpopularnijih displeja za razvoj raznih elektronskih uređaja. Može se naći kako u uređajima sastavljenim na koljenu, tako i u industrijskim uređajima, kao što su, na primjer, aparati za kavu. Najpopularniji moduli i štitovi sa Arduino temom kao što su i skupljaju se na osnovu ovog displeja.

U ovom članku ćemo vam reći kako ga spojiti na Arduino i prikazati informacije.

Korišćene komponente (kupite u Kini):

. Kontrolna ploča

. Spojne žice

Ovi displeji imaju dva dizajna: žuto pozadinsko osvetljenje sa crnim slovima ili, što je češće, plavo pozadinsko osvetljenje sa belim slovima.

Veličina displeja na kontroleru HD44780 može biti različita, ali će se njima upravljati na isti način. Najčešće dimenzije su 16x02 (tj. 16 znakova u dva reda) ili 20x04. Rezolucija samih simbola je 5x8 piksela.

Većina displeja ne podržava ćirilično pismo, imaju ga samo displeji označeni CTK. Ali možemo pokušati djelomično riješiti ovaj problem (nastavak u članku).

Prikaz izlazi:

Ekran ima 16-pinski konektor za povezivanje. Pinovi su označeni na poleđini ploče.

1 (VSS) - Napajanje kontrolera (-)
2 (VDD) - Napajanje kontrolera (+)
3 (VO) - pin za kontrolu kontrasta
4 (RS) - Odabir registra
5 (R/W) - Read/Write (režim pisanja kada je spojen na uzemljenje)
6 (E) - Omogući (strob pri padu)
7-10 (DB0-DB3) - Bitovi nižeg reda 8-bitnog sučelja
11-14 (DB4-DB7) - Bitovi višeg reda sučelja
15 (A) - Anodno (+) napajanje pozadinskog osvetljenja
16 (K) - Katodno (-) napajanje pozadinskog osvjetljenja

Način samotestiranja:

Prije pokušaja povezivanja i prikaza informacija, bilo bi dobro provjeriti radi li zaslon ili ne. Da biste to učinili, morate primijeniti napon na sam kontroler ( VSS i VDD), uključite pozadinsko osvjetljenje ( A i K), a također podesite kontrast.

Za podešavanje kontrasta koristite potenciometar od 10 kOhm. Nije bitno kakvog će oblika biti. +5V i GND se napajaju na vanjske noge, centralna noga je spojena na izlaz V.O.

Nakon uključivanja napajanja na kolo, potrebno je postići ispravan kontrast; ako nije ispravno postavljen, ništa se neće prikazati na ekranu. Za podešavanje kontrasta, igrajte se potenciometrom.

Ako je kolo pravilno sastavljeno i kontrast je pravilno podešen, gornju liniju treba popuniti pravokutnicima na ekranu.

Izlaz informacija:

LiquidCrystal.h biblioteka ugrađena u Arduino IDE koristi se za upravljanje ekranom.

Funkcionalnost biblioteke

//Rad sa kursorom lcd.setCursor(0, 0); // Postavite kursor (broj ćelije, red) lcd.home(); // Postavite kursor na nulu (0, 0) lcd.cursor(); // Omogući vidljivost kursora (podvučeno) lcd.noCursor(); // Ukloni vidljivost kursora (podvučeno) lcd.blink(); // Omogući treptanje kursora (kursor 5x8) lcd.noBlink(); // Isključi treptanje kursora (kursor 5x8) //Izlaz informacija lcd.print("stranica"); // Informacijski izlaz lcd.clear(); // Obrišite ekran, (izbrišite sve podatke) postavite kursor na nulu lcd.rightToLeft(); // Snimanje se vrši s desna na lijevo lcd.leftToRight(); // Pisanje se vrši s lijeva na desno lcd.scrollDisplayRight(); // Pomaknite sve na ekranu za jedan znak udesno lcd.scrollDisplayLeft(); // Pomaknite sve na ekranu za jedan znak ulijevo //Informacije korisne za špijune :) lcd.noDisplay(); // Informacije na ekranu postaju nevidljive, podaci se ne brišu // ako, u trenutku kada je ova funkcija aktivna, ništa nije prikazano, onda lcd.display(); // Prilikom pozivanja funkcije display(), sve informacije koje su bile

Sam ekran može raditi u dva načina:

8-bitni način rada - i niski i visoki bitovi se koriste za ovo (BB0-DB7)

4-bitni način rada - za ovo se koriste samo najmanji bitovi (BB4-DB7)

Korišćenje 8-bitnog režima na ovom ekranu nije preporučljivo. Za njegov rad potrebne su još 4 noge, a dobitak u brzini praktički nema jer Brzina osvježavanja ovog ekrana je ograničena< 10раз в секунду.

Za izlaz teksta potrebno je spojiti pinove RS, E, DB4, DB5, DB6, DB7 na pinove kontrolera. Mogu se spojiti na bilo koje Arduino pinove, glavna stvar je postaviti ispravan slijed u kodu.

Primjer koda:

#include LiquidCrystal lcd(7, 6, 5, 4, 3, 2); void postaviti()(lcd.begin(16, 2); // Postavite veličinu ekrana lcd.setCursor(0, 0); lcd.print("Zdravo, svijet!"); // Prikaz teksta lcd.setCursor (0, 1); // Postavite kursor na početak reda 2 lcd.print("stranica"); // Izlazni tekst ) void petlja (){ }

Kreirajte vlastite simbole

Sredili smo izlaz teksta, slova engleske abecede su ugrađena u memoriju kontrolera unutar displeja i sa njima nema problema. Ali što učiniti ako se traženi simbol ne nalazi u memoriji kontrolera?

Nema problema, traženi simbol se može kreirati ručno (ukupno do 7 simbola). Ćelija u displejima koje razmatramo ima rezoluciju 5x8 piksela. Sve na šta se svodi zadatak kreiranja simbola je ispisivanje bitne maske i postavljanje jedinica u nju na mjestima gdje bi tačke trebale biti upaljene, a nule gdje ne bi trebale.

U primjeru ispod nacrtat ćemo smajli.

Primjer koda

//Testirano na Arduino IDE 1.0.5#include #include // Dodaj potrebnu biblioteku // Bitmaska ​​simbola osmijeha bajt osmijeh = ( B00010, B00001, B11001, B00001, B11001, B00001, B00010, ); LiquidCrystal lcd(7, 6, 5, 4, 3, 2); // (RS, E, DB4, DB5, DB6, DB7) void postaviti()(lcd.begin(16, 2); // Postavite veličinu ekrana lcd.createChar(1, osmijeh); // Kreirajte simbol broj 1 lcd.setCursor(0, 0); // Postavite kursor na početak 1 reda lcd.print("\1"); // Prikaži smajlića (znak broj 1) - "\1") void petlja (){ }

Bonus

U komentarima, član zajednice je poslao link ka generatoru simbola

  • igorka

      generator karaktera kao gore,
      Uradio sam to jer nisam bio slab)

Ovog puta želim da vam kažem kako da povežete ekran sa mobilnog telefona Nokia 1202 na Atmega8 mikrokontroler. Programiramo u CodeVision okruženju. Tu i tamo mogu pogriješiti. Nije prošlo mnogo vremena pre nego što sam shvatio šta je šta. Nemam iskustva u programiranju i nisam pisao biblioteku za rad sa ekranom. Oni su kopirani sa jednog projekta na internetu. Tu su ispisane sve potrebne funkcije i font 5*8 latiničnim slovima i ćirilicom. Tu je i nekoliko znakova 12*16 i 24*32 koje je autor biblioteka koristio u svom uređaju. Ako ih uklonite, tada će font veličine 5*8 zauzeti oko 700 bajtova flash memorije mikrokontrolera. Dakle, mikrokontroler za projekat se mora uzeti „masniji“, u mom slučaju sam koristio Atmega8. Sasvim dovoljno. Svi fajlovi - izvori, biblioteka, itd., .

Dijagram povezivanja indikatora

Šematski dijagram povezivanja LCD ekrana na MK

Nacrtao sam dijagram povezivanja. Za napajanje displeja potreban vam je napon od 3,3V. Ako napajate mikrokontroler od 5V, onda instalirajte otporničke razdjelnike i mikrokolo 78L33. Ako se cijeli krug napaja od 3,3V, otpornički razdjelnici nisu potrebni. Čini se da Atmega8A može raditi od 3.3V pod uslovom da frekvencija nije veća od 8 MHz. Lično, nisam probao. Sve sam sastavio na ploči za otklanjanje grešaka napajanom od 5V. Ni u kom slučaju ne biste trebali stavljati elektrolit velikog kapaciteta ispred samog ekrana. Na samom početku rada, kontroler šalje komande za inicijalizaciju displeju. Potrebno je vrijeme da se kondenzator napuni. Dok se puni i ekran počne da radi, proći će neko vreme i neće dobiti komandu za inicijalizaciju. Naravno, radi se o milisekundama, ali u ovom slučaju je učinak primjetan.


Prikaži pinout dijagram

Nokia 1202 ekran ima 9-bitni SPI interfejs. Mikrokontroler koji smo odabrali nema ovaj luksuz. Stoga, za komunikaciju sa ekranom, ne koristimo hardverski, već softverski SPI, da tako kažem, "bez pameti". Neću vam reći kako da kreirate nove projekte u CodeVision-u - razmislite sami. Reći ću samo da svi PORTB pinovi moraju biti konfigurisani kao izlaz. U postavkama projekta morate staviti kvačicu na " Čuvajte globalne konstante u FLASH memoriji" Ova radnja je neophodna kako bi se nizovi fontova i naše slike pohranili u flash.


Dakle, kreirali smo projekat. Izabrali smo mikrokontroler, postavili frekvenciju sata i konfigurisali projekat. Šta je sledeće? Zatim morate dodati biblioteke za rad sa bibliotekama za prikaz i kašnjenje. Raspakujte arhivu. Tamo su dva fajla. Treba ih kopirati u određene foldere. Nadam se da ste instalirali CodeVision direktno na C:\ disk. Ako da, kopirajte datoteke na odgovarajuće staze:

C:\cvavreval\inc za datoteku 1100.inc, i
C:\cvavreval\lib za datoteku 1100.h .


Također želim reći da se dodjela pinova mikrokontrolera može promijeniti u datoteci 1100.h. Tada će se dijagram povezivanja promijeniti. Počnimo s kodiranjem. Samo da prikažemo neki natpis na ekranu u glavnom fontu 5*8. Na samom početku ćemo dodati biblioteke.

#include< 1100.h>// prikaz biblioteke
#include // biblioteka odgode

Na samom dnu, prije glavne while(1)() petlje, inicijaliziramo ekran i brišemo ga.

lcd_init(); // inicijalizacija prikaza
lcd_clear(); // brisanje ekrana

Naš natpis ćemo staviti i ispred glavnog ciklusa. Neka kontroler prvo prikaže poruku na displeju, a zatim se okreće u glavnoj petlji. Pišemo ovo:

print_string("Izlaz natpisa",5,0);
print_string("Šta god želimo",0,1);
print_string("BUCKER",10,2);

Mislim da je tu sve jasno. Prva cifra je x-koordinata na displeju. Može uzeti vrijednost od 0 do 96. Drugi je niz. Od 0 do 7. U principu, tu stane 8 i po redova, ali pola reda nećemo čitati. Sastavljamo i flešujemo. Pogledajmo rezultat. Također možete instalirati Proteus i testirati ga. Kontroler se može konfigurirati da radi od internog generatora na frekvenciji specificiranoj u projektu s kašnjenjem početka od 64 ms. Dodajem arhivu sa sastavljenim projektom. Frekvencija 8 MHz.


Ali kao što sam već napisao na početku, u biblioteci postoje i drugi simboli. Istina, nema slova, samo brojke. Sada da malo zakomplikujemo zadatak. Neka natpis ne bude inertan, već se mijenja. Recimo da broji od 0 do 9 sa intervalom od 1 sekunde. Kada dostigne 9, vratit će se na nulu i ponovo početi. Uzmimo velike brojeve veličine 24*32. Pa, hajde da počnemo. Možete uzeti prethodni projekat i izbrisati tri "print_string" linije. Odmah nakon dodavanja biblioteka, deklarirajmo određenu globalnu varijablu m.

char m = 0;

Možete jednostavno napisati:

U ovom slučaju, automatski će mu biti dodijeljena vrijednost 0. U glavnoj petlji pišemo ovo:

char_24_32(m,35,2); // funkcija izlaza simbola 24*32
kašnjenje_ms(1000); // sačekajte 1 sekundu
m++; // dodaj 1 varijablu m
if(m>9)m=0; // Stanje. Ako je varijabla m veća od 9, tada je m jednako 0.

Napravio sam kratak video o radu programa

Pokušat ću vam reći kako nacrtati slike i prikazati ih na ekranu. Kako kreirati nizove i funkcije za njihov izlaz i kako invertirati sliku. Biblioteke su posuđene sa stranice cxem.net. Materijal pripremljen Boozer.

Razgovarajte o članku POVEZIVANJE EKRANA NA MIKROCONTROLER

Šta je sastavni dio velikog broja elektronskih uređaja? Naravno, sredstva indikacije i grafički izlaz podataka. Za korisnika je uvijek zgodnije i ugodnije kada se rezultat “pametne kutije” može vizualno vidjeti. Stoga ćemo danas povezati ekran na STM32 za prikaz teksta i brojeva. Junak naših eksperimenata bit će prilično popularan zaslon iz Winstara. Inače, u komentarima se pojavilo važno pojašnjenje da je metodologija u osnovi ista za sve prikaze zasnovane na HD44780. Hvala JekaKey-u na važnom dodatku)

Prvo, ekran mora biti spojen na kontroler. Preuzmite podatkovni list i potražite pinout WH1602. Pogledati ovdje:

Kao sto znas, displej WH1602 ima 16 pinova. Pogledajmo svaki posebno...

Pinovi Vss, Vdd i K moraju biti spojeni na uzemljenje i na napajanje, odnosno tačno kako je naznačeno u tabeli, nema iznenađenja niti se o čemu raspravlja)

Pin broj 3 koristi se za podešavanje kontrasta - ako tamo stavimo +5V, nećemo vidjeti apsolutno ništa, a ako kratko spojimo pin na masu, divit ćemo se dva reda crnih kvadrata 😉 Naravno, ovo nam ne odgovara , tako da tu trebamo okačiti potenciometar (otpornik) sa promjenjivim otporom) za podešavanje kontrasta. Najbolju vidljivost karaktera obezbeđuje napon od 0,5-0,7 V na ovom displeju.

RS pin je već pin kojim ćemo sami upravljati pomoću mikrokontrolera. Nizak nivo napona (0) na ovom pinu znači da će sada uslediti komanda, a visoki nivo (1) znači da će sada biti podataka koji će biti upisani u memoriju ekrana.

Pin R/W - ovdje je jasno, ili čitamo podatke (prikaz zastavice zauzetosti, na primjer), u ovom slučaju na ovom pinu je 1, ili upisujemo naredbu/podatke na displej, onda imamo 0 ovdje.

DB7 – DB0 – sabirnica podataka, i to govori sve)

Pin E je takozvani Enable signal. To je ono za šta je on potreban. Da bismo radili sa ekranom - snimili podatke ili izdali naredbu - moramo dati pozitivan impuls ovom pinu. Odnosno, procedura će izgledati ovako:

  1. Na pinovima RS, R/W, DB7 - DB0 - potrebni signali koji odgovaraju našoj komandi.
  2. Isporučujemo jedan na pin E.
  3. Zhdems (prema podacima - najmanje 150 ns)
  4. Primjenjujemo niski nivo (0) na pin E.

Morate staviti 4,2 V na A/Vee nogu da napajate pozadinsko osvjetljenje ekrana.

Ovako dolazi do komunikacije sa ekranom WH1602.

Shvatili smo kako povezati WH1602, ali prije nego što pređemo na primjer, pogledajmo koje naredbe naš zaslon općenito razumije. Da bismo to učinili, idemo u tablicu i pronalazimo zanimljivu tabelu:

Ovdje su opisane sve komande i signali koji bi trebali biti na odgovarajućim pinovima WH1602 za svaku specifičnu naredbu. Na primjer, želimo da obrišemo ekran, pogledamo tabelu i evo naredbe koja nam treba! Clear Display!

Primjenjujemo nule na pinove RS, R/W, DB7, DB6, DB5, DB4, DB3, DB2, DB1 i jedan na pin DB0. Gotovo! Šta je sljedeće? Tako je, jedan na pinu E, zatim pričekajte neko vrijeme i ponovo spustite E na nulu. To je to, ekran je obrisan 😉 Neposredno prije izvršavanja sljedeće naredbe morate pauzirati, naznačeno u datasheet-u za svaku komandu. Bilo bi efikasnije ispitati oznaku zauzetosti; čim se vrati na 0, možete nastaviti s radom. Postoji i posebna komanda za čitanje ove zastave, pa je sa ovim sve jasno) Idemo dalje...

A, zapravo, sve je sa teorijom, već možete pokušati nešto napisati. Da bih olakšao rad sa ekranom, napravio sam malu biblioteku, da vidimo kako se može koristiti. Prvo preuzmite

Na raspolaganju su nam 2 fajla, MT_WH1602.c i MT_WH1602.h. Otkinemo drugu, ovdje trebamo odabrati pinove i kontroler koji se koristi.

Inače, moj displej je povezan ovako:

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

Otvorite datoteku MT_WH1602.h:

#define PLATFORMA (STM32F10x)

Zatim odaberite pinove mikrokontrolera na koje je povezan ekran. Samo prvo podesimo koje portove koristimo. Kada se povežem, koristim GPIOA, GPIOB, GPIOC i GPIOD, pišemo:

Slično za druge noge mikrokontrolera.

Završili smo sa podešavanjem, idemo dalje) Za pozivanje komandi datih na početku članka, datoteka MT_WH1602.c sadrži sljedeće funkcije (nazvane su prema nazivima naredbi, tako da mislim da je sve jasno) :

void MT_WH1602_ClearDisplay(void) ; void MT_WH1602_Povratak kući(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 adresa) ; void MT_WH1602_SetDDRAMAddress (uint8_t adresa) ; bool MT_WH1602_ReadBusy(void) ; void MT_WH1602_WriteData(uint8_t data) ;

Za neke naredbe moramo proći parametre funkciji, na primjer:

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

Pogledajmo tabelu komandi:

Vidimo da komanda Display ON/OFF ne samo da uključuje/isključuje ekran, već i aktivira/deaktivira kursor i treptanje kursora. U tablici sa podacima, ovi komandni bitovi su označeni kao D, C i B, a mi ih prosljeđujemo kao parametre funkciji. Ako trebamo uključiti ekran i kursor, ali onemogućiti treptanje kursora, pozivamo naredbu na sljedeći način:

MT_WH1602_DisplayOnOff(1, 1, 0);

Generalno, sve je jednostavno 😉

Ukratko, kreiramo novi projekat, dodajemo biblioteku za rad sa WH1602 displejom, kreiramo prazan .c fajl i počinjemo da ga popunjavamo kodom:

// Uključuje datoteku biblioteke#include "MT_WH1602.h" /*******************************************************************/ int main(void) ( // Pozovite funkciju inicijalizacije, ne možemo bez nje =)() ; // Sada moramo napraviti početnu konfiguraciju prikaza // Dokumentacija i internet preporučuju da to učinite ;) 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 primjer, uzeo sam prve vrijednosti kašnjenja koje su mi pale na pamet) // Općenito, trebate provjeriti oznaku zauzetosti zaslona // Hajdemo sada prikazati nešto, kao što je naziv naše stranice 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) ; dok (1 ) ( __NOP() ; ) ) /*******************************************************************/

Gotovo, provjerimo)


Kao što vidite, sve radi kako treba)

Inače, nekako sam izgubio iz vida pitanje šta napisati na displeju da bi se prikazao ovaj ili onaj lik. Evo tablice sa datasheet-a:

Dakle, da biste odredili koju vrijednost da upišete u memoriju zaslona, ​​trebate uzeti brojeve napisane na vrhu i lijevo u ovoj tabeli za određeni simbol. Na primjer, simbol "A". Da vidimo - ovaj simbol odgovara koloni 0100 (0x4) i redu 0001 (0x1). Ispostavilo se da za prikaz simbola "A" morate upisati vrijednost 0x41 na ekran.

To je to sada =) Sredili smo vezu i rad WH1602 displeja, pa se vidimo uskoro!

P.S. Prilikom rada s bibliotekom nisam testirao funkciju čitanja zastave zauzetosti, pa ako odjednom nešto ne radi kako bi trebalo, napišite, shvatit ćemo)

  • FC-113 modul je baziran na PCF8574T čipu, koji je 8-bitni pomakni registar - ulazno-izlazni “proširivač” za I2C serijsku magistralu. Na slici je mikrokolo označeno kao DD1.
  • R1 je trim otpornik za podešavanje kontrasta LCD ekrana.
  • Jumper J1 se koristi za uključivanje pozadinskog osvjetljenja ekrana.
  • Pinovi 1…16 se koriste za povezivanje modula na pinove LCD ekrana.
  • Kontaktne ploče A1...A3 su potrebne za promjenu I2C adrese uređaja. Lemljenjem odgovarajućih kratkospojnika možete promijeniti adresu uređaja. Tabela prikazuje korespondenciju adresa i kratkospojnika: “0” odgovara otvorenom krugu, “1” instaliranom kratkospojniku. Podrazumevano, sva 3 kratkospojnika su otvorena i adresa uređaja 0x27.

2 Dijagram povezivanja LCD ekrana na Arduino preko I2C protokola

Modul je povezan na Arduino na standardni način za I2C sabirnicu: SDA pin modula je povezan na analogni port A4, pin SCL je povezan na analogni port A5 Arduina. Modul se napaja sa +5 V iz Arduina. Sam modul je povezan pinovima 1…16 sa odgovarajućim pinovima 1…16 na LCD ekranu.


3 Biblioteka za posao preko I2C protokola

Sada nam je potrebna biblioteka za rad sa LCD-om preko I2C interfejsa. Možete koristiti, na primjer, ovaj (link u retku "Preuzmi uzorak koda i biblioteke").

Preuzeta arhiva LiquidCrystal_I2Cv1-1.rar raspakujte u fasciklu \biblioteke\, koji se nalazi u Arduino IDE direktoriju.

Biblioteka podržava skup standardnih funkcija za LCD ekrane:

FunkcijaSvrha
LiquidCrystal() kreira varijablu tipa LiquidCrystal i prihvata parametre veze prikaza (brojeve pinova);
početi() inicijalizacija LCD displeja, podešavanje parametara (broj redova i karaktera);
clear() brisanje ekrana i vraćanje kursora na početnu poziciju;
Dom() vratite kursor na početnu poziciju;
setCursor() postavljanje kursora na datu poziciju;
pisati() prikazuje simbol na LCD ekranu;
print() prikazuje tekst na LCD ekranu;
kursor() pokazuje kursor, tj. podvlačenje ispod mesta sledećeg znaka;
noCursor() sakriva kursor;
blink() treperi kursor;
noBlink() Otkaži treptanje;
noDisplay() isključivanje ekrana uz čuvanje svih prikazanih informacija;
display() uključivanje ekrana uz pohranjivanje svih prikazanih informacija;
scrollDisplayLeft() skrolujte sadržaj ekrana 1 poziciju ulevo;
scrollDisplayRight() skrolujte sadržaj ekrana 1 poziciju udesno;
autoscroll() omogući automatsko pomicanje;
noAutoscroll() onemogući automatsko pomicanje;
lijevo-desno() postavlja smjer teksta s lijeva na desno;
desno nalijevo() smjer teksta s desna na lijevo;
createChar() kreira prilagođeni karakter za LCD ekran.

4 Skica za izlaz teksta na LCD ekran preko I2C magistrale

Otvorimo uzorak: Uzorci datoteka LiquidCrystal_I2C CustomChars i malo ćemo ga promijeniti. Prikazaćemo poruku na čijem kraju će biti trepćući simbol. Komentari koda komentarišu sve nijanse skice.

#include // uključuje Wire biblioteku #include // povezujemo LCD biblioteku #define printByte(args) write(args); // uint8_t srce = (0x0,0xa,0x1f,0x1f,0xe,0x4,0x0); // bit maska ​​simbola “srce” LiquidCrystal_I2C lcd(0x27, 16, 2); // Postavite adresu 0x27 za 16x2 LCD ekran void setup() ( lcd.init(); // inicijalizacija LCD ekrana lcd.backlight(); // uključiti pozadinsko osvjetljenje ekrana lcd.createChar(3, heart); // kreiramo simbol “srca” u memorijskoj ćeliji 3 lcd.home(); // postavite kursor u gornji lijevi ugao, na poziciju (0,0) lcd.!"); // ispis red teksta lcd.setCursor(0, 1); // pomaknite kursor na red 2, znak 1 lcd.print( " i "); // ispis poruke na liniji 2 lcd.printByte(3); // ispis simbola "srce" koji se nalazi u 3. ćeliji lcd.print(" Arduino "); } void loop() (// treperi posljednji znak lcd.setCursor(13, 1); // pomičemo kursor na red 2, znak 1 lcd.print("\t"); kašnjenje (500); lcd.setCursor(13, 1); // pomičemo kursor na red 2, znak 1 lcd.print(" "); kašnjenje (500); }

Usput, znakovi napisani naredbom lcd.createChar();, ostaju u memoriji ekrana čak i nakon isključivanja napajanja, jer napisano za prikaz ROM 1602.

5 Kreirajte vlastite simbole za LCD ekran

Pogledajmo pobliže pitanje kreiranja vlastitih simbola za LCD ekrane. Svaki znak na ekranu se sastoji od 35 tačaka: 5 širokih i 7 visokih (+1 rezervna linija za podvlačenje). U liniji 6 gornje skice definiramo niz od 7 brojeva: (0x0, 0xa, 0x1f, 0x1f, 0xe, 0x4, 0x0). Pretvorite heksadecimalne brojeve u binarne: {00000, 01010, 11111, 11111, 01110, 00100, 00000} . Ovi brojevi nisu ništa drugo do bitne maske za svaki od 7 linija simbola, gdje "0" označava svijetlu tačku, a "1" tamnu tačku. Na primjer, simbol srca naveden kao bitmaska ​​će se pojaviti na ekranu kao što je prikazano na slici.

6 Kontrola LCD ekrana preko I2C sabirnice

Prebacimo skicu na Arduino. Na ekranu će se pojaviti natpis koji smo naveli sa trepćućim kursorom na kraju.


7 Šta je iza I2C autobus

Kao bonus, pogledajmo vremenski dijagram za prikazivanje latiničnih znakova "A", "B" i "C" na LCD ekranu. Ovi znakovi se pohranjuju u ROM displeja i prikazuju se na ekranu jednostavnim prenošenjem njihovih adresa na displej. Dijagram je preuzet sa pinova RS, RW, E, D4, D5, D6 i D7 displeja, tj. već nakon FC-113 “I2C parallel bus” pretvarača. Možemo reći da zaranjamo malo dublje u hardver.


Vremenski dijagram izlaza latiničnih znakova “A”, “B” i “C” na LCD displeju 1602

Dijagram pokazuje da se znakovi koji se nalaze u ROM-u za prikaz (pogledajte str. 11 datasheet-a, link ispod) prenose u dva grickanja, od kojih prvi određuje broj kolone tabele, a drugi - broj reda. U ovom slučaju, podaci su „zakačeni“ na ivici signala na liniji E(Omogući) i liniju R.S.(Odabir registra) je u jednom logičkom stanju, što znači da se podaci prenose. Nisko stanje na RS liniji znači da se instrukcije šalju, što vidimo prije nego što se svaki znak prenese. U tom slučaju se prenosi instrukcijski kod za povratak nosača na poziciju (0, 0) LCD displeja, što se takođe može saznati proučavanjem tehničkog opisa displeja.

I još jedan primjer. Ovaj vremenski dijagram prikazuje izlaz simbola srca na LCD ekranu.


Opet prva dva impulsa Omogući pridržavati se uputstava Dom()(0000 0010 2) - vratite kočiju u poziciju (0; 0), a druga dva - izlaz na LCD ekran pohranjen u memorijskoj ćeliji 3 10 (0000 0011 2) simbol "Srce" (instrukcija lcd.createChar(3, srce); skica).