İki i2c modulunun arduino-ya qoşulma sxemi. LCM1602 LCD ekranının I2C ilə Arduino-ya qoşulması. Öz simvollarınızı yaratmaq

Bu yazıda sizə LCD displeyini (2x16 / 20x4) idarə etmək üçün I2C interfeys modulundan necə istifadə edəcəyinizi göstərəcəyəm. Arduino. Bu modul istifadə olunan nəzarətçi pinlərinin sayını azaltmağa imkan verir, 8 və ya 4 bitlik əlaqə əvəzinə yalnız 2 pin (SDA və SCL) tələb olunur.

Texniki spesifikasiyalar

Ekran dəstəyi: LCD 16×02 / 20×04
İsteğe bağlı: kontrastın tənzimlənməsi
Təchizat gərginliyi. 5V
İnterfeys: I2C
Ölçülər: 54mm x 19mm x 15mm

I2C interfeys modulu haqqında ümumi məlumat

Arduino kontrollerlərindəki pinlərin sayı məhdud olduğundan və tez-tez istifadə edildikdə müxtəlif sensorlar və modulları tükənir, onları saxlamaq lazımdır, bu hallar üçün bu modul hazırlanmışdır, onun köməyi ilə iki kontakt (SDA və SCL) üzərindən ötürülmə həyata keçirmək mümkündür.

İndi modulun özü haqqında bir az, o, PCF8574T çipində qurulub. SDA və SCL xətlərini çəkmək üçün R8 (4,7 kOhm) və R9 (4,7 kOhm) rezistorları lazımdır, ideal olaraq, iki və ya daha çox cihazı I2C avtobusu ilə birləşdirərkən, yalnız bir cihazda bir çəkmə istifadə etməlisiniz, mən səbəbini sonra yazacam. Lövhədə üç keçid var (diaqram göstərir ki, A0, A1, A2 xətləri R4, R5, R6 rezistorları vasitəsilə gücə çəkilir), onlar cihazın ünvanını dəyişdirmək üçün lazımdır, ümumilikdə 8 seçim var. Ünvanlaşdırmanın dəyişdirilməsi bizə PCF8574T çipi ilə IC2 avtobusu vasitəsilə səkkizə qədər cihazı qoşmaq imkanı verir, ünvan seçimləri şəkildə göstərilib (standart cihaz ünvanı 0x27). Həmçinin, modul LCD displeyinin kontrastını dəyişdirə biləcəyiniz R11 potensiometri ilə təchiz edilmişdir.

Qoşulmaq üçün modulda üç qrup əlaqə var:

Birinci qrup:
SCL: saat xətti (Serial Saat)
SDA: məlumat xətti (Serial Dfta)
VCC: "+" güc
GND: "-" güc

İkinci qrup:
VSS: "-" güc
VDD: "+" güc
VO: Kontrast nəzarət çıxışı
RS: Seçimi qeyd edin
RW: Oxu/Yaz (yerə qoşulduqda yazma rejimi)
E: Aktivləşdirin (düşən strobe)
DB0-DB3: interfeysin LSB-ləri
DB4-DB7: interfeysin yüksək bitləri
A: "+" arxa işıq gücü
K: "-" arxa işıq gücü

Üçüncü qrup: (defolt olaraq jumper təyin olunur)
VCC:
LCD-dən A:

Arduino-ya qoşulma

Tələb olunan təfərrüatlar:
Arduino UNO R3 x 1pc
LCD displey 1602A (2×16, 5V, Mavi) x 1 ədəd.
LCD x 1 pc üçün I2C, IIC, TWI interfeys modulu.
DuPont məftil, 2,54 mm, 20 sm, F-M (Qadın - Kişi) x 1 ədəd.
USB kabel 2.0A-B x 1pc

Əlaqə:
Əvvəlcə I2C modulunu LCD displeyə lehimləyin, sonra ekranı Arduino UNO-ya qoşmalısınız. Bunu etmək üçün biz DuPont naqillərindən istifadə edirik, aşağıdakı cədvələ uyğun olaraq qoşuluruq.

Aydınlıq üçün başqa bir diaqram verəcəyəm.

Bu təcrübə üçün siz "LiquidCrystal_I2C" kitabxanasını endirib quraşdırmalısınız. Sonra bu nümunə kodunu kopyalayıb Arduino IDE proqram pəncərəsinə yapışdırın və nəzarətçiyə yükləyin.

