internetul Windows. Android

Programarea indicatorilor LCD I2C pentru Arduino. Conectarea LCD LCD LCM1602 cu I2C în Arduino

Poate unul dintre cele mai populare ecrane din piață. Semnat pe controlerul popular HD44780U. Din numele modelului rezultă că ecranul constă din două rânduri de 16 caractere. Sprijin pentru limba rusă în acest sens model specific nu.

Busul de date Sh2s permite două fire să se conecteze până la 127 de dispozitive și simultan. Acest I2C este implementat la cipul PCF8574T.

Diagrama conexiunii:

Blue lucru - Rezistență variabilă, vă permite să reglați contrastul ecranului.

Jumperul din stânga - este responsabil pentru lumina de fundal a ecranului.

Blocul de 4 contacte este conectat la Arduino SO:

GND - GND.
VCC - 5V.
SDA - A4 (dacă Arduino Mega, apoi la D20)
SCL - A5 (dacă Arduino Mega, apoi la D21)

Bibliotecă

Schiță

Afișajul poate avea o altă adresă IIC, în loc de 0x27 poate fi 0x3F. Pentru a determina cu exactitate adresa pe care o puteți utiliza scanerul dispozitivelor I2C.

#Include. #Include. // Setați adresa LCD 0x27, 16 caractere, 2 linii LIQUIDCRYSTAL_I2C LCD (0x27, 16, 2); SETUP (LCD.INIT (); // inițializați ecranul // porniți lumina de fundal LCD.Backlight (); // Instalați poziția începând cu care este afișat textul. LCD.SETCRSOR (2, 0); // retrageți șirul 1 lcd.print ("salut, lume!"); // afișați în mod similar cel de-al doilea șir LCD.SETCRSOR (1, 1); lcd.print ("www.site"); ) buclă void () ()

Modulul LCD I2C vă permite să conectați afișajul de caractere la bordul Arduino din toate cele două fire de semnal.

Componente utilizate (cumpărare în China):

. Taxa de administrare

. Conectarea firelor

Specificații de bază:

Afișaj: Simbol 16x02 sau 20x04
. Iluminare: albastru cu simboluri albe
. Contrast: potențiometru configurat
. Tensiunea de alimentare: 5V
. Interfață: I2C.
. I2C Adresa: 0x27
. Dimensiuni: 82mm x 35mm x 18mm

Conectați-vă la Arduino.

Modulul este echipat cu un conector standard de 2,54 mm cu patru pini

SCL.: Ceas serial ceas serial

SDA.: Linia de date secvențială (date seriale)

VCC.: Putere "+"

GND.: "-" Putere

Concluzii responsabile pentru interfața I2C pe arduino Tablouri Pe baza diferitelor controlere diferă

Pentru a lucra cu acest modul, trebuie să instalați biblioteca lichidcrystal_i2c1602v1

Descărcați, despachetați și aruncați în folderul bibliotecilor din dosarul Arduino. În cazul în care, la momentul adăugării bibliotecii, ARDUINO IDE a fost deschis, repornirea mediului.

Du-te direct la schiță. ÎN acest exemplu Retrage standardul "Bună ziua, lumea!" Și pentru adresa comunității noastre.

codul programului de probă:

#Include. #Include. LIQUIDCRYSTAL_I2C LCD (0x27,16,2); / * Setați adresa și dimensiunea afișajului. Când utilizați modulul LCD I2C cu un afișaj de 20x04, nimic din cod nu poate fi modificat, acesta trebuie să seteze numai dimensiunea corectă * / Nulă. înființat. () (lcd.init (); // lcd inițializare. LCD.Backlight (); // porniți lumina de fundal // Cursorul este la începutul primei linii lcd.print ("salut, lume!"); // afișarea textului LCD.SetCursor (0, 1); // Instalați cursorul la începutul a 2 linii lcd.print ("site"); // spune textul) gol buclă. () { }

Crearea personajelor proprii

Odată cu încheierea textului, literele alfabetului englez sunt cusute în memoria controlerului în interiorul afișajului și nu există probleme cu acestea. Dar dacă simbolul dorit din controlerul de memorie nu este?

Nu probleme, simbolul dorit se poate face manual. Aceasta metoda În parte, restricția a 7 caractere va ajuta la rezolvarea problemei de ieșire.

Celula, în afișaje luate în considerare, are o rezoluție de 5x8 puncte. Tot ceea ce sarcina de a crea un simbol este redusă pentru a scrie o mască de biți și a aranja un singur în el în locuri unde ar trebui să existe un punct și Noliki unde nu există.

În exemplul de mai sus, trageți un zâmbet.

codul programului de probă:

// Testarea pe Arduino IDE 1.0.5 // Adăugați bibliotecile necesare #Include. #Include. // bit mască simbol zâmbet Byte Smile \u003d (B00010, B00001, B11001, B00001, B11001, B00001, B00010); LIQUIDCRYSTAL_I2C LCD (0x27,20,4); // Setați adresa și dimensiunea afișajului. Nulă. înființat. () (lcd.init (); // lcd inițializare. LCD.Backlight (); // porniți lumina de fundal // Creați un caracter la numărul 0 Lcd.createchar (1, zâmbet); lcd.SetCursor (0, 0); // setați cursorul la linia de sus 1 lcd.print ("\\ 1"); // afișați emoticoane (simbol la numărul 1) - "\\ 1" ) Vid buclă. () { }

Program pentru crearea ușoară a caracterelor

În comentarii, participantul comunitar a aruncat legătura cu generatorul de simboluri

