i2c konekcija. Povezivanje LCD ekrana LCM1602 sa I2C na Arduino

  • FC-113 modul je baziran na PCF8574T čipu, koji je 8-bitni pomakni registar - I/O ekspander za I2C serijsku magistralu. Na slici je mikrokolo označeno kao DD1.
  • R1 - trimer za podešavanje kontrasta LCD ekrana.
  • Jumper J1 služi za uključivanje pozadinskog osvjetljenja displeja.
  • 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 između adresa i kratkospojnika: "0" odgovara otvorenom krugu, "1" - instaliran je kratkospojnik. Podrazumevano, sva 3 kratkospojnika su otvorena i adresa uređaja 0x27.

2 Dijagram ožičenja za LCD ekran na Arduino preko I2C protokola

Modul je spojen na Arduino kao standard za I2C sabirnicu: SDA izlaz modula je povezan na analogni port A4, SCL izlaz 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 rad 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 linija i simbola);
jasno() brisanje ekrana i vraćanje kursora u prvobitni položaj;
Dom() povratak kursora na početnu poziciju;
setCursor() postavljanje kursora na zadatu poziciju;
pisati() prikazuje karakter na LCD ekranu;
print() prikazuje tekst na LCD ekranu;
kursor() pokazuje kursor, tj. podvlačenje ispod sledećeg znaka;
noCursor() sakriva kursor;
blink() treperi kursor;
noBlink() poništiti treptanje;
noDisplay() isključivanje ekrana uz čuvanje svih prikazanih informacija;
display() uključivanje ekrana uz pohranjivanje svih prikazanih informacija;
scrollDisplayLeft() skrolovanje sadržaja ekrana 1 pozicija ulevo;
scrollDisplayRight() skrolovanje sadržaja ekrana 1 pozicija udesno;
autoscroll() omogući automatsko skrolovanje;
noAutoscroll() isključite automatsko pomicanje;
lijevo-desno() postavlja smjer teksta s lijeva na desno;
desno nalijevo() smjer teksta s desna na lijevo;
createChar() kreira prilagođeni simbol za LCD ekran.

4 Skica za izlaz teksta na LCD ekran preko I2C magistrale

Otvorimo uzorak: Uzorci datoteka LiquidCrystal_I2C CustomChars i hajde da to malo promenimo. Hajde da prikažemo poruku, na čijem kraju će biti znak koji treperi. Sve nijanse skice su komentirane u komentarima na kod.

#include // uključuje Wire biblioteku #include // povezujemo LCD biblioteku #define printByte(args) write(args); // uint8_t heart = (0x0,0xa,0x1f,0x1f,0xe,0x4,0x0); // bitmaska ​​simbola "srce" LiquidCrystal_I2C lcd(0x27, 16, 2); // Postavite adresu 0x27 za 16x2 LCD ekran void setup()( lcd.init(); // LCD inicijalizacija lcd.backlight(); // uključiti pozadinsko osvjetljenje ekrana lcd.createChar(3, heart); // kreiramo simbol srca na memorijskoj lokaciji 3 lcd.home(); // stavimo kursor u gornji lijevi ugao, na poziciju (0,0) lcd.!"); // ispisemo redak teksta lcd.setCursor(0, 1); // pomaknemo kursor na red 2, znak 1 lcd.print( "i"); // ispis poruke na liniji 2 lcd.printByte(3); // ispis znaka srca koji se nalazi u 3. ćeliji lcd.print("Arduino"); } void loop() (// treptaj zadnji 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. su upisani u ROM displeja 1602.

5 Kreiranje vlastitih simbola 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). Pretvorimo heksadecimalne brojeve u binarne: {00000, 01010, 11111, 11111, 01110, 00100, 00000} . Ovi brojevi nisu ništa drugo do bitne maske za svaki od 7 redova karaktera, gdje "0" označava svijetlu tačku, a "1" tamnu. Na primjer, simbol srca dat kao bitmaska ​​će se pojaviti na ekranu kao što je prikazano na slici.

6 LCD kontrola preko I2C sabirnice

Prenesite skicu na Arduino. Natpis koji smo naveli pojavit će se na ekranu sa trepćućim kursorom na kraju.


7 Šta je iza I2C autobus

Kao bonus, uzmite u obzir vremenski dijagram izlaza latiničnih znakova "A", "B" i "C" na LCD ekranu. Ovi znakovi se pohranjuju u ROM displeja i prikazuju se na ekranu jednostavnim prosljeđivanjem njihove adrese displeju. Dijagram je preuzet sa izlaza RS, RW, E, D4, D5, D6 i D7 displeja, tj. već nakon pretvarača FC-113 "I2C paralelna sabirnica". Možemo reći da zaranjamo malo "dublje" u "peglu".


Vremenski dijagram za prikaz 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 stranicu 11 tablice sa podacima, 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" duž ivice signala na liniji E(Omogući) i liniju RS(Odabir registra, odabir registra) je u jednom logičkom stanju, što znači prijenos podataka. Nisko stanje RS linije znači prijenos instrukcija, što vidimo prije prijenosa svakog karaktera. U tom slučaju se prenosi kod instrukcije 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 prikaz simbola srca na LCD-u.


