Arduino-da 1602 qrafik displeylə işləmək. Winstar-dan LCD WH1602B. I2C avtobusu vasitəsilə LCD ekrana nəzarət

gəlmişdi Arduino Nano, çörək lövhəsi və LCD displeydən ibarət dəst gəldi. Lövhədəki displeydə deyilir - 1602A, aşağıda - QAPASS. Mən ilk cihazı heykəltəraşdırmağa başladım və əlbəttə ki, LEDləri yanıb-söndürmək deyil, məlumatları ekranda göstərmək istədim.

Google kömək etdi, bunun bir xarakter nümayişi olduğunu söylədi; Əgər onu təhrif etmirsinizsə, çox güman ki, ASCII simvolları mövcuddur - nömrələr, Latın, bəzi əsas simvollar.

Aşağıdakı materiallar displeyi işə salmağa kömək etdi: PC printer portundan simvol tipli LCD-nin idarə edilməsi; Arduino-nu LCD simvol ilə necə bağlamaq olar; Pwm Servo Sürücü Motor İdarəetmə PDF.

Displey olduqca geniş yayılmışdır və bunun üçün qalxanlar artıq icad edilmişdir - SPI, kimi və/və ya I2C ilə seçimlər var və İnternet bu hallar üçün reseptlərlə doludur. Ancaq məndə yalnız orijinal 16x2 displey və onu əlavə etmək istədiyim Arduino var idi.

Displeydə hər biri 4 bit olmaqla iş və məlumat ötürülməsi rejimi var, avtobusun aşağı dərəcəli bitləri isə istifadə edilmir. Məlumat avtobusunun yalnız yarısının birləşdirilməsi bir çox yerdə təsvir edilmişdir və mən ekranı necə birləşdirməyi və onunla 8 sətir üzərində işləməyi başa düşmədim. Mən bunun necə işlədiyindən çox razıyam.

Ekranların yaxşı təsviri bu tipdən Mən onu burada tapdım - http://greathard.ucoz.com/44780_rus.pdf. Və burada (http://arduino.ru/forum/programmirovanie/lcd-i2c-partizanit#comment-40748) bir xarakter generatorunun təyin edilməsinə bir nümunədir.

Əlaqə

Ekranım lehimsiz kontaktlarla gəldi. Əvvəldən kabeli lehimləmək istədim, duponlarla 16 teli kəsdim və təmizlədim. Sonra balinanın içini qazdım və lövhəyə lehimləmək üçün DuPont tarağı tapdım. Oradan 16 kontaktı kəsdim və lehimlədim.
Ekranım belə görünürdü (kontaktları lehimləməzdən əvvəl):

Əvvəlcə 15 (A) pinini +5V-ə, 16 (K) yerə bağladım və arxa işığın işlədiyinə əmin oldum. Ümumiyyətlə, katodu 220 Ohm rezistor vasitəsilə yerə qoşmaq düzgündür, o zaman etdiyim budur.

Sonra yerə (1) və gücü (2) bağladım. Arduino USB-dən, 5V stabilləşdirilmiş gərginlikdən və qeyri-sabitləşmiş 6-12V-dən güc ala bilər, ən yüksək gərginlik avtomatik olaraq seçilir. İndi Arduino USB-dən işləyir və mən 5 voltu haradan əldə edəcəyimi düşünürdüm. Məlum oldu ki, 5V xarici stabilləşdirilmiş 5V-nin qoşulduğu Arduino pinindədir. Daha doğrusu, 4.7V olduğu ortaya çıxdı, amma bu mənim üçün kifayət idi.

Gücü birləşdirdikdən sonra, hər şey qaydasındadırsa, üst sıra tanışlığın möhkəm düzbucaqlıları ilə yanır.

Sonra kontrast potensiometrini bağlayırıq (pin 3 V0). Potensiometrin həddindən artıq terminallarından birini yerə, ikincisini +5V-ə, ortasını ekranın 3-cü pininə atırıq. 10K potensiometr tövsiyə olunur. Balinadan 50K aldım, əvvəlcə istifadə etdim. Tənzimləmə yalnız bir kənarda idi, istədiyiniz kontrastı çox incə tutmaq lazım idi. Sonra başqa bir balinada 5K-da bənzərini tapdım və quraşdırdım. Ayar bir kənardan yarım döngəyə qədər uzanırdı. Göründüyü kimi, daha kiçik bir potensiometr götürə bilərsiniz. Dövrənin daha az istehlak etməsi üçün yəqin ki, 10K tövsiyə olunur. Bəli, bir az lehimləmə etməli oldum, potensiometrlərin terminallarına duponlarla telləri lehimlədim.

Test eskizi

Test eskizini Arduino Studio-dan nümunələrdən götürürük - "C:\Program Files (x86)\Arduino\libraries\LiquidCrystal\ex amples\HelloWorld\HelloWorld.ino", sadəcə kontaktları bizimkinə dəyişmək lazımdır - LiquidCrystal lcd( 7, 6, 5, 4, 3, 2);

Prinsipcə, bu eskizdə nəyin hara qoşulacağının təsviri də var. Onu orada göstərildiyi kimi birləşdirə bilərsiniz, sonra heç nəyi dəyişməyə ehtiyac yoxdur.

// kitabxana kodunu daxil edin: #include // LiquidCrystal lcd(7, 6, 5, 4, 3, 2) interfeys pinlərinin nömrələri ilə kitabxananı işə salın; void setup() ( // LCD-də sütun və sətirlərin sayını təyin edin: lcd.begin(16, 2); // LCD-də mesajı çap edin. lcd.print("salam, dünya!"); ) void loop() ( // kursoru 0-cı sütuna, 1-ci sətirə təyin edin // (qeyd: 1-ci sətir ikinci sıradır, çünki sayma 0 ilə başlayır): lcd.setCursor(0, 1); // sayını çap edin sıfırlamadan sonra saniyə: lcd.print(millis() / 1000); )

