Savienojuma shēma diviem i2c moduļiem arduino. LCM1602 LCD ekrāna savienošana ar I2C ar Arduino. Izveidojiet savus simbolus

Šajā rakstā es jums pastāstīšu, kā izmantot I2C interfeisa moduli, lai vadītu LCD displeju (2x16 / 20x4) ar izmantojot Arduino. Šis modulis ļauj samazināt izmantoto kontroliera tapu skaitu 8 vai 4 bitu savienojuma vietā, ir nepieciešami tikai 2 kontakti (SDA un SCL).

Tehniskie parametri

Displeja atbalsts: LCD 16×02 / 20×04
Pēc izvēles: kontrasta regulēšana
Barošanas spriegums. 5V
Interfeiss: I2C
Izmēri: 54mm x 19mm x 15mm

Vispārīga informācija par I2C interfeisa moduli

Tā kā Arduino kontrolleru tapu skaits ir ierobežots un bieži tiek izmantots dažādi sensori un tiem beidzas moduļi, ir nepieciešams tos saglabāt, šiem gadījumiem tika izstrādāts šis modulis, ar tā palīdzību var realizēt pārraidi pa diviem kontaktiem (SDA un SCL).

Tagad nedaudz par pašu moduli, tas ir veidots uz PCF8574T mikroshēmas. Rezistori R8 (4,7 kOhm) un R9 (4,7 kOhm) ir nepieciešami SDA un SCL līniju uzvilkšanai, ideālā gadījumā, savienojot divas vai vairākas ierīces, izmantojot I2C kopni, pievilkšana ir jāizmanto tikai vienā ierīcē, I; Vēlāk rakstīšu kāpēc. Uz tāfeles ir trīs džemperi (shēma parāda, ka līnijas A0, A1, A2 ir pievienotas barošanas avotam caur rezistoriem R4, R5, R6), tie ir nepieciešami, lai mainītu ierīces adresāciju, kopā ir 8 iespējas . Adresācijas maiņa dod mums iespēju savienot līdz astoņām ierīcēm, izmantojot IC2 kopni ar PCF8574T mikroshēmu, adreses opcijas ir parādītas attēlā (noklusējuma ierīces adrese ir 0x27). Modulis ir aprīkots arī ar potenciometru R11, ar tā palīdzību iespējams mainīt LCD displeja kontrastu.

Savienojumam modulī ir trīs kontaktu grupas:

Pirmā grupa:
SCL: sērijas pulkstenis
SDA: datu līnija (sērijas Dфta)
VCC: "+" jauda
GND: "-" barošanas avots

Otrā grupa:
VSS: "-" jauda
VDD: “+” jauda
BALS: Kontrasta vadības tapa
RS: Reģistrēties Izvēlieties
RW: lasīšana/rakstīšana (rakstīšanas režīms, kad tas ir savienots ar zemi)
E: Iespējot (krītošais indikators)
DB0-DB3: Interfeisa zemie biti
DB4-DB7: interfeisa augstie biti
A: "+" fona apgaismojuma barošanas avots
K: "-" fona apgaismojuma barošanas avots

Trešā grupa: (džemperis iestatīts pēc noklusējuma)
VCC:
A no LCD:

Savienojuma izveide ar Arduino

Nepieciešamās daļas:
Arduino UNO R3 x 1 gab.
LCD displejs 1602A (2×16, 5V, Blue) x 1 gab.
Interfeisa modulis I2C, IIC, TWI priekš LCD x 1 gab.
DuPont vads, 2,54 mm, 20 cm, F-M (sieviete - vīrietis) x 1 gab.
USB kabelis 2,0 A-B x 1 gab.

Savienojums:
Vispirms pielodējiet I2C moduli LCD displejs, tad displejs ir jāpievieno Arduino UNO. Lai to izdarītu, mēs izmantosim DuPont elektroinstalāciju saskaņā ar zemāk esošo tabulu.

Skaidrības labad es sniegšu citu diagrammu.

Šim eksperimentam ir jālejupielādē un jāinstalē bibliotēka “LiquidCrystal_I2C”. Pēc tam nokopējiet un ielīmējiet šo parauga kodu Arduino IDE programmas logā un ielādējiet to kontrolierī.