Opet prva dva impulsa omogućiti pridržavati se uputstava Dom()(0000 0010 2) - povratak kolica 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).

Možda jedan od najpopularnijih ekrana na tržištu. Izgrađen na popularnom HD44780U kontroleru. Iz naziva modela proizilazi da se ekran sastoji od dva reda od 16 karaktera. U ovom konkretnom modelu nema podrške za ruski jezik.

sh2s sabirnica podataka omogućava povezivanje do 127 uređaja preko dvije žice, i to u isto vrijeme. Ovaj I2C je implementiran na PCF8574T čipu.

Dijagram ožičenja:

Plava stvar - varijabilni otpor, omogućava podešavanje kontrasta ekrana.

Džamper sa leve strane je odgovoran za pozadinsko osvetljenje ekrana.

Blok od 4 pina je spojen na arduino ovako:

GND-GND
VCC - 5V
SDA - A4 (ako Arduino MEGA, onda na D20)
SCL - A5 (ako Arduino MEGA, onda na D21)

Biblioteka

Skica

Ekran može imati drugačiju IIC adresu, umjesto 0x27 može se ispostaviti da je 0x3F. Da biste precizno odredili adresu, možete koristiti i2c skener uređaja.

#include #include //postavimo adresu LCD ekrana 0x27, 16 karaktera, 2 reda LiquidCrystal_I2C lcd(0x27, 16, 2); void setup() (lcd.init(); // Inicijaliziranje ekrana // uključiti pozadinsko osvjetljenje lcd.backlight(); //Podesite poziciju od koje se tekst prikazuje. lcd.setCursor(2, 0); //izlazni red 1 lcd.print("Zdravo, svijet!"); //na sličan način prikazujemo drugi red lcd.setCursor(1, 1); lcd.print("www.site"); ) void petlja () ( )

LCD I2C modul vam omogućava da povežete prikaz znakova na Arduino ploču sa samo dvije signalne žice.

Korišćene komponente (kupite iz Kine):

. kontrolna ploča

. Spojne žice

Glavne tehničke karakteristike:

Prikaz: karakter 16x02 ili 20x04
. Osvetljenje: plavo sa belim znakovima
. Kontrast: podesiv potenciometrom
. Napon napajanja: 5V
. Interfejs: I2C
. I2C adresa: 0x27
. Dimenzije: 82mm x 35mm x 18mm

Povezivanje na Arduino

Modul je opremljen 4-pinskim konektorom od 2,54 mm

SCL: linija serijskog sata (Serial clock)

SDA: linija serijskih podataka (serijski podaci)

VCC: "+" snaga

GND: "-" snaga

Pinovi odgovorni za I2C sučelje na Arduino pločama baziranim na različitim kontrolerima se razlikuju

Za rad sa ovim modulom potrebno je instalirati biblioteku LiquidCrystal_I2C1602V1

Preuzmite, raspakujte i ispustite u folder biblioteka u Arduino folderu. Ako je u trenutku dodavanja biblioteke Arduino IDE bio otvoren, ponovo pokrenite okruženje.

Idemo direktno na skicu. U ovom primjeru prikazat ćemo standardni "Halo, world!" i za adresu naše zajednice.

primjer koda:

#include #include LiquidCrystal_I2C lcd(0x27,16,2); /* Podesite adresu i veličinu ekrana. Kada koristite LCD I2C modul sa displejom 20x04, ništa ne treba mijenjati u kodu, samo trebate postaviti ispravnu dimenziju */ void postaviti() (lcd.init(); // Inicijaliziraj lcd lcd.backlight(); // uključiti pozadinsko osvjetljenje // Kursor je na početku 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?

Nema veze, traženi karakter se može napraviti ručno. Ova metoda će djelomično, ograničavajući se na 7 znakova, pomoći u rješavanju problema s izlazom.

Ćelija, u displejima koje razmatramo, ima rezoluciju 5x8 piksela. Sav zadatak kreiranja simbola se svodi na pisanje male maske i postavljanje jedinica u nju na mjestima gdje bi tačke trebale gorjeti, a nule gdje ne.

U primjeru ispod, nacrtajmo smajli.

primjer koda:

//Testirano na Arduino IDE 1.0.5 // Dodajte potrebne biblioteke#include #include // Bitmaska ​​simbola osmijeha bajt osmijeh = ( B00010, B00001, B11001, B00001, B11001, B00001, B00010, ); LiquidCrystal_I2C lcd(0x27,20,4); // Postavite adresu i veličinu prikaza. void postaviti() (lcd.init(); // Inicijaliziraj lcd lcd.backlight(); // uključiti pozadinsko osvjetljenje // Kreirajte simbol broj 0 lcd.createChar(1, osmijeh); lcd.setCursor(0, 0); // Postavite kursor na početak reda 1 lcd.print("\1"); // Prikaži smajlija (znak broj 1) - "\1") void petlja () { }

Program za jednostavno kreiranje simbola