Belə bir şey çıxır:

Yeri gəlmişkən, əlimə gələn displey arxa işıqlandırma olmadan işləmir. Demək istəyirəm ki, işləyir, amma çətin ki, heç nə görə bilmirsən.

1602A Kontaktları göstərin

# əlaqə ad Necə qoşulmaq olar
1 VSS GND
2 VDD +5V
3 V0 Kontrast - potensiometrin orta terminalına
4 RS (Qeydiyyat seçimi) D7 Arduino
5 R/W (Oxu və ya yaz) GND
6 E (Siqnal aktivləşdir) D6 Arduino
7-14 D0-D7 D0-D3 - bağlı deyil; D4-D7 - Arduino-nun D5-D2 pinlərinə qoşulmuşdur
15 A +5V-ə qoşulmuş arxa işıq anodudur
16 K 220 Ohm rezistor vasitəsilə yerə qoşulmuş arxa işıq katodu

Məqalədə LCD-ni Arduino-ya düzgün bir şəkildə necə bağlamaq barədə danışılır, LCD 1602 və LCD i2c-ni birləşdirmək haqqında bilmək lazım olan hər şey əhatə olunur.

HD44780 nəzarətçisi əsasında yaradılmış 1602 ölçülü LCD displeylər bu gün də istənilən növ elektron cihazların hazırlanması üçün ən sərfəli, sadə və tələbatlılardan biri olaraq qalır.

Təəccüblü deyil ki, onları həm dizdə yığılmış sadə bölmələrdə, həm də daha ciddi sənaye qurğularında, məsələn, qəhvə maşınlarında görmək olar. Məhz bu ekranla Arduino ilə əlaqəli ən məşhur modullar və qalxanlar yığılır, məsələn, LCD I2C modulu və LCD Klaviatura Qalxanı.

Aşağıdakı addımlarda LCD-ni Arduino-ya necə qoşmaq və lazımi məlumatları displeydə göstərmək barədə şəkillərlə ətraflı məlumat verəcəyik.

Addım 2. Arduino üçün LCD 1602

1602 displeyləri iki fərqli dizaynda təqdim olunur:

  • qara hərflərlə sarı arxa işıq
  • və ya (bu, daha tez-tez olur) ağ olanlarla mavi arxa işıq.

HD44780 nəzarətçisində displeylərin ölçüsü çox dəyişir, lakin onlar eyni şəkildə idarə olunur. Ən çox yayılmış ölçülər 16 ilə 02 (yəni iki sətirdə 16 simvol) və ya 20 ilə 04. Simvolların özləri 5 ilə 8 piksel təsvir ölçüsünə malikdir.

Əksər displeylər kiril əlifbasını dəstəkləmir (CTK ilə işarələnmiş displeylər istisna olmaqla). Ancaq bu problem qismən həll edilə bilər və məqalədə bunun necə ediləcəyi ətraflı təsvir edilmişdir.

Ekranda qoşulma üçün 16-PIN konnektor var. Lövhənin arxa tərəfində sancaqlar qeyd olunub, bu belədir:

  • 1 (VSS) – nəzarətçi üçün mənfi enerji təchizatı.
  • 2 (VDD) – nəzarətçi üçün müsbət enerji təchizatı.
  • 3 (VO) – kontrast nəzarət parametrləri.
  • 4 (RS) – seçimi qeyd edin.
  • 5 (R/W) – oxumaq və yazmaq, xüsusən yerə qoşulduqda yazmaq.
  • 6 (E) – aktivləşdirmə (aktiv edin).
  • 7–10 (DB0-DB3) – səkkiz bitlik interfeysdən aşağı dərəcəli bitlər.
  • 11–14 (DB4-DB7) – interfeysdən ən əhəmiyyətli bitlər
  • 15 (A) – arxa işığın enerji təchizatı üçün müsbət anod.
  • 16 (K) – arxa işığın enerji təchizatı üçün mənfi katod.

Addım 3. LCD displeyini qoşun

Ekranı bağlamadan və ona məlumat ötürməzdən əvvəl onun funksionallığını yoxlamağa dəyər. Əvvəlcə VSS və VDD nəzarətçisinə gərginlik tətbiq edin, arxa işığı yandırın (A, K), sonra kontrastı tənzimləyin.

Belə parametrlər üçün 10 kOhm potensiometr uyğun gəlir, onun forması vacib deyil. Xarici ayaqlara +5V və GND verilir, mərkəzdəki ayaq isə VO pininə bağlıdır.

Dövrə enerji verildikdə, lazımi kontrasta nail olmaq lazımdır, əgər o, səhv tənzimlənirsə, ekrandakı görüntü görünməyəcəkdir. Kontrastı tənzimləmək üçün potensiometrlə “oynamaq” lazımdır. Dövrə düzgün yığıldıqda və kontrast düzgün tənzimləndikdə, ekranın yuxarı xətti düzbucaqlılarla doldurulmalıdır.

Ekranın işləməsi üçün Arduino IDE mühitində quraşdırılmış xüsusi kitabxana LiquidCrystal.h istifadə olunur ki, bu barədə aşağıda yazacağam. 8-bit və 4-bit rejimində işləyə bilər. Birinci seçimdə yalnız ən az əhəmiyyətli və ən əhəmiyyətli bitlər istifadə olunur ( BB0-DB7), ikincidə - yalnız kiçiklər ( BB4-DB7).

Lakin bu displeydə 8 bit rejimindən istifadə yanlış qərardır, sürət üstünlüyü demək olar ki, yoxdur, çünki onun yeniləmə sürəti həmişə saniyədə 10 dəfədən azdır. Mətni göstərmək üçün DB7, DB6, DB5, DB4, E və RS sancaqlarını nəzarətçi pinlərinə qoşmalısınız. Onlar istənilən Arduino pinlərinə qoşula bilər, əsas odur ki, kodda düzgün ardıcıllığı təyin edin.

