i2c ühendus. LCD-ekraani LCM1602 ühendamine I2C-ga Arduinoga

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

2 Arduino LCD-ekraani ühendusskeem I2C protokolli kaudu

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


3 Raamatukogu tööle I2C protokolli kaudu

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

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

Teek toetab LCD-ekraanide standardfunktsioonide komplekti:

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

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

Avame näidise: Failinäidised LiquidCrystal_I2C CustomChars ja muudame seda natuke. Kuvame sõnumi, mille lõpus on vilkuv märk. Kõik eskiisi nüansid on kommenteeritud koodi kommentaarides.

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

Muide, käsuga kirjutatud märgid lcd.createChar(); jäävad ekraani mällu ka pärast toite väljalülitamist. kirjutatakse ekraani 1602 ROM-i.

5 Oma sümbolite loomine LCD-ekraani jaoks

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

6 LCD juhtimine I2C bussi kaudu

Laadige eskiis üles Arduinosse. Ekraanile ilmub meie määratud kiri, mille lõpus on vilkuv kursor.


7 Mis on taga I2C buss

Boonusena kaaluge LCD-ekraanil olevate ladina tähtede "A", "B" ja "C" väljundi ajastusskeemi. Need märgid salvestatakse kuvari ROM-i ja kuvatakse ekraanil lihtsalt nende aadressi ekraanile edastamisega. Diagramm on võetud kuvari väljunditest RS, RW, E, D4, D5, D6 ja D7, st. juba pärast muundurit FC-113 "I2C paralleelsiin". Võib öelda, et sukeldume veidi "sügavamale" "rauasse".


Ajastusskeem ladina tähtede "A", "B" ja "C" kuvamiseks LCD-ekraanil 1602

Diagramm näitab, et kuvari ROM-is olevad märgid (vt andmelehe lk 11, link allpool) edastatakse kahes niblis, millest esimene määrab tabeli veeru numbri ja teine ​​määrab rea numbri. Sellisel juhul "lukustatakse" andmed mööda signaali serva liinil E(Luba) ja rida RS(Register select, register selection) on loogilises ühes olekus, mis tähendab andmeedastust. RS-rea madal olek tähendab juhiste edastamist, mida näeme enne iga märgi edastamist. Sel juhul edastatakse LCD-ekraani asendisse (0, 0) vankri tagasipöördumisjuhise kood, mille saab samuti teada näidiku tehnilist kirjeldust uurides.

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


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

Võib-olla üks populaarsemaid ekraane turul. Ehitatud populaarsele HD44780U kontrollerile. Mudeli nimest järeldub, et ekraan koosneb kahest 16 tähemärgist koosnevast reast. See konkreetne mudel ei toeta vene keelt.

sh2s andmesiin võimaldab ühendada kuni 127 seadet kahe juhtme kaudu ja samal ajal. See I2C on rakendatud PCF8574T kiibil.

Juhtmestiku skeem:

Sinine asi - muutuv takistus, võimaldab reguleerida ekraani kontrasti.

Vasakpoolne hüppaja vastutab ekraani taustvalgustuse eest.

Arduinoga ühendatakse 4 viiguga plokk järgmiselt:

GND-GND
VCC - 5V
SDA - A4 (kui Arduino MEGA, siis D20-le)
SCL - A5 (kui Arduino MEGA, siis D21-le)

Raamatukogu

Sketš

Ekraanil võib olla erinev IIC-aadress, 0x27 asemel võib see osutuda 0x3F-ks. Aadressi täpseks määramiseks võite kasutada i2c seadme skannerit.

#kaasa #kaasa //Määrake LCD-ekraani aadress 0x27, 16 tähemärki, 2 rida LiquidCrystal_I2C lcd(0x27, 16, 2); void setup() ( lcd.init(); // Ekraani lähtestamine // lülitage taustvalgus sisse lcd.backlight(); //Määrake koht, millest alates teksti kuvatakse. lcd.setCursor(2, 0); //väljundrida 1 lcd.print("Tere, maailm!"); //kuvab samamoodi teist rida lcd.setCursor(1, 1); lcd.print("www.sait"); ) tühisilmus () ( )

LCD I2C moodul võimaldab ühendada märgiekraani Arduino plaadiga vaid kahe signaalijuhtmega.

Kasutatud komponendid (osta Hiinast):

. juhtpaneel

. Ühendusjuhtmed

Peamised tehnilised omadused:

Ekraan: tähemärk 16x02 või 20x04
. Valgustus: sinine valgete tähtedega
. Kontrastsus: reguleeritav potentsiomeetriga
. Toitepinge: 5V
. Liides: I2C
. I2C aadress: 0x27
. Mõõdud: 82mm x 35mm x 18mm

Arduinoga ühendamine

Moodul on varustatud nelja kontaktiga 2,54 mm pistikuga

SCL: jadakelli liin (jadakell)