U komentarima je član zajednice ispustio vezu do generatora znakova

Dobio sam ovdje iz dobre prodavnice čipova otpornika još jedan uređaj za proučavanje i korištenje u korisnim uređajima. Pokazalo se da je ovaj uređaj izoštren za kontrolu LCD ekrana pod kontrolom HD44780 kontrolera, u 4-bitnom načinu rada. U tu svrhu, na ploči je instaliran mikro krug, koji je pretvarač I2C sabirnice u paralelni 8-bitni port.

Ploča je razdvojena na način da se odmah može ukrstiti sa LCD ekranom. Ulaz je napajan i I2C linije. Ploča odmah ima pull-up otpornike na SCL i SDA linijama, potenciometar za podešavanje kontrasta i napajanje samog displeja.

Džamper sa desne strane uključuje/isključuje pozadinsko osvetljenje. Zatim je, naoružan testerom, sastavljena sljedeća ploča. Nakon proučavanja modula, ustanovljeno je da P3 kontroliše pozadinsko osvetljenje. Ako je kratkospojnik postavljen, tada 1 uključuje pozadinsko osvjetljenje, a 0 ga isključuje. Kada je kratkospojnik uklonjen, pozadinsko osvetljenje je uvek isključeno. Nadalje, odlučeno je da se axlib biblioteka dopuni funkcijama za rad sa I2C magistralom (softverska implementacija) i funkcijama za kontrolu PCF8574 čipa. Ukratko, kako modul radi. Da biste paralelno izlazili bajtovi, za to morate poslati adresu mikrokola na I2C sabirnicu (podrazumevano je 0x4E. Adresu možete promijeniti i lemljenjem kratkospojnika na ploči i promjenom vrijednosti tri najmanje značajne cifre adrese), tada se nakon prijema ACK šalje bajt podataka. Nakon što čip odgovori sa ACK, bajt se pojavljuje na paralelnom portu čipa. Za kontrolu LCD-a, uzeo sam funkcije iz axlib biblioteke i malo ih preradio za rad sa I2C magistralom. #include #include #include #include #define DODAJ 0x4E // Adresa čipa /* LCD čip RS P0 RW P1 EN P2 D4 P4 D5 P5 D6 P6 D7 P7 Pozadinsko osvjetljenje je povezano na pin P3. 1 uključeno, 0 isključeno */ // Izlaz podataka com |= 0x04; // E do jedan pcf8574_byte_out(com, ADD); // Izlaz podataka com &= 0xFB; // E na nulu pcf8574_byte_out(com, ADD); // Izlaz podataka) void init(void) (_delay_ms(30); com(0x30); _delay_us(40); com(0x30); // Prebacivanje na 4-bitni način rada _delay_us(40); // Kašnjenje za izvršenje naredbe com(0x30); // Prebacivanje na 4-bitni način rada _delay_us(40); // Kašnjenje za izvršenje naredbe com(0x20); // Prebacivanje na 4-bitni način rada _delay_us(40); // Kašnjenje za izvršenje naredbe com(0x20); // Postavi parametre com(0x80); // Postavi parametre com(0x00); // Isključite ekran com(0x80); // Isključite ekran com(0x00); // Obrišite ekran com(0x10); // Obrišite ekran com(0x00); com(0x60); // Postavite način unosa com(0x00); com(0xC0); // Uključite ekran sa odabranim kursorom) void char_out(BYTE podaci) ( BYTE data_h = ((podaci & 0xF0) + 0x09); BYTE data_l = ((podaci // Prodaj visoka 4 bita data_h |= 0x04; pcf8574_byte_out(data_h, ADD); // Propusti visoka 4 bita // Propusti visoka 4 bita // Propusti niska 4 bita // Propusti niska 4 bita // Propusti niska 4 bita) void str_out(BYTE *str) ( while((*str) != "\0") ( char_out(*str); str++; ) ) int main(void) ( init(); str_out("ËPҐBET MҐP!" dok(1) ( ) ) Tačno šta se dešava ovde. Prvo, uključujemo biblioteke za I2C i za PCF8574. Već sam pisao o I2C, pa neću ponovo razapinjati, ali ću vam reći šta u PCF8574.h. Biblioteka uključuje samo tri funkcije.
BYTE pcf8574_test(BYTE add) ( BYTE ask = ACK; dodaj &= 0xFE; i2c_start(); ask = i2c_send_byte(add); i2c_stop(); vrati pitaj; ) Prva funkcija je napisana da provjeri da li je uređaj na magistrali. U principu, može se koristiti za traženje bilo kojeg uređaja koji se nalazi na sabirnici. Funkcija uzima adresu željenog uređaja, a ako odgovori, vraća nulu. Ako uređaj sa ovom adresom nije na magistrali, vratit će jednu.
BYTE pcf8574_byte_out(BYTE podaci, BYTE add) ( BYTE ask = ACK; add &= 0xFE; i2c_start(); ask = i2c_send_byte(add); if(!ask) ask = i2c_send_byte(data); i2c_stop(); return ask; ) Ova funkcija je već izoštrena isključivo za ovaj čip. Kao argument, prosljeđuje se bajt za prijenos na sabirnicu i adresa mikrokola. Funkcija će prvo upitati čip na adresi, a zatim poslati bajt. Ako je čip primio bajt i odgovorio sa ACK, tada će funkcija prekinuti čip i vratiti nulu kao uspješan bajt. I mikrokolo će u ovom trenutku izbaciti ovaj bajt u svoj paralelni port. U suprotnom, dobijamo NACK i vraćamo jedan, prijenos nije uspio.
BYTE pcf8574_str_out(BYTE *podaci, BYTE col, BYTE add) ( BYTE ask = ACK; add &= 0xFE; i2c_start(); ask = i2c_send_byte(add); for(BYTE i=0; i Ova funkcija je stvorena za eksperimentiranje. Potrebno je pokazivač na niz podataka od jednog bajta, broj ovih bajtova i adresu čipa. Zapravo pokušaj prijenosa svih podataka u jednoj sesiji, a ne jednog bajta po sesiji. Funkcija radi, ali nije odgovarala LCD ekranu. Vratimo se sada na glavni program. Nakon povezivanja biblioteka, propisujemo adresu mikrokola. Zatim kreiramo tri funkcije po analogiji sa lcd.h. Razlika je samo u principu prenosa podataka.
void com(BYTE com) (com |= 0x08; // P3 na jedan, tako da je pozadinsko osvjetljenje uključeno pcf8574_byte_out(com, ADD); // Izlaz podataka com |= 0x04; // E do jedan pcf8574_byte_out(com, ADD); // Izlaz podataka com &= 0xFB; // E na nulu pcf8574_byte_out(com, ADD); // Izlaz podataka } Ova funkcija samo šalje komande displeju. Stoga se prvi red pojavio sa logičnim dodatkom naredbe iz 0x08. Ova biaka je potrebna zbog činjenice da bajtove ne prenosimo direktno na LCD port, već preko našeg repetitora. Odnosno, ako smo predali bajt, a onda trebamo izbaciti samo jedan bit, onda, ako želite, dodijelite potrebni bit prethodnom bajtu i pošaljite ga ponovo na port. Ovo je takvo zamrzavanje. Sabiranje sa 0x08 je neophodno da bi se trajno zadržao jedan na trećoj cifri. Sjećate se pozadinskog osvjetljenja? Upravo ovaj dodatak uključuje pozadinsko osvjetljenje. Nakon što pozivamo funkciju prijenosa bajta na sabirnicu. O tome je gore pisano. Zatim prenosimo bajt preko magistrale u mikrokolo. Zatim, trebali biste ga postaviti na jedinicu E, što zapravo čini logično dodavanje bajta sa 0x04. Nakon nuliranja E. Dakle, možete poslati bilo koju naredbu displeju samo prosljeđivanjem same naredbe kao argumenta. void init(void) (_delay_ms(30); // Pauza nakon uključivanja com(0x30); // Prebacivanje na 4-bitni način rada _delay_us(40); // Kašnjenje za izvršenje naredbe com(0x30); // Prebacivanje na 4-bitni način rada _delay_us(40); // Kašnjenje za izvršenje naredbe com(0x30); // Prebacivanje na 4-bitni način rada _delay_us(40); // Kašnjenje za izvršenje naredbe com(0x20); // Prebacivanje na 4-bitni način rada _delay_us(40); // Kašnjenje za izvršenje naredbe com(0x20); // Postavi parametre com(0x80); // Postavi parametre com(0x00); // Isključite ekran com(0x80); // Isključite ekran com(0x00); // Obrišite ekran com(0x10); // Obrišite ekran com(0x00); // Postavite način unosa com(0x60); // Postavite način unosa com(0x00); // Uključite ekran sa odabranim kursorom com(0xC0); // Uključite ekran sa odabranim kursorom } Ova funkcija se odnosi samo na inicijalizaciju displeja. Redoslijed naredbi je preuzet iz datasheet-a na LCD zaslonu. void char_out(BYTE podaci) ( BYTE data_h = ((podaci & 0xF0) + 0x09); BYTE data_l = ((podaci // Prodaj visoka 4 bita data_h |= 0x04; pcf8574_byte_out(data_h, ADD); // Propusti visoka 4 bita data_h &= 0xF9; pcf8574_byte_out(data_h, ADD); // Propusti visoka 4 bita pcf8574_byte_out(data_l, ADD); // Propusti niska 4 bita data_l |= 0x04; pcf8574_byte_out(data_l, ADD); // Propusti niska 4 bita data_l &= 0xF9; pcf8574_byte_out(data_l, ADD); // Propusti niska 4 bita } Ova funkcija šalje podatke na LCD. Izvodi se na isti način kao i komande, samo što prijenos bajta ide prvo s visokim grickanjem, a zatim s niskim. A ostalo je isto. void str_out(BYTE *str) ( while((*str) != "\0") ( char_out(*str); str++; ) ) Pa, ova funkcija je isključivo za prosljeđivanje niza na ekran. Zapravo, to nema nikakve veze sa našom temom.

Projekat za AtmelStudio 6.2 

Nadležni 01.08.15 17:11

Nedostaje zarez. Tačno: "HELLO WORLD!" I ovaj uređaj je izoštren ne samo za HD44780. Pull-up otpornici se postavljaju sa strane mastera. Prema specifikaciji, podaci se zapisuju u LCD kontroler u opadajućem E. Odavde je prva funkcija pojednostavljena: void com(BYTE com) ( com |= 0x08; // pozadinsko osvjetljenje pcf8574_byte_out(com | 0x04, ADD);/ / Izlaz podataka pcf8574_byte_out(com , ADD); // E na nulu ) Da, a ostatak također može biti znatno manji. Na primjer, void char_out(BYTE podaci) bit će samo dva poziva, a još više bez dodatnih varijabli. Inicijalizacija LCD-a je izvršena uz kršenje specifikacije vremena.

Alexey 15.08.2015 19:11

Zbog nedostatka zareza, ekran neće patiti. Ovaj uređaj je upravo dizajniran posebno za displeje sa ovim ili sličnim kontrolerom. Ali to je mikro krug koji je zapravo jednostavan proširivač portova. Slazem se oko E. Potrebne su dodatne varijable. Ako prenesete argument funkciji i izvršite neke radnje s logikom, može doći do kvarova. Već sam naišao na ovo. Inicijalizacija se vrši bez kršenja vremena. U dokumentaciji piše da postoji pauza od 40 µs između komandi. Zbog činjenice da prijenos ide preko i2c magistrale, koja je pak softverska i spora, periodi su više nego ispunjeni. Ako niste previše lijeni, onda napišite svoju verziju i pošaljite mi je. Ja ću to objaviti. Na kraju, ovaj sajt je namenjen amaterskoj publici i svako ko želi može da iznese svoje mišljenje i viziju života MK.

Alexey 15.08.06 09:14

Dodati tajmingi prilikom inicijalizacije displeja na opasku uvaženog "Kompetentnog"

Dmitrij 16.06.14 21:57

Zdravo Alexey. Možete dodati biblioteku u generator koda za rad sa PCF8574.

Alexey 16.06.14 22:32

Ja ću misliti.))

ruslan 16.12.21 19:54
Alexey 21.12.16 21:53

Oh da. Posebno kod na asme. Arduiners će to cijeniti u potpunosti)))

