Kako podesiti pametne telefone i računare. Informativni portal

Lcd 1602 veza sa arduino nano. Povezivanje LCD-a na Arduino ploču (Arduino)

Stigao Arduino Nano, stigao je komplet, u kojem je matična ploča (bredboard) i LCD displej. Displej na ploči kaže - 1602A, ispod - QAPASS. Počeo sam da oblikujem prvi uređaj, i naravno, želeo sam da prikažem informacije na ekranu, a ne da trepere LED diode.

Google je pomogao, rekao mi je da je ovo prikaz znakova; ako nije izopačeno, onda su najvjerovatnije dostupni ASCII znakovi - brojevi, latinica, nešto od osnovnih znakova.

Sljedeći materijali su pomogli u pokretanju displeja: Pokretanje LCD-a karakternog tipa iz porta za PC štampač; Kako povezati Arduino sa karakternim LCD-om; Pwm servo drajver Motor Control PDF.

Ekran je prilično uobičajen, a za njega su već izmišljeni štitovi - postoje opcije sa SPI poput, i/ili sa I2C, a internet je pun recepata za ove slučajeve. Ali imao sam samo originalni 16x2 displej i arduinku na koji sam htio da ga prikačim.

Displej ima način rada i prenosa podataka u nibbles, po 4 bita, dok se niži bitovi magistrale ne koriste. Povezivanje samo polovine sabirnice podataka je opisano na mnogo mjesta, a nisam skontao kako spojiti displej i raditi s njim preko 8 linija. Prilično sam zadovoljan kako funkcionira.

Ovdje sam pronašao dobar opis displeja ovog tipa - http://greathard.ucoz.com/44780_rus.pdf. A ovdje (http://arduino.ru/forum/programmirovanie/lcd-i2c-partizanit#comment-40748) - primjer postavljanja generatora znakova.

Veza

Moj ekran je došao sa nezalemljenim kontaktima. Od početka sam htio zalemiti kabel, odsjeći 16 žica duponima i očistiti ih. A onda sam zakopao po kitu i našao dupont češalj za lemljenje na ploču. Odatle sam prekinuo 16 kontakata i zalemio ih.
Moj ekran je izgledao ovako (prije lemljenja kontakata):

Prvo sam spojio pin 15 (A) na +5V, 16 (K) na masu i uvjerio se da pozadinsko svjetlo radi. Općenito, ispravno je spojiti katodu na masu preko otpornika od 220 Ohma, što sam onda i učinio.

Zatim sam spojio uzemljenje (1) i napajanje (2). Arduino se može napajati preko USB-a, regulisanih 5V i neregulisanih 6-12V, automatski se bira najviši napon. Sada se arduino napaja preko USB-a, i razmišljao sam gdje da izvučem 5 volti. Ispostavilo se da je 5V na arduino kontaktu, gdje je spojeno eksterno stabilizovano 5V. Tačnije, ispalo je 4,7V, ali meni je bilo dovoljno.

Nakon spajanja napajanja, ako je sve u redu, gornji red svijetli čvrstim pravokutnicima poznatog.

Zatim povezujemo potenciometar kontrasta (pin 3 V0). Jedan od krajnjih zaključaka potenciometra bacamo na zemlju, drugi - na +5V, srednji - na pin 3 displeja. Preporučuje se 10K potenciometar. Imao sam 50K od kita, prvo sam ga iskoristio. Podešavanje je bilo samo na jednoj ivici, bilo je potrebno prilično suptilno uhvatiti željeni kontrast. Onda sam u drugom kitu našao sličan na 5K i instalirao ga. Postavka se protezala od jedne ivice do pola okreta. Očigledno, možete uzeti još manje potenciometra. 10K vjerovatno preporučuje da kolo troši manje. Da, morao sam malo zalemiti, zalemljene žice sa duponima na terminale potenciometara.

test skica

Uzimamo probnu skicu u primjerima iz Arduino Studija - "C:\Program Files (x86)\Arduino\libraries\LiquidCrystal\ex amples\HelloWorld\HelloWorld.ino", samo trebate promijeniti kontakte u naše - LiquidCrystal lcd (7, 6, 5, 4, 3, 2);