Am venit de aici magazin bun Rezistor de cip următor dispozitiv pentru studii și aplicații în dispozitive utile. Acest dispozitiv sa dovedit a fi ascuțit pentru a gestiona ecranul LCD care rulează controlerul HD44780, în modul 4-biți. În acest scop, este instalat un microcircuit pe bord, care este convertorul de autobuz I2C la un port paralel de 8 biți.

Taxa este divorțată astfel încât să poată fi zdrobită imediat cu afișajul LCD. Intrarea servește linii de putere și I2C. Placa sa instalat imediat rezistențe de tracțiune pe liniile SCL și SDA, potențiometrul pentru ajustarea contrastului și puterea afișajului în sine.

Jumper pe dreapta pornește / deconectează lumina de fundal. Apoi, înarmați cu un tester a fost elaborat următoarea plăcuță. După ce a studiat modulul, a fost dezvăluit. P3. Gestionează lumina de fundal. Dacă jumperul este setat, atunci 1 pornește lumina de fundal și 0 se oprește. Când jumperul este îndepărtat, lumina de fundal este întotdeauna oprită. Apoi, sa decis să completați biblioteca Axlib să lucreze cu autobuzul I2C (implementarea software-ului) și funcțiile pentru gestionarea microcircuitului PCF8574. Pe scurt, modul în care funcționează modulul. Pentru a afișa octetul paralel, pentru că trebuie să trimiteți o adresă de microcircitate în autobuzul I2C (este egal cu 0x4e. De asemenea, puteți schimba adresa prin comutarea jumperilor pe bord și schimbarea valorii a trei descărcări de adrese mai tinere), Apoi, după primirea ACK, byte-ul de date este trimis. După ce cipul răspunde cu ACK, octetul apare pe portul paralel al cipului. Pentru a controla afișajul LCD, am luat funcțiile din biblioteca Axlib și am redid un pic pentru a lucra cu autobuzul I2C. #Include. #Include. #Include. #Include. #Define adaugă 0x4e. // adresa microcircuitului / * Microcircuit LCD RS P0 RW P1 RO P2 D4 P4 D5 P5 D6 P6 D7 P7 pe poalele P3 Conectați lumina de fundal. 1 incl, 0 off. * / // ieșire de date COM | \u003d 0x04; // o unitate PCF8574_BYTE_OUT (COM, Adăugați); // ieșire de date Com & 0xfb; // e în zero PCF8574_BYTE_OUT (COM, Adăugați); // ieșire de date ) Void Init (Void) (_delay_ms (30); COM (0x30); _delay_us (40); COM (0x30); // tranziție la modul de 4 biți _delay_us (40); // întârzierea executării comenzii COM (0x30); // tranziție la modul de 4 biți _delay_us (40); // întârzierea executării comenzii COM (0x20); // tranziție la modul de 4 biți _delay_us (40); // întârzierea executării comenzii COM (0x20); // setați parametrii COM (0x80); // setați parametrii COM (0x00); // Inchide monitorul COM (0x80); // Inchide monitorul COM (0x00); // curățați afișajul COM (0x10); // curățați afișajul COM (0x00); COM (0x60); // Instalați modul de introducere a datelor COM (0x00); COM (0xc0); // Porniți afișajul cu cursorul selectat ) Vid char_out (byte Data_h \u003d ((date & 0xf0) + 0x09); Byte Data_L \u003d ((date // transfer de 4 biți Data_h | \u003d 0x04; PCF8574_byte_out (Data_H, Adăugare); // transferul de 4 biți // transferul de 4 biți // Transferul Junior 4 Bit // Transferul Junior 4 Bit // Transferul Junior 4 Bit ) VOID STR_OUT ((* STR)! \u003d "\\ 0") (CHAR_OUT (* STR); Str ++;)) int Main (Void) (init (); str_out ("epґbet mґp!"); În timp ce (1 ) ()) De fapt ce se întâmplă aici. Primele biblioteci pentru i2c și pentru PCF8574. Am scris deja despre I2C, așa că va fi tăiat încă o dată, dar vă voi spune în PCF8574.h. Biblioteca include doar trei funcții.
Byte PCF8574_TEST (BYTE ADD) (Byte ASK \u003d ACK; Adăugați & \u003d 0xFE; i2c_start (); întrebați \u003d i2c_send_byte (adăugați); i2c_stop (); returnare întrebare;) Prima funcție a fost scrisă pentru a verifica disponibilitatea unui dispozitiv în autobuz. În principiu, acesta poate fi utilizat pentru a căuta orice dispozitiv situat pe anvelopă. Funcția ia adresa dispozitivului dorit și dacă răspunde, acesta returnează zero. Dacă nu există niciun dispozitiv cu această adresă în autobuz, atunci veți returna unitatea.
Byte PCF8574_byte_out (octeți Cere \u003d ACK; Adăugați & 0xFE; I2C_start (); întrebați \u003d i2c_send_byte (adăugați); dacă (întrebați) întrebați \u003d i2c_send_byte (date); i2c_stop (); returnare;) Această caracteristică este deja ascuțită curată sub acest cip. Ca argument, octeții sunt transmise pentru a transfera la anvelopă și adresa microcircuitului. Funcția va cere mai întâi un cip la adresa și apoi va trimite octeți. Dacă chipul a primit Byte și a răspuns, funcția va termina lucrul cu microcircuitul și va reveni la zero ca un pachet de succes de octeți. Un cip în acest moment va afișa acest octet în portul dvs. paralel. În caz contrar, primim unități de foraj și rambursare, transferul a eșuat.
Byte PCF8574_STR_OUT (BYTE * Date, Byte Col, Byte ADD) (Byte ASK \u003d ACK, Adăugați & \u003d 0xFE; I2C_START (); întrebați \u003d i2c_send_byte (adăugați); pentru (Byte I \u003d 0; I Această caracteristică este creată pentru experiment. Acceptă un indicator la o serie de date cu un singur octet, numărul acestor octeți și adresa microcircuitului. De fapt, o încercare de a transfera toate datele cu o singură sesiune și nu un octet pentru sesiune. Funcția funcționează, dar astfel încât pentru afișajul LCD și nu se potrivesc. Și acum să ne întoarcem la programul principal. După conectarea bibliotecilor, prescriem adresa chipului. Apoi, creați trei funcții prin analogie cu LCD.h. Diferența este numai în principiul transferului de date.
VOID COM (BYTE COM) (COM | \u003d 0x08; // P3 pe unitate, pentru a nu arde iluminarea PCF8574_BYTE_OUT (COM, Adăugați); // ieșire de date COM | \u003d 0x04; // o unitate PCF8574_BYTE_OUT (COM, Adăugați); // ieșire de date Com & 0xfb; // e în zero PCF8574_BYTE_OUT (COM, Adăugați); // ieșire de date } Această caracteristică transmite numai comenzile de afișare. De aici a existat o primă linie cu o îndoire logică a comenzii de la 0x08. Acest Bjaka este necesar datorită faptului că trecem de octeți nu direct la portul afișajului LCD, ci prin repetorul nostru. Asta este, dacă am fugit un octet și apoi trebuie să retragem un singur bit, atunci veți da o deignă la byte-ul anterior și o veți trimite din nou la port. Iată o astfel de confuzie. Adăugarea de la 0x08 este necesară pentru reținerea permanentă a unității la al treilea descărcare. Amintiți-vă de lumina de fundal? Aceasta este această adăugare și pornește lumina de fundal. După ce apelați funcția de transfer de autobuz în autobuz. Este scris mai sus. Apoi trecem byte cu autobuzul în microcircuit. Apoi, acesta trebuie plasat într-o unitate E decât de fapt o adăugare logică de octeți cu 0x04 este angajată. După zero de E. În acest fel, puteți trimite orice comandă pe afișaj numai prin trecerea comenzii în sine ca argument. Void Init (VOD) (_delay_ms (30); // Pauză după sursa de alimentare COM (0x30); // tranziție la modul de 4 biți _delay_us (40); // întârzierea executării comenzii COM (0x30); // tranziție la modul de 4 biți _delay_us (40); // întârzierea executării comenzii COM (0x30); // tranziție la modul de 4 biți _delay_us (40); // întârzierea executării comenzii COM (0x20); // tranziție la modul de 4 biți _delay_us (40); // întârzierea executării comenzii COM (0x20); // setați parametrii COM (0x80); // setați parametrii COM (0x00); // Inchide monitorul COM (0x80); // Inchide monitorul COM (0x00); // curățați afișajul COM (0x10); // curățați afișajul COM (0x00); // Instalați modul de introducere a datelor COM (0x60); // Instalați modul de introducere a datelor COM (0x00); // Porniți afișajul cu cursorul selectat COM (0xc0); // Porniți afișajul cu cursorul selectat } Această caracteristică este angajată numai în inițializarea afișajului. Secvența comenzilor sunt luate dintr-o sursă de date de pe afișajul LCD. VOID CHAR_OUT (BYTE DATA) (Byte Data_H \u003d ((date & 0xf0) + 0x09); Byte Data_L \u003d ((Data // Transferarea Senior 4 Bits Data_h | \u003d 0x04; PCF8574_byte_out (Data_h, Adăugare); // transferul de 4 biți Data_h & 0xf9; PCF8574_BYTE_OUT (Data_H, Adăugați); // transferul de 4 biți PCF8574_BYTE_OUT (Data_l, Adăugare); // Transferul Junior 4 Bit Data_l | \u003d 0x04; PCF8574_BYTE_OUT (Data_l, Adăugare); // Transferul Junior 4 Bit Data_l & 0xf9; PCF8574_BYTE_OUT (Data_l, Adăugare); // Transferul Junior 4 Bit } Această caracteristică transmite date LCD de date. Se efectuează în același mod ca și comenzile, cu excepția faptului că transferul octetului vine mai întâi de semi-miezul senior și apoi mai mic. Iar restul este la fel. Void str_out (Byte * Str) (în timp ce ((* STR)! \u003d "\\ 0") (CHAR_OUT (* STR); Str ++)) Ei bine, această caracteristică este curată pentru transmiterea șirului de afișare. De fapt, nu are nimic de-a face cu subiectul nostru.

Proiect pentru ATMELSTUDIO 6.2

Literate 01.08.15 17:11

Virgula este omisă. Dreapta: "Bună, pace!" Și acest dispozitiv este ascuțit nu numai pentru HD44780. Rezistențele de strângere sunt puse pe partea vrăjitorului. Conform specificației, înregistrarea datelor la controlerul LCD continuă declinul E. de aici Prima funcție este simplificată: VOID COM (BYTE COM) (COM | \u003d 0x08; // Iluminare PCF8574_Te_out (COM | 0x04, Adăugare) ; // Ieșire de date PCF8574_byte_out (COM, Adăugare); // E în zero) și restul sunt, de asemenea, semnificativ mai mici decât mai puțin. De exemplu, VOID CHAR_OUT (Date de Byte) vor fi doar două apeluri și chiar mai mult, fără variabile suplimentare. Inițializarea LCD se efectuează cu încălcări ale specificației de sincronizare.

Alexey 02.08.15 19:11

Datorită lipsei unei virgule, afișajul nu va suferi. Acest dispozitiv este accentuat exact sub afișaje cu un controler similar sau similar. Dar microcircuitul este un expander simplu de port. Despre e Sunt de acord. Sunt necesare variabile suplimentare. Dacă transmiteți argumentul funcției cu un fel de acțiuni cu logică, pot apărea glitches. Au venit deja astfel. Inițializarea se efectuează fără tăierea încălcărilor. Documentația spune că o pauză de 40 μs este pusă între echipe. Datorită faptului că transmisia trece de-a lungul autobuzului I2C și că, la rândul său, software-ul și lent, perioadele sunt efectuate cu dobândă. Dacă încă nu mai faci prea leneș, atunci scrieți propria opțiune și trimite-mi. O voi publica. În cele din urmă, acest site este destinat unei audiențe amatori și tuturor celor care dorește să-și exprime opinia și viziunea vieții lui MK.

Alexey 06.08.15 09:14.

Tyamennga a fost adăugată la inițierea afișajului prin remarcarea "competentă" respectată "

Dmitry 06/14/16 21:57

Bună ziua Alexey. Puteți adăuga o bibliotecă pentru a lucra cu PCF8574 în generatorul de coduri.

Alexey 14.06.16 22:32

Mă voi gândi la asta.))

ruslan 12/21/16 19:54
Alexey 21.12.16 21:53

Oh da. Mai ales codul din Asma. Ardurile vor aprecia integral)))