Py.sy.
Čak i ako ne gledate asm, tamo je program napisan pod PIC kontrolerom. Da li je ovo "veoma" korisna informacija za AVR ljude? posebno za početnike))) Nemam ništa protiv PIC-a, ali čak i PIC i AVR imaju različite asm. A što se tiče detalja o LCD displeju, možete pogledati))) Istina, napisao sam i pod CVAVR, ali sve komande su sortirane i poređane. Ali u svakom slučaju, odlučite sami gdje je jasnije napisano))) Autor piše, čitalac bira.

GeK 04.01.17 12:52

"Adresa I2C čipa (podrazumevana je 0x4E"

Gornja 4 bita adrese su fiksna,
prefiks PCF8574 je 0100, a PCF8574A je 0111
Niža 3 bita ovise o stanju ulaza mikrokola A2-A0. Prema zadanim postavkama, sva 3 kratkospojnika su otvorena, odnosno adresa mikrokola je 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 0x27 0x3F

Alexey 17.01.2017 14:27

Nešto si pomešao.
Izvod iz dokumentacije za mikrokolo

0b01001110 je 0x4E
Dakle, sve je u redu. A ako trebate promijeniti adresu, onda je samo trebate promijeniti u definiciji.

Jurij 17.12.14 21:26

Dobar dan! Takođe možete koristiti lcdgotoxy i lcdclear funkcijski kod za rad sa adapterom na PCF8574.