/* Testēts uz Arduino IDE 1.6.11 Testēšanas datums 15.09.2016. */ #iekļauts #iekļauts LiquidCrystal_I2C lcd(0x27,16,2); // Iestatiet displeja adresi un izmērus void setup() ( lcd.init(); // Inicializēt lcd lcd.backlight(); // Ieslēdziet fona apgaismojumu lcd.setCursor(0,0); // Iestatiet kursors uz 1 rindas sākumu lcd .print("Sveiki, pasaule" // Drukāt tekstu lcd.setCursor(0,1) // Uzstādiet kursoru uz 2. rindas sākumu lcd.print("www. robotchip.ru"); // Drukāt tekstu ) void loop() ( )

Lejupielādējiet programmu

Ja visu izdarījāt pareizi, bet displejā nav simbolu, mēģiniet palielināt kontrastu ar potenciometru.


Saites
Lejupielādējiet LiquidCrystal_I2C bibliotēku
PCF8574T mikroshēmas dokumentācija
LCD1602A dokumentācija

Pērciet vietnē Aliexpress

Es to saņēmu šeit no labs veikals Chip Resistor ir vēl viena ierīce izpētei un izmantošanai noderīgās ierīcēs. Izrādījās, ka šī ierīce ir paredzēta LCD displeja vadīšanai, ko kontrolē HD44780 kontrolleris, 4 bitu režīmā. Šim nolūkam uz plates ir uzstādīta mikroshēma, kas ir I2C kopnes pārveidotājs paralēlā 8 bitu portā.

Plāksne ir maršrutēta tā, lai to varētu uzreiz savienot ar LCD displeju. Ievade nodrošina barošanu un I2C līnijas. Plāksne ir uzreiz aprīkota ar uzvilkšanas rezistoriem SCL un SDA līnijās, potenciometru kontrasta regulēšanai un barošanas avotu pašam displejam.