/* Arduino IDE 1.6.11-də sınaqdan keçirilib Test tarixi 15/09/2016. */ #daxildir #daxildir LiquidCrystal_I2C lcd(0x27,16,2); // Ekranın ünvanını və ölçüsünü təyin edin void setup() ( lcd.init(); // Initialize lcd lcd.backlight(); // Arxa işığı yandırın lcd.setCursor(0,0); // kursoru lcd-nin 1-ci sətirinin əvvəlinə aparın .print("Salam, dünya"); // lcd.setCursor(0,1) mətnini göstərin; // Kursoru 2-ci sətirin əvvəlinə qoyun lcd.print("www .robotchip.ru"); // Mətni göstər ) void loop() ( )

Proqramı yükləyin

Hər şeyi düzgün etmisinizsə, lakin ekranda heç bir simvol yoxdursa, potensiometr ilə kontrastı artırmağa çalışın.


Bağlantılar
LiquidCrystal_I2C kitabxanasını yükləyin
PCF8574T çipi üçün sənədlər
LCD1602A üçün sənədlər

Aliexpress-də satın alın

Mən onu buradan almışam yaxşı mağaza Chip Resistor faydalı cihazlarda öyrənmək və istifadə etmək üçün başqa bir cihazdır. Bu cihaz 4 bitlik rejimdə HD44780 nəzarətçisinin nəzarəti altında LCD displeyini idarə etmək üçün kəskinləşdi. Bu məqsədlə lövhədə I2C avtobusunun paralel 8 bitlik porta çeviricisi olan mikrosxem quraşdırılmışdır.

Lövhə elə ayrılıb ki, dərhal LCD displeylə keçə bilsin. Giriş enerjili və I2C xətləridir. Lövhədə dərhal SCL və SDA xətlərində açılan rezistorlar, kontrastı tənzimləmək və ekranın özünü gücləndirmək üçün potensiometr var.

