i2c savienojums. LCD ekrāna LCM1602 savienošana ar I2C ar Arduino

  • FC-113 moduļa pamatā ir PCF8574T mikroshēma, kas ir 8 bitu maiņu reģistrs – I2C seriālās kopnes I/O paplašinātājs. Attēlā mikroshēma ir apzīmēta ar DD1.
  • R1 - trimmeris LCD displeja kontrasta regulēšanai.
  • Jumper J1 izmanto, lai ieslēgtu displeja fona apgaismojumu.
  • Tapas 1…16 tiek izmantotas, lai savienotu moduli ar LCD displeja tapām.
  • Kontaktu paliktņi A1 ... A3 ir nepieciešami, lai mainītu ierīces I2C adresi. Pielodējot atbilstošos džemperus, var mainīt ierīces adresi. Tabulā parādīta atbilstība starp adresēm un džemperiem: "0" atbilst atvērtai ķēdei, "1" - ir uzstādīts džemperis. Pēc noklusējuma ir atvērti visi 3 džemperi un ierīces adrese 0x27.

2 Elektroinstalācijas shēma LCD displejam uz Arduino izmantojot I2C protokolu

Modulis ir savienots ar Arduino kā standarts I2C kopnei: moduļa SDA izeja ir savienota ar analogo portu A4, SCL izeja ir savienota ar Arduino analogo portu A5. Modulis tiek barots ar +5 V no Arduino. Pats modulis ir savienots ar tapām 1…16 ar atbilstošajām tapām 1…16 LCD displejā.


3 Bibliotēka darbam izmantojot I2C protokolu

Tagad mums ir nepieciešama bibliotēka darbam ar LCD, izmantojot I2C saskarni. Varat izmantot, piemēram, šo (saite rindā "Lejupielādēt parauga kodu un bibliotēku").

Lejupielādēts arhīvs LiquidCrystal_I2Cv1-1.rar atarhivējiet mapē \bibliotēkas\, kas atrodas Arduino IDE direktorijā.

Bibliotēka atbalsta LCD ekrānu standarta funkciju komplektu:

FunkcijaMērķis
Šķidrie kristāli () izveido LiquidCrystal tipa mainīgo un pieņem displeja savienojuma parametrus (pin numurus);
sākt () LCD displeja inicializācija, parametru iestatīšana (rindu un simbolu skaits);
skaidrs () ekrāna notīrīšana un kursora atgriešana sākotnējā pozīcijā;
mājas() kursora atgriešana sākotnējā pozīcijā;
setCursor() kursora iestatīšana noteiktā pozīcijā;
rakstīt () parāda rakstzīmi LCD ekrānā;
drukāt () parāda tekstu LCD ekrānā;
kursors () parāda kursoru, t.i. pasvītrojums zem nākamās rakstzīmes;
noCursor() paslēpj kursoru;
mirkšķināt () kursors mirgo;
noBlink() atcelt mirgošanu;
noDisplay() displeja izslēgšana, saglabājot visu parādīto informāciju;
displejs () displeja ieslēgšana, saglabājot visu parādīto informāciju;
scrollDisplayLeft() ritinot displeja saturu par 1 pozīciju pa kreisi;
scrollDisplayRight() ritinot displeja saturu par 1 pozīciju pa labi;
autoscroll () iespējot automātisko ritināšanu;
noAutoscroll() izslēgt automātisko ritināšanu;
no kreisās uz labo() iestata teksta virzienu no kreisās puses uz labo;
no labās uz kreiso() teksta virziens no labās uz kreiso;
CreateChar() izveido pielāgotu simbolu LCD ekrānam.

4 Skice teksta izvadīšanai uz LCD ekrānu, izmantojot I2C kopni

Atvērsim paraugu: Failu paraugi LiquidCrystal_I2C CustomChars un nedaudz mainīsim to. Parādīsim ziņojumu, kura beigās būs mirgojošs simbols. Visas skices nianses tiek komentētas koda komentāros.

#iekļauts // ietver Wire bibliotēku #include // pievienot LCD bibliotēku #define printByte(args) write(args); // uint8_t sirds = (0x0,0xa,0x1f,0x1f,0xe,0x4,0x0); // simbola "sirds" bitmaska ​​LiquidCrystal_I2C lcd(0x27, 16, 2); // Iestatiet adresi 0x27 16x2 LCD displejam anulēt iestatīšanu()( lcd.init(); // LCD inicializācija lcd.backlight(); // ieslēgt displeja fona apgaismojumu lcd.createChar(3, sirds); // izveidot sirds simbolu atmiņas vietā 3 lcd.home(); // novietojiet kursoru augšējā kreisajā stūrī, pozīcijā (0,0) lcd.!"); // izdrukājiet teksta rindiņu lcd.setCursor(0, 1); // pārvietojiet kursoru uz 2. rindiņu, rakstzīmi 1 lcd.print( "i"); // izdrukāt ziņojumu 2. rindā lcd.printByte(3); // izdrukāt sirds rakstzīmi, kas atrodas 3. šūnā lcd.print ("Arduino"); } void loop() (// mirgot pēdējo rakstzīmi LCD setCursor(13, 1); // pārvietot kursoru uz 2. rindiņu, 1. rakstzīmi lcd.print("\t"); kavēšanās (500); lcd.setCursor(13, 1); // pārvietot kursoru uz 2. rindiņu, 1. rakstzīmi lcd.print(" "); kavēšanās (500); }

Starp citu, rakstzīmes, kas rakstītas ar komandu lcd.createChar(); paliek displeja atmiņā pat pēc strāvas izslēgšanas. tiek ierakstīti displeja 1602 ROM.

5 Savu simbolu veidošana LCD displejam