Labajā pusē esošais džemperis ieslēdz/izslēdz fona apgaismojumu. Pēc tam, bruņojoties ar testeri, tika apkopota šāda tabula. Pēc moduļa apguves atklājās, ka P3 kontrolē fona apgaismojumu. Ja ir uzstādī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 baitu, 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āk nozīmīgāko vērtību). adreses biti), pēc tam 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 displeju, es paņēmu funkcijas no axlib bibliotēkas un nedaudz modificēju tās, lai tās 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 Uz P3 savienojuma kājas ir fona apgaismojums. 1 ieslēgts, 0 izslēgts */ // Izvaddati com |= 0x04; // E uz vienību pcf8574_byte_out(com, ADD); // Izvaddati com &= 0xFB; // E līdz nullei pcf8574_byte_out(com, ADD); // Izvaddati) 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); // Parametru iestatīšana com(0x80); // Parametru iestatīšana 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 datu 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 = ((data // Pārsūtīt nozīmīgākos 4 datu_h bitus |= 0x04; pcf8574_byte_out(data_h, ADD); // Pārsūtiet nozīmīgākos 4 bitus // Pārsūtiet nozīmīgākos 4 bitus // Transfer low 4 bits // Transfer low 4 bits // Transfer 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. Vispirms savienojam I2C un PCF8574 bibliotēkas. Es jau rakstīju par I2C, tāpēc es turpināšu to vēlreiz, bet es jums pastāstīšu, kas ir 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 šādu adresi nav autobusā, tā to atgriezīs.
BYTE pcf8574_byte_out(BYTE data, BYTE add) ( BAITS 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 pielāgota tikai šai mikroshēmai. Kā argumenti tam ir dots baits, kas jāpārsūta uz autobusu, 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, tad funkcija beigs darbu ar mikroshēmu un atgriezīs nulli kā veiksmīgu baita nosūtīšanu. Un šajā laikā mikroshēma izvadīs šo baitu savā paralēlajā portā. Pretējā gadījumā mēs saņemsim NACK un atgriezīsim vienu, pārraide 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 ir izveidota eksperimentēšanai. Pieņem rādītāju 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 vienā baitā sesijā. Funkcija darbojas, taču tā nav piemērota LCD displejam. Tagad atgriezīsimies pie galvenās programmas. Pēc bibliotēku pievienošanas mēs ierakstām mikroshēmas adresi. Tālāk mēs izveidojam trīs funkcijas, kas līdzīgas lcd.h. Vienīgā atšķirība ir datu pārsūtīšanas principā.
void com(BYTE com) (com |= 0x08; // P3 uz vienu, lai būtu ieslēgts fona apgaismojums pcf8574_byte_out(com, ADD); // Izvaddati com |= 0x04; // E uz vienību pcf8574_byte_out(com, ADD); // Izvaddati com &= 0xFB; // E līdz nullei pcf8574_byte_out(com, ADD); // Izvaddati } Šī funkcija tikai nosūta komandas uz displeju. Šeit parādījās pirmā rinda ar loģisku komandas pievienošanu no 0x08. Šī kļūda ir nepieciešama, jo mēs pārsūtām baitu nevis tieši uz LCD displeja portu, bet gan caur mūsu atkārtotāju. Tas ir, ja mēs piegādājām baitu un tad mums ir jāizvada tikai viens bits, lūdzu, piešķiriet nepieciešamo bitu iepriekšējam baitam un nosūtiet to vēlreiz uz portu. Tas ir tāds apgrūtinājums. Papildinājums ar 0x08 ir nepieciešams, lai pastāvīgi saglabātu vienu trešajā ciparā. Atcerieties fona apgaismojumu? Tas ir šis papildinājums, kas ieslēdz fona apgaismojumu. Tad mēs saucam par baita pārsūtīšanas uz kopni funkciju. Par to ir rakstīts iepriekš. Tad mēs pārsūtām baitu caur autobusu uz mikroshēmu. Tālāk jums jāiestata E uz vienu, ko faktiski dara baita loģiskā pievienošana ar 0x04. Pēc E atiestatīšanas. Tādējādi jebkuru komandu uz displeju var nosūtīt, 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); // Parametru iestatīšana com(0x80); // Parametru iestatīšana 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 datu ievades režīmu com(0x60); // Iestatiet datu ievades režīmu com(0x00); // Ieslēdziet displeju ar atlasīto kursoru com(0xC0); // Ieslēdziet displeju ar atlasīto kursoru } Šī funkcija tikai inicializē displeju. Komandu secība tiek ņemta no datu lapas LCD displejā. void char_out(BYTE data) ( BYTE data_h = ((data & 0xF0) + 0x09); BYTE data_l = ((data // Pārsūtīt nozīmīgākos 4 datu_h bitus |= 0x04; pcf8574_byte_out(data_h, ADD); // Pārsūtiet nozīmīgākos 4 bitus datu_h &= 0xF9; // Pārsūtiet nozīmīgākos 4 bitus pcf8574_byte_out(data_h, ADD); // Transfer low 4 bits pcf8574_byte_out(data_l, ADD); // Transfer low 4 bits dati_l |= 0x04; // Transfer low 4 bits } pcf8574_byte_out(data_l, ADD); data_l &= 0xF9; pcf8574_byte_out(data_l, ADD);

Šī funkcija pārsūta datus uz LCD displeju. Tas tiek izpildīts tāpat kā komandas, izņemot to, ka baits vispirms tiek pārsūtīts ar visnozīmīgāko nibble un pēc tam ar zemāko baitu. 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. Tieši tā: "HELLO WORLD!" Un šī ierīce ir paredzēta ne tikai HD44780. Uzvilkšanas rezistori ir uzstādīti galvenā pusē. Saskaņā ar specifikāciju dati tiek ierakstīti LCD kontrollerī krišanas virzienā E. No šejienes tiek vienkāršota pirmā funkcija: void com(BYTE com) ( com |= 0x08; // backlight pcf8574_byte_out(com | 0x04, ADD); // Datu izvade pcf8574_byte_out(com , ADD) // E uz nulli) Un pārējais var būt arī ievērojami mazāks. Piemēram, void char_out (BYTE data) aizņems tikai divus zvanus un vēl jo vairāk bez papildu mainīgajiem. LCD inicializācija tika veikta, pārkāpjot laika specifikācijas.

Aleksejs 02.08.15 19:11

Trūkstošā komata dēļ displejs netiks ietekmēts. Šī ierīce ir īpaši paredzēta displejiem ar šo vai līdzīgu kontrolieri. Bet šī mikroshēma ir patiešām vienkāršs portu paplašinātājs. Piekrītu par E. Ir nepieciešami papildu mainīgie. Ja funkcijai nododat argumentu un veicat noteiktas darbības ar loģiku, var rasties kļūmes. Es jau ar to esmu saskāries. Inicializācija tiek veikta, nepārkāpjot laiku. Dokumentācijā teikts, ka starp komandām ir 40 µs pauze. Sakarā ar to, ka pārsūtīšana notiek pa i2c kopni, kas savukārt ir programmatūra un lēna, periodi tiek pabeigti ar interesi. Ja vēl neesi slinks, 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, kā atzīmēja cienījamais “Literate”

Dmitrijs 14.06.2016 21:57

ruslans 21.12.16 19:54
Aleksejs 21.12.16. 21:53

Ak jā. Īpaši kods ASMA. Arduino eksperti to novērtēs pilnībā)))