Aleksandar 18.05.20 18:14

Dobar dan! kako se prikazuje ruski tekst.

Alexey 20.05.18 23:04

Ovo je domaći displej iz MELT-a. U sjećanje ima ušiveno ćirilično pismo.

Aleksandar 18.05.21 04:55

Dobar dan! Pišem kao što ste napisali u Projektu za AtmelStudio 6.2 "ËPҐBET MҐP!" izlazi dobro
i ako napišete "HELLO WORLD!" iznosi sve vrste gluposti. imam dva
varijanta displeja u jednom je sašivena ćirilicom. drugi kineski.

Alexey 21.05.18 09:22

Prvo bih napisao program za testiranje. Numeracija cjelokupne memorije sa prikazom znakova i njihovih adresa. A onda shvati u čemu je problem. Najvjerovatnije se tabela znakova ne podudara sa ascii tablicom.

Andrej 18.09.03 08:32

Dobar dan!

Zar ne možete postaviti šemu za Proteus?

Andrej 18.09.03 10:22

Ili se niko nije prijavio u Proteuse?

Andrej 18.09.03 10:56

Shvatio main_init

Pavel 30.05.19 23:35

Zanimljiva stvar, adresa ekrana je 0x4E, a ako je isti displej povezan na arduino, onda je adresa 0x27