SDA: jadaandmeliin (Serial DAta)

VCC: "+" võimsus

GND: "-" võimsus

Erinevatel kontrolleritel põhinevate Arduino plaatide I2C liidese eest vastutavad tihvtid on erinevad

Selle mooduliga töötamiseks peate installima LiquidCrystal_I2C1602V1 teegi

Laadige alla, pakkige lahti ja kukutage Arduino kausta teekide kausta. Kui teegi lisamise ajal oli Arduino IDE avatud, taaskäivitage keskkond.

Läheme otse visandi juurde. Selles näites kuvame standardse "Tere, maailm!" ja meie kogukonna aadress.

koodi näide:

#kaasa #kaasa LiquidCrystal_I2C lcd(0x27,16,2); /* Määrake kuva aadress ja suurus. 20x04 ekraaniga LCD I2C mooduli kasutamisel ei pea koodis midagi muutma, peate lihtsalt määrama õige mõõtme */ tühine seadistamine() (lcd.init(); // LCD lähtestamine lcd.backlight(); // lülitage taustvalgus sisse // Kursor on 1. rea alguses lcd.print("Tere, maailm!"); // Kuva teksti lcd setCursor (0, 1); // Viige kursor 2. rea algusesse lcd.print("sait"); // Kuva tekst ) tühine silmus () { }

Oma sümbolite loomine

Tekstiväljundi nuputasime, ingliskeelse tähestiku tähed on ekraani sees kontrolleri mällu õmmeldud ja nendega probleeme pole. Aga mida teha, kui soovitud märki pole kontrolleri mälus?

Vahet pole, vajaliku märgi saab käsitsi teha. See meetod, mis on osaliselt piiratud 7 tähemärgiga, aitab lahendada väljundprobleemi.

Vaadeldavatel kuvadel on lahtri eraldusvõime 5x8 pikslit. Kõik sümboli loomise ülesanne on kirjutada natuke mask ja asetada sellesse ühed kohtades, kus punktid peaksid põlema ja nullid, kus mitte.

Allolevas näites joonistame naeratava näo.

koodi näide:

//Testitud Arduino IDE 1.0.5 peal // Lisage vajalikud teegid#kaasa #kaasa // Naeratuse sümbol Bitmask baidi naeratus = ( B00010, B00001, B11001, B00001, B11001, B00001, B00010, ); LiquidCrystal_I2C lcd(0x27,20,4); // Määrake kuva aadress ja suurus. tühine seadistamine() (lcd.init(); // LCD lähtestamine lcd.backlight(); // lülitage taustvalgus sisse // Loo sümboli number 0 lcd.createChar(1, naeratus); lcd.setCursor(0, 0); // Viige kursor 1. rea algusesse lcd.print("\1"); // Kuva emotikon (märk number 1) - "\1") tühine silmus () { }

Programm sümbolite hõlpsaks loomiseks

Kommentaaridesse viskas kogukonna liige märgigeneraatori lingi

Sain siia heast Chip Resistori poest teise seadme õppimiseks ja selle kasulikes seadmetes kasutamiseks. See seade osutus teravamaks, et juhtida LCD-ekraani HD44780 kontrolleri juhtimisel 4-bitises režiimis. Selleks on plaadile paigaldatud mikroskeem, mis on I2C siini muundur paralleelseks 8-bitiseks pordiks.

Tahvel on lahutatud nii, et seda saab kohe LCD-ekraaniga ristada. Sisend on toide ja I2C liinid. Plaadil on koheselt SCL ja SDA liinidel tõmbetakistid, potentsiomeeter kontrasti reguleerimiseks ja kuvari enda toide.