U principu, u ovoj skici postoji i opis šta gdje spojiti. Možete se povezati kako je tamo naznačeno, tada ne morate ništa mijenjati.

// uključuje kod biblioteke: #include // inicijalizirati biblioteku brojevima pinova interfejsa LiquidCrystal lcd(7, 6, 5, 4, 3, 2); void setup() ( // postavlja broj kolona i redova na LCD-u: lcd.begin(16, 2); // Ispis poruke na LCD-u. lcd.print("zdravo, svijet!"); ) void loop() ( // postavite kursor na stupac 0, red 1 // (napomena: red 1 je drugi red, pošto brojanje počinje sa 0): lcd. setCursor(0, 1); // ispisuje broj sekundi od resetiranja: lcd.print(millis() / 1000); )

Ispada nešto ovako:

Inače, ekran koji mi je pao u ruke ne radi bez pozadinskog osvetljenja. Mislim, radi, ali se skoro ništa ne vidi.

1602A Prikaz kontakata

kontakt # Ime Kako se povezati
1 VSS GND
2 VDD +5V
3 V0 Kontrast - do srednjeg izlaza potenciometra
4 RS (Odabir registracije) D7 Arduino
5 R/W (čitanje ili pisanje) GND
6 E (Omogući signal) D6 Arduino
7-14 D0-D7 D0-D3 - nije povezan; D4-D7 - spojen na pinove D5-D2 Arduina
15 A Anoda pozadinskog osvjetljenja, spojiti na +5V
16 K Katoda za osvjetljavanje, spojena na masu preko otpornika od 220 oma

Za sve vreme moje strasti za elektronikom, slučajno sam koristio LCD nekoliko proizvođača - DataVision, WINSTAR, Uniworld Technology Corp.. Razlikovali su se po tipu kontrolera, broju pinova i dužini vodova, ali su istovremeno svi imali istu šemu povezivanja, sistem komandovanja i servisirali su isti program iz mikrokontrolera. Stoga, iako ćemo sada govoriti o displeju WINSTAR WH0802A, sve od navedenog se odnosi na LCD displeje sa karakterima drugih proizvođača.

Dakle, povezujemo WH0802A-YGH-CT displej na mikrokontroler

WH0802A je 2-redni ekran od 8 znakova sa ugrađenim KS0066 kontrolnim kontrolerom.
Analiziramo svrhu prikaza izlaza.

Neki displeji imaju dva dodatna pina, +LED i -LED igle za pozadinsko osvetljenje. Štaviše, ako postoje zaključci, to ne znači da postoji i pozadinsko osvjetljenje. Kao i obrnuto. Moj displej ima pozadinsko osvetljenje, ali nema kontrolnih pinova.

Podrazumevano, pozadinsko osvetljenje ekrana WH0802A-YGH-CT je isključeno. Da biste ga uključili, morate napraviti nekoliko jednostavnih manipulacija, naime, instalirati dva kratkospojnika i zalemiti otpornik koji ograničava struju (pogledajte fotografiju RK, JF i RA).

Prikaz dijagrama povezivanja

Ovo je tipično kolo za povezivanje karakternih LCD-a. Nećemo koristiti šemu kontrole pozadinskog osvjetljenja ekrana, ali sam je nacrtao za svaki slučaj.

Start code

Nakon uključivanja napajanja u krug, morate okrenuti regulator kontrasta (otpornik R1). Ako se gornji red pojavi na ekranu, to znači da je živ i da je vrijeme da počnete pisati kod. U početnoj fazi koristićemo 8-bitnu sabirnicu. Da bismo dobili prve rezultate, moramo napisati dvije funkcije - funkciju za pisanje podataka i funkciju za pisanje naredbi. Razlikuju se samo u jednom redu - kada se upisuju podaci, RS signal mora biti 1, kada je napisana komanda RS mora biti 0. Funkcije čitanja još nećemo koristiti, tako da će R/W signal uvijek biti 0.