Pavel 31.05.19 11:04

Hvala vam puno na vašem radu! Pregledao sam cijeli internet i nijedan od gornjih primjera ne radi osim vašeg. Jedina stvar je da u arhivi projekta _delay_ kašnjenja nisu registrovana u funkciji inicijalizacije prikaza i ne radi u skladu s tim

Alexey 01.06.19 09:52

Pa, ovo je više demo projekat. Za dobro, morate ponovo napisati axlib biblioteku, ali s obzirom na činjenicu da se STM32 i STM8 kreću skokovima i granicama, AVR uopšte nema smisla.

Pavel 19.06.05 12:57

STM nema DIP pakete, teže je napraviti štampane ploče. Za moje projekte, AVR mogućnosti su dovoljne sa marginom, mnogo toga može stati na jedan Atmega 8

Alexey 19.06.05 15:20

Da, ali koliko koštaju Atmega8 i stm8s003)))

Dmitry 06/07/19 00:41

Zdravo Alexey.
Možete li mi reći kako da pročitam status porta sa pcf8574?
Želim da napravim eksternu jedinicu, 8 GPIO na i2c magistrali - to je to.

Dmitrij 19.06.07 17:56

Ja ću sam odgovoriti
Funkcija vraća bajt - stanje portova mikrokola
uint8_t pcf8574_byte_rcv(uint8_t addr)
{
uint8_t ask = ACK;
addr |= 0b01; //PROČITAJ
uint8_tdata=0;
i2c_start();
ask = i2c_send_byte(addr);
if(!ask) data = i2c_read_byte(NACK);
i2c_stop();

povratne podatke;
}

Pavel 06/07/19 20:37

Koliko košta, 150 rubalja, po cijeni releja općenito), ali kako uzgajate ploče za STM? LUT je nepouzdan, CNC ruter nije siguran šta će trebati (nisam probao)

LCD displej- čest gost u arduino projektima. Ali u složenim krugovima možemo imati problem nedostatka Arduino portova zbog potrebe za povezivanjem štita koji ima puno pinova. Izlaz u ovoj situaciji može biti I2C/IIC adapter koji povezuje gotovo standardni Arduino 1602 štit na Uno, Nano ili Mega ploče sa samo 4 pina. U ovom članku ćemo vidjeti kako možete povezati LCD ekran s I2C sučeljem, koje biblioteke možete koristiti, napisati kratki primjer skice i analizirati tipične greške.

Displej od tečnih kristala LCD 1602 je dobar izbor za izlaz znakovnih nizova u raznim projektima. Jeftin je, postoje razne modifikacije s različitim bojama pozadinskog osvjetljenja, lako možete preuzeti gotove biblioteke za Arduino skice. Ali glavni nedostatak ovog ekrana je činjenica da ekran ima 16 digitalnih pinova, od kojih je potrebno najmanje 6. Stoga korištenje ovog LCD ekrana bez i2c dodaje ozbiljna ograničenja za Arduino Uno ili Nano ploče. Ako nema dovoljno kontakata, morat ćete kupiti Arduino Mega ploču ili sačuvati kontakte, uključujući povezivanje zaslona putem i2c.

Kratak opis LCD 1602 pinova

Pogledajmo bliže LCD1602 pinove:

Svaki od zaključaka ima svoju svrhu:

  1. Ground GND;
  2. Napajanje 5 V;
  3. Podešavanje kontrasta monitora;
  4. Komanda, podaci;
  5. Pisanje i čitanje podataka;
  6. omogućiti;

7-14. Podatkovne linije;

  1. Plus pozadinsko osvetljenje;
  2. Minus pozadinsko osvetljenje.

Specifikacije ekrana:

  • Simbolički tip prikaza, moguće je učitavanje simbola;
  • Neonska svjetla;
  • Controller HD44780;
  • Napon napajanja 5V;
  • Format 16x2 karaktera;
  • Raspon radne temperature od -20C do +70C, opseg temperature skladištenja od -30C do +80C;
  • Ugao gledanja 180 stepeni.

Dijagram ožičenja za LCD na Arduino ploču bez i2C

Standardna šema za direktno povezivanje monitora na Arduino mikrokontroler bez I2C je sljedeća.

Zbog velikog broja kontakata koje treba spojiti, možda neće biti dovoljno prostora za povezivanje potrebnih elemenata. Korištenje I2C smanjuje broj žica na 4 i zauzetih pinova na 2.

Gdje kupiti LCD ekrane i štitove za arduino

LCD ekran 1602 (i verzija iz 2004. godine) je prilično popularan, tako da ga lako možete pronaći kako u domaćim internet prodavnicama tako i na stranim sajtovima. Evo nekoliko linkova do najdostupnijih opcija:

LCD1602+I2C modul plavog ekrana kompatibilan sa Arduinom Jednostavan LCD1602 displej (zeleno pozadinsko osvetljenje) jeftiniji od 80 rubalja Veliki ekran LCD2004 sa I2C HD44780 za arduino (plavo i zeleno pozadinsko osvjetljenje)
Displej 1602 sa IIC adapterom i plavim pozadinskim osvetljenjem Druga verzija LCD1602 sa zalemljenim I2C modulom Port IIC/I2C/TWI/SPI adapterski modul za 1602 Shield kompatibilan s Arduinom
RGB ekran sa pozadinskim osvetljenjem! LCD 16×2 + tastatura + zvučni štit za Arduino Štit za Arduino sa dugmadima i ekranom LCD1602 LCD 1602 LCD ekran za 3D štampač (Smart Controller za RAMPS 1.4, Text LCD 20×4), modul čitača SD i MicroSD kartica

Opis I2C protokola

Prije nego razgovaramo o povezivanju ekrana na arduino preko i2c adaptera, hajde da ukratko govorimo o samom i2C protokolu.

I2C / IIC(Inter-Integrated Circuit) je protokol koji je prvobitno kreiran za međusobno povezivanje integrisanih kola unutar elektronskog uređaja. Razvoj pripada Philipsu. Protokol i2c baziran je na korištenju 8-bitne magistrale, koja je potrebna za povezivanje blokova u upravljačkoj elektronici, i sistema adresiranja, zahvaljujući kojem možete komunicirati sa više uređaja preko istih žica. Jednostavno prenosimo podatke na jedan ili drugi uređaj, dodajući identifikator željenog elementa u pakete podataka.

Najjednostavniji I2C krug može sadržavati jedan master (najčešće Arduino mikrokontroler) i nekoliko slave (na primjer, LCD zaslon). Svaki uređaj ima adresu u rasponu od 7 do 127. Ne bi trebalo da postoje dva uređaja sa istom adresom u istoj šemi.

Arduino ploča podržava i2c u hardveru. Možete koristiti pinove A4 i A5 za povezivanje uređaja pomoću ovog protokola.

Postoji nekoliko prednosti rada sa I2C:

  • Za rad su potrebne samo 2 linije - SDA (linija podataka) i SCL (voda sata).
  • Povezivanje velikog broja vodećih uređaja.
  • Smanjenje vremena razvoja.
  • Za upravljanje čitavim skupom uređaja potreban je samo jedan mikrokontroler.
  • Mogući broj mikrokola povezanih na jednu magistralu ograničen je samo maksimalnim kapacitetom.
  • Visok stepen sigurnosti podataka zahvaljujući specijalnom filteru za suzbijanje prenapona ugrađenom u kola.
  • Jednostavna procedura za dijagnosticiranje novih kvarova, brzo otklanjanje problema.
  • Sabirnica je već integrisana u sam Arduino, tako da nema potrebe za razvojem dodatnog interfejsa magistrale.

Nedostaci:

  • Na liniji postoji kapacitivna granica - 400 pF.
  • Poteškoće u programiranju I2C kontrolera ako postoji nekoliko različitih uređaja na sabirnici.
  • Uz veliki broj uređaja, postaje teško lokalizirati kvar ako jedan od njih pogrešno postavi stanje niske razine.

i2c modul za LCD 1602 Arduino

Najbrži i najprikladniji način korištenja i2c zaslona u arduinu je kupovina gotovog ekrana s ugrađenom podrškom za protokol. Ali ovi ekrani nisu mnogo i nisu jeftini. Ali veliki broj raznih standardnih ekrana je već objavljen. Stoga je najpovoljnija i najpopularnija opcija danas kupovina i korištenje zasebnog I2C modula - adaptera koji izgleda ovako:

Na jednoj strani modula vidimo i2c pinove - uzemljenje, napajanje i 2 za prenos podataka. Na drugom adapteru vidimo eksterne konektore za napajanje. I, naravno, postoji mnogo pinova na ploči, uz pomoć kojih je modul zalemljen na standardne pinove ekrana.


I2c izlazi se koriste za povezivanje na Arduino ploču. Ako je potrebno, priključite eksterno napajanje za rasvjetu. Sa ugrađenim trimerom možemo podesiti podesive vrijednosti kontrasta J

Na tržištu možete pronaći LCD 1602 module sa već zalemljenim adapterima, njihova upotreba je maksimalno pojednostavljena. Ako ste kupili poseban adapter, morat ćete ga prethodno zalemiti na modul.

Povezivanje LCD ekrana na Arduino preko I2C

Za povezivanje vam je potrebna sama Arduino ploča, displej, matična ploča, spojne žice i potenciometar.

Ako koristite poseban poseban i2c adapter, prvo ga morate zalemiti na modul ekrana. Tu je teško pogriješiti, možete se voditi takvom šemom.


LCD monitor koji podržava i2c povezan je na ploču pomoću četiri žice - dvije žice za podatke, dvije žice za napajanje.

  • GND pin je povezan sa GND na ploči.
  • VCC pin je 5V.
  • SCL je spojen na pin A5.
  • SDA je spojen na pin A.

I to je sve! Bez paučine žice, u kojoj se vrlo lako zbuniti. Istovremeno, svu složenost implementacije i2C protokola jednostavno možemo povjeriti bibliotekama.

Biblioteke za rad sa i2c LCD ekranom