Parempoolne hüppaja lülitab taustvalgustuse sisse/välja. Seejärel koostati testriga relvastatud järgmine plaat. Mooduliga tutvudes selgus, et P3 juhib taustvalgustust. Kui hüppaja on seadistatud, lülitab 1 taustvalgustuse sisse ja 0 välja. Kui hüppaja on eemaldatud, on taustvalgus alati välja lülitatud. Lisaks otsustati axlib teeki täiendada funktsioonidega I2C siiniga töötamiseks (tarkvara juurutamine) ja PCF8574 kiibi juhtimise funktsioonidega. Lühidalt, kuidas moodul töötab. Baitide paralleelseks väljastamiseks tuleb selleks saata mikroskeemi aadress I2C siinile (vaikimisi on see 0x4E. Aadressi saab muuta ka plaadile hüppajate jootmisega ja kolme vähima väärtuse muutmisega aadressi olulised numbrid), saadetakse pärast ACK-i saamist andmebait. Pärast seda, kui kiip vastab ACK-ga, ilmub bait kiibi paralleelporti. Vedelkristallekraani juhtimiseks võtsin funktsioonid axlib teegist ja tegin need veidi ümber, et töötada koos I2C siiniga. #kaasa #kaasa #kaasa #kaasa #define ADD 0x4E // Kiibi aadress /* LCD-kiip RS P0 RW P1 ET P2 D4 P4 D5 P5 D6 P6 D7 P7 Taustvalgustus on ühendatud kontaktiga P3. 1 sisse, 0 välja */ // Andmete väljund com |= 0x04; // E ühele pcf8574_byte_out(com, ADD); // Andmete väljund com &= 0xFB; // E nulli pcf8574_byte_out(com, ADD); // Andmete väljund) void init(void) ( _delay_ms(30); com(0x30); _delay_us(40); com(0x30); // Lülitumine 4-bitisele režiimile _delay_us(40); // Käsu täitmise viivitus com(0x30); // Lülitumine 4-bitisele režiimile _delay_us(40); // Käsu täitmise viivitus com(0x20); // Lülitumine 4-bitisele režiimile _delay_us(40); // Käsu täitmise viivitus com(0x20); // Määrake valikud com(0x80); // Määrake valikud com(0x00); // Lülita ekraan välja com(0x80); // Lülita ekraan välja com(0x00); // Ekraani tühjendamine com(0x10); // Ekraani tühjendamine com(0x00); com(0x60); // Sisestusrežiimi määramine com(0x00); com(0xC0); // Lülitage ekraan valitud kursoriga sisse) void char_out(BYTE data) ( BYTE data_h = ((andmed & 0xF0) + 0x09); BYTE data_l = ((andmed // Pass high 4 bits data_h |= 0x04; pcf8574_byte_out(data_h, ADD); // Kõrge läbimine 4 bitti // Kõrge läbimine 4 bitti // Pass low 4 bits // Pass low 4 bits // Pass low 4 bits) void str_out(BYTE *str) ( while((*str) != "\0") ( char_out(*str); str++; ) ) int main(void) ( init(); str_out("PҐBET MҐP!" ); samas(1) ( ) ) Täpselt see, mis siin toimub. Esiteks lisame teegid I2C ja PCF8574 jaoks. Ma kirjutasin juba I2C-st, nii et ma enam risti ei löö, aga ma ütlen teile, mida PCF8574.h. Raamatukogu sisaldab ainult kolme funktsiooni.
BYTE pcf8574_test(BYTE add) ( BAIT ask = ACK; add &= 0xFE; i2c_start(); ask = i2c_send_byte(add); i2c_stop(); return ask; ) Esimene funktsioon kirjutati selleks, et kontrollida, kas seade on siinis. Põhimõtteliselt saab selle abil otsida mis tahes bussis asuvat seadet. Funktsioon võtab soovitud seadme aadressi ja kui see vastab, tagastab see nulli. Kui selle aadressiga seadet siinis pole, tagastab see ühe.
BYTE pcf8574_byte_out(BYTE data, BYTE add) ( BAIT ask = ACK; add &= 0xFE; i2c_start(); ask = i2c_send_byte(add); if(!ask) ask = i2c_send_byte(data);(i2c_stop); ) Seda funktsiooni on juba puhtalt selle kiibi jaoks teritatud. Argumentidena edastatakse sellele siinile edastamiseks bait ja mikroskeemi aadress. Funktsioon esitab esmalt päringu aadressil oleva kiibi kohta ja saadab seejärel baidi. Kui kiip võttis baidi vastu ja vastas ACK-ga, siis funktsioon lõpetab kiibi ja tagastab nulli kui edukat baidi. Ja mikroskeem väljastab sel ajal selle baidi oma paralleelporti. Vastasel juhul saame NACKi ja tagastame ühe, ülekanne ebaõnnestus.
BYTE pcf8574_str_out(BYTE *andmed, BYTE col, BAIT lisa See funktsioon loodi katsetamiseks. Selleks kulub kursor ühebaidise andmemassiivi, nende baitide arvu ja kiibi aadressi juurde. Tegelikult on katse edastada kõik andmed ühe seansi jooksul, mitte üks bait seansi kohta. Funktsioon töötab, kuid see ei sobinud LCD-ekraanile. Nüüd pöördume tagasi põhiprogrammi juurde. Pärast raamatukogude ühendamist määrame mikroskeemi aadressi. Järgmisena loome kolm funktsiooni analoogselt lcd.h-ga. Erinevus on ainult andmete edastamise põhimõttes.
void com(BYTE com) ( com |= 0x08; // P3 ühele, et taustvalgus oleks sisse lülitatud pcf8574_byte_out(com, ADD); // Andmete väljund com |= 0x04; // E ühele pcf8574_byte_out(com, ADD); // Andmete väljund com &= 0xFB; // E nulli pcf8574_byte_out(com, ADD); // Andmete väljund } See funktsioon saadab ekraanile ainult käsud. Seetõttu ilmus esimene rida koos käsu loogilise lisamisega 0x08-st. See byaka on vajalik tänu sellele, et me ei edasta baite otse LCD-porti, vaid meie repiiteri kaudu. See tähendab, et kui esitasime baidi ja siis peame väljastama ainult ühe biti, siis kui soovite, määrab see vajaliku biti eelmisele baidile ja saadab selle uuesti porti. See on selline külmutamine. 0x08-ga liitmine on vajalik, et kolmandal numbril püsiks üks püsida. Kas mäletate taustvalgustust? Just see lisand lülitab sisse taustvalgustuse. Pärast seda, kui me kutsume funktsiooni baidi ülekandmiseks siinile. Sellest on eespool kirjutatud. Seejärel kanname baidi üle siini mikrolülitusse. Järgmisena peaksite määrama selle ühikuks E, mida tegelikult teeb baidi loogiline lisamine väärtusega 0x04. Peale nullimist E. Seega saad mis tahes käsu kuvale saata ainult käsu enda argumendina edastamisega. void init(void) ( _delay_ms(30); // Paus pärast sisselülitamist com(0x30); // Lülitumine 4-bitisele režiimile _delay_us(40); // Käsu täitmise viivitus com(0x30); // Lülitumine 4-bitisele režiimile _delay_us(40); // Käsu täitmise viivitus com(0x30); // Lülitumine 4-bitisele režiimile _delay_us(40); // Käsu täitmise viivitus com(0x20); // Lülitumine 4-bitisele režiimile _delay_us(40); // Käsu täitmise viivitus com(0x20); // Määrake valikud com(0x80); // Määrake valikud com(0x00); // Lülita ekraan välja com(0x80); // Lülita ekraan välja com(0x00); // Ekraani tühjendamine com(0x10); // Ekraani tühjendamine com(0x00); // Sisestusrežiimi määramine com(0x60); // Sisestusrežiimi määramine com(0x00); // Lülitage ekraan valitud kursoriga sisse com(0xC0); // Lülitage ekraan valitud kursoriga sisse } See funktsioon puudutab ainult kuva lähtestamist. Käskude jada võetakse LCD-ekraanil olevalt andmelehelt. void char_out(BYTE data) ( BYTE data_h = ((andmed & 0xF0) + 0x09); BYTE data_l = ((andmed // Pass high 4 bits data_h |= 0x04; pcf8574_byte_out(data_h, ADD); // Kõrge läbimine 4 bitti andme_h &= 0xF9; pcf8574_byte_out(andmed_h, ADD); // Kõrge läbimine 4 bitti pcf8574_byte_out(andmed_l, ADD); // Pass low 4 bits andmed_l |= 0x04; pcf8574_byte_out(andmed_l, ADD); // Pass low 4 bits data_l &= 0xF9; pcf8574_byte_out(andmed_l, ADD); // Pass low 4 bits } See funktsioon saadab andmed LCD-ekraanile. Seda tehakse samamoodi nagu käske, välja arvatud see, et baidi edastamine toimub kõigepealt kõrge nibble'iga ja seejärel madalaga. Ja ülejäänud on sama. void str_out(BYTE *str) ( while((*str) != "\0") ( char_out(*str); str++; ) ) Noh, see funktsioon on mõeldud ainult stringi ekraanile edastamiseks. Tegelikult pole sellel meie teemaga midagi pistmist.

Projekt AtmelStudio 6.2 jaoks

Pädev 01.08.15 17:11

Koma on puudu. Õige: "TERE MAAILMA!" Ja see seade on teritatud mitte ainult HD44780 jaoks. Tõmbetakistid asetatakse kapteni küljelt. Vastavalt spetsifikatsioonile kirjutatakse andmed LCD-kontrollerisse kahanevas E-s. Siit on esimene funktsioon lihtsustatud: void com(BYTE com) ( com |= 0x08; // taustvalgustus pcf8574_byte_out(com | 0x04, ADD);/ / Andmeväljund pcf8574_byte_out(com , ADD); // E to zero ) Jah, ja ülejäänud võib olla ka oluliselt väiksem. Näiteks tühine char_out(BYTE data) on vaid kaks kõnet ja veelgi enam ilma täiendavate muutujateta. LCD lähtestamine viidi läbi ajastuse spetsifikatsiooni rikkumistega.

Aleksei 02.08.15 19:11

Koma puudumise tõttu ekraan ei kannata. See seade on lihtsalt loodud spetsiaalselt selle või sarnase kontrolleriga kuvarite jaoks. Kuid just mikroskeem on tegelikult lihtne pordilaiend. Nõustun E suhtes. Vaja on täiendavaid muutujaid. Kui annate funktsioonile argumendi ja sooritate mõned toimingud loogikaga, võib esineda tõrkeid. Sellega juba kokku puutunud. Initsialiseerimine toimub ilma ajastuse rikkumisteta. Dokumentatsioon ütleb, et käskude vahel on 40 µs paus. Tänu sellele, et ülekanne käib läbi i2c siini, mis omakorda on tarkvaraline ja aeglane, on perioodid enam kui täidetud. Kui sa pole liiga laisk, siis kirjuta oma versioon ja saada see mulle. Ma avaldan selle. Lõppkokkuvõttes on see sait mõeldud amatöörpublikule ja kõik soovijad saavad avaldada oma arvamust ja nägemust MK elust.

Aleksei 06.08.15 09:14

Lisatud ajastused kuva lähtestamisel lugupeetud "Pädeva" märkuse järgi

Dmitri 14.06.16 21:57

Tere, Aleksei. PCF8574-ga töötamiseks saate koodigeneraatorisse lisada teegi.

Aleksei 14.06.16 22:32

ma mõtlen.))

ruslan 21.12.16 19:54
Aleksei 21.12.16 21:53

Oh jah. Eriti asme kood. Arduiners hindab seda täiel rinnal)))