Sīkāk apskatīsim jautājumu par savu simbolu izveidi LCD ekrāniem. Katra rakstzīme ekrānā sastāv no 35 punktiem: 5 plati un 7 augsti (+1 rezerves līnija pasvītrošanai). Iepriekš minētās skices 6. rindā mēs definējam 7 skaitļu masīvu: (0x0, 0xa, 0x1f, 0x1f, 0xe, 0x4, 0x0). Pārveidosim heksadecimālos skaitļus bināros: {00000, 01010, 11111, 11111, 01110, 00100, 00000} . Šie skaitļi ir nekas vairāk kā bitu maskas katrai no 7 rakstzīmes rindiņām, kur "0" apzīmē gaišo punktu, bet "1" - tumšo punktu. Piemēram, sirds simbols, kas dots kā bitmaska, parādīsies ekrānā, kā parādīts attēlā.

6 LCD vadība caur I2C autobusu

Augšupielādējiet skici Arduino. Mūsu norādītais uzraksts parādīsies ekrānā ar mirgojošu kursoru beigās.


7 Kas ir aiz muguras I2C autobuss

Kā bonusu apsveriet laika diagrammu latīņu rakstzīmju "A", "B" un "C" izvadei LCD displejā. Šīs rakstzīmes tiek saglabātas displeja ROM un tiek parādītas ekrānā, vienkārši nosūtot to adresi displejam. Diagramma ņemta no displeja izejām RS, RW, E, D4, D5, D6 un D7, t.i. jau pēc pārveidotāja FC-113 "I2C paralēlā kopne". Var teikt, ka nirtam nedaudz "dziļāk" "dzelzs".


Laika diagramma latīņu burtu "A", "B" un "C" parādīšanai LCD displejā 1602

Diagramma parāda, ka rakstzīmes, kas atrodas displeja ROM (skatiet datu lapas 11. lpp., saite zemāk), tiek pārsūtītas divos nibbles, no kuriem pirmais nosaka tabulas kolonnas numuru, bet otrais nosaka rindas numuru. Šajā gadījumā dati tiek "fiksēti" gar signāla malu uz līnijas E(Iespējot) un līniju RS(Reģistra atlase, reģistra atlase) atrodas loģiskā viena stāvoklī, kas nozīmē datu pārsūtīšanu. RS līnijas zemais stāvoklis nozīmē instrukciju pārraidi, ko mēs redzam pirms katras rakstzīmes pārraides. Šajā gadījumā tiek pārraidīts karietes atgriešanas instrukcijas kods uz LCD displeja pozīciju (0, 0), ko arī var uzzināt, izpētot displeja tehnisko aprakstu.

Un vēl viens piemērs. Šī laika diagramma parāda sirds simbola displeju LCD ekrānā.


Atkal pirmie divi impulsi iespējot ievērot norādījumus Mājas()(0000 0010 2) - karietes atgriešanās pozīcijā (0; 0), bet otrie divi - izvade uz LCD displeju, kas saglabāts atmiņas šūnā 3 10 (0000 0011 2) simbols "Sirds" (instrukcija lcd.createChar(3, sirds); skice).

Iespējams, viens no populārākajiem ekrāniem tirgū. Veidota uz populārā HD44780U kontroliera. No modeļa nosaukuma izriet, ka ekrāns sastāv no divām rindiņām pa 16 rakstzīmēm. Šajā konkrētajā modelī krievu valoda netiek atbalstīta.

sh2s datu kopne ļauj savienot līdz pat 127 ierīcēm, izmantojot divus vadus, un tajā pašā laikā. Šis I2C ir ieviests PCF8574T mikroshēmā.

Elektroinstalācijas shēma:

Zila lieta - mainīga pretestība, ļauj regulēt ekrāna kontrastu.

Kreisajā pusē esošais džemperis ir atbildīgs par ekrāna fona apgaismojumu.

4 tapu bloks ir savienots ar arduino šādi:

GND-GND
VCC - 5V
SDA — A4 (ja Arduino MEGA, tad uz D20)
SCL — A5 (ja Arduino MEGA, tad uz D21)

Bibliotēka

Skice

Displejam var būt cita IIC adrese, nevis 0x27, tā var izrādīties 0x3F. Lai precīzi noteiktu adresi, varat izmantot i2c ierīces skeneri.

#iekļauts #iekļauts //iestatīt LCD ekrāna adresi 0x27, 16 rakstzīmes, 2 rindiņas LiquidCrystal_I2C lcd(0x27, 16, 2); void setup() ( lcd.init(); // Inicializējiet ekrānu // ieslēdz fona apgaismojumu lcd.backlight(); //Iestatiet pozīciju, no kuras tiek rādīts teksts. lcd.setCursor(2, 0); //1. izvades līnija lcd.print("Sveika, pasaule!"); //līdzīgi parādīt otro rindiņu lcd.setCursor(1, 1); lcd.print("www.vietne"); ) tukšuma cilpa () ( )

LCD I2C modulis ļauj savienot rakstzīmju displeju ar Arduino plati, izmantojot tikai divus signāla vadus.

Izmantotās sastāvdaļas (pirkt no Ķīnas):

. vadības panelis

. Savienojošie vadi

Galvenās tehniskās īpašības:

Displejs: rakstzīmes 16x02 vai 20x04
. Apgaismojums: zils ar baltām rakstzīmēm
. Kontrasts: regulējams ar potenciometru
. Barošanas spriegums: 5V
. Interfeiss: I2C
. I2C adrese: 0x27
. Izmēri: 82mm x 35mm x 18mm

Savienojuma izveide ar Arduino

Modulis ir aprīkots ar četru kontaktu 2,54 mm savienotāju

SCL: sērijas pulksteņa līnija (Serial CLlock)

SDA: sērijas datu līnija (sērijas DAta)

VCC: "+" jauda

GND: "-" jauda

Tapas, kas atbild par I2C saskarni Arduino plāksnēm, kuru pamatā ir dažādi kontrolleri, atšķiras

Lai strādātu ar šo moduli, jāinstalē bibliotēka LiquidCrystal_I2C1602V1