Tələb olunan simvol hələ nəzarətçinin yaddaşında yoxdursa, onu əl ilə təyin edə bilərsiniz (cəmi yeddi simvola qədər). Baxılan displeylərdəki xana beş-səkkiz piksel genişlənməyə malikdir. Simvol yaratmaq vəzifəsi bir az maska ​​yazmaq və nöqtələrin işıqlandırılmalı olduğu yerlərdə olanları, yandırılmaması lazım olan yerlərdə isə sıfırlar qoymaqdır. Yuxarıda müzakirə olunan əlaqə diaqramı həmişə yaxşı deyil, çünki Arduino-da ən azı altı rəqəmsal çıxış istifadə olunur.

Addım 4. Bypass sxemi

Gəlin bunun ətrafından keçmək və yalnız iki ilə məşğul olmaq üçün bir variantı araşdıraq. LCD-dən IIC/I2C-yə əlavə çevirici modul lazımdır. Onun ekrana necə lehimləndiyini və Arduino-ya necə qoşulduğunu aşağıdakı şəkillərdə görmək olar.

Ancaq bu əlaqə seçimi yalnız LiquidCrystal_I2C1602V1 xüsusi kitabxanası ilə işləyir, lakin onu İnternetdə tapmaq və quraşdırmaq asandır, bundan sonra heç bir problem olmadan istifadə edə bilərsiniz.

Addım 4: LiquidCrystal.h Kitabxanası

LiquidCrystal.h kitabxanasını bu səhifədəki vebsaytımızın Kitabxanalar bölməsindən və ya arduino.cc rəsmi resursundan yükləmək olar. Ancaq aşağıdakı linklərdən də yükləyə bilərsiniz:

Addım 5. Eskiz (proqram kodu)

Arxivi yüklədikdən sonra Arduino quraşdırma kataloqunuzun kitabxanalar qovluğunda LiquidCrystal qovluğunu dəyişdirin.

Nümunə eskizə baxa bilərsiniz:

Fayl -> Nümunələr -> LiquidCrystal -> HelloWorld_SPI

Və ya ingilis dilində menyunuz varsa:

Fayl -> Nümunələr -> LiquidCrystal -> HelloWorld_SPI

Bununla növbəti dərsimiz yekunlaşır. Sizə keyfiyyətli layihələr arzulayırıq!

LCD displey– Arduino layihələrində tez-tez qonaq olur. Ancaq mürəkkəb sxemlərdə çoxlu, çoxlu sancaqlar olan bir qalxanı birləşdirmək ehtiyacı səbəbindən Arduino portlarının çatışmazlığı problemi ola bilər. Bu vəziyyətdə həll yolu ola bilər I2C/IIC demək olar ki, standart Arduino 1602 qalxanını yalnız 4 pin istifadə edərək Uno, Nano və ya Mega lövhələrə birləşdirən adapter. Bu yazıda LCD ekranı I2C interfeysi ilə necə birləşdirə biləcəyinizi, hansı kitabxanalardan istifadə edə biləcəyinizi, qısa bir nümunə eskizini yazacağınızı və ümumi səhvlərə baxacağıq.

Maye Kristal Ekran LCD 1602 edir yaxşı seçim müxtəlif layihələrdə simvol sətirlərini çıxarmaq üçün. Ucuzdur, müxtəlif işıqlandırma rəngləri ilə müxtəlif modifikasiyalar var, Arduino eskizləri üçün hazır kitabxanaları asanlıqla yükləyə bilərsiniz. Lakin bu ekranın əsas çatışmazlığı displeydə 16 rəqəmsal pin olmasıdır ki, onlardan minimum 6-sı tələb olunur.Ona görə də bu LCD ekrandan i2c olmadan istifadə Arduino Uno və ya Nano lövhələr üçün ciddi məhdudiyyətlər əlavə edir. Kifayət qədər kontakt yoxdursa, onda siz Arduino Mega lövhəsi almalı və ya ekranı i2c vasitəsilə birləşdirərək kontaktları saxlamalı olacaqsınız.

LCD 1602 pinlərinin qısa təsviri

LCD1602 pinlərinə daha yaxından nəzər salaq:

Sancaqların hər birinin öz məqsədi var:

  1. Haqqımızda Şirkətin Adı: Ground GND;
  2. Enerji təchizatı 5 V;
  3. Monitor kontrastının qurulması;
  4. Komanda, məlumat;
  5. Məlumatların yazılması və oxunması;
  6. Aktivləşdirmək;

7-14. Məlumat xətləri;

  1. Plus arxa işıq;
  2. Minus arxa işıq.

Ekran Xüsusiyyətləri:

  • Simvolların göstərilməsi növü, simvolları yükləmək mümkündür;
  • LED işıqlar;
  • Nəzarətçi HD44780;
  • Təchizat gərginliyi 5V;
  • 16x2 simvol formatı;
  • İşləmə temperaturu diapazonu -20C-dən +70C-dək, saxlama temperaturu diapazonu -30C-dən +80C-ə qədər;
  • Baxış bucağı 180 dərəcə.

LCD-nin i2C olmadan Arduino lövhəsinə qoşulma diaqramı

Monitoru I2C olmadan birbaşa Arduino mikro nəzarətçisinə qoşmaq üçün standart diaqram aşağıdakı kimidir.

Çox sayda əlaqəli kontaktlara görə, lazımi elementləri birləşdirmək üçün kifayət qədər yer olmaya bilər. I2C-dən istifadə naqillərin sayını 4-ə, işğal edilmiş pinləri isə 2-yə endirir.

Arduino üçün LCD ekranları və qalxanları haradan almaq olar

LCD ekran 1602 (və 2004-cü versiya) olduqca populyardır, buna görə də onu həm yerli onlayn mağazalarda, həm də xarici saytlarda asanlıqla tapa bilərsiniz. Ən çox mövcud seçimlərə bəzi keçidlər:

LCD1602+I2C Mavi Ekran Modulu, Arduino Uyğundur Sadə LCD1602 ekranı (yaşıl işıqlandırma) 80 rubldan daha ucuzdur Arduino üçün I2C HD44780 ilə böyük LCD2004 ekran (mavi və yaşıl işıqlandırma)
IIC adapter və mavi işıqlandırma ilə 1602 displey Lehimli I2C modulu olan LCD1602-nin başqa bir versiyası 1602 qalxan üçün port IIC/I2C/TWI/SPI adapter modulu, Arduino ilə uyğun gəlir
RGB işıqlı ekran! Arduino üçün LCD 16×2 + klaviatura + Buzzer Shield Düymələri və LCD1602 LCD 1602 ekranı olan Arduino üçün qalxan 3D printer üçün LCD displey (RAMPS 1.4 üçün Smart Controller, Text LCD 20×4), SD və MicroSD kart oxuyucu modulu

I2C protokolunun təsviri

Ekranın i2c adapteri vasitəsilə Arduino-ya qoşulmasını müzakirə etməzdən əvvəl i2C protokolunun özü haqqında qısaca danışaq.

I2C/IIC(Inter-Integrated Circuit) əvvəlcə ünsiyyət üçün yaradılmış protokoldur inteqral sxemlər içəri elektron cihaz. İnkişaf Philips-ə məxsusdur. i2c protokolu idarəetmə elektronikasında blokları əlaqələndirmək üçün lazım olan 8 bitlik avtobusun və eyni naqillər vasitəsilə bir neçə cihazla əlaqə saxlaya biləcəyiniz ünvanlama sisteminin istifadəsinə əsaslanır. Biz sadəcə olaraq məlumat paketlərinə istənilən elementin identifikatorunu əlavə edərək məlumatları bu və ya digər cihaza ötürürük.

Ən çox sadə dövrə I2C bir master cihaz (əksər hallarda Arduino mikro nəzarət cihazı) və bir neçə köməkçi (məsələn, LCD displey) ehtiva edə bilər. Hər bir cihazın 7 ilə 127 diapazonunda ünvanı var. Eyni dövrədə eyni ünvana malik iki cihaz olmamalıdır.

Arduino lövhəsi aparatda i2c-ni dəstəkləyir. Bu protokoldan istifadə edərək cihazları birləşdirmək üçün A4 və A5 sancaqlarından istifadə edə bilərsiniz.

I2C əməliyyatının bir sıra üstünlükləri var:

  • Əməliyyat yalnız 2 xətt tələb edir - SDA (məlumat xətti) və SCL (sinxronizasiya xətti).
  • Çox sayda aparıcı cihazları birləşdirmək.
  • Azaldılmış inkişaf vaxtı.
  • Bütün cihazları idarə etmək üçün yalnız bir mikro nəzarətçi tələb olunur.
  • Bir avtobusa qoşulmuş mikrosxemlərin mümkün sayı yalnız maksimum tutumla məhdudlaşır.
  • Sxemə quraşdırılmış xüsusi dalğalanmanın qarşısını alan filtr sayəsində yüksək məlumat təhlükəsizliyi.
  • Yaranan nasazlıqların diaqnostikası və nasazlıqların tez bir zamanda aradan qaldırılması üçün sadə prosedur.
  • Avtobus artıq Arduino-nun özünə inteqrasiya olunub, ona görə də əlavə avtobus interfeysi hazırlamağa ehtiyac yoxdur.

Qüsurlar:

  • Xəttdə kapasitiv həddi var - 400 pF.
  • Avtobusda bir neçə fərqli cihaz varsa, I2C nəzarət cihazını proqramlaşdırmaq çətindir.
  • Çox sayda cihazla, onlardan biri səhvən aşağı düşərsə, nasazlığı təcrid etmək çətinləşir.

LCD 1602 Arduino üçün i2c modulu

Arduino-da i2c displeyindən istifadə etməyin ən sürətli və ən rahat yolu daxili protokol dəstəyi ilə hazır ekran almaqdır. Ancaq bu ekranların çoxu yoxdur və ucuz deyil. Ancaq çox sayda fərqli standart ekran artıq istehsal edilmişdir. Buna görə də, bu gün ən əlverişli və populyar seçim, ayrı bir I2C modulu - bu kimi görünən bir adapter almaq və istifadə etməkdir:

Modulun bir tərəfində biz i2c pinlərini görürük - yer, güc və məlumat ötürülməsi üçün 2. Digər adapterdə xarici güc konnektorlarını görürük. Və əlbəttə ki, lövhədə modulun standart ekran sancaqlarına lehimləndiyi bir çox sancaq var.


i2c çıxışları Arduino lövhəsinə qoşulmaq üçün istifadə olunur. Lazım gələrsə, arxa işıqlandırma üçün xarici gücə qoşuluruq. Daxili trimmer ilə biz fərdi kontrast dəyərlərini təyin edə bilərik J

Bazarda siz artıq lehimlənmiş adapterləri olan LCD 1602 modullarını tapa bilərsiniz, onların istifadəsi mümkün qədər sadələşdirilmişdir. Ayrı bir adapter satın almış olsanız, əvvəlcə onu modula lehimləməlisiniz.

LCD ekranın I2C vasitəsilə Arduino-ya qoşulması

Qoşulmaq üçün sizə Arduino lövhəsinin özü, displey, çörək lövhəsi, birləşdirən naqillər və potensiometr lazımdır.

Xüsusi ayrıca i2c adapterindən istifadə edirsinizsə, əvvəlcə onu ekran moduluna lehimləməlisiniz. Orada səhv etmək çətindir, bu sxemə əməl edə bilərsiniz.