Pi.sy.
Chiar dacă nu lingeți pe AFM, atunci PROG este scris sub controlerul PIC. Pentru AVRS, aceasta este "foarte" informații utile? Mai ales începător))) Nu am nimic împotriva PIC, dar chiar și AFM în Pic și AVR este diferită. Și despre detaliile muncii afișajului LCD, atunci puteți arăta))) adevărat, eu încă am scris-o sub Cvavr, dar toate echipele sunt dezmembrate și descompuse pe rafturi. Dar, în orice caz, decideți unde este mai clar se spune))) autorul scrie, cititorul alege.

Gek 04.01.17 12:52

"Adresa microcircuitului I2C (în mod implicit este 0x4e"

Senior Adresele de 4 biți sunt fixe,
PCF8574 Prefixul este 0100 și PCF8574A - 0111
Mai tânăr 3 biți depind de starea intrărilor cipului A2-A0. Implicit, toate cele 3 jumperi sunt deschise, respectiv, adresa microcircuitului ia valoarea 0111111.
// A2 A1 A0 PCF8574 PCF8574A
// 1 1 1 0x20 0x38
// 1 1 0 0x21 0x39
// 1 0 1 0x22 0x3a
// 1 0 0 0x23 0x3b
// 0 1 1 0x24 0x3c
// 0 1 0 0x25 0x3d
// 0 0 1 0x26 0x3e
// 0 0 0 0 0x27 0x3f