Py.sy.
Pat ja neskatāties uz ASM, tur esošā programma ir rakstīta PIC kontrollerim. Vai šī ir “ļoti” noderīga informācija AVR speciālistiem? īpaši iesācējiem))) Man nav nekas pret PIC, bet pat PIC un AVR ASM atšķiras. Runājot par LCD displeja darbības detaļām, varat apskatīt))) Tiesa, es to arī rakstīju zem CVAVR, bet visas komandas tiek izjauktas un sakārtotas plauktos. Bet jebkurā gadījumā izlemiet paši, kur tas ir rakstīts skaidrāk))) Autors raksta, lasītājs izvēlas.

GeK 01/04/17 12:52

"Chēmas I2C adrese (pēc noklusējuma tā ir 0x4E")

Nozīmīgākie 4 adreses biti ir fiksēti,
PCF8574 prefikss ir 0100, bet PCF8574A prefikss ir 0111
Apakšējie 3 biti ir atkarīgi no mikroshēmas ieejas A2-A0 stāvokļa. Pēc noklusējuma visi 3 džemperi ir atvērti, attiecīgi mikroshēmas adresei ir vērtība 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 01.04.17. 14:27

Jūs esat kaut ko sajaucis.
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 sadaļā Define.

Jurijs 14.12.17 21:26

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

Aleksandrs 05.20.18 18:14

Laba diena! Kā jūs izvadāt tekstu krievu valodā?

Aleksejs 05.20.18 23:04

Šis ir mājas displejs no MELT. Viņa atmiņā ir ierakstī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 izvada normāli
un ja tu raksti "HELLO WORLD!" izceļ visādas muļķības. Man ir divi
Vienai no displeja opcijām ir kirilicas alfabēts. otrā ir ķīniešu.

Aleksejs 21.05.18. 09:22

Vispirms es uzrakstīšu testa programmu. Atkārto visu atmiņu un parāda simbolus un to adreses. Un tad uzzini, kas ir par problēmu. Visticamāk, rakstzīmju tabula neatbilst ascii tabulai.

Andrejs 03.09.18 08:32

Laba diena!

Vai varat sniegt Proteus shēmas shēmu?

Andrejs 09.03.18. 10:22

Vai arī Proteuzā neviens nav pārbaudījis?

Andrejs 09.03.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! Es izpētīju visu internetu, un neviens no sniegtajiem piemēriem, izņemot jūsējo, nedarbojās. Vienīgais, ka projektu arhīvā displeja inicializācijas funkcijā _delay_ aizkaves nav norādītas un attiecīgi tā nestrādā

Aleksejs 01.06.19. 09:52

Nu, šis drīzāk ir demonstrācijas projekts. Laba iemesla dēļ axlib bibliotēka ir jāpārraksta, 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 06.05.19. 12:57

STM nav DIP pakotņu, ir grūtāk izgatavot iespiedshēmas plates. Maniem projektiem AVR iespējas ir daudz, vienā Atmega 8 var ievietot daudz.

Aleksejs 06.05.19. 15:20

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

Dmitrijs 06.07.19. 00:41

Sveiks, Aleksej.
Lūdzu, pastāstiet man, kā nolasīt porta statusu no pcf8574?
Es vēlos izveidot ārēju bloku, 8 GPIO i2c kopnē - tas arī viss.

Dmitrijs 06.07.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_t data=0;
i2c_start();
ask = i2c_send_byte(addr);
if(!ask) data = i2c_read_byte(NACK);
i2c_stop();

Atgriezt datus;
}

Pāvels 06.07.19. 20:37