I2c dəstəyi ilə LCD monitor dörd naqildən istifadə edərək lövhəyə qoşulur - məlumat üçün iki naqil, güc üçün iki naqil.

  • GND pin lövhədə GND ilə birləşir.
  • VCC pin 5V-dir.
  • SCL A5 pininə qoşulur.
  • SDA A pininə qoşulur.

Və hamısı budur! Çox asanlıqla qarışan tel şəbəkələri yoxdur. Eyni zamanda, biz sadəcə olaraq i2C protokolunun tətbiqinin bütün mürəkkəbliyini kitabxanalara həvalə edə bilərik.

i2c LCD displeylə işləmək üçün kitabxanalar

I2C avtobusu vasitəsilə Arduino və LCD 1602 ilə qarşılıqlı əlaqə yaratmaq üçün sizə ən azı iki kitabxana lazımdır:

  • I2C ilə işləmək üçün Wire.h kitabxanası artıq standarta daxil edilmişdir Arduino proqramı IDE.
  • LiquidCrystal_I2C.h kitabxanası, I2C avtobusu vasitəsilə monitoru idarə etmək üçün müxtəlif əmrləri ehtiva edir və eskizi daha sadə və qısaltmağa imkan verir. Kitabxananı əlavə olaraq quraşdırmalısınız Displeyi birləşdirdikdən sonra əlavə olaraq LiquidCrystal_I2C.h kitabxanasını quraşdırmalısınız.

Bütün lazımi kitabxanaları eskizə birləşdirdikdən sonra biz bir obyekt yaradırıq və onun bütün funksiyalarından istifadə edə bilərik. Test üçün aşağıdakı standart nümunə eskizini yükləyək.

#daxildir #daxildir // Kitabxana daxil olmaqla //#include // Alternativ kitabxanaya qoşulma LiquidCrystal_I2C lcd(0x27,16,2); // I2C ünvanını (ən ümumi dəyər), eləcə də ekran parametrlərini göstərin (LCD 1602 halda - hər biri 16 simvoldan ibarət 2 sətir //LiquidCrystal_PCF8574 lcd(0x27); // PCF8574 kitabxanasının etibarsız quraşdırılması üçün seçim( ) ( lcd.init (); // Ekranın işə salınması lcd.backlight(); // Arxa işığın qoşulması lcd.setCursor(0,0); // Kursorun birinci sətirin əvvəlinə qoyulması lcd.print(" Salam"); ​​// Birinci sətirdə mətnin yazılması lcd.setCursor(0,1); // Kursoru ikinci sətrin əvvəlinə qoyun lcd.print("ArduinoMaster"); // İkinci sətirdə mətni yazın ) boş döngə() ( )

LiquidCrystal_I2C kitabxanasının funksiyaları və metodlarının təsviri:

  • home() və clear() - birinci funksiya kursoru ekranın əvvəlinə qaytarmağa imkan verir, ikincisi eyni şeyi edir, lakin eyni zamanda əvvəllər monitorda olan hər şeyi silir.
  • write(ch) – ekranda bir simvol ch çap etməyə imkan verir.
  • cursor() və noCursor() – kursoru ekranda göstərir/gizlədir.
  • blink() və noBlink() – kursor yanıb-sönür/yanıb-sönmür (əgər onun displeyi əvvəllər aktiv edilibsə).
  • display() və noDisplay() – ekranı qoşmağa/deaktiv etməyə imkan verir.
  • scrollDisplayLeft() və scrollDisplayRight() – ekranı bir simvol sola/sağa sürüşdürür.
  • autoscroll() və noAutoscroll() – avtomatik sürüşdürmə rejimini aktivləşdirməyə/deaktiv etməyə imkan verir. Bu rejimdə hər bir yeni simvol əvvəllər ekranda yazılanları əvəz edərək eyni yerdə yazılır.
  • leftToRight() və rightToLeft() – Göstərilən mətnin istiqamətini təyin etmək – soldan sağa və ya sağdan sola.
  • createChar(ch, bitmap) – qara və ağ nöqtələr yaratmaq üçün bitmap bitmapları massivindən istifadə edərək ch (0 – 7) kodu ilə simvol yaradır.

i2c ekranı ilə işləmək üçün alternativ kitabxana

Bəzi hallarda, PCF8574 nəzarətçiləri ilə təchiz edilmiş cihazlarla göstərilən kitabxanadan istifadə edərkən səhvlər baş verə bilər. Bu halda alternativ olaraq LiquidCrystal_PCF8574.h kitabxanası təklif oluna bilər. LiquidCrystal_I2C-ni genişləndirir, ona görə də istifadə edərkən heç bir problem olmamalıdır.

i2c lcd ekranını birləşdirən problemlər

Eskizi yüklədikdən sonra ekranda heç bir mesaj görmürsünüzsə, aşağıdakı addımları sınayın.

Birincisi, siz monitorun kontrastını artıra və ya azalda bilərsiniz. Tez-tez simvollar kontrast və arxa işıq rejiminə görə sadəcə görünmür.

Bu kömək etmirsə, kontaktların düzgün qoşulub-qoşulmadığını və arxa işıq gücünün bağlı olub olmadığını yoxlayın. Ayrı bir i2c adapter istifadə etmisinizsə, kontaktların lehimləmə keyfiyyətini yenidən yoxlayın.

Ekranda mətnin olmamasının başqa bir ümumi səbəbi səhv i2c ünvanı ola bilər. Əvvəlcə eskizdəki cihazın ünvanını 0x27 0x20 və ya 0x3F-ə dəyişməyə cəhd edin. Fərqli istehsalçıların proqramlaşdırılmış fərqli standart ünvanları ola bilər. Bu kömək etmirsə, siz bütün qoşulmuş cihazları skan edən və kobud gücdən istifadə edərək ünvanlarını təyin edən i2c skaner eskizini işlədə bilərsiniz. i2c skaner eskizinin nümunəsi.