Lejupielādējiet, izsaiņojiet un nometiet mapē Arduino esošajā bibliotēku mapē. Ja bibliotēkas pievienošanas laikā Arduino IDE bija atvērta, restartējiet vidi.

Pāriesim tieši uz skici. Šajā piemērā mēs parādīsim standarta "Sveika, pasaule!" un mūsu kopienas adresei.

koda piemērs:

#iekļauts #iekļauts LiquidCrystal_I2C lcd(0x27,16,2); /* Iestatiet displeja adresi un izmēru. Lietojot LCD I2C moduli ar 20x04 displeju, kodā nekas nav jāmaina, tikai jāiestata pareizais izmērs */ nederīgs uzstādīt() (lcd.init(); // Inicializēt LCD lcd.backlight(); // ieslēdz fona apgaismojumu // Kursors atrodas 1. rindas sākumā lcd.print("Sveika, pasaule!"); // Rādīt tekstu LCD setCursor (0, 1); // Novietojiet kursoru uz 2. rindas sākumu lcd.print("vietne"); // Parādīt tekstu ) spēkā neesošs cilpa () { }

Savu simbolu veidošana

Teksta izvadi izdomājām, displeja iekšienē kontrollera atmiņā iešūti angļu alfabēta burti un ar tiem nav nekādu problēmu. Bet ko darīt, ja vēlamā rakstzīme nav kontroliera atmiņā?

Tas nav svarīgi, nepieciešamo rakstzīmi var izveidot manuāli. Šī metode daļēji, ierobežojot līdz 7 rakstzīmēm, palīdzēs atrisināt izvades problēmu.

Šūnas displejos, kurus mēs apsveram, ir 5x8 pikseļu izšķirtspēja. Viss simbola izveides uzdevums ir uzrakstīt mazliet masku un ievietot tajā vienus vietās, kur punktiem vajadzētu degt, un nullēm, kur ne.

Tālāk esošajā piemērā uzzīmēsim smaidošu seju.

koda piemērs:

//Tests uz Arduino IDE 1.0.5 // Pievienojiet nepieciešamās bibliotēkas#iekļauts #iekļauts // Smaida simbola bitmaska baits smaids = ( B00010, B00001, B11001, B00001, B11001, B00001, B00010, ); LiquidCrystal_I2C lcd(0x27,20,4); // Iestatiet displeja adresi un izmēru. nederīgs uzstādīt() (lcd.init(); // Inicializēt LCD lcd.backlight(); // ieslēdz fona apgaismojumu // Izveidojiet simbola numuru 0 lcd.createChar(1, smaids); lcd.setCursor(0, 0); // Novietojiet kursoru uz 1. rindas sākumu lcd.print("\1"); // Parādīt smaidiņu (rakstzīmes numurs 1) - "\1") spēkā neesošs cilpa () { }

Programma ērtai simbolu izveidei

Komentāros kāds kopienas dalībnieks nometa saiti uz rakstzīmju ģeneratoru

Es šeit nokļuvu no laba Chip Resistor veikala vēl vienu ierīci, lai to pētītu un izmantotu noderīgās ierīcēs. Šī ierīce izrādījās asināta, lai kontrolētu LCD displeju, kontrolējot HD44780 kontrolieri, 4 bitu režīmā. Šim nolūkam uz plates ir uzstādīta mikroshēma, kas ir I2C kopnes pārveidotājs uz paralēlo 8 bitu portu.

Tāfele ir izšķirta tā, lai to uzreiz varētu šķērsot ar LCD displeju. Ieeja ir barota un I2C līnijas. Plāksnei nekavējoties ir uzvilkšanas rezistori SCL un SDA līnijās, potenciometrs kontrasta regulēšanai un paša displeja barošana.