Cik tas maksā, 150 rubļu, par releja cenu vispār), un kā jūs stiepļu dēļi STM? LUT ir neuzticams, CNC maršrutētājs nav pārliecināts, ko tas prasīs (neesmu mēģinājis)

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 ar 16 rakstzīmēm. Šajā konkrētajā modelī krievu valoda netiek atbalstīta.

Sh2s datu kopne ļauj vienlaikus savienot līdz 127 ierīcēm, izmantojot divus vadus. Šis I2C ir ieviests PCF8574T mikroshēmā.

Savienojuma shēma:

Zilā lieta ir mainīga pretestība, kas ļauj pielāgot ekrāna kontrastu.

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

4 kontaktu 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 būt 0x3F. Lai precīzi noteiktu adresi, varat izmantot i2c ierīces skeneri.

#iekļauts #iekļauts //iestatiet LCD ekrāna adresi 0x27, 16 rakstzīmes, 2 rindas LiquidCrystal_I2C lcd(0x27, 16, 2); void setup() ( lcd.init(); // Inicializējiet ekrānu //ieslēdziet 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!"); //tādā pašā veidā izdrukājiet otro rindiņu lcd.setCursor(1, 1);

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 ar 16 rakstzīmēm. Šajā konkrētajā modelī krievu valoda netiek atbalstīta.

Sh2s datu kopne ļauj vienlaikus savienot līdz 127 ierīcēm, izmantojot divus vadus. Šis I2C ir ieviests PCF8574T mikroshēmā.

Savienojuma shēma:

Zilā lieta ir mainīga pretestība, kas ļauj pielāgot ekrāna kontrastu.

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

4 kontaktu 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 būt 0x3F. Lai precīzi noteiktu adresi, varat izmantot i2c ierīces skeneri.

#iekļauts #iekļauts //iestatiet LCD ekrāna adresi 0x27, 16 rakstzīmes, 2 rindas LiquidCrystal_I2C lcd(0x27, 16, 2); void setup() ( lcd.init(); // Inicializējiet ekrānu //ieslēdziet 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!"); //tādā pašā veidā izdrukājiet otro rindiņu lcd.setCursor(1, 1);

  • lcd.print("www.vietne"); ) tukšuma cilpa () ( )
  • FC-113 modulis ir balstīts uz PCF8574T mikroshēmu, kas ir 8 bitu maiņu reģistrs - I2C seriālās kopnes ievades-izejas “paplašinātājs”. Attēlā mikroshēma ir apzīmēta ar DD1.
  • R1 ir apdares rezistors 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. Lai mainītu ierīces I2C adresi, ir nepieciešami kontaktu paliktņi A1...A3. Lodējot atbilstošos džemperus, var mainīt ierīces adresi. Tabulā parādīta adrešu un džemperu atbilstība: "0" atbilst atvērtai ķēdei, "1" - uzstādītam džemperim. Pēc noklusējuma ir atvērti visi 3 džemperi un ierīces adrese.

2 0x27 LCD displeja savienojuma shēma ar Arduino

izmantojot I2C protokolu


3 Modulis ir savienots ar Arduino standarta veidā I2C kopnei: moduļa SDA kontakts ir savienots ar analogo portu A4, SCL kontakts ir savienots 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ā. LCD displeja savienojuma shēma ar Arduino

Bibliotēka darbam

Tagad mums ir nepieciešama bibliotēka, lai strādātu 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:Funkcija
Mē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 rakstzīmju skaits); skaidrs ()
ekrāna notīrīšana un kursora atgriešana sākuma pozīcijā; mājas ()
atgriezt kursoru sākuma pozīcijā; setCursor()
kursora iestatīšana noteiktā pozīcijā; rakstīt ()
LCD ekrānā parāda simbolu; drukāt ()
parāda tekstu LCD ekrānā; kursors ()
parāda kursoru, t.i. pasvītrojums zem nākamās rakstzīmes vietas; 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()
ritiniet displeja saturu par 1 pozīciju pa kreisi; scrollDisplayRight()
ritiniet displeja saturu par 1 pozīciju pa labi; autoscroll ()
iespējot automātisko ritināšanu; noAutoscroll()
atspējot automātisko ritināšanu; iestata teksta virzienu no kreisās uz labo;
no labās uz kreiso() teksta virziens no labās uz kreiso;
CreateChar() izveido pielāgotu rakstzīmi LCD ekrānam.

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