Py.sy.
Isegi kui te ei vaata asm-i, siis seal on programm kirjutatud PIC-kontrolleri alla. Kas see on "väga" kasulik teave AVR-i inimestele? eriti algajatele))) Mul pole PIC-i vastu midagi, kuid isegi PIC-il ja AVR-il on erinevad asm. Ja mis puutub LCD-ekraani üksikasjadesse, siis saate vaadata))) Tõsi, ma kirjutasin selle ka CVAVR-i alla, kuid kõik käsud olid sorteeritud ja sorteeritud. Kuid igal juhul otsustage ise, kus see on selgemalt kirjutatud))) Autor kirjutab, lugeja valib.

GeK 04.01.17 12:52

"I2C kiibi aadress (vaikimisi on 0x4E"

Aadressi ülemised 4 bitti on fikseeritud,
eesliide PCF8574 on 0100 ja PCF8574A on 0111
Alumised 3 bitti sõltuvad A2-A0 mikroskeemi sisendite olekust. Vaikimisi on kõik 3 hüppajat avatud, mikroskeemi aadress on 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

Aleksei 04.01.17 14:27

Sa ajasid midagi segamini.
Väljavõte mikrolülituse dokumentatsioonist

0b01001110 on 0x4E
Nii et siin on kõik õige. Ja kui teil on vaja aadressi muuta, peate selle lihtsalt määratluses muutma.