Alexey 04.01.17 14:27

Ceva ce ați confundat.
Extrage din documentația pentru microcircitate

0B01001110 Aceasta este 0x4e
Deci totul este chiar aici. Și dacă trebuie să schimbați adresa, atunci trebuie doar să o schimbați în definirea.

Yuri 14.12.17 21:26.

O zi buna! Și puteți să codificați funcția LCDGotoxi și LCDClear pentru a lucra cu adaptorul de pe PCF8574.

Alexander 20.05.18 18:14

O zi buna! Cum vă retrageți textul rusesc.

Alexey 20.05.18 23:04

Acesta este afișajul intern de la topire. El este în memoria chirilică.

Alexandru 21.05.18 04:55.

O zi buna! Eu scriu cum ai în proiectul pentru Atmelstudio 6.2 "Ypґbet Mґp!" Care afișează normal
Și dacă scrieți "Bună ziua în lume!" Afișează nonsens toate. am doua
Opțiuni de afișaje de la o cusută cyrilică. Al doilea chinez.

Alexey 21.05.18 09:22

Aș fi scris programul de testare pentru a începe un program de testare. Treceți prin toate memoria cu afișarea caracterelor și adresele acestora. Și apoi să părăsiți problema. Cel mai probabil, tabelul de caractere nu coincide cu masa ASCII.

Andrey 03.09.18 08:32

Bună ziua!

Și nu poți arunca o schemă pentru Proteus?

Andrey 03.09.18 10:22

Sau nimeni nu a verificat protese?

Andrei 03.09.18 10:56.

Utilizat principal_init

Paul 30.05.19 23:35

Lucru curios, adresa de afișare 0x4e și dacă același afișaj este conectat la ARDUUX, adresa 0x27

Paul 31.05.19 11:04.

Vă mulțumesc foarte mult pentru munca dvs.! Am rumenam întregul internet, nici unul dintre exemplele de mai sus, cu excepția dvs. câștigată. Singurul din arhiva proiectului în funcția de inițializare a afișajului nu este afișat întârzierea _delay_ și nu funcționează în consecință

Alexey 01.06.19 09:52.

Ei bine, acesta este mai mult proiect de demonstrație. Potrivit unui bun, biblioteca Axlib este de a rescrie, dar ținând cont de faptul că STM32 și STM8 se deplasează pași de șapte mile, nici un sens în AVR nu mai este deloc.

Paul 05.06.19 12:57.

STM nu are carcase DIP, este mai dificil să se facă plăci de circuite imprimate. Pentru proiectele mele, AVR caracteristici suficient cu o marjă, pe un atmega 8 vă puteți potrivi foarte mult

Alexey 05.06.19 15:20.

Da, dar cât de mult este ATMEGA8 și STM8S003)))

Dmitry 07.06.19 00:41.

Bună ziua, Alexey.
Spuneți-mi, vă rog, cum să citiți din starea PCF8574 a portului?
Vreau să fac un bloc extern, 8 gpio prin intermediul autobuzului I2C - IT Sam.