Sağdakı jumper arxa işığı yandırır/söndürür. Sonra bir test cihazı ilə silahlanmış, aşağıdakı boşqab tərtib edilmişdir. Modulu öyrəndikdən sonra məlum oldu ki P3 arxa işığı idarə edir. Jumper quraşdırılıbsa, 1 arxa işığı yandırır və 0 onu söndürür. Jumper çıxarıldıqda, arxa işıq həmişə sönür. Bundan əlavə, axlib kitabxanasını I2C avtobusu ilə işləmək funksiyaları (proqram təminatının tətbiqi) və PCF8574 çipinə nəzarət funksiyaları ilə əlavə etmək qərara alındı. Bir sözlə, modul necə işləyir. Baytları paralel olaraq çıxarmaq üçün bunun üçün mikrosxemin ünvanını I2C avtobusuna göndərməlisiniz (standart olaraq 0x4E-dir. Siz həmçinin lövhədə keçidləri lehimləməklə və ən azı üçün dəyərini dəyişdirməklə ünvanı dəyişə bilərsiniz. ünvanın əhəmiyyətli rəqəmləri), sonra ACK aldıqdan sonra məlumat baytı göndərilir. Çip ACK ilə cavab verdikdən sonra bayt çipin paralel portunda görünür. LCD-yə nəzarət etmək üçün mən axlib kitabxanasından funksiyaları götürdüm və I2C avtobusu ilə işləmək üçün onları bir az yenidən işlədim. #daxildir #daxildir #daxildir #daxildir #define ADD 0x4E // Çip ünvanı /* LCD çipi RS P0 RW P1 EN P2 D4 P4 D5 P5 D6 P6 D7 P7 Arxa işıq P3 pininə qoşulub. 1 aktiv, 0 endirim */ // Məlumat çıxışı com |= 0x04; // E birinə pcf8574_byte_out(com, ADD); // Məlumat çıxışı com &= 0xFB; // E-dən sıfıra pcf8574_byte_out(com, ADD); // Məlumat çıxışı) void init(void) ( _delay_ms(30); com(0x30); _gecikdirin (40); com(0x30); // 4 bitlik rejimə keçin _gecikdirin (40); // Komandanın icrası üçün gecikmə com(0x30); // 4 bitlik rejimə keçin _gecikdirin (40); // Komandanın icrası üçün gecikmə com(0x20); // 4 bitlik rejimə keçin _gecikdirin (40); // Komandanın icrası üçün gecikmə com(0x20); // Seçimləri təyin edin com(0x80); // Seçimləri təyin edin com(0x00); // Ekran söndürmək com(0x80); // Ekran söndürmək com(0x00); // Ekranı təmizləyin com(0x10); // Ekranı təmizləyin com(0x00); com(0x60); // Daxiletmə rejimini təyin edin com(0x00); com(0xC0); // Seçilmiş kursorla ekranı yandırın) void char_out(BYTE data) ( BYTE data_h = ((data & 0xF0) + 0x09); BYTE data_l = ((data // Pass high 4 bit data_h |= 0x04; pcf8574_byte_out(data_h, ADD); // Yüksək 4 bit keçir // Yüksək 4 bit keçir // Aşağı 4 bit keçir // Aşağı 4 bit keçir // Aşağı 4 bit keçir) void str_out(BYTE *str) ( while((*str) != "\0") ( char_out(*str); str++; ) ) int main(void) ( init(); str_out("ЁPҐBET MҐP!" ); while(1)( ) ) Burada nə baş verir. Birincisi, biz I2C və PCF8574 üçün kitabxanaları daxil edirik. Mən artıq I2C haqqında yazdım, ona görə də bir daha çarmıxa çəkməyəcəyəm, amma PCF8574.h-də sizə nə deyəcəm. Kitabxana yalnız üç funksiyadan ibarətdir.
BYTE pcf8574_test(BYTE əlavə et) ( BYTE soruş = ACK; əlavə et &= 0xFE; i2c_start(); soruş = i2c_send_byte(əlavə et); i2c_stop(); sorğunu qaytar; )İlk funksiya avtobusda bir cihazın olub olmadığını yoxlamaq üçün yazılmışdır. Prinsipcə, avtobusda yerləşən istənilən cihazı axtarmaq üçün istifadə edilə bilər. Funksiya istənilən cihazın ünvanını alır və cavab verərsə, sıfırı qaytarır. Bu ünvana malik cihaz avtobusda deyilsə, birini qaytaracaq.
BYTE pcf8574_byte_out(BYTE data, BYTE əlavə et) ( BYTE soruş = ACK; əlavə et &= 0xFE; i2c_start(); soruş = i2c_send_byte(əlavə et); if(!ask) soruş = i2c_send_byte(data); i2c; return soruş ) Bu funksiya artıq sırf bu çip üçün kəskinləşdirilib. Arqument olaraq, avtobusa və mikrosxemin ünvanına ötürülməsi üçün bir bayt keçir. Funksiya əvvəlcə ünvanda çipi sorğulayacaq və sonra bayt göndərəcək. Əgər çip baytı qəbul edibsə və ACK ilə cavab veribsə, o zaman funksiya çipi dayandıracaq və uğurlu bayt kimi sıfırı qaytaracaq. Və bu anda mikrosxem bu baytı paralel portuna çıxaracaq. Əks halda, NACK alırıq və birini qaytarırıq, transfer uğursuz oldu.
BYTE pcf8574_str_out(BYTE *data, BYTE col, BYTE əlavə et) ( BYTE soruş = ACK; əlavə et &= 0xFE; i2c_start(); soruş = i2c_send_byte(əlavə); for(BYTE i=0; i Bu xüsusiyyət təcrübə üçün yaradılmışdır. Bir baytlıq məlumat massivinə, bu baytların sayına və çip ünvanına göstərici götürür. Əslində bütün məlumatları bir seansda ötürmək cəhdi, hər seansda bir bayt deyil. Funksiya işləyir, lakin LCD displeyə uyğun gəlmir. İndi əsas proqrama qayıdaq. Kitabxanaları birləşdirdikdən sonra mikrosxemin ünvanını təyin edirik. Sonra, lcd.h ilə analoji olaraq üç funksiya yaradırıq. Fərq yalnız məlumatların ötürülməsi prinsipindədir.
void com(BYTE com) ( com |= 0x08; // P3-dən birinə, beləliklə arxa işıq yansın pcf8574_byte_out(com, ADD); // Məlumat çıxışı com |= 0x04; // E birinə pcf8574_byte_out(com, ADD); // Məlumat çıxışı com &= 0xFB; // E-dən sıfıra pcf8574_byte_out(com, ADD); // Məlumat çıxışı } Bu funksiya yalnız ekrana əmrlər göndərir. Beləliklə, ilk sətir 0x08-dən əmrin məntiqi əlavəsi ilə meydana çıxdı. Baytları birbaşa LCD portuna deyil, təkrarlayıcımız vasitəsilə ötürməyimizə görə bu byaka lazımdır. Yəni bir bayt təqdim etmişiksə və sonra yalnız bir bit çıxarmaq lazımdırsa, o zaman xahiş etsəniz, əvvəlki bayta lazımi bit təyin edəcək və onu yenidən porta göndərəcək. Bu belə bir dondurmadır. Üçüncü rəqəmdə birini daimi saxlamaq üçün 0x08 əlavə etmək lazımdır. Arxa işığı xatırlayırsınız? Məhz bu əlavə arxa işığı yandırır. Bir baytı avtobusa köçürmə funksiyasını çağırdıqdan sonra. Bu barədə yuxarıda yazılıb. Sonra baytı avtobus üzərindən mikrosxemə köçürürük. Sonra, onu E vahidinə təyin etməlisiniz, bu, 0x04 ilə baytın məntiqi əlavə edilməsidir. Sıfırlandıqdan sonra E. Beləliklə, hər hansı bir əmri yalnız əmrin özünü arqument kimi ötürməklə ekrana göndərə bilərsiniz. void init(void) ( _delay_ms(30); // Güc açıldıqdan sonra fasilə com(0x30); // 4 bitlik rejimə keçin _gecikdirin (40); // Komandanın icrası üçün gecikmə com(0x30); // 4 bitlik rejimə keçin _gecikdirin (40); // Komandanın icrası üçün gecikmə com(0x30); // 4 bitlik rejimə keçin _gecikdirin (40); // Komandanın icrası üçün gecikmə com(0x20); // 4 bitlik rejimə keçin _gecikdirin (40); // Komandanın icrası üçün gecikmə com(0x20); // Seçimləri təyin edin com(0x80); // Seçimləri təyin edin com(0x00); // Ekran söndürmək com(0x80); // Ekran söndürmək com(0x00); // Ekranı təmizləyin com(0x10); // Ekranı təmizləyin com(0x00); // Daxiletmə rejimini təyin edin com(0x60); // Daxiletmə rejimini təyin edin com(0x00); // Seçilmiş kursorla ekranı yandırın com(0xC0); // Seçilmiş kursorla ekranı yandırın } Bu funksiya yalnız ekranın işə salınması ilə əlaqədardır. Əmrlərin ardıcıllığı LCD displeydəki məlumat vərəqindən götürülür. void char_out(BYTE data) ( BYTE data_h = ((data & 0xF0) + 0x09); BYTE data_l = ((məlumat // Yüksək 4 bit data_h |= 0x04; pcf8574_byte_out(data_h, ADD); // Yüksək 4 bit keçir data_h &= 0xF9; pcf8574_byte_out(data_h, ADD); // Yüksək 4 bit keçir pcf8574_byte_out(data_l, ADD); // Aşağı 4 bit keçir data_l |= 0x04; pcf8574_byte_out(data_l, ADD); // Aşağı 4 bit keçir data_l &= 0xF9; pcf8574_byte_out(data_l, ADD); // Aşağı 4 bit keçir } Bu funksiya məlumatları LCD-yə göndərir. Bu, əmrlərlə eyni şəkildə yerinə yetirilir, bir baytın ötürülməsi əvvəlcə yüksək nibble ilə, sonra isə aşağı olan ilə gedir. Və qalanları eynidir. void str_out(BYTE *str) ( while((*str) != "\0") ( char_out(*str); str++; ) ) Yaxşı, bu funksiya sırf sətri ekrana ötürmək üçündür. Əslində mövzumuzla heç bir əlaqəsi yoxdur.

AtmelStudio 6.2 üçün layihə

Səlahiyyətli 01.08.15 17:11

Vergül yoxdur. Düzgün: "SALAM DÜNYA!" Və bu cihaz yalnız HD44780 üçün kəskinləşdirilməyib. Çəkmə rezistorları ustanın yanından yerləşdirilir. Spesifikasiyaya uyğun olaraq, məlumatlar LCD kontrollerə enən E ilə yazılır. Buradan birinci funksiya sadələşdirilir: void com(BYTE com) ( com |= 0x08; // backlight pcf8574_byte_out(com | 0x04, ADD);/ / Məlumat çıxışı pcf8574_byte_out(com , ADD); // E-dən sıfıra ) Bəli, qalanları da əhəmiyyətli dərəcədə az ola bilər. Məsələn, void char_out(BYTE data) yalnız iki zəng olacaq və daha çox əlavə dəyişənlər olmadan. LCD-nin işə salınması vaxt spesifikasiyasının pozulması ilə həyata keçirilib.

Aleksey 02.08.15 19:11

Vergül olmaması səbəbindən ekran əziyyət çəkməyəcək. Bu cihaz sadəcə olaraq bu və ya oxşar nəzarətçi ilə ekranlar üçün nəzərdə tutulub. Ancaq həqiqətən sadə bir port genişləndiricisi olan mikrosxemdir. E haqqında razıyam. Əlavə dəyişənlərə ehtiyac var. Arqumenti funksiyaya ötürsəniz və bəzi hərəkətləri məntiqlə yerinə yetirsəniz, nasazlıqlar yarana bilər. Artıq bununla qarşılaşıb. Başlanğıc vaxt pozuntuları olmadan həyata keçirilir. Sənədlərdə deyilir ki, əmrlər arasında 40 µs fasilə var. Köçürmə öz növbəsində proqram təminatı və yavaş olan i2c avtobusundan keçdiyi üçün dövrlər artıq yerinə yetirilir. Əgər çox tənbəl deyilsinizsə, onda öz versiyanızı yazın və mənə göndərin. dərc edəcəm. Sonda bu sayt həvəskar auditoriya üçün nəzərdə tutulub və istəyən hər kəs MK-nın həyatı ilə bağlı öz fikrini və baxışını bildirə bilər.

Aleksey 06.08.15 09:14

Hörmətli "Səriştəli" qeydi ilə ekranı işə salarkən vaxtlar əlavə edildi

Dmitri 14.06.16 21:57

Salam Aleksey.PCF8574 ilə işləmək üçün kod generatoruna kitabxana əlavə edə bilərsiniz.

Aleksey 14.06.16 22:32

fikirləşəcəm.))

ruslan 21.12.16 19:54
Aleksey 21.12.16 21:53

Bəli. Xüsusilə asma ilə bağlı kod. Arduinerlər bunu maksimum dərəcədə qiymətləndirəcəklər)))