Labajā pusē esošais džemperis ieslēdz/izslēdz fona apgaismojumu. Pēc tam, bruņojoties ar testeri, tika apkopota šāda plāksne. Pēc moduļa izpētes tika konstatēts, ka P3 kontrolē fona apgaismojumu. Ja ir iestatīts džemperis, 1 ieslēdz fona apgaismojumu, bet 0 izslēdz to. Kad džemperis ir noņemts, fona apgaismojums vienmēr ir izslēgts. Tālāk tika nolemts papildināt axlib bibliotēku ar funkcijām darbam ar I2C kopni (programmatūras ieviešana) un PCF8574 mikroshēmas vadības funkcijām. Īsumā, kā modulis darbojas. Lai paralēli izvadītu baitus, šim nolūkam ir jānosūta mikroshēmas adrese uz I2C kopni (pēc noklusējuma tā ir 0x4E. Adresi var mainīt arī, pielodējot džemperus uz tāfeles un mainot trīs mazāko vērtību adreses zīmīgi cipari), tad pēc ACK saņemšanas tiek nosūtīts datu baits. Pēc tam, kad mikroshēma atbild ar ACK, baits parādās mikroshēmas paralēlajā portā. Lai kontrolētu LCD, es paņēmu funkcijas no axlib bibliotēkas un nedaudz pārstrādāju tās, lai darbotos ar I2C kopni. #iekļauts #iekļauts #iekļauts #iekļauts #define ADD 0x4E // Čipa adrese /* LCD mikroshēma RS P0 RW P1 LV P2 D4 P4 D5 P5 D6 P6 D7 P7 Fona apgaismojums ir pievienots kontaktam P3. 1 ieslēgts, 0 izslēgts */ // Datu izvade com |= 0x04; // E pret vienu pcf8574_byte_out(com, ADD); // Datu izvade com &= 0xFB; // E līdz nullei pcf8574_byte_out(com, ADD); // Datu izvade) void init(void) ( _delay_ms(30); com(0x30); _delay_us(40); com(0x30); // Pārslēdzieties uz 4 bitu režīmu _delay_us(40); // Komandas izpildes aizkave com(0x30); // Pārslēdzieties uz 4 bitu režīmu _delay_us(40); // Komandas izpildes aizkave com(0x20); // Pārslēdzieties uz 4 bitu režīmu _delay_us(40); // Komandas izpildes aizkave com(0x20); // Iestatīt parametrus com(0x80); // Iestatīt parametrus com(0x00); // Izslēdziet displeju com(0x80); // Izslēdziet displeju com(0x00); // Notīrīt displeju com(0x10); // Notīrīt displeju com(0x00); com(0x60); // Iestatiet ievades režīmu com(0x00); com(0xC0); // Ieslēdziet displeju ar atlasīto kursoru) void char_out(BYTE data) ( BYTE data_h = ((data & 0xF0) + 0x09); BYTE data_l = ((dati // Pass high 4 bits data_h |= 0x04; pcf8574_byte_out(data_h, ADD); // Pass high 4 bits // Pass high 4 bits // 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!" ); kamēr(1) ( ) ) Tieši tas, kas šeit notiek. Pirmkārt, mēs iekļaujam I2C un PCF8574 bibliotēkas. Par I2C jau rakstīju, tāpēc krustā vairs nelikšu, bet ko pastāstīšu PCF8574.h. Bibliotēka ietver tikai trīs funkcijas.
BYTE pcf8574_test(BYTE add) (BYTE ask = ACK; add &= 0xFE; i2c_start(); ask = i2c_send_byte(add); i2c_stop(); return ask; ) Pirmā funkcija tika uzrakstīta, lai pārbaudītu, vai ierīce atrodas kopnē. Principā to var izmantot, lai meklētu jebkuru ierīci, kas atrodas autobusā. Funkcija ņem vajadzīgās ierīces adresi, un, ja tā reaģē, tā atgriež nulli. Ja ierīce ar šo adresi nav kopnē, tā atgriezīs vienu.
BYTE pcf8574_byte_out(BYTE data, 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_;stop )Šī funkcija jau ir uzasināta tikai šai mikroshēmai. Kā argumenti tam tiek nodots baits pārsūtīšanai uz kopni un mikroshēmas adrese. Funkcija vispirms pieprasīs mikroshēmu pēc adreses un pēc tam nosūtīs baitu. Ja mikroshēma saņēma baitu un atbildēja ar ACK, funkcija pārtrauks mikroshēmu un atgriezīs nulli kā veiksmīgu baitu. Un mikroshēma šajā laikā izvadīs šo baitu savā paralēlajā portā. Pretējā gadījumā mēs saņemam NACK un atdodam vienu, pārsūtīšana neizdevās.
BYTE pcf8574_str_out(BYTE *data, BYTE col, BYTE add) (BYTE ask = ACK; add &= 0xFE; i2c_start(); ask = i2c_send_byte(add); for(BYTE i=0; i Šī funkcija tika izveidota eksperimentēšanai. Nepieciešams rādītājs uz viena baita datu masīvu, šo baitu skaitu un mikroshēmas adresi. Patiesībā mēģinājums pārsūtīt visus datus vienā sesijā, nevis vienu baitu vienā sesijā. Funkcija darbojas, bet tā neatbilst LCD displejam. Tagad atgriezīsimies pie galvenās programmas. Pēc bibliotēku pievienošanas mēs izrakstām mikroshēmas adresi. Tālāk mēs izveidojam trīs funkcijas pēc analoģijas ar lcd.h. Atšķirība ir tikai datu pārraides principā.
void com(BYTE com) (com |= 0x08; // P3 uz vienu, lai būtu ieslēgts fona apgaismojums pcf8574_byte_out(com, ADD); // Datu izvade com |= 0x04; // E pret vienu pcf8574_byte_out(com, ADD); // Datu izvade com &= 0xFB; // E līdz nullei pcf8574_byte_out(com, ADD); // Datu izvade } Šī funkcija tikai nosūta komandas uz displeju. Tādējādi parādījās pirmā rinda ar loģisku komandas pievienošanu no 0x08. Šī byaka ir nepieciešama tāpēc, ka mēs nepārraidām baitus tieši uz LCD portu, bet gan caur mūsu atkārtotāju. Tas ir, ja mēs iesniedzām baitu un tad mums ir jāizvada tikai viens bits, tad, ja vēlaties, piešķiriet nepieciešamo bitu iepriekšējam baitam un nosūtiet to vēlreiz uz portu. Tas ir tāds iesaldējums. Papildinājums ar 0x08 ir nepieciešams, lai pastāvīgi turētu vienu pie trešā cipara. Atcerieties fona apgaismojumu? Tieši šis papildinājums ieslēdz fona apgaismojumu. Pēc tam, kad mēs izsaucam funkciju baita pārsūtīšanai uz autobusu. Par to ir rakstīts iepriekš. Tad mēs pārsūtām baitu pa autobusu uz mikroshēmu. Tālāk jums jāiestata vienība E, ko faktiski dara baita loģiskā pievienošana ar 0x04. Pēc nulles E. Tādējādi jebkuru komandu var nosūtīt uz displeju, tikai nododot pašu komandu kā argumentu. void init(void) ( _delay_ms(30); // Pauze pēc ieslēgšanas com(0x30); // Pārslēdzieties uz 4 bitu režīmu _delay_us(40); // Komandas izpildes aizkave com(0x30); // Pārslēdzieties uz 4 bitu režīmu _delay_us(40); // Komandas izpildes aizkave com(0x30); // Pārslēdzieties uz 4 bitu režīmu _delay_us(40); // Komandas izpildes aizkave com(0x20); // Pārslēdzieties uz 4 bitu režīmu _delay_us(40); // Komandas izpildes aizkave com(0x20); // Iestatīt parametrus com(0x80); // Iestatīt parametrus com(0x00); // Izslēdziet displeju com(0x80); // Izslēdziet displeju com(0x00); // Notīrīt displeju com(0x10); // Notīrīt displeju com(0x00); // Iestatiet ievades režīmu com(0x60); // Iestatiet ievades režīmu com(0x00); // Ieslēdziet displeju ar atlasīto kursoru com(0xC0); // Ieslēdziet displeju ar atlasīto kursoru } Šī funkcija attiecas tikai uz displeja inicializāciju. Komandu secība tiek ņemta no datu lapas LCD displejā. void char_out(BYTE data) ( BYTE data_h = ((data & 0xF0) + 0x09); BYTE data_l = ((dati // Pass high 4 bits data_h |= 0x04; pcf8574_byte_out(data_h, ADD); // Pass high 4 bits datu_h &= 0xF9; pcf8574_byte_out(data_h, ADD); // Pass high 4 bits pcf8574_byte_out(data_l, ADD); // Pass low 4 bits dati_l |= 0x04; pcf8574_byte_out(data_l, ADD); // Pass low 4 bits data_l &= 0xF9; pcf8574_byte_out(data_l, ADD); // Pass low 4 bits } Šī funkcija nosūta datus uz LCD. Tas tiek izpildīts tāpat kā komandas, izņemot to, ka baita pārraide vispirms notiek ar augsto nibble un pēc tam ar zemo. Un pārējais ir tas pats. void str_out(BYTE *str) ( while((*str) != "\0") ( char_out(*str); str++; ) ) Nu, šī funkcija ir paredzēta tikai virknes nodošanai displejam. Patiesībā tam nav nekāda sakara ar mūsu tēmu.

AtmelStudio 6.2 projekts

Kompetentā 01.08.15 17:11

Trūkst komats. Pareizi: "HELLO WORLD!" Un šī ierīce ir uzasināta ne tikai HD44780. Uzvilkšanas rezistori tiek novietoti no kapteiņa puses. Saskaņā ar specifikāciju dati LCD kontrollerī tiek ierakstīti dilstošā E secībā. No šejienes pirmā funkcija ir vienkāršota: void com(BYTE com) ( com |= 0x08; // backlight pcf8574_byte_out(com | 0x04, ADD);/ / Datu izvade pcf8574_byte_out(com , ADD); // E līdz nullei ) Jā, un pārējais var būt arī ievērojami mazāks. Piemēram, void char_out (BYTE data) būs tikai divi zvani, un vēl jo vairāk bez papildu mainīgajiem. LCD inicializācija tika veikta ar laika specifikācijas pārkāpumiem.

Aleksejs 02.08.15 19:11

Komata trūkuma dēļ displejs necietīs. Šī ierīce ir īpaši paredzēta displejiem ar šo vai līdzīgu kontrolieri. Bet tas ir mikroshēma, kas patiešām ir vienkāršs portu paplašinātājs. Piekrītu par E. Ir nepieciešami papildu mainīgie. Ja funkcijai nododat argumentu un veicat dažas darbības ar loģiku, var rasties kļūmes. Ar to jau ir nācies saskarties. Inicializācija tiek veikta bez laika pārkāpumiem. Dokumentācijā teikts, ka starp komandām ir 40 µs pauze. Sakarā ar to, ka pārsūtīšana notiek caur i2c kopni, kas, savukārt, ir programmatūra un lēna, periodi ir vairāk nekā izpildīti. Ja neesi par slinku, tad uzraksti savu versiju un atsūti man. Es to publicēšu. Galu galā šī vietne ir paredzēta amatieru auditorijai un ikviens, kurš vēlas, var izteikt savu viedokli un redzējumu par MK dzīvi.

Aleksejs 06.08.15 09:14

Pievienoti laiki, inicializējot displeju pēc cienītā "Kompetenta" piezīmes

Dmitrijs 14.06.16 21:57

Sveiks, Aleksej! Lai strādātu ar PCF8574, kodu ģeneratoram varat pievienot bibliotēku.

Aleksejs 14.06.16 22:32

ES domāšu.))

ruslans 21.12.16 19:54
Aleksejs 21.12.16 21:53

Ak jā. Īpaši kods uz asma. Arduiners to novērtēs pilnībā)))