Juri 14.12.17 21:26

Head päeva! Samuti saate PCF8574 adapteriga töötamiseks kasutada funktsioonikoode lcdgotoxy ja lcdclear.

Aleksander 20.05.18 18:14

Head päeva! kuidas kuvada venekeelset teksti.

Aleksei 20.05.18 23:04

Tegemist on kodumaise väljapanekuga firmalt MELT. Talle on mällu õmmeldud kirillitsa tähestik.

Aleksander 21.05.18 04:55

Head päeva! Kirjutan nagu teie projektis AtmelStudio 6.2 "ЁPҐBET MҐP!" väljastab hästi
ja kui kirjutate "HELLO WORLD!" toob välja igasuguseid lollusi. mul on kaks
kuvarid ühes on õmmeldud kirillitsas. teine ​​hiinlane.

Aleksei 21.05.18 09:22

Kirjutaksin kõigepealt testprogrammi. Kogu mälu loendus koos märkide ja nende aadresside kuvamisega. Ja siis mõista, milles probleem. Tõenäoliselt ei ühti tähemärkide tabel ascii tabeliga.

Andrei 03.09.18 08:32

Tere päevast!

Kas te ei saa Proteuse skeemi üles laadida?

Andrei 03.09.18 10:22

Või keegi ei registreerunud Proteuse'is?

Andrei 03.09.18 10:56

Arvas välja main_init

Pavel 30.05.19 23:35

Huvitav asi, kuva aadress on 0x4E ja kui sama ekraan on ühendatud arduinoga, siis on aadress 0x27

Pavel 31.05.19 11:04

Tänan teid väga teie töö eest! Olen kogu Internetist vaadanud ja ükski ülaltoodud näidetest ei tööta, välja arvatud teie näide. Ainus asi on see, et projekti arhiivis ei registreerita kuva lähtestamise funktsioonis _delay_ viivitusi ja see ei tööta vastavalt

Aleksei 01.06.19 09:52

Noh, see on rohkem demoprojekt. Igaks juhuks peate axlib teegi ümber kirjutama, kuid arvestades asjaolu, et STM32 ja STM8 liiguvad hüppeliselt, pole AVR-il üldse mõtet.

Pavel 05.06.19 12:57

STM-il pole DIP-pakette, trükkplaate on keerulisem teha. Minu projektide jaoks piisab varuga AVR võimalustest, ühele Atmega 8-le mahub palju

Aleksei 05.06.19 15:20

Jah, aga kui palju Atmega8 ja stm8s003 maksavad)))

Dmitri 06.07.19 00:41