Dmitri 07.06.19 17:56.

Eu îmi răspund
Funcția returnează octeți - starea porturilor de microcircitate
Uint8_T PCF8574_BYTE_RCV (UINT8_T ADR)
{
Uint8_t cere \u003d ack;
AddR | \u003d 0B01; // Citit.
UINT8_T DATA \u003d 0;
i2c_start ();
Întrebați \u003d i2c_send_byte (addr);
dacă (! întrebați) date \u003d i2c_read_byte (nack);
i2c_stop ();

Date de returnare;
}

Paul 07.06.19 20:37

Cât costă, 150 de ruble, la prețul Relyushka, în general) și cum divorți taxele sub STM? Lut nesigure, CNC Frese nu este sigur că va dura (nu a încercat)

  • Modulul FC-113 se face pe baza cipului PCF8574T, care este un registru de deplasare pe 8 biți - "Expander" a ieșirilor pentru anvelopa serială a I2C. În figura microcircuitului este desemnat DD1.
  • R1 este un rezistor rapid pentru a regla contrastul afișajului LCD.
  • J1 Jumper este folosit pentru a porni lumina de fundal a afișajului.
  • Concluzii 1 ... 16 sunt utilizate pentru a conecta modulul la ieșirile afișajului LCD.
  • Platformele de contact A1 ... A3 sunt necesare pentru a schimba adresa I2C a dispozitivului. Așezați jumperii corespunzători, puteți schimba adresa dispozitivului. Tabelul prezintă conformitatea adreselor și a jumperiilor: "0" corespunde ruperii lanțului, "1" - jumperului reglabil. Implicit, toate cele 3 jumpers Deschidere și adresa dispozitivului 0x27..

2 Arduino LCD Display Schema de conectarepotrivit I2C.

Conectarea unui modul la Arduino este efectuată standard pentru magistrala I2C: ieșirea SDA a modulului este conectată la portul analog A4, ieșirea SCL în portul analog al A5 Arduino. Modulul este alimentat de tensiune +5 V de la Arduino. Modulul în sine este legat de concluziile 1 ... 16 cu concluziile corespunzătoare de la 1 ... 16 pe ecranul LCD.


3 Biblioteca pentru muncăpotrivit I2C.

Acum aveți nevoie de o bibliotecă pentru a lucra cu LCD prin interfața I2C. Puteți utiliza, de exemplu, acest lucru (link în "Descărcați codul de probă și biblioteca" Row).

Arhiva descărcată Lichidcrystal_i2cv1-1.rar. Dezarhivați în dosar \\ Biblioteci \\care este situat în directorul Arduino IDE.

Biblioteca suportă un set de funcții standard pentru ecrane LCD:

FuncţieScop
Cristal lichid () creează o variabilă de tip Liquidcrystal și acceptă setările de afișare (numere PIN);
începe () inițializarea afișajului LCD, setarea parametrilor (număr de rânduri și simboluri);
clar () curățarea ecranului și returnați cursorul în poziția inițială;
acasă () returnați cursorul în poziția inițială;
sETCURSOR () instalarea cursorului în poziția specificată;
scrie () afișează un simbol pe ecranul LCD;
imprimare () afișează textul de pe ecranul LCD;
cursor () arată cursorul, adică Subclinarea la următorul scaun de simbol;
nocursor () ascunde cursorul;
blink () cursor intermitent;
noblink () anulați clipește;
nodisplay () opriți afișajul în timp ce economisiți toate informațiile afișate;
afișaj () porniți afișajul în timp ce salvați toate informațiile afișate;
scrolldisplayleft () derulând conținutul afișajului în prima poziție în stânga;
scrolldisplayright () derulând conținutul afișajului pe o poziție în dreapta;
autoscroll () includerea contractării automate;
noutoscrl () oprirea automobilului;
de la stânga la dreapta () specifică direcția textului de la stânga la dreapta;
de la dreapta la stanga () direcția textului de pe dreapta spre stânga;
createchar () creează un simbol personalizat pentru ecranul LCD.

4 Schiță pentru ieșirea de textpe ecranul LCD prin intermediul magistralei I2C

Să deschidem eșantionul: Probele de fișiere LiquidCrystal_i2C CustomChars Și îl aliniază puțin. Vom retrage un mesaj la sfârșitul căruia va fi simbolul intermitent. În comentariile la cod, toate nuanțele de schiță sunt comentate.

#Include. // Conectați firul #include biblioteca // Conectăm Biblioteca LCD #define PrintByte (args) scrie (args); // uint8_t inima \u003d (0x0.0xa, 0x1f, 0x1f, 0xe, 0x4.0x0); // simbolul masca de biți "inima" lichidcrystal_i2c LCD (0x27, 16, 2); // setați adresa 0x27 pentru afișarea LCD 16X2 setup () () () () lcd.init (); // inițializarea afișajului LCD LCD.Backlight (); // porniți iluminarea ecranului LCD.CreateChar (3, inimă); // creați simbolul inimii în celula de memorie 3 LCD.Home (); // Puneți cursorul în colțul din stânga sus, în poziția (0,0) LCD.! "); // Imprimați șirul de text LCD.SetCursor (0, 1); // transferați un cursor la un șir 2, un simbol 1 LCD.print ("I"); // Imprimați un mesaj pe o linie 2 LCD.Printbyte (3); // Imprimați simbolul "Inima", situat în celula 3-a LCD.Print ("Arduino"); } buclă void () () // clipește ultimul simbol LCD.SetCursor (13, 1); // Cursor de transfer la șir 2, simbol 1 lcd.print ("\\ t"); Întârzierea (500); LCD.SETCRSOR (13, 1); // Cursor de transfer la șir 2, simbol 1 lcd.print (""); Întârzierea (500); }