Py.sy.
Asm-a baxmasanız belə, orada proqram PIC kontroller altında yazılmışdır. Bu AVR insanlar üçün "çox" faydalı məlumatdır? xüsusilə yeni başlayanlar üçün))) PIC-ə qarşı heç bir şeyim yoxdur, amma hətta PIC və AVR fərqli asm var. LCD displeyin detallarına gəlincə, baxa bilərsiniz))) Düzdür, mən də CVAVR altında yazmışam, amma bütün əmrlər sıralanıb çeşidlənib. Amma hər halda harda daha aydın yazıldığını özünüz qərar verin))) Müəllif yazır, oxucu seçir.

GeK 04.01.17 12:52

"I2C çip ünvanı (defolt 0x4E-dir"

Ünvanın yuxarı 4 biti sabitdir,
PCF8574 prefiksi 0100 və PCF8574A 0111-dir
Aşağı 3 bit A2-A0 mikrosxeminin girişlərinin vəziyyətindən asılıdır. Varsayılan olaraq, bütün 3 keçid açıqdır, müvafiq olaraq mikrosxemin ünvanı 0111111-dir.
// 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

Aleksey 04.01.17 14:27

Nəyisə qarışdırdın.
Mikrosxem üçün sənədlərdən çıxarış

0b01001110 0x4E-dir
Beləliklə, hər şey buradadır. Ünvanı dəyişdirmək lazımdırsa, onu sadəcə olaraq müəyyən etmək lazımdır.