Py.sy.
Pat ja neskatās uz asm, tad tur programma ir rakstīta zem PIC kontrollera. Vai šī ir "ļoti" noderīga informācija AVR cilvēkiem? īpaši iesācējiem))) Man nav nekas pret PIC, bet pat PIC un AVR ir atšķirīgs asm. Un kas attiecas uz LCD displeja detaļām, jūs varat apskatīt))) Tiesa, es to arī rakstīju zem CVAVR, bet visas komandas tika sakārtotas un sakārtotas. Bet jebkurā gadījumā izlemiet paši, kur tas ir rakstīts skaidrāk))) Autors raksta, lasītājs izvēlas.

GeK 04.01.17 12:52

"I2C mikroshēmas adrese (noklusējums ir 0x4E")

Adreses augšējie 4 biti ir fiksēti,
prefikss PCF8574 ir 0100 un PCF8574A ir 0111
Apakšējie 3 biti ir atkarīgi no A2-A0 mikroshēmas ieeju stāvokļa. Pēc noklusējuma ir atvērti visi 3 džemperi, attiecīgi mikroshēmas adrese ir 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

Aleksejs 04.01.17 14:27

Jūs kaut ko sajaucāt.
Izraksts no mikroshēmas dokumentācijas

0b01001110 ir 0x4E
Tātad šeit viss ir pareizi. Un, ja jums ir jāmaina adrese, jums tā vienkārši ir jāmaina definē.

Jurijs 14.12.17 21:26

Laba diena! Varat arī izmantot lcdgotoxy un lcdclear funkcijas kodu, lai strādātu ar PCF8574 adapteri.

Aleksandrs 20.05.18 18:14

Laba diena! kā parādīt krievu tekstu.

Aleksejs 20.05.18. 23:04

Šis ir mājas displejs no MELT. Viņa atmiņā ir iešūts kirilicas alfabēts.

Aleksandrs 21.05.18 04:55