Apropo, personajele înregistrate de echipă lcd.createchar ();, rămân în afișarea afișajului chiar și după oprire, pentru că Înregistrate în 1602 MFU.

5 Crearea personajelor propriipentru afișarea LCD.

Mai puține detalii, luați în considerare problema creării propriilor personaje pentru ecrane LCD. Fiecare simbol de pe ecran este alcătuit din 35 de puncte: 5 în lățime și 7 în înălțime (+1 șir de rezervă pentru subcotare). În linia 6 a schiței date, am stabilit o serie de 7 numere: (0x0, 0xa, 0x1f, 0x1f, 0xe, 0x4, 0x0). Transformăm numerele 16-Riche în binar: {00000, 01010, 11111, 11111, 01110, 00100, 00000} . Aceste numere nu sunt altceva decât o mască de biți pentru fiecare dintre cele 7 linii ale simbolului, unde "0" denotă un punct de lumină și "1" - întuneric. De exemplu, un simbol de inimă specificat sub formă de mască de biți va privi pe ecran așa cum se arată în figură.

6 Ecran LCD de biroupe autobuzul i2c

Conduceți schița în Arduino. Pe ecran va apărea inscripția cu cursorul intermitent la sfârșit.


7 Ce este "pentru"anvelopă i2c.

Ca bonus, luați în considerare o diagramă temporară a ieșirii caracterelor latine "A", "B" și "C" pe afișajul LCD. Aceste caractere sunt disponibile în afișajul ROM și sunt afișate pur și simplu prin transmiterea adresei acestora. Diagrama este eliminată din concluziile RS, RW, E, D4, D5, D6 și D7, adică Deja după convertorul FC-113 "Bus paralel I2C". Putem spune că plonjați puțin "mai adânc" în "fier".


Diagrama temporară a ieșirii caracterelor latine "A", "B" și "C" pe ecranul LCD 1602

Diagrama arată că caracterele care se află în DVLD ROM (vezi pagina 9.11, referința de mai jos) este transmisă de două ghee, primul dintre care definește tabelul coloanei de masă, iar al doilea este numărul liniei. În același timp, datele "Snatch" pe partea din față E. (Activare) și linia Rs. (Selectare înregistrare, selectare Înregistrare) se află într-o stare de unitate logică, ceea ce înseamnă transfer de date. Starea scăzută de stare a liniei RS înseamnă transmiterea instrucțiunilor pe care le vedem înainte de transferul fiecărui simbol. În acest caz, codul instrucțiunii de retur a transportului este transmis în poziția (0, 0) LCD afișaj, după cum puteți afla, de asemenea, studiind descrierea tehnică a afișajului.

Și încă un exemplu. În această perioadă, diagrama arată ieșirea simbolului "Heart" de pe afișajul LCD.


Din nou, primele două impulsuri Permite Instrucțiuni conforme Acasă () (0000 0010 2) - Întoarcerea căruciorului în poziția (0; 0) și al doilea două - ieșirea de pe afișajul LCD stocat în celula de memorie 3 10 (0000 0011 2) simbolul "inima" (instrucțiuni lcd.createchar (3, inima); Schiță).

Ecran LCD - Oaspeții frecvenți în proiectele Arduino. Dar, în scheme sofisticate, putem avea o lipsă de lipsă de porturi Arduino datorită necesității de a conecta un ecran care are foarte multe contacte. Ieșirea în această situație poate fi I2c / iic. Adaptor care conectează aproape standard pentru ecranul Arduino 1602 la plățile UNO, Nano sau Mega doar cu 4 pini. În acest articol vom vedea cum puteți conecta ecranul LCD cu interfața I2C, pe care o puteți utiliza bibliotecile, scrieți un exemplu scurt de schiță și examinați erorile tipice.

Afișaj cu cristale lichide (afișaj cu cristale lichide) LCD 1602. Este o alegere bună să afișați linii de caractere în diverse proiecte. Este ieftin, există diferite modificări cu diferite culori de iluminare din spate, puteți descărca cu ușurință biblioteci gata făcute pentru schițe Arduino. Dar cel mai important dezavantaj al acestui ecran este faptul că afișajul are 16 concluzii digitale, dintre care minimul de 6 sunt obligatorii. Prin urmare, utilizarea acestui ecran LCD fără I2C adaugă restricții grave pentru panourile Arduino Uno sau Nano. Dacă lipsesc contactele, atunci va trebui să cumpărați taxa ARDUINO MEGA sau să salvați contacte, inclusiv prin conectarea afișajului prin I2C.

Scurtă descriere PIN LCD 1602

Să ne uităm la concluziile LCD1602 mai aproape:

Fiecare dintre concluziile are scopul:

  1. Terenul GND;
  2. Nutriție 5 V;
  3. Instalarea contrastului monitorului;
  4. Comandă, date;
  5. Înregistrarea și citirea datelor;
  6. Permite;

7-14. Linii de date;

  1. Plus iluminare înapoi;
  2. Minus lumina de fundal.

Specificații tehnice de afișare:

  • Tipul de afișare a simbolurilor, este posibilă încărcarea caracterelor;
  • Neon luminează;
  • Controler HD44780;
  • 5V de tensiune de alimentare;
  • Format 16x2 caractere;
  • Temperatura de funcționare variază de la -20CD la + 70C, temperatura de depozitare variază de la -30c la +80 S;
  • Unghiul de vizualizare este de 180 de grade.

Circuitul de conectare LCD la bordul Arduino fără I2C