Ekran hələ də işləmirsə, adapteri açmağa və LCD-ni həmişəki kimi birləşdirməyə çalışın.

Nəticə

Bu yazıda, lövhədə pulsuz sancaqlar saxlamalı olduğumuz zaman mürəkkəb Arduino layihələrində LCD ekrandan istifadənin əsas məsələlərinə baxdıq. Sadə və ucuz i2c adapteri sizə yalnız 2 analoq pin tutaraq 1602 LCD ekranı birləşdirməyə imkan verəcək. Bir çox hallarda bu çox vacib ola bilər. Rahatlıq üçün qiymət əlavə moduldan - çeviricidən və kitabxanadan istifadə etmək ehtiyacıdır. Fikrimizcə, bu, rahatlıq üçün ödəniləcək yüksək qiymət deyil və biz bu funksiyadan layihələrdə istifadə etməyi tövsiyə edirik.

Çoxlu sayda elektron cihazların tərkib hissəsi nədir? Əlbəttə ki, məlumatların göstərici və qrafik çıxış vasitələri. “Ağıllı qutu”nun nəticəsini vizual olaraq görmək həmişə istifadəçi üçün daha rahat və xoşdur. Buna görə də, bu gün biz mətn və nömrələri göstərmək üçün STM32-yə bir ekran bağlayacağıq. Təcrübələrimizin qəhrəmanı Winstar-dan olduqca populyar bir ekran olacaq. Yeri gəlmişkən, şərhlərdə vacib bir aydınlıq ortaya çıxdı ki, metodologiya əsasən bütün displeylər üçün eynidir. HD44780. Vacib əlavə üçün JekaKey-ə təşəkkür edirik)

Birincisi, displey nəzarətçiyə qoşulmalıdır. Məlumat cədvəlini yükləyin və WH1602 pinoutunu axtarın. Bura baxın:

Bildiyiniz kimi, ekran WH1602 16 pin var. Gəlin hər birinə ayrıca baxaq...

Vss, Vdd və K sancaqlarını yerə və gücə bağlamaq lazımdır, yəni cədvəldə göstərildiyi kimi, heç bir sürpriz yoxdur və hətta müzakirə ediləcək bir şey yoxdur)

Kontrastı tənzimləmək üçün 3 nömrəli pin istifadə olunur - orada +5V tətbiq etsək, tamamilə heç nə görməyəcəyik və pinlə yerə qısa qapansaq, iki sıra qara kvadratlara heyran qalacağıq 😉 Təbii ki, bu bizə uyğun deyil. , buna görə də kontrastı tənzimləmək üçün orada dəyişən müqavimətə malik bir potensiometr (rezistor) asmalıyıq. Simvolların ən yaxşı görünməsi bu ekran pinində 0,5-0,7 V gərginliklə təmin edilir.

RS pin artıq bir mikro nəzarətçidən istifadə edərək özümüz idarə edəcəyimiz bir pindir. Bu pindəki aşağı gərginlik səviyyəsi (0) əmrin indi yerinə yetiriləcəyini, yüksək səviyyə (1) isə ekran yaddaşına yazılacaq məlumatların olacağını bildirir.

Pin R/W - burada aydındır, ya biz məlumatları oxuyuruq (məsələn, məşğul bayrağı göstərin), bu halda bu pində 1 var, ya da ekrana əmr/məlumat yazırıq, onda bizdə 0 var.

DB7 – DB0 – məlumat avtobusu və bu hər şeyi deyir)

Pin E "Enable" siqnalıdır. Bunun üçün ona lazımdır. Ekranla işləmək üçün - məlumatları qeyd edin və ya əmr verin - bu pinə müsbət bir nəbz verməliyik. Yəni prosedur belə görünəcək:

  1. RS, R/W, DB7 - DB0 pinlərində - əmrimizə uyğun lazımi siqnallar.
  2. E pininə birini veririk.
  3. Zhdemlər (məlumat vərəqinə görə - ən azı 150 ns)
  4. E pininə aşağı səviyyə (0) tətbiq edirik.

Ekranın arxa işığını gücləndirmək üçün A/Vee ayağına 4,2 V qoymalısınız.

WH1602 displeyi ilə əlaqə belə baş verir.

WH1602-ni birləşdirməyi başa düşdük, lakin nümunəyə keçməzdən əvvəl ekranımızın ümumiyyətlə hansı əmrləri başa düşdüyünə baxaq. Bunu etmək üçün məlumat cədvəlinə daxil oluruq və maraqlı bir cədvəl tapırıq:

Hər bir xüsusi əmr üçün WH1602-nin müvafiq pinlərində olması lazım olan bütün əmrlər və siqnallar burada təsvir edilmişdir. Məsələn, ekranı təmizləmək istəyirik, cədvələ baxırıq və bizə lazım olan əmr budur! Ekranı təmizləyin!

Biz RS, R/W, DB7, DB6, DB5, DB4, DB3, DB2, DB1 sancaqlarına sıfırları və DB0 pinlərinə bir ədəd tətbiq edirik. Bitdi! Sonra nə olacaq? Düzdür, biri E pinində, sonra bir az gözləyin və E-ni yenidən sıfıra endirin. Budur, ekran təmizlənir 😉 Növbəti əmri yerinə yetirməzdən əvvəl hər bir əmr üçün məlumat cədvəlində göstərilən fasilə verməlisiniz. Məşğul bayrağı sorğulamaq daha effektiv olardı; 0-a sıfırlanan kimi işə davam edə bilərsiniz. Bu bayrağı oxumaq üçün də xüsusi əmr var, ona görə də bununla hər şey aydındır) Davam edək...

Və əslində hər şey nəzəriyyədədir, siz artıq bir şey yazmağa cəhd edə bilərsiniz. Displeylə işi asanlaşdırmaq üçün kiçik bir kitabxana yaratdım, indi onun necə istifadə oluna biləcəyinə baxaq. Birincisi, yükləyin