Ciklus pisanja za 8-bitnu sabirnicu izgleda ovako:
1. Postavite RS (0 - komanda, 1 - podaci)
2. Iznesite vrijednost bajta podataka na DB7…DB0 sabirnicu
3. Postavite E=1
4. Kašnjenje programa 1
5. Postavite E=0
6. Kašnjenje programa 2

LCD kontroler karaktera nema beskonačnu brzinu, pa se između nekih operacija koriste softverska kašnjenja. Prvi je potreban da neko vrijeme zadrži stroboskop signal, drugi, kako bi kontroler imao vremena da upiše podatke ili izvrši naredbu. Vrijednosti kašnjenja uvijek su date u opisu za kontroler zaslona i uvijek morate održavati barem njihovu minimalnu vrijednost, inače su kvarovi u radu kontrolera neizbježni.

Općenito, kontroler zaslona ima takozvanu zastavu zauzetosti - BF. Ako je zastavica 1, kontroler je zauzet, ako je 0, slobodan je. Umjesto drugog softverskog kašnjenja, možete pročitati oznaku zauzetosti i provjeriti kada je kontroler zaslona slobodan. Ali pošto želimo brzo doći do prvih rezultata, kasnije ćemo se pozabaviti zastavom zauzetosti.

//povezivanje karakternog LCD-a na AVR
#include
#include

//port na koji je spojena LCD sabirnica podataka
#define PORT_DATA PORTD
#define PIN_DATA PIN
#define DDRX_DATA DDRD

//port na koji su spojeni kontrolni pinovi
#define PORT_SIG PORTB
#define PIN_SIG PINB
#define DDRX_SIG DDRB

// brojevi pinova mikrokontrolera
//na koji su LCD kontrolni pinovi povezani
#defini RS 5
#define RW 6
#define EN 7

// makroi za rad sa bitovima
#define ClearBit(reg, bit) reg &= (~(1<<(bit)))
#define SetBit(reg, bit) reg |= (1<<(bit))

#define F_CPU 8000000
#define _delay_us(us) __kašnjenje_ciklusa((F_CPU / 1000000) * (us));
#define _delay_ms(ms) __kašnjenje_ciklusa((F_CPU / 1000) * (ms));