Diagrama standard de conectare a monitorului direct către microcontrolerul Arduino fără I2C este după cum urmează.

Datorită numărului mare de contacte conectate, este posibil să nu fie suficient spațiu pentru a atașa elementele dorite. Utilizarea I2C reduce numărul de fire la 4 și pinii ocupați până la 2.

Unde să cumpărați ecrane LCD și scuturi pentru Arduino

Ecranul LCD 1602 (și opțiunea 2004) este destul de popular, astfel încât să îl puteți găsi cu ușurință în ambele magazine interne și site-uri străine. Iată câteva linkuri cu cele mai accesibile opțiuni:

Modul LCD1602 + I2C cu ecran albastru, compatibil cu Arduino Afișaj simplu LCD1602 (iluminare verde verde) mai ieftin decât 80 de ruble Ecran mare LCD2004 cu I2C HD44780 pentru Arduino (albastru și verde de fundal)
Afișați 1602 cu adaptor IIC și lumină de fundal albastră O altă opțiune LCD1602 cu un modul I2C I2C PORT IIC / IIC / TWI / SPI Modul adaptor pentru ecran 1602, compatibil cu Arduino
Afișați cu lumină de fundal RGB! LCD 16 × 2 + tastatură + scut de buzzer pentru Arduino Shield pentru Arduino cu butoane și ecran LCD1602 LCD 1602 Afișaj LCD pentru imprimantă 3D (controler inteligent pentru rampe 1.4, textul LCD 20 × 4), modulul SD și MicroSD CardRider

Descrierea protocolului I2C

Înainte de a discuta afișarea afișajului Arduino prin intermediul adaptorului I2C, să vorbim despre protocolul I2C în sine.

I2c / iic.(Circuitul inter-integrat) este un protocol inițial creat pentru a comunica circuitele integrate în interiorul dispozitivului electronic. Dezvoltarea aparține lui Philips. Protocolul I2C se bazează pe utilizarea unui autobuz de 8 biți care este necesar pentru a comunica blocuri în electronica de control și sistemul de adresare, care poate fi comunicat de aceleași fire cu mai multe dispozitive. Pur și simplu trecem datele la unu, apoi un alt dispozitiv, adăugând identificatorul elementului dorit la pachetele de date.

Cea mai simplă schemă I2C poate conține un dispozitiv de unitate (cel mai adesea acesta este un microcontroler Arduino) și mai mulți sclavi (de exemplu, afișajul LCD). Fiecare dispozitiv are o adresă cuprinsă între 7 și 127. Două dispozitive cu aceeași adresă într-o singură schemă nu ar trebui să fie.

Arduino acceptă I2C la un nivel hardware. Puteți utiliza pinii A4 și A5 pentru a conecta dispozitivele pentru acest protocol.

În i2c, puteți selecta mai multe avantaje:

  • Pentru funcționare, sunt necesare doar 2 linii - SDA (linia de date) și SCL (linia de sincronizare).
  • Conectarea unui număr mare de dispozitive de antrenare.
  • Reducerea timpului de dezvoltare.
  • Pentru a controla întregul set de dispozitive, este necesar un singur microcontroler.
  • Numărul posibil de microcircuități conectat la un autobuz este limitat doar la capacitatea maximă.
  • Grad ridicat de siguranță a datelor datorită unui filtru special al izbucnirii copleșitoare încorporat în circuit.
  • O procedură simplă pentru diagnosticarea eșecurilor emergente, falsificarea rapidă.
  • Anvelopa este deja integrată în Arduino în sine, deci nu este nevoie să dezvoltați o interfață suplimentară de magistrală.

Dezavantaje:

  • Există o limitare capacitivă pe linia - 400 pf.
  • Programarea dificilă a controlerului I2C dacă există mai multe dispozitive diferite în autobuz.
  • Cu un număr mare de dispozitive, dificultatea localizării eșecului apare dacă unul dintre ele stabilește eronat starea nivelului scăzut.

Modul I2C pentru LCD 1602 Arduino

Cea mai rapidă și mai convenabilă modalitate de a utiliza afișajul I2C în Arduino este achiziționarea unui ecran finalizat cu protocol de suport încorporat. Dar nu există astfel de ecrane multe impacturi pe care nu le sunt ieftine. Dar o varietate de ecrane standard a fost deja eliberată o sumă imensă. Prin urmare, opțiunea cea mai accesibilă și cea mai populară este achiziționarea și utilizarea unui modul I2C separat - un adaptor care arată astfel:

Pe de o parte a modulului, vedem concluziile I2C - Pământ, mese și 2 pentru transmisia de date. Cu un alt adaptor, vedem conectorii de alimentare externă. Și, în mod natural, există multe picioare pe bord, cu ajutorul căruia modulul este lipit la ieșirile standard ale ecranului.


Ieșirile I2C sunt utilizate pentru conectarea la bordul Arduino. Dacă aveți nevoie, conectăm alimentația externă pentru o contracție. Folosind rezistența de tăiere încorporată, putem configura valori personalizate de contrast j

Pe piață puteți găsi module LCD 1602 cu adaptoare deja lipite, utilizarea lor este cea mai susceptibilă. Dacă ați cumpărat un adaptor separat, va trebui să-l pre-lipiți la modulul.

Conectarea ecranului LCD la Arduino prin I2C

Arduino, afișare, canal, fire de legătură și potențiometru sunt necesare pentru conectivitate.

Dacă utilizați un adaptor I2C separat special, trebuie mai întâi să îl lipiți pe modulul de ecran. Este dificil să faceți greșeli acolo, puteți ghida o astfel de schemă.