Yuri 14.12.17 21:26

Yaxşı gün! Siz həmçinin PCF8574-də adapterlə işləmək üçün lcdgotoxy və lcdclear funksiya kodundan istifadə edə bilərsiniz.

İsgəndər 20.05.18 18:14

Yaxşı gün! rusca mətni necə göstərirsən.

Aleksey 20.05.18 23:04

Bu MELT-dən yerli displeydir. Onun yaddaşına kiril əlifbası tikilib.

İsgəndər 21.05.18 04:55

Yaxşı gün! Mən sizin AtmelStudio 6.2 "ЁPҐBET MҐP!" Layihəsində olduğu kimi yazıram. yaxşı çıxış edir
və əgər siz "SALAM DÜNYA!" hər cür cəfəngiyyatı ortaya çıxarır. məndə ikisi var
birində displey variantı kiril əlifbası ilə tikilir. ikinci çinli.

Aleksey 21.05.18 09:22

Əvvəlcə test proqramı yazardım. Simvolların və onların ünvanlarının göstərilməsi ilə bütün yaddaşın sadalanması. Və sonra problemin nə olduğunu anlayın. Çox güman ki, xarakter cədvəli ascii cədvəlinə uyğun gəlmir.

Andrey 03.09.18 08:32

Günortanız Xeyir!

Proteus üçün sxematik yükləyə bilməzsiniz?

Andrey 03.09.18 10:22

Yoxsa Proteuse-də heç kim yoxlanmayıb?

Andrey 03.09.18 10:56

main_init-i tapdım

Pavel 30.05.19 23:35

Maraqlı bir şey, ekran ünvanı 0x4E-dir və eyni displey arduino-ya qoşulubsa, ünvan 0x27-dir.

Pavel 31.05.19 11:04

İşiniz üçün çox sağ olun! Mən bütün internetə baxdım və yuxarıdakı nümunələrin heç biri sizinkindən başqa işləmir. Yeganə odur ki, layihə arxivində _gecikmə_ gecikmələri ekranın işə salınma funksiyasında qeydə alınmır və buna uyğun işləmir.

Aleksey 01.06.19 09:52

Yaxşı, bu daha çox demo layihədir. Yaxşılıq üçün, axlib kitabxanasını yenidən yazmalısınız, lakin STM32 və STM8-in sıçrayış və sərhədlərlə hərəkət etdiyini nəzərə alsaq, AVR-də heç bir məna yoxdur.

Pavel 05.06.19 12:57