Tere Aleksei.
Palun öelge mulle, kuidas lugeda pcf8574 pordi olekut?
Ma tahan teha välise üksuse, 8 GPIO-d i2c siinil - see on kõik.

Dmitri 07.06.19 17:56

vastan ise
Funktsioon tagastab baidi – mikroskeemide portide oleku
uint8_t pcf8574_byte_rcv(uint8_t addr)
{
uint8_t ask = ACK;
addr |= 0b01; //LOE
uint8_tdata=0;
i2c_start();
ask = i2c_send_byte(addr);
if(!ask) data = i2c_read_byte(NACK);
i2c_stop();

tagastusandmed;
}

Pavel 06.07.19 20:37

Kui palju see maksab, 150 rubla, relee hind üldiselt), aga kuidas STM-i jaoks plaate aretada? LUT on ebausaldusväärne, CNC ruuter pole kindel, mida see võtab (ei proovinud)

LCD ekraan- sage külaline arduino projektides. Kuid keerulistes ahelates võib meil tekkida Arduino portide puudumise probleem, kuna on vaja ühendada kilp, millel on palju kontakte. Väljapääs selles olukorras võib olla I2C/IIC adapter, mis ühendab peaaegu standardse Arduino 1602 kilbi Uno, Nano või Mega plaatidega vaid 4 kontaktiga. Selles artiklis näeme, kuidas saate ühendada LCD-ekraani I2C liidesega, milliseid teeke saate kasutada, kirjutame lühikese visandinäite ja analüüsime tüüpilisi vigu.

Vedelkristallekraan LCD 1602 on hea valik märgistringide väljastamiseks erinevates projektides. See on odav, seal on mitmesuguseid modifikatsioone erinevate taustvalgustuse värvidega, saate hõlpsalt alla laadida Arduino visandite jaoks valmis teeke. Kuid selle ekraani peamiseks puuduseks on asjaolu, et ekraanil on 16 digitaalset kontakti, millest on vaja vähemalt 6. Seetõttu lisab selle LCD-ekraani kasutamine ilma i2c-ta Arduino Uno või Nano plaatidele tõsiseid piiranguid. Kui kontakte pole piisavalt, peate ostma Arduino Mega tahvli või salvestama kontaktid, sealhulgas ühendades ekraani i2c kaudu.

LCD 1602 kontaktide lühikirjeldus

Vaatame LCD1602 kontakte lähemalt:

Igal järeldusel on oma eesmärk:

  1. Maandatud GND;
  2. Toide 5 V;
  3. Monitori kontrasti seadistamine;
  4. Käsk, andmed;
  5. Andmete kirjutamine ja lugemine;
  6. lubama;

7-14. Andmeliinid;

  1. Pluss taustvalgustus;
  2. Miinus taustvalgus.

Kuva spetsifikatsioonid:

  • Sümboolne kuva tüüp, võimalik laadida sümboleid;
  • Neoontuled;
  • Kontroller HD44780;
  • Toitepinge 5V;
  • Vorming 16x2 tähemärki;
  • Töötemperatuuri vahemik -20C kuni +70C, säilitustemperatuuri vahemik -30C kuni +80C;
  • Vaatenurk 180 kraadi.

Ühendusskeem LCD jaoks Arduino plaadile ilma i2Cta

Monitori otse Arduino mikrokontrolleriga ilma I2C-ta ühendamise standardskeem on järgmine.

Ühendatavate kontaktide suure arvu tõttu ei pruugi vajalike elementide ühendamiseks piisavalt ruumi olla. I2C kasutamine vähendab juhtmete arvu 4-ni ja hõivatud kontaktide arvu 2-ni.

Kust osta arduino jaoks LCD-ekraane ja kilpe

LCD-ekraan 1602 (ja 2004. aasta versioon) on üsna populaarne, nii et saate seda hõlpsalt leida nii kodumaistest veebipoodidest kui ka välismaistelt saitidelt. Siin on mõned lingid kõige saadaolevamate valikute kohta:

LCD1602+I2C sinise ekraani moodul, mis ühildub Arduinoga Lihtne LCD1602 ekraan (roheline taustvalgus) odavam kui 80 rubla Suur ekraan LCD2004 koos I2C HD44780-ga arduino jaoks (sinine ja roheline taustvalgus)
Ekraan 1602 IIC-adapteri ja sinise taustvalgustusega Veel üks LCD1602 versioon joodetud I2C mooduliga Port IIC/I2C/TWI/SPI adapteri moodul 1602 Shieldi jaoks, mis ühildub Arduinoga
RGB taustvalgustusega ekraan! LCD 16 × 2 + klahvistik + sumistik Arduino jaoks Varjestus Arduino jaoks nuppude ja ekraaniga LCD1602 LCD 1602 LCD-ekraan 3D-printeri jaoks (Smart Controller for RAMPS 1.4, Text LCD 20×4), SD ja MicroSD kaardilugeja moodul

I2C protokolli kirjeldus