Monitorul de cristal lichid acceptat I2C este conectat la placă cu ajutorul a patru fire - două fire pentru date, două fire pentru alimentare.

  • Ieșirea GND este conectată la GND pe tablă.
  • VCC - la 5V.
  • SCL se conectează la Pin A5.
  • SDA se conectează la Pina A.

Și totul este! Nici un paie de fire în care este foarte ușor să se confunde. În același timp, dificultatea implementării protocolului I2C putem încredința pur și simplu bibliotecilor.

Bibliotecile pentru a lucra cu afișajul LCD I2C

Pentru interacțiunea lui Arduino C LCD 1602 prin intermediul autobuzului I2C, veți avea nevoie de cel puțin două biblioteci:

  • Biblioteca Wire.H pentru lucrul cu I2C este deja disponibilă în programul standard Arduino IDE.
  • LIQUIDCRYSTAL_I2C.H Biblioteca, care include o mare varietate de comenzi pentru a controla monitorul peste magistrala I2C și vă permite să faceți o schiță mai ușoară și mai scurtă. Trebuie să instalați suplimentar biblioteca după conectarea afișajului trebuie să instalați suplimentar LiquidCrystal_i2C.H Biblioteca

După conectarea la schița tuturor bibliotecilor necesare, creăm un obiect și putem folosi toate funcțiile sale. Pentru testare, haideți să conducem următoarea schiță standard din exemplu.

#Include. #Include. // conexiunea bibliotecii // # includ // conectați biblioteca alternativă LIQUIDCRYSTAL_I2C LCD (0x27,16,2); // indicați adresa I2C (cea mai comună valoare), precum și parametrii ecranului (în cazul LCD 1602 - 2 linii de 16 caractere în fiecare // lichidcrystal_pcf8574 LCD (0x27); // opțiune pentru configurarea VOID PCF8574 Biblioteca () (lcd.init (); // Inițializarea afișajului LCD.Backlight (); // Conectarea luminii de fundal LCD.Setcursor (0,0); // Setarea cursorului la începutul primei linii LCD. Imprimare ("salut"); // set de text pe primul rând LCD.SetCursor (0,1); // Instalarea cursorului la începutul liniei a doua LCD.print ("Arduinomastru"); // set de text pe a doua linie) buclă void () ()

Descrierea funcțiilor și a metodelor Liquidcrystal_I2C Biblioteca:

  • acasă () și clar () - Prima funcție vă permite să returnați cursorul la începutul ecranului, al doilea, dar în același timp elimină tot ceea ce a fost pe monitor înainte.
  • scrieți (CH) - vă permite să transmiteți un singur simbol CH pe ecran.
  • cursor () și Nocursor () - arată / ascunde cursorul de pe ecran.
  • blink () și Noblink () - Cursorul clipește / nu clipește (dacă este pornit pentru a fi afișat).
  • afișaj () și nodisplay () - vă permite să conectați / dezactivați afișajul.
  • scrolldisplayleft () și scrolldisplayright () - Scrolls ecranul la un semn stânga / dreapta.
  • autoScroll () și NoUutosscroll () - vă permite să activați / dezactivați modul de rotație automată. În acest mod, fiecare nou personaj este scris în același loc, deplasând anterior scris pe ecran.
  • leftToright () și dreaptaToleft () - Setarea direcției textului de ieșire - de la stânga la dreapta sau spre dreapta stânga.
  • cREATECHAR (CH, Bitmap) - Creează un simbol cu \u200b\u200bcodul CH (0 - 7) utilizând Bitmap Bitmasse matrice pentru a crea puncte alb-negru.

Biblioteca alternativă pentru lucrul cu afișajul I2C

În unele cazuri, atunci când utilizați biblioteca specificată cu dispozitivele echipate cu controlere PCF8574, pot apărea erori. În acest caz, ca alternativă, puteți oferi bibliotecii lichidcrystal_pcf8574.h. Ea extinde lichidcrystal_i2c, deci nu ar trebui să existe probleme cu utilizarea sa.

I2C LCD Display Probleme de conectare

Dacă după descărcarea schiței nu ați avut nici o inscripție pe ecran, încercați pașii următori.

În primul rând, puteți mări sau micșora contrastul monitorului. Adesea simbolurile nu sunt pur și simplu vizibile datorită modului de contrast și iluminare de fundal.

Dacă nu vă ajută, verificați contactele corecte pentru a conecta dacă lumina de fundal este conectată. Dacă ați folosit un adaptor separat I2C, verificați calitatea lipirii de conectare.

Un alt motiv comun pentru lipsa de text pe ecran poate fi o adresă I2C incorectă. Încercați mai întâi să modificați adresa dispozitivului din schiță cu 0x27 0x20 sau 0x3F. Diferitele producători pot fi cusute diferite adrese implicite. Dacă nu a ajutat, puteți rula schița scanerului I2C, care vizualizează toate dispozitivele conectate și determină adresa lor prin metoda de stingere. Exemplu scanerul Sketch I2C.

Dacă ecranul rămâne încă nu funcționează, încercați să dispariți adaptorul și să conectați LCD-ul în mod obișnuit.

Concluzie

În acest articol, am revizuit problemele de bază ale utilizării ecranului LCD în proiectele complexe Arduino, când trebuie să salvăm lovituri libere pe tablă. Adaptorul I2C simplu și ieftin vă va permite să conectați ecranul LCD 1602, ocupând doar 2 pini analogi. În multe situații, poate fi foarte important. Taxă pentru comoditate - Necesitatea de a utiliza un modul opțional - convertor și bibliotecă. În opinia noastră, nu deloc prețul ridicat pentru confort și suntem extrem de recomandăm să folosim această oportunitate în proiecte.