Bizim ixtiyarımızda 2 fayl var, MT_WH1602.c və MT_WH1602.h. İkincisini qoparırıq, burada sancaqlar və istifadə olunan nəzarətçi seçməliyik.

Yeri gəlmişkən, mənim ekranım belə bağlıdır:

RS-PC2
R/W – PB10
E–PB14
DB7–PD2
DB6–PC12
DB5–PA8
DB4–PA10
DB3–PA15
DB2–PD11
DB1–PA3
DB0–PA5

MT_WH1602.h faylını açın:

#Platformanı təyin edin (STM32F10x)

Sonra, ekranın qoşulduğu mikro nəzarətçi pinlərini seçin. Əvvəlcə hansı portlardan istifadə etdiyimizi təyin edək. Mən qoşulduqda GPIOA, GPIOB, GPIOC və GPIOD istifadə edirəm, yazırıq:

Eynilə digər mikro nəzarətçi ayaqları üçün.

Quraşdırma işlərini bitirdik, davam edək) Məqalənin əvvəlində verilən əmrləri çağırmaq üçün MT_WH1602.c faylı aşağıdakı funksiyaları ehtiva edir (onlar əmrlərin adlarına görə adlandırılır, məncə hər şey aydındır) :

etibarsız MT_WH1602_ClearDisplay(boşdur); void MT_WH1602_ReturnHome(void) ; void MT_WH1602_EntryModeSet (bool IDaddress, bool shift) ; void MT_WH1602_DisplayOnOff (bool Dbit, bool Cbit, bool Bbit) ; void MT_WH1602_CursorOrDisplayShift (bool SCbit, bool RLbit) ; etibarsız MT_WH1602_FunctionSet (bool DLbit, bool Nbit, bool Fbit); etibarsız MT_WH1602_SetCGRAMAddress (uint8_t ünvanı); etibarsız MT_WH1602_SetDDRAMAddress (uint8_t ünvanı); bool MT_WH1602_ReadBusy(boşdur); etibarsız MT_WH1602_WriteData(uint8_t data);

Bəzi əmrlər üçün funksiyaya parametrlər ötürməliyik, məsələn:

void MT_WH1602_DisplayOnOff (bool Dbit, bool Cbit, bool Bbit) ;

Komanda cədvəlinə baxaq:

Biz görürük ki, “Display ON/OFF” əmri təkcə ekranı yandırıb/sönmür, həm də kursoru və kursorun yanıb-sönməsini aktivləşdirir/deaktiv edir. Məlumat vərəqində bu əmr bitləri D, C və B kimi təyin olunur və biz onları funksiyaya parametr kimi ötürürük. Ekranı və kursoru yandırmalı, lakin kursorun yanıb-sönməsini söndürməli olsaq, əmri aşağıdakı kimi çağırırıq:

MT_WH1602_DisplayOnOff(1, 1, 0);

Ümumiyyətlə, hər şey sadədir 😉

Bir sözlə, biz yaradırıq yeni layihə, WH1602 displeyi ilə işləmək üçün kitabxana əlavə edin, boş .c faylı yaradın və onu kodla doldurmağa başlayın:

// Kitabxana faylını daxil edin# "MT_WH1602.h" daxil edin /*******************************************************************/ int main(boş) ( // İnsializasiya funksiyasına zəng edin, onsuz edə bilmərik =)() ; // İndi ilkin ekran konfiqurasiyasını etməliyik // Sənədlər və İnternet bunu etməyi tövsiyə edir;) MT_WH1602_FunctionSet(1, 0, 0); MT_WH1602_Gecikmə (1000 ); MT_WH1602_FunctionSet(1, 0, 0); MT_WH1602_Gecikmə (1000 ); MT_WH1602_FunctionSet(1, 0, 0); MT_WH1602_Gecikmə (1000 ); MT_WH1602_FunctionSet(1, 1, 1); MT_WH1602_Gecikmə (1000 ); MT_WH1602_DisplayOnOff(1, 0, 0); MT_WH1602_Gecikmə (1000 ); MT_WH1602_ClearDisplay() ; MT_WH1602_Gecikmə (2000); // Məsələn, ağlıma gələn ilk gecikmə dəyərlərini götürdüm) // Ümumiyyətlə, displey məşğul bayrağını yoxlamaq lazımdır // İndi saytımızın adı kimi bir şeyi göstərək MT_WH1602_WriteData(0x6D); MT_WH1602_Gecikmə (100); MT_WH1602_WriteData(0x69) ; MT_WH1602_Gecikmə (100); MT_WH1602_WriteData(0x63) ; MT_WH1602_Gecikmə (100); MT_WH1602_WriteData(0x72) ; MT_WH1602_Gecikmə (100); MT_WH1602_WriteData(0x6F); MT_WH1602_Gecikmə (100); MT_WH1602_WriteData(0x74) ; MT_WH1602_Gecikmə (100); MT_WH1602_WriteData(0x65) ; MT_WH1602_Gecikmə (100); MT_WH1602_WriteData(0x63) ; MT_WH1602_Gecikmə (100); MT_WH1602_WriteData(0x68) ; MT_WH1602_Gecikmə (100); MT_WH1602_WriteData(0x6E); MT_WH1602_Gecikmə (100); MT_WH1602_WriteData(0x69) ; MT_WH1602_Gecikmə (100); MT_WH1602_WriteData(0x63) ; MT_WH1602_Gecikmə (100); MT_WH1602_WriteData(0x73) ; MT_WH1602_Gecikmə (100); MT_WH1602_WriteData(0x2E) ; MT_WH1602_Gecikmə (100); MT_WH1602_WriteData(0x72) ; MT_WH1602_Gecikmə (100); MT_WH1602_WriteData(0x75) ; MT_WH1602_Gecikmə (100); isə (1 ) ( __NOP() ; ) ) /*******************************************************************/