STM-də DIP paketləri yoxdur, çap dövrə lövhələrini hazırlamaq daha çətindir. Layihələrim üçün AVR imkanları bir marja ilə kifayətdir, çox şey bir Atmega 8-ə uyğun ola bilər

Aleksey 05.06.19 15:20

Bəli, amma Atmega8 və stm8s003 nə qədərdir)))

Dmitri 07.06.19 00:41

Salam Aleksey.
Zəhmət olmasa, pcf8574-dən port statusunu necə oxuya biləcəyinizi deyə bilərsinizmi?
Xarici blok etmək istəyirəm, i2c avtobusunda 8 GPIO - özü.

Dmitri 07.06.19 17:56

Özüm cavab verəcəm
Funksiya bir baytı qaytarır - mikrosxem portlarının vəziyyəti
uint8_t pcf8574_byte_rcv(uint8_t ünvan)
{
uint8_t ask = ACK;
adr |= 0b01; // OXUYUN
uint8_tdata=0;
i2c_start();
soruş = i2c_send_byte(addr);
if(!ask) data = i2c_read_byte(NACK);
i2c_stop();

məlumatların qaytarılması;
}

Pavel 07.06.19 20:37

Nə qədərdir, 150 rubl, ümumiyyətlə bir rölin qiyməti üçün), lakin STM üçün lövhələri necə yetişdirirsiniz? LUT etibarsızdır, CNC router nə alacağına əmin deyil (cəhd etmədi)

Bəlkə də bazarda ən populyar ekranlardan biridir. Məşhur HD44780U nəzarətçisində qurulmuşdur. Modelin adından belə çıxır ki, ekran 16 simvoldan ibarət iki sətirdən ibarətdir. Bu xüsusi modeldə rus dilinə dəstək yoxdur.

sh2s məlumat avtobusu iki naqil vasitəsilə və eyni zamanda 127-yə qədər cihazı birləşdirməyə imkan verir. Bu I2C PCF8574T çipində həyata keçirilir.

Naqil diaqramı:

Mavi şey - dəyişən müqavimət, ekranın kontrastını tənzimləməyə imkan verir.

Soldakı jumper ekranın arxa işığından məsuldur.

Arduino-ya 4 pindən ibarət blok bu şəkildə qoşulur:

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

Kitabxana

Eskiz

Ekranın fərqli bir IIC ünvanı ola bilər, 0x27 əvəzinə 0x3F ola bilər. Ünvanı dəqiq müəyyən etmək üçün i2c cihaz skanerindən istifadə edə bilərsiniz.

#daxildir #daxildir //LCD ekran ünvanını 0x27, 16 simvol, 2 sətir təyin edin LiquidCrystal_I2C lcd(0x27, 16, 2); etibarsız quraşdırma() ( lcd.init(); // Ekranı işə salın // arxa işığı yandırın lcd.backlight(); //Mətnin göstərildiyi mövqedən başlayaraq təyin edin. lcd.setCursor(2, 0); //çıxış xətti 1 lcd.print("Salam, Dünya!"); //eyni şəkildə ikinci sətri göstərin lcd.setCursor(1, 1); lcd.print("www.site"); ) boş döngə () ( )

Bəlkə də bazarda ən populyar ekranlardan biridir. Məşhur HD44780U nəzarətçisində qurulmuşdur. Modelin adından belə çıxır ki, ekran 16 simvoldan ibarət iki sətirdən ibarətdir. Bu xüsusi modeldə rus dilinə dəstək yoxdur.

sh2s məlumat avtobusu iki naqil vasitəsilə və eyni zamanda 127-yə qədər cihazı birləşdirməyə imkan verir. Bu I2C PCF8574T çipində həyata keçirilir.

Naqil diaqramı:

Mavi şey - dəyişən müqavimət, ekranın kontrastını tənzimləməyə imkan verir.

Soldakı jumper ekranın arxa işığından məsuldur.

Arduino-ya 4 pindən ibarət blok bu şəkildə qoşulur:

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

Kitabxana

Eskiz

Ekranın fərqli bir IIC ünvanı ola bilər, 0x27 əvəzinə 0x3F ola bilər. Ünvanı dəqiq müəyyən etmək üçün i2c cihaz skanerindən istifadə edə bilərsiniz.