Za povezivanje Arduina sa LCD 1602 preko I2C magistrale, trebat će vam najmanje dvije biblioteke:

  • Wire.h biblioteka za rad sa I2C već je dostupna u standardnom Arduino IDE programu.
  • LiquidCrystal_I2C.h biblioteka, koja uključuje širok izbor komandi za upravljanje monitorom preko I2C magistrale i omogućava vam da skicu učinite lakšom i kraćom. Potrebno je dodatno instalirati biblioteku Nakon povezivanja ekrana potrebno je dodatno instalirati biblioteku LiquidCrystal_I2C.h

Nakon povezivanja svih potrebnih biblioteka sa skicom, kreiramo objekat i možemo koristiti sve njegove funkcije. Za testiranje, učitajmo sljedeću standardnu ​​skicu iz primjera.

#include #include // Povezivanje biblioteke //#include // Povezivanje alternativne biblioteke LiquidCrystal_I2C lcd(0x27,16,2); // Odredite I2C adresu (najčešća vrijednost), kao i parametre ekrana (u slučaju LCD 1602 - 2 reda od 16 znakova svaki //LiquidCrystal_PCF8574 lcd(0x27); // Varijanta za PCF8574 biblioteku void setup( ) ( lcd.init (); // Pokreni prikaz lcd.backlight(); // Poveži pozadinsko osvjetljenje lcd.setCursor(0,0); // Postavi kursor na početak prvog reda lcd.print(" Pozdrav"); // Upišite tekst u prvi red lcd.setCursor(0,1); // Postavite kursor na početak drugog reda lcd.print("ArduinoMaster"); // Upišite tekst u drugi red ) void loop() ( )

Opis funkcija i metoda biblioteke LiquidCrystal_I2C:

  • home() i clear() - prva funkcija vam omogućava da vratite kursor na početak ekrana, druga također, ali istovremeno briše sve što je prije bilo na monitoru.
  • write(ch) - omogućava vam da odštampate jedan karakter ch na ekranu.
  • cursor() i noCursor() - prikaži/sakrij kursor na ekranu.
  • blink() i noBlink() - kursor treperi/ne trepće (ako je njegov prikaz bio ranije omogućen).
  • display() i noDisplay() - omogućava vam da omogućite/onemogućite prikaz.
  • scrollDisplayLeft() i scrollDisplayRight() - skroluje ekran za jedan znak lijevo/desno.
  • autoscroll() i noAutoscroll() - omogućava vam da omogućite/onemogućite režim automatskog pomicanja. U ovom režimu, svaki novi znak se piše na istom mestu, zamenjujući ono što je prethodno bilo napisano na ekranu.
  • leftToRight() i rightToLeft() - Postavlja smjer prikazanog teksta - lijevo na desno ili zdesna nalijevo.
  • createChar(ch, bitmap) - Kreira karakter sa kodom ch (0 - 7) koristeći niz bitmap bitmapa za kreiranje crno-bijelih tačaka.

Alternativna biblioteka za rad sa i2c ekranom

U nekim slučajevima, kada se koristi navedena biblioteka s uređajima opremljenim PCF8574 kontrolerima, može doći do grešaka. U ovom slučaju, biblioteka LiquidCrystal_PCF8574.h može se ponuditi kao alternativa. Proširuje LiquidCrystal_I2C, tako da ne bi trebalo biti nikakvih problema pri korištenju.

Problemi sa povezivanjem i2c LCD ekrana

Ako ne vidite ništa na ekranu nakon učitavanja skice, pokušajte sljedeće korake.

Prvo, možete povećati ili smanjiti kontrast monitora. Često znakovi jednostavno nisu vidljivi zbog kontrasta i pozadinskog osvjetljenja.

Ako to ne pomogne, provjerite ispravnu vezu kontakata, da li je pozadinsko osvjetljenje napajano. Ako ste koristili poseban i2c adapter, onda ponovo provjerite kvalitetu lemljenja kontakata.

Još jedan čest razlog za nedostatak teksta na ekranu može biti pogrešna i2c adresa. Pokušajte prvo promijeniti adresu uređaja u skici sa 0x27 0x20 ili na 0x3F. Različiti proizvođači mogu imati različite zadane adrese. Ako to ne pomogne, možete pokrenuti skicu i2c skenera, koja skenira sve povezane uređaje i određuje njihovu adresu grubom silom. Primjer skice i2c skenera.

Ako ekran i dalje ne radi, pokušajte da odlemite adapter i povežete LCD na uobičajen način.

Zaključak

U ovom članku smo pokrili glavne probleme korištenja LCD ekrana u složenim Arduino projektima kada trebamo sačuvati slobodne pinove na ploči. Jednostavan i jeftin i2c adapter će vam omogućiti da povežete 1602 LCD ekran, koji zauzima samo 2 analogna pina. U mnogim situacijama to može biti veoma važno. Cijena pogodnosti je potreba za korištenjem dodatnog modula - pretvarača i biblioteke. Po našem mišljenju, ovo nije visoka cijena za praktičnost i toplo preporučujemo korištenje ove funkcije u projektima.