Bitdi, yoxlayaq)


Gördüyünüz kimi, hər şey düzgün işləyir)

Yeri gəlmişkən, bu və ya digər personajı göstərmək üçün displeydə nə yazmalı olduğum sualı birtəhər gözümdən qaçdı. Budur məlumat cədvəlindən lövhə:

Beləliklə, displey yaddaşına hansı dəyərin yazılacağını müəyyən etmək üçün müəyyən bir simvol üçün bu cədvəldə yuxarıda və solda yazılmış rəqəmləri götürməlisiniz. Məsələn, "A" simvolu. Baxaq - bu simvol 0100 (0x4) sütununa və 0001 (0x1) sətirinə uyğundur. Belə çıxır ki, “A” simvolunu göstərmək üçün ekrana 0x41 dəyərini yazmaq lazımdır.

İndi budur =) Biz WH1602 displeyinin əlaqəsini və işləməsini sıraladıq, tezliklə görüşərik!

P.S. Kitabxana ilə işləyərkən mən məşğul bayrağın oxunma funksiyasını sınaqdan keçirməmişəm, buna görə də birdən bir şey lazım olduğu kimi işləmirsə, yazın, biz bunu anlayacağıq)

Bəzən Arduino-dan xarici dünyaya müxtəlif məlumatların çıxarılması problemi ilə qarşılaşırıq. Çox vaxt serial portdan istifadə qeyri-mümkün, əlverişsiz və sərfəli deyil.

Simvol ekranı məlumatı göstərmək üçün ən sadə və ucuz vasitələrdən biridir, çünki onun kodlaşdırılmış simvolları saxlayan öz mikrokontrolleri var. Bu sistem bu displeylərin istifadəsini asanlaşdırır, lakin eyni zamanda onların istifadəsini yalnız çıxış üçün məhdudlaşdırır mətn məlumatı, qrafik displeylərdən fərqli olaraq.

Nümunədə hd44780 nəzarətçisində ən çox yayılmış displeylərdən biri olan Winstar wh1602l1 ekranına baxacağıq. Bundan əlavə, LCD 2004 və digər oxşarları birləşdirə bilərsiniz.
İlk iki rəqəm hər sətirdəki simvolların sayını, ikincisi isə sətirlərin sayını göstərir, buna görə də seçilmiş displeydə 16 simvoldan ibarət 2 sətir var.
Bu əlaqə üsulu Arduino mikro nəzarətçisinin ən azı 6 portunu tutmağı nəzərdə tutur. Lazım gələrsə, 1602 mətn displeyini I2C interfeysi (2 port) vasitəsilə birləşdirə bilərsiniz.

Bizə lazım olan əlavə elementlərdən dəyişən rezistor, kontrastı idarə etmək üçün. Əks halda, hər şey diaqrama uyğun olaraq, verilənlər cədvəlinə və proqramda seçilmiş Arduino çıxışlarına uyğun olaraq bağlanır.

Ekrandakı 15 və 16-cı sancaqlar arxa işıq üçün cavabdehdir; parlaqlıq sensoru kimi Arduino-ya fotorezistor qoşduqda söndürülə bilər və ya parlaqlıq avtomatik tənzimlənə bilər.

Nümunəmizdə seriya portundan məlumatları oxuyacağıq və ekranda göstərəcəyik:

#daxildir // LiquidCrystal lcd(13, 11, 5, 4, 3, 2) simvol displeyləri ilə işləmək üçün kitabxananı birləşdirin; // (RS, E, D4, D5, D6, D7) R/W – GND ardıcıllığına uyğun olaraq displey çıxışlarını birləşdirin, çünki biz məlumatları displeyə yazacağıq və void setup() oxumayacağıq ( lcd.begin( 16, 2); // LCD 1602-ni işə salın // lcd.begin(20, 4); // LCD 2004 Serial.begin(9600); // Serial portunu işə salın ) void loop() ( if (Serial.available) ()) // Əgər verilənlər portdan gəlirsə, onda... ( gecikmə(100); lcd.clear(); // (Serial.available() > 0) zamanı ekranı tamamilə təmizləyin) // Əgər verilənlər portdan gəlirsə port 0-dan böyükdür, sonra ... ( lcd.write(Serial.read()); // Serial portdan dəyərləri oxuyun və onları ekranda göstərin ) ) )

Siz kodu çətinləşdirə və Arduino-da DS1307 real vaxt saatını LCD1602-yə çıxara bilərsiniz.

İndi kitabxanadakı bütün funksiyalara daha yaxından nəzər salaq LiquidCrystal:

Birinci və ən vacibi odur ki, bu kitabxanadan istifadə edərək, displeydə bu simvollar yaddaşda olsa belə, rus hərflərini göstərə bilməzsiniz. Bu problem ya digər kitabxanalar tərəfindən, ya da onaltılıq koddan istifadə edərək dəyərlər yazmaqla həll edilə bilər.

lcd.print();- ən sadə və ən çox istifadə olunan, məlumatı göstərmək üçün istifadə olunur.

lcd. aydın(); - ekranı təmizləmək üçün istifadə olunur.

lcd.setKursor(x, y); - kursoru müəyyən bir yerə yerləşdirir.

X - xəttdəki mövqeyin dəyişməsi

Y - xətt dəyişikliyi

Məsələn, lcd.setCursor(0, 0); bu yuxarı sol xanadır.

lcd.home(); - kursoru 0, 0 mövqeyinə qoyur

lcd.home(); = lcd.setCursor(0, 0);

lcd. fırladınDisplaySola(); - sola sürüşdürün

lcd. fırladınDisplaySağ(); - sağa sürüşdürün

Lcd.createChar(ad, massiv); - öz işarənizi yaratmaq.

Məsələn, dərəcə işarəsi belə görünür:

Celc = (B00111, B00101, B00111, B00000, B00000, B00000, B00000, B00000 );




Üst