#daxildir #daxildir //LCD ekran ünvanını 0x27, 16 simvol, 2 sətir təyin edin LiquidCrystal_I2C lcd(0x27, 16, 2); etibarsız quraşdırma() ( lcd.init(); // Ekranı işə salın // arxa işığı yandırın lcd.backlight(); //Mətnin göstərildiyi mövqedən başlayaraq təyin edin. lcd.setCursor(2, 0); //çıxış xətti 1 lcd.print("Salam, Dünya!"); //eyni şəkildə ikinci sətri göstərin lcd.setCursor(1, 1); lcd.print("www.site"); ) boş döngə () ( )

  • FC-113 modulu PCF8574T çipinə əsaslanır ki, bu da 8 bitlik sürüşmə registridir - I2C seriya avtobusu üçün giriş/çıxış genişləndiricisi. Şəkildə mikrosxem DD1 olaraq təyin edilmişdir.
  • R1 - LCD ekranın kontrastını tənzimləmək üçün trimmer.
  • Jumper J1 ekranın arxa işığını yandırmaq üçün istifadə olunur.
  • 1…16 sancaqlar modulu LCD displeyinin sancaqlarına qoşmaq üçün istifadə olunur.
  • Cihazın I2C ünvanını dəyişdirmək üçün A1 ... A3 kontakt yastıqları lazımdır. Müvafiq jumperləri lehimləməklə, cihazın ünvanını dəyişə bilərsiniz. Cədvəldə ünvanlar və keçidlər arasındakı yazışmalar göstərilir: "0" açıq dövrə uyğundur, "1" - bir keçid quraşdırılmışdır. Varsayılan olaraq, bütün 3 keçid açıqdır və cihazın ünvanı 0x27.

2 Arduino-ya LCD displey üçün naqil diaqramı I2C protokolu vasitəsilə

Modul I2C avtobusu üçün standart olaraq Arduino-ya qoşulub: modulun SDA çıxışı A4 analoq portuna, SCL çıxışı Arduino-nun A5 analoq portuna qoşulub. Modul Arduino-dan +5 V ilə təchiz edilmişdir. Modulun özü 1…16 sancaqlar vasitəsilə LCD displeydə müvafiq 1…16 sancaqlar ilə birləşdirilir.


3 İş üçün kitabxana I2C protokolu vasitəsilə

İndi bizə I2C interfeysi vasitəsilə LCD ilə işləmək üçün kitabxana lazımdır. Siz, məsələn, bundan istifadə edə bilərsiniz ("Nümunə kodu və kitabxananı yükləyin" sətirindəki keçid).

Yüklənmiş arxiv LiquidCrystal_I2Cv1-1.rar qovluğa açın \kitabxanalar\, Arduino IDE kataloqunda yerləşir.

Kitabxana LCD ekranlar üçün bir sıra standart funksiyaları dəstəkləyir:

FunksiyaMəqsəd
LiquidCrystal() LiquidCrystal tipli dəyişən yaradır və displey bağlantısı parametrlərini (pin nömrələri) qəbul edir;
başlamaq() LCD displeyin işə salınması, parametrlərin təyin edilməsi (sətirlərin və simvolların sayı);
aydın() ekranı təmizləmək və kursoru orijinal vəziyyətinə qaytarmaq;
ev() kursorun başlanğıc vəziyyətinə qaytarılması;
setCursor() kursoru müəyyən bir yerə qoymaq;
yaz() LCD ekranda simvolu göstərir;
çap () LCD ekranda mətni göstərir;
kursor() kursoru göstərir, yəni. növbəti simvolun altından xətt çəkmək;
noCursor() kursoru gizlədir;
yanıb-sönmək() kursorun yanıb-sönməsi;
noBlink() yanıb-sönməni ləğv edin;
noDisplay() bütün göstərilən məlumatları saxlayarkən ekranın söndürülməsi;
ekran() bütün göstərilən məlumatları saxlayarkən ekranın yandırılması;
scrollDisplayLeft() ekranın məzmununu 1 mövqe sola sürüşdürmək;
scrollDisplayRight() ekranın məzmununu 1 mövqe sağa sürüşdürmək;
autoscroll() avtomatik sürüşdürməni aktivləşdirin;
noAutoscroll() avtomatik sürüşməni söndürün;
soldan sağa() mətnin istiqamətini soldan sağa təyin edir;
sağdanSola() mətn istiqaməti sağdan sola;
createChar() LCD ekran üçün xüsusi simvol yaradır.

4 Mətn çıxışı üçün eskiz I2C avtobusu vasitəsilə LCD ekrana

Nümunəni açaq: Fayl Nümunələri LiquidCrystal_I2C CustomChars və gəlin onu bir az dəyişdirək. Gəlin bir mesaj göstərək, sonunda yanıb-sönən bir simvol olacaq. Eskizin bütün nüansları koda şərhlərdə şərh olunur.