Laba diena! Es rakstu tāpat kā jūs AtmelStudio 6.2 projektā "ЁPҐBET MҐP!" tas izdodas labi
un ja tu raksti "HELLO WORLD!" izceļ visādas muļķības. man ir divi
displeju variants vienā ir uzšūts kirilicā. otrais ķīnietis.

Aleksejs 21.05.18. 09:22

Vispirms es uzrakstīšu testa programmu. Visas atmiņas uzskaitījums ar rakstzīmju un to adrešu parādīšanu. Un tad noskaidrojiet, kāda ir problēma. Visticamāk, rakstzīmju tabula neatbilst ascii tabulai.

Andrejs 03.09.18 08:32

Labdien!

Vai jūs nevarat augšupielādēt Proteus shēmu?

Andrejs 03.09.18 10:22

Vai arī Proteuse neviens nav reģistrējies?

Andrejs 03.09.18 10:56

Noskaidroja main_init

Pāvels 30.05.19. 23:35

Interesanta lieta, displeja adrese ir 0x4E, un, ja tas pats displejs ir savienots ar arduino, tad adrese ir 0x27

Pāvels 31.05.19. 11:04

Liels paldies par jūsu darbu! Esmu apskatījis visu internetu, un neviens no iepriekš minētajiem piemēriem nedarbojas, izņemot jūsējo. Vienīgais, ka projekta arhīvā displeja inicializācijas funkcijā _delay_ aizkaves netiek reģistrētas, un tā nedarbojas atbilstoši

Aleksejs 01.06.19. 09:52

Nu, šis ir vairāk demonstrācijas projekts. Labi, jums ir jāpārraksta axlib bibliotēka, taču, ņemot vērā faktu, ka STM32 un STM8 pārvietojas ar lēcieniem un robežām, AVR vispār nav jēgas.

Pāvels 05.06.19 12:57

STM nav DIP pakotņu, grūtāk izgatavot iespiedshēmas plates. Maniem projektiem ar AVR iespējām pietiek ar rezervi, daudz kas var uz vienu Atmega 8

Aleksejs 05.06.19 15:20

Jā, bet cik maksā Atmega8 un stm8s003)))

Dmitrijs 06.07.19. 00:41

Sveiks Aleksej.
Vai varat, lūdzu, pastāstīt, kā nolasīt porta statusu no pcf8574?
Es gribu uztaisīt ārēju bloku, 8 GPIO uz i2c kopnes - tas arī viss.

Dmitrijs 07.06.19 17:56

Es pats atbildēšu
Funkcija atgriež baitu - mikroshēmas portu stāvokli
uint8_t pcf8574_byte_rcv(uint8_t addr)
{
uint8_t ask = ACK;
adr |= 0b01; //LASĪT
uint8_tdata=0;
i2c_start();
ask = i2c_send_byte(addr);
if(!ask) data = i2c_read_byte(NACK);
i2c_stop();

atgriešanas dati;
}

Pāvels 06.07.19. 20:37

Cik tas maksā, 150 rubļi, par releja cenu vispār), bet kā jūs izaudzējat dēļus STM? LUT ir neuzticams, CNC maršrutētājs nav pārliecināts, ko tas prasīs (nemēģināju)

LCD displejs- biežs viesis arduino projektos. Bet sarežģītās shēmās mums var būt problēma ar Arduino portu trūkumu, jo ir jāpievieno vairogs, kuram ir daudz tapu. Izeja šajā situācijā var būt I2C/IIC adapteris, kas savieno gandrīz standarta Arduino 1602 vairogu ar Uno, Nano vai Mega dēļiem tikai ar 4 tapām. Šajā rakstā mēs redzēsim, kā jūs varat savienot LCD ekrānu ar I2C interfeisu, kādas bibliotēkas varat izmantot, uzrakstīsim īsu skices piemēru un analizēsim tipiskas kļūdas.

Šķidro kristālu displejs LCD 1602 ir laba izvēle rakstzīmju virkņu izvadīšanai dažādos projektos. Tas ir lēts, ir dažādas modifikācijas ar dažādām fona apgaismojuma krāsām, jūs varat viegli lejupielādēt gatavas bibliotēkas Arduino skicēm. Taču galvenais šī ekrāna trūkums ir fakts, ka displejā ir 16 digitālās tapas, no kurām nepieciešamas vismaz 6. Tāpēc šī LCD ekrāna izmantošana bez i2c rada nopietnus ierobežojumus Arduino Uno vai Nano plāksnēm. Ja kontaktu būs par maz, tad būs jāiegādājas Arduino Mega plate vai jāsaglabā kontakti, tostarp pieslēdzot displeju caur i2c.

Īss LCD 1602 tapu apraksts

Sīkāk apskatīsim LCD1602 tapas:

Katram no secinājumiem ir savs mērķis:

  1. Zemējums GND;
  2. Barošanas avots 5 V;
  3. Monitora kontrasta iestatīšana;
  4. Komanda, dati;
  5. Datu rakstīšana un lasīšana;
  6. iespējot;

7-14. Datu līnijas;

  1. Plus fona apgaismojums;
  2. Mīnus fona apgaismojums.

Displeja specifikācijas:

  • Simbolisks displeja veids, iespējams ielādēt simbolus;
  • LED gaismas;
  • Kontrolieris HD44780;
  • Barošanas spriegums 5V;
  • Formāts 16x2 rakstzīmes;
  • Darba temperatūras diapazons no -20C līdz +70C, uzglabāšanas temperatūras diapazons no -30C līdz +80C;
  • Skata leņķis 180 grādi.

Elektroinstalācijas shēma LCD uz Arduino plati bez i2C

Standarta shēma monitora tiešai pievienošanai Arduino mikrokontrollerim bez I2C ir šāda.

Sakarā ar lielo pievienojamo kontaktu skaitu, var nepietikt vietas, lai savienotu nepieciešamos elementus. Izmantojot I2C, vadu skaits tiek samazināts līdz 4 un aizņemto kontaktu skaits tiek samazināts līdz 2.

Kur nopirkt LCD ekrānus un vairogus priekš arduino