//funkcija unosa naredbe
void LcdWriteCom( unsigned char podaci)
{
ClearBit(PORT_SIG, RS); // postavi RS na 0
PORT_DATA = podaci; // izlaz podataka na sabirnicu
SetBit(PORT_SIG, EN); // postavimo E na 1
_delay_us(2);
ClearBit(PORT_SIG, EN); // postavimo E na 0
_delay_us(40);

//funkcija pisanja podataka

void LcdWriteData( unsigned char podaci)
{
SetBit(PORT_SIG, RS); //postaviti RS na 1
PORT_DATA = podaci; // izlaz podataka na sabirnicu
SetBit(PORT_SIG, EN); //postavimo E na 1
_delay_us(2);

ClearBit(PORT_SIG, EN); // postavimo E na 0

delay_us(40);
}

int glavni ( void )
{
dok (1);
povratak 0;
}

Ovde nema komplikovanih mesta, sve treba da bude jasno. Pomakni se.

Svaki LCD mora biti inicijaliziran prije upotrebe. Proces inicijalizacije obično je opisan u podacima za kontroler ekrana. Ali čak i ako tamo nema informacija, slijed će vjerovatno biti ovakav.

1. Poslužite hranu

2. Sačekajte >40ms

3. Pošaljite naredbu Function set

DL– bit za podešavanje širine magistrale
0 - 4 bitna sabirnica, 1 - 8 bitna sabirnica

N– bit za podešavanje broja linija prikaza
0 - jednolinijski režim, 1 - dvolinijski režim

F- bit za podešavanje fonta
0 - format 5*8, 1 - format 5*11

* - bez obzira šta će biti u ovim bitovima

4. Dajte komandu Display ON/OFF

D– bit za uključivanje/isključivanje prikaza
0 - displej isključen, 1 - ekran uključen

C– bit za uključivanje/isključivanje kursora
0 - kursor onemogućen, 1 - kursor omogućen

B– bit za omogućavanje treperenja
0 - trepćući kursor je omogućen, 1 - trepćući kursor onemogućen

5. Dajte naredbu Clear Display


6. Čekanje > 1,5 ms

7. Dajte naredbu Entry Mode Set

I/D– redoslijed povećanja/smanjivanja adrese DDRAM-a (prikaz podataka RAM-a)
0 - kursor se pomera ulevo, adresa se smanjuje za 1, 1 - kursor se pomera udesno, adresa se povećava za 1

SH– redosled pomeranja celog ekrana
0 - nema pomaka, 1 - pomak se dešava prema I/D signalu - ako je 0 - prikaz se pomiče udesno, 1 - ekran se pomiče ulijevo

Za naš primjer, funkcija inicijalizacije će izgledati ovako

1602 LCD displeji, bazirani na HD44780 kontroleru, jedan su od najjednostavnijih, najpristupačnijih i najpopularnijih displeja za razvoj različitih elektronskih uređaja. Može se naći i u uređajima koji se montiraju na koljena i u industrijskim uređajima, kao što su, na primjer, aparati za kafu. Na osnovu ovog displeja, najpopularniji moduli i štitovi sa Arduino temom, kao što su i.

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

Korišćene komponente (kupite iz Kine):

. kontrolna ploča

. Spojne žice

Ovi displeji su dostupni u dve verzije: žuto pozadinsko osvetljenje sa crnim slovima ili, češće, plavo pozadinsko osvetljenje sa belim slovima.

Dimenzije displeja na kontroleru HD44780 mogu biti različite, njima će se upravljati na isti način. Najčešće dimenzije su 16x02 (tj. 16 znakova u dva reda) ili 20x04. Rezolucija samih znakova je 5x8 piksela.

Većina displeja nema podršku za ćirilicu, imaju je samo ekrani sa CTK oznakom. Ali ovaj problem se može pokušati djelimično riješiti (nastavak u članku).

Igle za prikaz:

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

1 (VSS) - Napajanje kontrolera (-)
2 (VDD) - Snaga kontrolera (+)
3 (VO) - Izlaz kontrole kontrasta
4 (RS) - Izbor registra
5 (R/W) - Čitanje/pisanje (režim pisanja kada je spojen na uzemljenje)
6 (E) - Omogući (padajući stroboskop)
7-10 (DB0-DB3) - LSB-ovi 8-bitnog sučelja
11-14 (DB4-DB7) - Visoki bitovi sučelja
15 (A) - Anodna (+) snaga pozadinskog osvjetljenja
16 (K) - Katodna (-) snaga pozadinskog osvjetljenja

Način samotestiranja:

Prije pokušaja povezivanja i izlaza informacija, bilo bi lijepo znati da li zaslon radi ili ne. Da biste to učinili, morate primijeniti napon na sam kontroler ( VSS i VDD), uključite pozadinsko osvjetljenje ( A i K) i podesite kontrast.

Za podešavanje kontrasta koristite potenciometar od 10 kΩ. Kakav će to biti u obliku - nije bitno. +5V i GND se napajaju na krajnje noge, centralna noga je spojena na izlaz VO

Nakon dovođenja napajanja na kolo, potrebno je postići ispravan kontrast, ako nije ispravno postavljen, tada se ništa neće prikazati na ekranu. Da biste podesili kontrast, trebali biste se poigrati potenciometrom.

Uz ispravnu montažu kola i ispravnu postavku kontrasta, gornju liniju na ekranu treba ispuniti pravokutnicima.

Izlaz informacija:

Ekran koristi biblioteku LiquidCrystal.h ugrađenu u Arduino IDE okruženje.

Funkcionalnost biblioteke

//Rad sa kursorom lcd.setCursor(0, 0); // Postavite kursor (broj ćelije, red) lcd.home(); // Postavi 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ši prikaz, (izbriši sve podatke) postavi kursor na nulu lcd.rightToLeft(); // Pisanje 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, ne prikazuje ništa, onda lcd.display(); // Prilikom pozivanja funkcije display(), ekran vraća 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 praktično. Za rad su potrebne još 4 noge, a brzine praktički nema. brzina osvježavanja ovog ekrana je ograničena< 10раз в секунду.

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

Primjer programskog koda:

//Testirano na Arduino IDE 1.0.5#include // Dodamo potrebnu biblioteku LiquidCrystal lcd(7, 6, 5, 4, 3, 2); // (RS, E, DB4, DB5, DB6, DB7) void postaviti()( lcd.begin (16, 2); // Postavi dimenziju ekrana lcd.setCursor(0, 0); // Postavite kursor na početak reda 1 lcd.print("Zdravo, svijet!"); // Prikaz teksta lcd setCursor (0, 1); // Postavite kursor na početak reda 2 lcd.print("stranica"); // Prikaz teksta ) void petlja (){ }

Kreiranje vlastitih simbola

Shvatili smo izlaz teksta, slova engleske abecede su ušivena u memoriju kontrolera unutar displeja i sa njima nema problema. Ali što učiniti ako željeni znak nije u memoriji kontrolera?

Uputstvo

Rad ultrazvučnog daljinomjera HC-SR04 zasniva se na principu eholokacije. Emituje zvučne impulse u svemir i prima signal koji se odbija od prepreke. Udaljenost do objekta određena je vremenom širenja zvučnog vala do prepreke i natrag.
Početak zvučnog vala počinje pozitivnim impulsom u trajanju od najmanje 10 mikrosekundi na TRIG nozi daljinomjera. Čim se impuls završi, daljinomjer emituje rafal zvučnih impulsa frekvencije od 40 kHz u prostor ispred sebe. Istovremeno se pokreće algoritam za određivanje vremena kašnjenja reflektovanog signala, a logička jedinica se pojavljuje na ECHO nozi daljinomjera. Čim senzor uhvati reflektovani signal, na ECHO pinu se pojavljuje logička nula. Trajanje ovog signala ("Echo Delay" na slici) određuje udaljenost do objekta.
Opseg mjerenja udaljenosti daljinomjera HC-SR04 je do 4 metra sa rezolucijom od 0,3 cm.Ugao posmatranja je 30 stepeni, efektivni ugao je 15 stepeni. Potrošnja struje u režimu mirovanja 2 mA, tokom rada - 15 mA.

Ultrazvučni daljinomjer se napaja od +5 V. Ostala dva pina su spojena na bilo koji Arduino digitalni port, mi ćemo spojiti na 11 i 12.

Sada napišimo skicu koja određuje udaljenost do prepreke i šalje je na serijski port. Prvo postavljamo brojeve pinova TRIG i ECHO - to su pinovi 12 i 11. Zatim deklarišemo okidač kao izlaz, a eho kao ulaz. Inicijaliziramo serijski port na 9600 bauda. U svakoj iteraciji ciklusa petlja()čitamo udaljenost i šaljemo je na port.
Funkcija getEchoTiming() generiše startni impuls. On samo stvara struju od 10 mikrosekundi impuls, koji je okidač za daljinomjer da počne emitovati zvučni paket u svemir. Zatim se prisjeća vremena od početka prenosa zvučnog vala do dolaska jeke.
Funkcija getDistance() izračunava udaljenost do objekta. Iz školskog kursa fizike sjećamo se da je udaljenost jednaka brzini puta vremenu: S = V * t. Brzina zvuka u zraku je 340 m/s, vrijeme u mikrosekundama koje znamo je "trajanje". Podijelite sa 1.000.000 da dobijete vrijeme u sekundama. Budući da zvuk putuje dvostruko veću udaljenost - do objekta i nazad - trebate podijeliti udaljenost na pola. Dakle, ispada da je udaljenost do objekta S = 34000 cm/sec * trajanje / 1.000.000 sec / 2 = 1,7 cm/sec / 100, što smo i napisali u skici. Mikrokontroler obavlja operaciju množenja brže od dijeljenja, pa sam "/ 100" zamijenio ekvivalentnim "* 0,01".

Takođe, mnoge biblioteke su napisane za rad sa ultrazvučnim daljinomjerom. Na primjer, ovaj: http://robocraft.ru/files/sensors/Ultrasonic/HC-SR04/ultrasonic-HC-SR04.zip. Biblioteka se instalira na standardni način: preuzimanje, raspakivanje u direktorij biblioteke, koji se nalazi u Arduino IDE folderu. Nakon toga, biblioteka se može koristiti.
Nakon instalacije biblioteke, napišimo novu skicu. Rezultat njegovog rada je isti - udaljenost do objekta u centimetrima se prikazuje na monitoru serijskog porta. Ako u skici pišete float dist_cm = ultrasonic.Ranging(INC);, udaljenost će biti prikazana u inčima.

Dakle, spojili smo ultrazvučni daljinomjer HC-SR04 na Arduino i primali podatke od njega na dva različita načina: pomoću posebne biblioteke i bez.
Prednost korištenja biblioteke je u tome što je količina koda značajno smanjena i poboljšana čitljivost programa, ne morate ulaziti u zamršenosti uređaja i možete ga odmah koristiti. Ali ovo je takođe nedostatak: slabije razumete kako uređaj radi i koji se procesi u njemu odvijaju. U svakom slučaju, na vama je koju ćete metodu koristiti.

Danas ćemo pokušati da se zadržimo na izlazu na tekstualni prikaz. Najpopularniji je HD44780 čip (ili KS0066 kompatibilan s njim). Navodimo njihove prednosti i nedostatke:

Pros:

  1. Niska cijena.
  2. Jednostavan za programiranje, kod će biti isti za svaki model.
  3. Raznolikost modela - najčešći: 8x1, 16x2, 20x4. Možete pronaći i prilično egzotične 40x4 modele, tj. četiri reda od po 40 znakova.
  4. Mogućnost povezivanja više displeja na jedan Arduino.
  5. Mogućnost postavljanja vlastitih simbola.

minusi:

  1. Ne podržavaju svi ekrani ruske znakove. Za više detalja, pogledajte opis za određeni prikaz.
  2. Za povezivanje bez korištenja I2C magistrale potrebno je korištenje 10-16 žica, što je jako loše. sa I2C - 4 žice.

Na osnovu gore navedenog, razmotrit ću samo povezivanje ekrana preko I2C.

Pokusajmo.

Šta nam treba.

  1. Arduino (uzeo sam Nano model)
  2. Displej na HD44780 čipu sa ili bez I2C modula (onda vam je potrebna posebna LC1602 IIC ploča) - u našem slučaju 16x2 bez I2C modula
  3. 10K otpornik (ako vam je potrebna ručna kontrola pozadinskog osvjetljenja).
  4. Potenciometar (ako vam je potrebna ručna kontrola pozadinskog osvjetljenja).
  5. Breadboard breadboard.
  6. Biblioteka LiquidCrystal_I2C. http://www.ansealk.ru/files/LiquidCrystal_V1.2.1.zip

Mala digresija # 1: Kako razlikovati ekran sa I2C modulom?

U stvari, sve je prilično jednostavno. Ako, okrećući ekran, vidimo dugačak blok konektora (obično 16 komada), onda na ekranu nema I2C modula:

A ovako izgleda ekran sa već instaliranim I2C modulom:

Pinovi SCL, SDA, VCC, GND se koriste za povezivanje Arduina. Dva kontakta sa leve strane - na slici su zatvoreni kratkospojnikom - potrebna su za rad pozadinskog osvetljenja.

Ako modul nije povezan, morat ćete to učiniti sami. Glavna stvar na koju treba obratiti pažnju je povezivanje kontakata ispravnim redoslijedom. U pravilu, prvi i 16 pinova su označeni. Ponekad se dešava da se kontakti 15-16, preko kojih se upravlja pozadinskim osvjetljenjem, mogu nalaziti prije prvog (u ovom slučaju će biti numerirani). Na samom modulu, prvi pin također može biti označen ne brojem, već kvadratom oko same igle.

Šeme:

Hajde da sastavimo sledeći dijagram:

Skrenut ću vam pažnju na sljedeće tačke:

  1. Ako naiđete na ekran s već zalemljenim I2C modulom, žice označene sivom bojom neće biti potrebne. U ostalom - ništa se ne mijenja.
  2. Ako ne želimo mijenjati svjetlinu ekrana, shema će biti pojednostavljena:

kao što ste primetili, dva pina na I2C modulu sa oznakom LED su odgovorna za pozadinsko osvetljenje ekrana. Ako ne želimo koristiti kontrolu svjetline, možemo ih jednostavno zatvoriti.

Hajde sada da razbijemo kod.

Ovdje bi nam gotovo sve trebalo biti poznato. U redu 5 navodimo adresu uređaja. U redovima 16 i 17, broj znakova po redu i broj redova. U redovima 20-22 - Kreiramo objekat za rad sa ekranom i opisujemo parametar za rad sa njim.

Mala digresija # 2: Kako saznati adresu I2C uređaja?

Uglavnom se adresa može pronaći u datasheet-u za čip na kojem je izgrađen I2C uređaj. Ako to nije moguće, evo linka na arhivu sa skicom i dijagramima - http://www.ansealk.ru/files/Arduino_lcd_i2c.zip koji određuje adrese svih uređaja povezanih preko I2C magistrale. Samo trebate spojiti uređaj na Arduino, učitati skicu, otvoriti konzolu i vidjeti adresu.

Ovdje vidimo funkciju koja će se, u stvari, baviti izlazom na ekran. Princip izlaza je otprilike ovako:

Postavite početnu poziciju izlaza pomoću funkcije setCursor().

Štampanje stringa sa funkcijom print().

Nakon toga, sljedeća funkcija print() će započeti izlaz sa sljedeće pozicije nakon koje je prethodni unos završio. Također imajte na umu da se, za razliku od izlaza na konzolu, funkcija println() ovdje ne koristi za dovršavanje izlaza i pomicanja reda.

Tako će se na ekranu u prvom redu pojaviti natpis "Test LCD1602", a u drugom redu će biti prikazana rezolucija ekrana i brojač koji pokazuje koliko je ciklusa naša skica razradila.

Ali, ako trebamo prikazati mnogo varijabilnih vrijednosti na ekranu, ova metoda nije baš zgodna. Činjenica je da je postupak prikazivanja displeja veoma energetski intenzivan i spor, a izlaz u ovoj funkciji radimo čak 7 puta. Biće mnogo lakše unapred formirati niz, a zatim ga izvesti u celosti. U tome će nam pomoći formatirana funkcija unosa sprintf().

Napomena #3: Funkcija unosa formatirana sprintf().

Jezik C ima nekoliko vrlo zgodnih funkcija za ispis nizova - one se zovu funkcije formatiranog izlaza - printf (od riječi print i format). U našem konkretnom slučaju, zanima nas funkcija sprintf, koja ne prikazuje ništa na ekranu, već formira string za naknadni izlaz. To izgleda otprilike ovako:

sprintf (str, "String %d za izlaz ", i);

Funkcija generiše niz (označen plavom bojom) koristeći šablon (žuti), u koji se zamjenjuju vrijednosti varijabli (zeleno). Rezultat će biti zapisan u varijablu niza (crveno).

Može postojati nekoliko šablona i varijabli. U ovom slučaju, varijable su odvojene zarezima. Najvažnije, pobrinite se da broj uzoraka u liniji odgovara broju varijabli. Varijable za šablone se uzimaju sekvencijalno, tj. vrijednost prve varijable se zamjenjuje u prvi predložak, vrijednost druge varijable se zamjenjuje u drugi šablon, itd.

Šta su šabloni? Bilo koji obrazac počinje znakom "%" i završava se jednim od deset (u slučaju Arduina - sedam) znakova tipa. Između njih može postojati dosta informacija o tome kako prikazati vrijednost, ili možda neće biti ništa.

Hajde da vidimo šta može biti u šablonu. Generalno, šablon izgleda ovako:

%[flag ][width ][.precision ]tip

Uglaste zagrade označavaju da element koji je u njima zatvoren može biti izostavljen. Vertikalna traka označava da se u ovom polju mora odabrati jedna od navedenih vrijednosti (u našem slučaju jedno od slova H, I ili L).

Prvo se pozabavimo potrebnim elementom predloška - tipom. Određuje koji tip varijable će biti izlaz i može uzeti jednu od sljedećih vrijednosti:

Simbol Značenje
c Jedan lik
s Niz znakova
d,i Predpisani decimalni cijeli broj
o Integer octal
u Cijeli broj bez predznaka decimalni
x, X Heksadecimalni cijeli broj
str Pokazivač (heksadecimalni)
f Razlomak u fiksnom formatu
e, E Razlomak u naučnom formatu
g, G Razlomak u naučnom ili fiksnom formatu

Sivom bojom su označeni oni tipovi koji nisu primjenjivi pri radu sa Arduinom. Dakle, za izlaz stringa, potrebno je navesti "%s", a za izlaz cijeli broj - "%d".

Zatim razmotrite polje širine. Broj u njemu označava minimalnu širinu polja u kojem će šablon biti prikazan. Ako je veličina vrijednosti u varijabli manja - polje će biti popunjeno razmacima, ako je više - zapis će ići izvan polja. Dakle, obrazac "%6d" za broj 385 će ispisati 385 (obratite pažnju na tri razmaka ispred broja).

Specifikator preciznosti uvijek počinje tačkom, a broj koji slijedi označava različite radnje ovisno o vrsti vrijednosti. Za tipove "d,o,u,x" označava minimalni broj znakova koji bi se trebao pojaviti tokom obrade. Za tip "f" - broj decimalnih mjesta. Za tip "s", maksimalan broj znakova niza koji se izlaze. Na primjer, "%6.1f" za broj 34.2345 će prikazati "34.1" (imajte na umu da se tačka također smatra znakom i da će biti dva razmaka prije broja). Ili će obrazac "%.3s" iz niza "preciznost" prikazati samo prva tri znaka - "tačku".

Zastavica vam omogućava da promijenite prikaz prikazane vrijednosti:

Više o predlošcima funkcija printf možete pročitati na Internetu. Ovdje sam dao kratak pregled najčešće korištenih funkcija.

Tako će naša izlazna funkcija, prepisana da koristi formatirani izlaz, izgledati ovako:

Imajte na umu da u redovima 33 i 37 generiramo cijeli red za izlaz, au redovima 34 i 38 ih ispisujemo.

Konačno, naše omiljene funkcije podešavanja i petlje.

U liniji 47 postavljamo rezoluciju ekrana, u redu 48 uključujemo pozadinsko osvjetljenje (čija svjetlina se može podesiti potenciometrom). Na liniji 49, postavite brojač petlje na nulu. Povećat ćemo ga za jedan u 37. redu tokom izlaza (sjećate li se konstrukcije count++?). Konačno, u redu 56, pozivamo funkciju prikaza o kojoj smo ranije govorili. Sve.

Šta se može promijeniti ili poboljšati?

Na primjer, možete napraviti automatsku kontrolu pozadinskog osvjetljenja ovisno o osvjetljenju pomoću fotootpornika ili svjetlosnog senzora s meteorološke stanice o kojoj se raspravljalo u nekoliko članaka ranije. Na primjer, pri jakom svjetlu - povećajte svjetlinu pozadinskog osvjetljenja, a noću - smanjite. Ili uvrnuti senzor pokreta i uključiti pozadinsko osvjetljenje kada se ispred displeja pojavi neki predmet, ili... Generalno, mislim da ste to već shvatili, ako želite, zamjenom jedne ili više komponenti i pisanjem dijela koda , možete ozbiljno poboljšati upotrebljivost ekrana. Također možemo koristiti prilagođene simbole za prikaz na displeju.

Ovdje ne razmatram sva ova pitanja, jer su izvan okvira pregleda za početnike.

I za danas imam sve.

Arduino. Povezivanje LCD ekrana

26 ocjena, Prosječna ocjena: 5 od 5

Top Related Articles