#daxildir // Wire kitabxanasını #include daxil edin // LCD kitabxanasını birləşdirin #define printByte(args) write(args); // uint8_t ürək = (0x0,0xa,0x1f,0x1f,0xe,0x4,0x0); // "ürək" simvolunun bit maskası LiquidCrystal_I2C lcd(0x27, 16, 2); // 16x2 LCD displey üçün 0x27 ünvanını təyin edin quraşdırmanı ləğv edin()( lcd.init(); // LCD-nin işə salınması lcd.backlight(); // ekranın arxa işığını yandır lcd.createChar(3, ürək); // yaddaş yeri 3-də ürək simvolu yaradın lcd.home(); // kursoru yuxarı sol küncə, (0,0) lcd mövqeyinə qoyun.!"); // lcd.setCursor(0, 1) mətn sətrini çap edin); // kursoru 2-ci sətirə, simvola köçürün 1 lcd.print( "i"); //2-ci sətirdə mesajı çap edin lcd.printByte(3); //3-cü xanada yerləşən ürək simvolunu çap edin lcd.print("Arduino"); } boş döngə () (// son simvolu yanıb-sönür lcd.setCursor(13, 1); // kursoru 2-ci sətirə, simvol 1-ə köçürün lcd.print("\t"); gecikmə (500); lcd.setCursor(13, 1); // kursoru 2-ci sətirə, simvol 1-ə köçürün lcd.print(" "); gecikmə (500); }

Yeri gəlmişkən, əmrlə yazılmış simvollar lcd.createChar(); enerji söndürüldükdən sonra da ekran yaddaşında qalır. 1602 displeyinin ROM-una yazılır.

5 Öz simvollarınızı yaratmaq LCD displey üçün

LCD ekranlar üçün öz simvollarınızı yaratmaq məsələsinə daha yaxından nəzər salaq. Ekrandakı hər simvol 35 nöqtədən ibarətdir: 5 eni və 7 hündürlüyü (altını çəkmək üçün +1 ehtiyat xətt). Yuxarıdakı eskizin 6-cı sətirində 7 ədəddən ibarət massiv müəyyən edirik: (0x0, 0xa, 0x1f, 0x1f, 0xe, 0x4, 0x0). Onaltılıq ədədləri ikiliyə çevirək: {00000, 01010, 11111, 11111, 01110, 00100, 00000} . Bu rəqəmlər simvolun 7 sətirinin hər biri üçün bit maskalarından başqa bir şey deyil, burada "0" işıq nöqtəsini, "1" isə qaranlıq nöqtəni bildirir. Məsələn, şəkildə göstərildiyi kimi ekranda bit maskası kimi verilən ürək simvolu görünəcək.

6 LCD nəzarət I2C avtobusu ilə

Eskizi Arduino-ya yükləyin. Göstərdiyimiz yazı ekranda sonunda yanıb-sönən kursorla görünəcək.


7 Arxasında nə var I2C avtobusu

Bir bonus olaraq, LCD displeydə "A", "B" və "C" latın hərflərinin çıxışının vaxt diaqramını nəzərdən keçirin. Bu simvollar ekranın ROM-da saxlanılır və sadəcə ünvanlarını displeyə ötürməklə ekranda göstərilir. Diaqram ekranın RS, RW, E, D4, D5, D6 və D7 çıxışlarından götürülür, yəni. artıq çeviricidən sonra FC-113 "I2C paralel avtobus". Deyə bilərik ki, biz “dəmir”ə bir az “dərin” dalırıq.


LCD displeydə "A", "B" və "C" latın simvollarını göstərmək üçün vaxt diaqramı 1602

Diaqram göstərir ki, ekran ROM-da olan simvollar (məlumat vərəqinin 11-ci səhifəsinə baxın, aşağıdakı link) iki nibble ilə ötürülür, bunlardan birincisi cədvəlin sütun nömrəsini, ikincisi isə sətir nömrəsini təyin edir. Bu halda, məlumatlar xəttdəki siqnalın kənarı boyunca "bağlanır" E(Enable) və xətt RS(Qeydiyyat seçimi, qeydiyyat seçimi) məntiqi bir vəziyyətdədir, yəni məlumat ötürülməsi deməkdir. RS xəttinin aşağı vəziyyəti hər bir simvolun ötürülməsindən əvvəl gördüyümüz təlimatların ötürülməsi deməkdir. Bu zaman vaqonun LCD displeyin mövqeyinə (0, 0) qaytarılması təlimatının kodu ötürülür ki, bu da displeyin texniki təsvirini öyrənməklə müəyyən edilə bilər.

Və daha bir misal. Bu vaxt diaqramı LCD-də Ürək simvolunun ekranını göstərir.


Yenə də ilk iki impuls aktivləşdirin təlimatlara əməl edin Ev()(0000 0010 2) - vaqon (0; 0) vəziyyətinə qayıdır və ikinci ikisi - yaddaş hüceyrəsində saxlanılan LCD displeyə çıxış 3 10 (0000 0011 2) "Ürək" simvolu (təlimat) lcd.createChar(3, ürək); eskiz).