LCD ekrāns 1602 (un 2004. gada versija) ir diezgan populārs, tāpēc to var viegli atrast gan vietējos tiešsaistes veikalos, gan ārvalstu vietnēs. Šeit ir dažas saites uz pieejamākajām opcijām:

LCD1602+I2C zilā ekrāna modulis, kas saderīgs ar Arduino Vienkāršs LCD1602 displejs (zaļš fona apgaismojums) lētāk nekā 80 rubļi Liels ekrāns LCD2004 ar I2C HD44780 priekš arduino (zils un zaļš fona apgaismojums)
Displejs 1602 ar IIC adapteri un zilu fona apgaismojumu Vēl viena LCD1602 versija ar lodētu I2C moduli Porta IIC/I2C/TWI/SPI adaptera modulis 1602 Shield saderīgs ar Arduino
RGB aizmugurgaismojuma displejs! LCD 16 × 2 + tastatūra + skaņas vairogs priekš Arduino Vairogs priekš Arduino ar pogām un ekrānu LCD1602 LCD 1602 LCD displejs 3D printerim (Smart Controller for RAMPS 1.4, Text LCD 20×4), SD un MicroSD karšu lasītāja modulis

I2C protokola apraksts

Pirms apspriest displeja pievienošanu arduino, izmantojot i2c adapteri, īsi parunāsim par pašu i2C protokolu.

I2C / IIC(Inter-Integrated Circuit) ir protokols, kas sākotnēji tika izveidots integrālo shēmu savstarpējai savienošanai elektroniskā ierīcē. Izstrāde pieder Philips. i2c protokols ir balstīts uz 8 bitu kopnes izmantošanu, kas nepieciešama bloku savienošanai vadības elektronikā, un adresācijas sistēmu, pateicoties kurai var sazināties ar vairākām ierīcēm pa vieniem un tiem pašiem vadiem. Mēs vienkārši pārsūtām datus uz vienu vai otru ierīci, pievienojot datu paketēm vēlamā elementa identifikatoru.

Vienkāršākā I2C ķēde var saturēt vienu galveno (visbiežāk Arduino mikrokontrolleri) un vairākus vergus (piemēram, LCD displeju). Katrai ierīcei ir adrese diapazonā no 7 līdz 127. Vienā shēmā nedrīkst būt divas ierīces ar vienādu adresi.

Arduino plate atbalsta i2c aparatūrā. Varat izmantot tapas A4 un A5, lai savienotu ierīces, izmantojot šo protokolu.

Darbam ar I2C ir vairākas priekšrocības:

  • Darbībai nepieciešamas tikai 2 līnijas - SDA (datu līnija) un SCL (pulksteņa līnija).
  • Liela skaita vadošo ierīču pieslēgšana.
  • Samazinot izstrādes laiku.
  • Lai kontrolētu visu ierīču komplektu, ir nepieciešams tikai viens mikrokontrolleris.
  • Iespējamo mikroshēmu skaitu, kas savienotas ar vienu kopni, ierobežo tikai maksimālā jauda.
  • Augsta datu drošības pakāpe, pateicoties īpašam ķēdēs iebūvētam pārsprieguma slāpēšanas filtram.
  • Vienkārša procedūra jaunu kļūmju diagnosticēšanai, ātra traucējummeklēšana.
  • Kopne jau ir integrēta pašā Arduino, tāpēc nav nepieciešams izstrādāt papildu kopnes saskarni.

Trūkumi:

  • Līnijai ir kapacitatīvā robeža - 400 pF.
  • Grūtības programmēt I2C kontrolleri, ja kopnē ir vairākas dažādas ierīces.
  • Izmantojot lielu skaitu ierīču, kļūst grūti lokalizēt kļūmi, ja viena no tām nepareizi iestata zema līmeņa stāvokli.

i2c modulis LCD 1602 Arduino

Ātrākais un ērtākais veids, kā izmantot i2c displeju arduino, ir iegādāties gatavu ekrānu ar iebūvētu protokola atbalstu. Bet šie ekrāni nav ļoti daudz, un tie nav lēti. Bet jau ir izlaists milzīgs skaits dažādu standarta ekrānu. Tāpēc šodien vispieejamākā un populārākā iespēja ir iegādāties un izmantot atsevišķu I2C moduli - adapteri, kas izskatās šādi:

Vienā moduļa pusē mēs redzam i2c tapas - zemējumu, barošanu un 2 datu pārsūtīšanai. Uz otra adaptera mēs redzam ārējos strāvas savienotājus. Un, protams, uz tāfeles ir daudz tapu, ar kuru palīdzību modulis tiek pielodēts pie standarta ekrāna tapām.


I2c izejas tiek izmantotas, lai izveidotu savienojumu ar Arduino plati. Ja nepieciešams, pievienojiet apgaismojumam ārējo barošanas avotu. Ar iebūvēto trimmeri varam regulēt regulējamās kontrasta vērtības J

Tirgū var atrast LCD 1602 moduļus ar jau pielodētiem adapteriem, to lietošana ir maksimāli vienkāršota. Ja iegādājāties atsevišķu adapteri, tas būs iepriekš jāpielodē modulim.

LCD ekrāna savienošana ar Arduino, izmantojot I2C

Lai izveidotu savienojumu, jums ir nepieciešams pats Arduino dēlis, displejs, maizes dēlis, savienojošie vadi un potenciometrs.

Ja izmantojat īpašu atsevišķu i2c adapteri, vispirms tas ir jāpielodē ekrāna modulim. Tur ir grūti kļūdīties, var vadīties pēc šādas shēmas.


i2c iespējots LCD monitors ir savienots ar plati, izmantojot četrus vadus - divus vadus datiem, divus vadus strāvas padevei.

  • GND tapa ir savienota ar GND uz tāfeles.
  • VCC tapa ir 5 V.
  • SCL ir savienots ar tapu A5.
  • SDA ir savienots ar kontaktu A.