Enne kui arutleme ekraani ühendamise üle arduinoga i2c adapteri kaudu, räägime lühidalt i2C protokollist endast.

I2C / IIC(Inter-Integrated Circuit) on protokoll, mis loodi algselt elektroonikaseadme integraallülituste ühendamiseks. Arendus kuulub Philipsile. Protokoll i2c põhineb 8-bitise siini kasutamisel, mida on vaja juhtelektroonikas plokkide ühendamiseks, ja adresseerimissüsteemil, tänu millele saab samade juhtmete kaudu suhelda mitme seadmega. Me lihtsalt edastame andmed ühte või teise seadmesse, lisades andmepakettidele soovitud elemendi identifikaatori.

Lihtsaim I2C-ahel võib sisaldada ühte ülemseadet (enamasti Arduino mikrokontrollerit) ja mitut alamseadet (näiteks LCD-ekraan). Igal seadmel on aadress vahemikus 7 kuni 127. Samas skeemis ei tohiks olla kahte sama aadressiga seadet.

Arduino plaat toetab riistvaras i2c-d. Seda protokolli kasutavate seadmete ühendamiseks saate kasutada kontakte A4 ja A5.

I2C-ga töötamisel on mitmeid eeliseid:

  • Töötamiseks on vaja ainult 2 rida - SDA (andmeliin) ja SCL (kelli liin).
  • Suure hulga juhtivate seadmete ühendamine.
  • Arenguaja vähendamine.
  • Kogu seadmete komplekti juhtimiseks on vaja ainult ühte mikrokontrollerit.
  • Ühe siiniga ühendatud mikroskeemide võimalik arv on piiratud ainult maksimaalse võimsusega.
  • Kõrge andmekaitse tase tänu spetsiaalsele vooluahelatesse sisseehitatud liigpinge summutamise filtrile.
  • Lihtne protseduur tekkivate rikete diagnoosimiseks, kiire tõrkeotsing.
  • Buss on juba Arduino enda sisse integreeritud, seega pole vaja täiendavat siiniliidest arendada.

Puudused:

  • Liinil on mahtuvuslik piirang - 400 pF.
  • I2C kontrolleri programmeerimise raskused, kui siinil on mitu erinevat seadet.
  • Suure hulga seadmete korral on rikke lokaliseerimine keeruline, kui üks neist seab valesti madala taseme.

i2c moodul LCD 1602 Arduino jaoks

Kiireim ja mugavaim viis i2c kuvari kasutamiseks arduinos on osta sisseehitatud protokolli toega valmis ekraan. Kuid neid ekraane pole väga palju ja nad pole odavad. Kuid juba on välja antud tohutult palju erinevaid standardseid ekraane. Seetõttu on tänapäeval kõige soodsam ja populaarsem võimalus osta ja kasutada eraldi I2C-moodulit - adapterit, mis näeb välja selline:

Mooduli ühel küljel näeme i2c kontakte - maandus, toide ja 2 andmeedastuseks. Teisel adapteril näeme väliseid toitepistikuid. Ja loomulikult on plaadil palju tihvte, mille abil moodul tavaliste ekraanitihvtide külge joodetakse.


Arduino plaadiga ühendamiseks kasutatakse I2c väljundeid. Vajadusel ühendage valgustuse jaoks väline toiteallikas. Sisseehitatud trimmeriga saame reguleerida reguleeritavaid kontrasti väärtusi J

Turult leiab LCD 1602 mooduleid juba joodetud adapteritega, nende kasutamine on maksimaalselt lihtsustatud. Kui ostsite eraldi adapteri, peate selle mooduli külge eelnevalt jootma.

LCD-ekraani ühendamine Arduinoga I2C kaudu

Ühendamiseks on vaja Arduino plaati ennast, kuvarit, leivalauda, ​​ühendusjuhtmeid ja potentsiomeetrit.

Kui kasutate spetsiaalset eraldiseisvat i2c adapterit, peate selle esmalt ekraanimooduli külge jootma. Seal on raske eksida, sellisest skeemist saab juhinduda.


I2c-toega LCD-ekraan ühendatakse tahvliga nelja juhtme abil – kaks juhet andmete jaoks, kaks juhet toite jaoks.

  • GND tihvt on ühendatud plaadi GND-ga.
  • VCC tihvt on 5 V.
  • SCL on ühendatud kontaktiga A5.
  • SDA on ühendatud pistikuga A.

Ja ongi kõik! Ei mingeid juhtmete ämblikuvõrke, milles on väga lihtne segadusse sattuda. Samas saame kogu i2C protokolli juurutamise keerukuse lihtsalt raamatukogudele usaldada.

Teegid i2c LCD-ekraaniga töötamiseks