Atvērsim paraugu: Failu paraugi LiquidCrystal_I2C CustomChars un mēs to nedaudz pārstrādāsim. Parādīsim ziņojumu, kura beigās būs mirgojošs simbols. Komentāri pie koda komentē visas skices nianses.

#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” bitu maska ​​LiquidCrystal_I2C lcd(0x27, 16, 2); // Iestatiet adresi 0x27 16x2 LCD displejam anulēt iestatīšanu() ( lcd.init(); // LCD displeja inicializācija lcd.backlight(); // ieslēgt displeja fona apgaismojumu lcd.createChar(3, sirds); // izveidot "sirds" simbolu atmiņas šūnā 3 lcd.home(); // novieto kursoru augšējā kreisajā stūrī, pozīcijā (0,0) lcd.!"); // izdrukā teksta rindiņu lcd.setCursor(0, 1); // pārvietojiet kursoru uz 2. rindiņu, rakstzīmi 1 lcd.print( " i " // izdrukājiet ziņojumu 2. rindā lcd.printByte(3) // izdrukājiet simbolu "sirds", kas atrodas 3. šūnā lcd.print (" Arduino "); } void loop() (// pēdējās rakstzīmes mirgošana 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);

5 Starp citu, rakstzīmes, kas rakstītas ar komandu lcd.createChar();

, paliek displeja atmiņā arī pēc strāvas izslēgšanas, jo rakstīts, lai parādītu ROM 1602. Izveidojiet savus simbolus LCD displejam {00000, 01010, 11111, 11111, 01110, 00100, 00000} 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:

6 (0x0, 0xa, 0x1f, 0x1f, 0xe, 0x4, 0x0). Pārvērst heksadecimālos skaitļus bināros:

. Šie skaitļi ir nekas vairāk kā bitu maskas katrai no 7 simbola rindiņām, kur "0" apzīmē gaišo punktu un "1" tumšo punktu. Piemēram, sirds simbols, kas norādīts kā bitmaska, parādīsies ekrānā, kā parādīts attēlā.


7 LCD ekrāna vadība caur I2C autobusu

Kā bonusu apskatīsim laika diagrammu latīņu rakstzīmju "A", "B" un "C" attēlošanai LCD displejā. Šīs rakstzīmes tiek saglabātas displeja ROM un tiek parādītas ekrānā, vienkārši pārsūtot to adreses uz displeju. Diagramma ņemta no displeja RS, RW, E, D4, D5, D6 un D7 tapām, t.i. jau pēc FC-113 “I2C paralēlās kopnes” pārveidotāja. Var teikt, ka mēs iegremdējamies nedaudz dziļāk aparatūrā.


Laika diagramma latīņu rakstzīmju “A”, “B” un “C” izvadīšanai LCD displejā 1602

Diagrammā redzams, ka rakstzīmes, kas atrodas displeja ROM (skat. datu lapas 11. lpp., saite zemāk), tiek pārraidītas divos nibļos, no kuriem pirmais nosaka tabulas kolonnas numuru, bet otrais - rindas numuru. Šajā gadījumā dati tiek “fiksēti” līnijas signāla malā E(Iespējot) un līniju R.S.(Atlasīt reģistrāciju) ir loģiskā stāvoklī, kas nozīmē, ka dati tiek pārsūtīti. Zems stāvoklis RS rindā nozīmē, ka tiek nosūtītas instrukcijas, ko mēs redzam pirms katras rakstzīmes pārsūtīšanas. Šajā gadījumā tiek pārraidīts LCD displeja instrukcijas kods karietes atgriešanai pozīcijā (0, 0), ko arī var uzzināt, izpētot displeja tehnisko aprakstu.

Un vēl viens piemērs. Šī laika diagramma parāda sirds simbola izvadi LCD displejā.


Atkal pirmie divi impulsi Iespējot ievērot norādījumus Sākums ()(0000 0010 2) - novietojiet ratiņu atpakaļ pozīcijā (0; 0), bet otros divus - izvadiet uz LCD displeju, kas saglabāts atmiņas šūnā 3 10 (0000 0011 2) simbolu “Sirds” (instrukcija). lcd.createChar(3, sirds); skice).