Un viss! Nekādu vadu zirnekļu tīklu, kuros var ļoti viegli apjukt. Tajā pašā laikā visu i2C protokola ieviešanas sarežģītību varam vienkārši uzticēt bibliotēkām.

Bibliotēkas darbam ar i2c LCD displeju

Lai savienotu Arduino ar LCD 1602, izmantojot I2C kopni, jums būs nepieciešamas vismaz divas bibliotēkas:

  • Wire.h bibliotēka darbam ar I2C jau ir pieejama standarta Arduino IDE programmā.
  • LiquidCrystal_I2C.h bibliotēka, kas ietver plašu komandu klāstu monitora vadīšanai, izmantojot I2C kopni, un ļauj padarīt skici vienkāršāku un īsāku. Papildus jāinstalē bibliotēka Pēc displeja pievienošanas papildus jāinstalē bibliotēka LiquidCrystal_I2C.h

Pēc visu nepieciešamo bibliotēku pievienošanas skicē mēs izveidojam objektu un varam izmantot visas tā funkcijas. Pārbaudei ielādēsim šādu standarta skici no piemēra.

#iekļauts #iekļauts // Bibliotēkas savienojums //#include // Alternatīvās bibliotēkas pievienošana LiquidCrystal_I2C lcd(0x27,16,2); // Norādiet I2C adresi (visbiežāk sastopamā vērtība), kā arī ekrāna parametrus (LCD 1602 gadījumā - 2 rindas pa 16 rakstzīmēm katrā //LiquidCrystal_PCF8574 lcd(0x27); // PCF8574 bibliotēkas variants void setup( ) ( lcd.init (); // Inicializējiet displeju lcd.backlight(); // Pievienojiet fona apgaismojumu lcd.setCursor(0,0); // Iestatiet kursoru uz pirmās rindas sākumu lcd.print(" Sveiki"); // Ierakstiet tekstu pirmajā rindā lcd.setCursor(0,1); // Iestatiet kursoru uz otrās rindas sākumu lcd.print("ArduinoMaster"); // Ierakstiet tekstu otrajā rindā ) Void loop() ( )

LiquidCrystal_I2C bibliotēkas funkciju un metožu apraksts:

  • home() un clear() - pirmā funkcija ļauj atgriezt kursoru uz ekrāna sākumu, otrā arī, bet tajā pašā laikā dzēš visu, kas bija monitorā iepriekš.
  • write(ch) - ļauj ekrānā izdrukāt vienu rakstzīmi ch.
  • cursor() un noCursor() - parādīt/paslēpt kursoru ekrānā.
  • blink() un noBlink() - kursors mirgo/nemirgo (ja tā displejs bija iespējots iepriekš).
  • display() un noDisplay() — ļauj iespējot/atspējot displeju.
  • scrollDisplayLeft() un scrollDisplayRight() - ritina ekrānu par vienu rakstzīmi pa kreisi/pa labi.
  • autoscroll () un noAutoscroll () - ļauj iespējot/atspējot automātiskās ritināšanas režīmu. Šajā režīmā katra jauna rakstzīme tiek rakstīta tajā pašā vietā, aizstājot to, kas iepriekš tika rakstīts ekrānā.
  • leftToRight() un rightTo Left() — iestata redzamā teksta virzienu — no kreisās puses uz labo vai no labās uz kreiso.
  • createChar(ch, bitmap) — izveido rakstzīmi ar kodu ch (0–7), izmantojot bitkartes bitkartes masīvu, lai izveidotu melnbaltus punktus.

Alternatīva bibliotēka darbam ar i2c displeju

Dažos gadījumos, izmantojot norādīto bibliotēku ar ierīcēm, kas aprīkotas ar PCF8574 kontrolleriem, var rasties kļūdas. Šajā gadījumā kā alternatīvu var piedāvāt bibliotēku LiquidCrystal_PCF8574.h. Tas paplašina LiquidCrystal_I2C, tāpēc ar tā lietošanu nevajadzētu rasties problēmām.

i2c LCD displeja savienojuma problēmas

Ja pēc skices augšupielādes displejā nekas nav redzams, veiciet tālāk norādītās darbības.

Pirmkārt, varat palielināt vai samazināt monitora kontrastu. Bieži vien rakstzīmes vienkārši nav redzamas kontrasta un fona apgaismojuma režīma dēļ.

Ja tas nepalīdz, pārbaudiet pareizo kontaktu savienojumu, vai fona apgaismojums ir darbināts. Ja izmantojāt atsevišķu i2c adapteri, vēlreiz pārbaudiet kontaktu lodēšanas kvalitāti.

Vēl viens izplatīts iemesls teksta trūkumam ekrānā var būt nepareiza i2c adrese. Vispirms mēģiniet mainīt ierīces adresi skicē no 0x27 0x20 vai uz 0x3F. Dažādiem ražotājiem var būt atšķirīgas noklusējuma adreses. Ja tas nepalīdz, varat palaist i2c skenera skici, kas skenē visas pievienotās ierīces un nosaka to adresi ar brutālu spēku. i2c skenera skices piemērs.

Ja ekrāns joprojām nedarbojas, mēģiniet atlodēt adapteri un pievienot LCD ekrānu parastajā veidā.

Secinājums

Šajā rakstā mēs esam apskatījuši galvenās problēmas, kas saistītas ar LCD ekrāna izmantošanu sarežģītos Arduino projektos, kad uz tāfeles ir jāsaglabā bezmaksas tapas. Vienkāršs un lēts i2c adapteris ļaus pieslēgt 1602 LCD ekrānu, kas aizņem tikai 2 analogās tapas. Daudzās situācijās tas var būt ļoti svarīgi. Cena ērtībai ir nepieciešamība izmantot papildu moduli - pārveidotāju un bibliotēku. Mūsuprāt, tā nav augsta cena ērtības labad, un mēs ļoti iesakām izmantot šo funkciju projektos.