Arduino ja LCD 1602 liidestamiseks I2C siini kaudu vajate vähemalt kahte teeki:

  • I2C-ga töötamiseks mõeldud Wire.h teek on juba saadaval Arduino IDE standardprogrammis.
  • LiquidCrystal_I2C.h teek, mis sisaldab väga erinevaid käske monitori juhtimiseks I2C siini kaudu ja võimaldab muuta visandit lihtsamaks ja lühemaks. Peate täiendavalt installima teeki Pärast kuvari ühendamist peate lisaks installima teeki LiquidCrystal_I2C.h

Pärast kõigi vajalike teekide ühendamist visandiga loome objekti ja saame kasutada kõiki selle funktsioone. Testimiseks laadime näitest järgmise standardsketši.

#kaasa #kaasa // Ühendus raamatukoguga //#include // Alternatiivse teegi ühendamine LiquidCrystal_I2C lcd(0x27,16,2); // Määrake I2C-aadress (kõige levinum väärtus) ja ka ekraaniparameetrid (LCD 1602 puhul - 2 rida 16 tähemärgiga //LiquidCrystal_PCF8574 lcd(0x27); // PCF8574 teegi variant void setup( ) ( lcd.init (); // Kuva lähtestamine lcd.backlight(); // Taustvalgustuse ühendamine lcd.setCursor(0,0); // Seadke kursor esimese rea algusesse lcd.print(" Tere"); // Sisestage tekst esimesele reale lcd.setCursor(0,1); // Seadke kursor teise rea algusesse lcd.print("ArduinoMaster"); // Sisestage tekst teisele reale ) void loop() ( )

LiquidCrystal_I2C teegi funktsioonide ja meetodite kirjeldus:

  • home() ja clear() - esimene funktsioon võimaldab viia kursori tagasi ekraani algusesse, teine ​​ka, kuid samal ajal kustutab kõik, mis oli monitoril enne.
  • write(ch) – võimaldab printida ekraanile ühe märgi ch.
  • kursor() ja noCursor() - kursori kuvamine/peitmine ekraanil.
  • blink() ja noBlink() – kursor vilgub/ei vilgu (kui selle kuvamine oli varem lubatud).
  • display() ja noDisplay() – võimaldab ekraani lubada/keelata.
  • scrollDisplayLeft() ja scrollDisplayRight() – kerib ekraani ühe märgi võrra vasakule/paremale.
  • autoscroll() ja noAutoscroll() – võimaldab lubada/keelata automaatse kerimise režiimi. Selles režiimis kirjutatakse iga uus märk samasse kohta, asendades varem ekraanile kirjutatu.
  • leftToRight() ja rightTo Left() – määrab kuvatava teksti suuna – vasakult paremale või paremalt vasakule.
  • createChar(ch, bitmap) – loob märgi koodiga ch (0–7), kasutades mustvalgete punktide loomiseks bitmap bitmap massiivi.

Alternatiivne raamatukogu i2c kuvariga töötamiseks

Mõnel juhul võib PCF8574 kontrolleritega varustatud seadmetega määratud teegi kasutamisel ilmneda tõrkeid. Sel juhul saab alternatiivina pakkuda LiquidCrystal_PCF8574.h teeki. See laiendab LiquidCrystal_I2C, nii et selle kasutamisel ei tohiks probleeme tekkida.

i2c LCD-ekraani ühenduse probleemid

Kui te ei näe pärast visandi üleslaadimist ekraanil midagi, proovige järgmisi samme.

Esiteks saate suurendada või vähendada monitori kontrastsust. Tihti pole tegelasi lihtsalt kontrasti ja taustvalgustuse režiimi tõttu näha.

Kui see ei aita, siis kontrollige kontaktide õiget ühendust, kas taustvalgus on toite all. Kui kasutasite eraldi i2c adapterit, siis kontrollige uuesti kontaktide jootmise kvaliteeti.

Teine levinud põhjus, miks ekraanil tekst puudub, võib olla vale i2c aadress. Proovige esmalt visandil muuta seadme aadressi 0x27 0x20 või 0x3F asemel. Erinevatel tootjatel võivad olla erinevad vaikeaadressid. Kui see ei aita, võite käivitada i2c skanneri visandi, mis skannib kõik ühendatud seadmed ja määrab nende aadressi toore jõu abil. Näidisvisand i2c skannerist.

Kui ekraan ikka ei tööta, proovige adapter lahti joota ja vedelkristallekraan tavalisel viisil ühendada.

Järeldus

Selles artiklis oleme käsitlenud LCD-ekraani kasutamise põhiprobleeme keerulistes Arduino projektides, kui peame lauale salvestama vabad kontaktid. Lihtne ja odav i2c-adapter võimaldab ühendada 1602 LCD-ekraani, mis võtab enda alla vaid 2 analoogtihvti. Paljudes olukordades võib see olla väga oluline. Mugavuse hind on vajadus kasutada täiendavat moodulit - muundurit ja raamatukogu. Meie arvates pole see mugavuse huvides kõrge hind ja soovitame seda funktsiooni projektides kasutada.