Bağlantı 1602 r rev 0. Winstar'dan LCD WH1602B. Okuma işlemi benzer şekilde uygulanır

  • 04.11.2019

Bir süredir, böyle bir ekran boşta kaldı.


Ve şimdi onu projelerden birine ekleme arzusu vardı, elbette, hazır işlevlere sahip bir kütüphane bulmaya çalışabilirsiniz, ancak bu durumda, ekranın nasıl çalıştığının resmi eksik olacaktır, ancak bu bize uymuyor. Bir kez, LCD ekranın çalışma prensibini ele aldıktan sonra, eksikse veya bir şekilde size uymuyorsa, istediğiniz ekran için kendi kitaplığınızı yazmak zor olmayacaktır.

Öyleyse başlayalım.
Yapılacak ilk şey pinout'u, yani hangi kontağın neyden sorumlu olduğunu bulmak, ikincisi ise ekranı kontrol eden denetleyicinin adını bulmak, bunun için bu LCD'nin veri sayfasını indirip açıyoruz. ilk sayfa.


Kişiler soldan sağa sayılır, ilki kırmızı okla işaretlenmiştir. Besleme voltajı 5 volt, kontrol kontrolörü S6A0069 veya benzeri, örneğin, ks0066U.

Kontrol denetleyicisinin adını neden arıyorduk? Gerçek şu ki, ekranın veri sayfasında zaman gecikmeleri var (zamanlama şeması), bir komut sistemi açıklanıyor, ancak banal başlatma yok ve onsuz hiçbir yerde yok.
Ardından, ikinci sayfayı açıyoruz ve hangi kişinin neyden sorumlu olduğunu söyleyen bir tablo görüyoruz.


DB7…DB0– veri/adres veriyolu.

R/W- ne yapacağımızı, okuyacağımızı (R/W=1) veya yazacağımızı (R/W=0) belirler

R/S– bir komut (RS=0) veya veri (RS=1) göndereceğimizi belirler

E- strobe girişi, bu girişteki sinyali değiştirerek ekranın veri okumasını/yazmasını sağlıyoruz.

LED±- arka ışık kontrolü.

Aldığım ekranda arka ışığın açılmayacağını söylemeliyim, bunun için tahtada R7 olarak gösterilen bir direnç lehimlemeniz gerekiyor. Ama şimdilik buna ihtiyacımız yok.

Veri sayfasını kontrol denetleyicisine indirin ve başlatma talimatlarını bulun. Resimler üzerlerine tıklayarak büyütülebilir.



8 bit ve 4 bit mod için böyle iki talimat olduğu ortaya çıktı. Bu modlar nelerdir? Bu modlar, kaç kablo verisinin iletileceğini belirler: dört veya sekiz. aktarıma bakalım 4 tel, bu durumda ekran daha yavaş çalışacak, ancak mikrodenetleyicinin 4 çıkışını kaydedeceğiz ve sekiz bit modunun uygulanması çok farklı değil.

Bilgi bağlantı şeması aşağıdaki gibidir.


Güç pimleri arasındaki potansiyometreyi açarak kontrast ayarlanabilir.

Başlatma sırasında şunu belirtmek isterim R/S Ve R/W her zaman sıfıra eşittir, yani göndereceğiz takımlar.

Başlatma sırasında şunları yapılandırabilirsiniz:

  • N - görüntülenen satır sayısı
  • C - imleci etkinleştirin veya devre dışı bırakın
  • B - imlecin yanıp sönmesini sağlayın
  • I/D - adres sayacının değerini artırın veya azaltın
  • SH - ekran penceresini hareket ettir
Son iki noktaya daha yakından bakalım.
Aşağıdaki resim, örneğin bir karakter görüntülemek istiyorsak, belirli bir konumda görüntülenmesi için hangi adres verilerinin yazılması gerektiğini gösterir. ikinci satırın ilk konumu, o zaman 0x40 adresine yazmalıyız.


Bundan sonra, sayaç değeri otomatik olarak değişecek, artacak veya azalacak ve imlecin konumu onunla birlikte değişecektir.

Bu arada, yazdığımız belleğe denir DDRAM, bu belleğe yazdığımız her şey görüntülenecek, hala var CGROM, karakter üreteci tablosunu saklar.


Bu tablo değiştirilemez, ancak ondan hazır semboller alınabilir. Diğer bir bellek türü ise CGRAM, aynı zamanda bir karakter üreteci tablosudur ancak bu tablodaki karakterleri kendimiz çiziyoruz.


Şimdi ekranın hareketi hakkında birkaç söz, gerçek şu ki, genellikle ekranda DDRAM'ın tamamını değil, aşağıdaki resimde gösterildiği gibi sadece belirli bir kısmını görüyoruz.


Görünmeyen kısma da yazabiliriz ama biz ekran penceresini bu yere taşımadan yazdıklarımız görünmeyecektir.

Teoriyi bitirdikten sonra uygulamaya geçelim.
4 bit modunda LCD ekran ile iletişimin resmi aşağıdaki gibidir.


Veriler bayt olarak gönderilir, ancak 4 bit modumuz olduğundan, bayt göndermek için en önemli bit olan 2 paket göndermeniz gerekir. Resimde, ilk öncül D7 (yüksek dörtlü), ikinci öncül D3 (düşük dörtlü) olarak işaretlenmiştir. Bir sonraki gönderimden önce meşgul bayrağını kontrol etmeliyiz ve eğer ayarlanmamışsa tekrar gönderebiliriz, eğer ayarlanmışsa LCD'yi kontrol eden controller işini bitirene kadar bekleriz.

Göndermenin genel bir resmini elde ederek, gönderme işlemini nasıl uygulayacağımızı bulalım.


8 bit veri yolu ile göndermek için:
  • R/W 0'a ayarlandı
  • otobüse komut kodunu / verilerini veriyoruz
  • gecikme 2us
  • alt kapı E

Okuma işlemi benzer şekilde uygulanır:

  • ana denetleyicinin ücretsiz olduğundan emin olun
  • R/W 1'e ayarlandı
  • flaş E'yi yükseltin (şu anda LCD veri yoluna veri gönderir)
  • gecikme 2us
  • LCD'nin ne verdiğini okuduk
  • alt kapı E
2us gecikmesi nereden geldi?

Zamanlamaların üzerinde, grafikte gösterilen gecikmelerin neye eşit olduğunun yazılı olduğu bir tablo vardır ve bu nedenle flaş darbesinin süresi - tw, besleme voltajına bağlı olarak 230nS veya 450nS'ye eşit olmalıdır. bir marj ile biraz. Neden sadece bu gecikmeyi düşündük? Çünkü kalan gecikmelerin değeri çok küçüktür.

4 bitlik bir veri yolunda göndermek için:

  • ana denetleyicinin ücretsiz olduğundan emin olun
  • gönderdiğimiz şeye bağlı olarak RS'yi 0 (komut) veya 1 (veri) olarak ayarlayın
  • R/W 0'a ayarlandı
  • E kapısını yükseltin (1'e ayarlayın)
  • kıdemli not defterini otobüse veriyoruz
  • gecikme 2us
  • alt kapı E
  • gecikme 1us
  • E kapısını yükseltin (1'e ayarlayın)
  • düşük dereceli not defterini otobüse veriyoruz
  • gecikme 2us
  • alt kapı E

4 bitlik bir veri yolunda okumak için:

  • ana denetleyicinin ücretsiz olduğundan emin olun
  • açılır veri bağlantı noktası
  • okuduklarımıza bağlı olarak RS'yi 0 (komut) veya 1 (veri) olarak ayarlayın
  • R/W 1'e ayarlandı
  • E kapısını yükseltin (1'e ayarlayın)
  • gecikme 2us
  • eski defteri oku
  • alt kapı E
  • gecikme 1us
  • E kapısını yükseltin (1'e ayarlayın)
  • gecikme 2us
  • genç not defterini oku
  • alt kapı E

Flaşın kaldırılması ve komut/verinin veriyoluna çıkışı değiştirilebilir. Şimdi ekranı başlatmak zor olmayacak. Başlatmayı basitleştirmek için meşgul bayrağının okumasını bir gecikmeyle değiştireceğiz ve bayrakla çalışmak daha sonra tartışılacaktır.
4 bit modunda başlatma sırasında 4 bit komutların kullanıldığı ve başlatmadan sonra 8 bitlik bir komut sisteminin kullanıldığına dikkat edilmelidir, bu nedenle başlatma için komut göndermek için ayrı bir işlev uygularız. geçersiz Write_Init_Command(uint8_t verisi).
// Atmega16 için başlatma kodu #define F_CPU 8000000UL #define LCD_PORT PORTA #define LCD_DDR DDRA #define LCD_PIN PINA #define DATA_BUS 0XF0 #define RS 0 #define RW 1 #define E 2 #include #Dahil etmek void Write_Init_Command(uint8_t data) ( //komutların/verilerin LCD_DDR çıkışına iletildiği bacaklar |= DATA_BUS; //LCD_PORT komutunu göndereceğiz &= ~(1<Neşeyle yanıp sönen bir imleç, başlatmanın başarılı olduğunu gösterir. İÇİNDE

Metal dedektörümü monte ederken, HD44780 kontrol cihazında yerleşik bir 1602 LCD ekranım vardı. Fırsatı kaçırmamaya ve Çinli meslektaşım Arduino UNO'ya bağlamaya karar verdim.

Burada bugün böyle bir 1602 ekranı Arduino'ya bağlayacağız.

"1602" sayıları, ekranın her biri 16 karakterden oluşan 2 satırdan oluştuğunu gösterir. Bu, insanların saatler, test cihazları ve diğer gadget'ları tasarladığı oldukça yaygın bir ekrandır. Ekran yeşil ve mavi arka ışık ile birlikte gelir.

Kabloların kolayca bağlanabilmesi için ekrana bir kontağı lehimledim.

1602 ekranını paralel arayüzün 4 bitlik bir versiyonu aracılığıyla Arduino'ya bağlayacağız. 8 bitlik bir arayüz seçeneği de var, ancak daha fazla kablo kullanıyor ve bunda herhangi bir kazanç görmeyeceğiz.

Ekrana ve Arduino'ya ek olarak kablolara ve 10kΩ değişken dirence ihtiyacımız var. Direnç, gerekli derecelendirmeye sahip olduğu sürece her marka için uygundur.

Ekran tarafından desteklenmektedir 1. (VSS) Ve 2. (VDD) sonuçlar. sonuçlara 15 (A) Ve 16(K)- ekranın arka ışığına güç verilir. Güç ve arka ışık için aynı voltaj + 5V kullanıldığından onları Arduino pinlerinden besleyeceğiz. "5V" Ve "GND". Ana şey polariteyi tersine çevirmemek, aksi takdirde ekran elektroniklerini yakabilirsiniz.

3 üncüçıktı (V0) bacağa değişken bir direnç bağlarız, ekranın kontrastını onunla kontrol edeceğiz. Direnç atlanabilir ve çıkış "V0" bağlanmak GND. Bu durumda, kontrast maksimum olacak ve düzgün ayarlanması mümkün olmayacaktır.

5.çıktı (RW) ekrandan okumak veya ekrana yazmak için kullanılır. Sadece ekrana yazacağımız için bu pini toprağa bağlayacağız. (GND).

Sonuçlar: 4. (RS), 6. (E), 11. (D4), 12. (D5), 13. (D6), 14. (D7) Arduino'nun dijital pinlerine bağlayın. Benimkiyle aynı pinleri kullanmak gerekli değildir, bunları herhangi bir dijitale bağlayabilirsiniz, asıl şey onları taslakta doğru bir şekilde ayarlamaktır.

Bağlı Arduino'm, USB üzerinden bilgisayara bağlamak ve taslağı yüklemek için kalır.

İşarette standart setten bir eskiz kullanacağız.

Arduino IDE'de seçin "Dosya" -"Örnekler" -"Likit kristal" - Selam Dünya.

Şimdi eskiz koduna bir göz atalım.

Çizgide sıvı kristal lcd, parantez içinde Arduino'da kullanılan dijital pinlerdir. Pinler aşağıdaki sırayla ayarlanır: RS, E, DB4, DB5, DB6, DB7. Başka dijital pinler kullandıysanız, ekranı bağlarken bunları parantez içinde doğru sırada girin.

Çizgide "lcd.print("merhaba, dünya!");" ekranda bir selamlama görüntülenir, varsayılan olarak bu bir yazıdır Selam Dünya!, kendi başınıza değiştirilebilir, Latince yazıyoruz.

Krokiyi Arduino'ya yüklüyoruz ve işte sonuç. "Merhaba dünya!" yerine siteme girdim. Aşağıdaki satırda zamanlayıcı geri sayım yapar.

Winstar'ın LCD ekranları, sadece Rusya pazarında değil, birkaç yıldır modern elektronik ürünlerin ayrılmaz bir parçası olmuştur. Ucuzlar, çok yaygınlar (olmayacakları mağazalar görmedim), çeşitliliği geliştiricinin çalışma koşullarına bağlı olarak doğru olanı seçmesine izin veriyor. Farkları, çalışma sıcaklığı aralıklarında, bilgi görüntülemek için satır sayısında, standart satır başına 8, 12, 16, 20, 24 ve 40 karakter değerleri olan satır başına aşinalık sayısında yatmaktadır. , ayrıca karakter boyutu, çözünürlük, ekranın kendisinin boyutu vb. Winstar, yalnızca alfanümerik karakter sentezleyen LCD modülleri değil, aynı zamanda grafik modüller de üretir. Bunlar da, kullanıcıya göreve göre uygun olanı seçme fırsatı veren farklı parametrelere sahiptir.

Dijital teknolojide, mikrodenetleyicilerde uzmanlaşmaya yeni başlayan birçok acemi radyo amatörü, er ya da geç bu ekranın bağlanması ve kontrol edilmesiyle ilgili bir sorunla karşılaşacaktır. WH1602B ekranının veri sayfasıyla durumu biraz basitleştirdikten sonra, modülü bağlama ve kontrol etme sürecini anlamak için mümkün olduğunca basit bir şekilde açıklamaya çalıştım.

Varsayılan olarak, WH1602B ekranı şöyle görünür:

11'i kontrol hattı olan 16 çıkış hattı, 2.54 mm'lik bir hatve ile bir sıra halinde düzenlenmiştir; bu, geliştiricinin, tasarımına bağlı olarak, kabloyu doğrudan lehimlemesine veya bir konektör koymasına ve kabloyu kontrol panosuna yönlendirmesine olanak tanır. son cihaz.

Nadir olmaktan uzak, yana monte edilmiş bir ekran.

Elektronik cihazın tasarımına bağlı olarak, geliştirici herhangi bir pinout türünü kullanabilir - yazılım arasında kesinlikle hiçbir fark yoktur.
Modüller bir ekran arka ışığı ile donatılabilir ve arka ışık kaynağının türü farklı modüller için farklıdır. Bazı ekranlar, ekranın tüm ekran yüzeyinde eşit bir ışık dağılımı sağlamak için elektrominesanslı arka aydınlatma kullanır. Bu tür bir arka aydınlatmaya sahip bir ekranın ana dezavantajı, belki de bir şeydir: böyle bir ekrana güç sağlamak için yüksek voltajlı alternatif akım gereklidir. LED arka ışıkların pratikte hiçbir dezavantajı yoktur, LED arka ışık kullanan modüller geniş sıcaklık aralıklarında çalışan uygulamalarda kullanılabilir. Üretici, arka ışık rengi açısından geniş bir seçenek sunar - çünkü LED matrisleri hemen hemen her renkte kurulabilir.

WH1602B ekranların önemli bir dezavantajı, mevcut tüketimdir, bu nedenle bu tür ekranları kendi kendine çalışan cihazlarda kullanmak tamamen kârsızdır.

WH serisinin ekranları, sadece karakter sentezleyen LCD panelleri kontrol etmek için tasarlanmış özel bir HD44780 LCD modül denetleyicisi temelinde oluşturulmuştur.

Kısa bir açıklama ile, belki de bitirmeye değer ve pratik kısma geçin. Ekran pinlerinin numaralandırılması, yukarıdan bakıldığında (yani bilgi okurken baktığımız şekliyle) en soldaki pinden başlar. Bu sonuç 1.

Bağlantı 1602:

böyle pin çıkışı 1602:
1) GND - ortak tel
2) Vcc - besleme gerilimi + 5V
3) V0 - kontrast
4) RS - kayıt seçim satırı
5) RW - veri aktarım yönünü seçme satırı (okuma veya yazma)
6) E - senkronizasyon hattı
7) DB0 - 14) DB7 - veri yolu hatları
15) A - arka ışık anodu (buraya + 5V'u 100 Ohm'luk bir dirençle bağlarız)
16) K - arka ışık katodu (ortak bir kabloya bağlayın)

Ekran 2 modda çalışabilir: 8 bit veri iletim modunda, veriler 8 bitlik gruplar halinde iletildiğinde (bu, ekranla maksimum etkileşim hızını sağlar) ve 4 bit iletim modunda, 8 bit olduğunda veriler, her biri dört bit olan iki gruba ayrılır ve sırayla dört yüksek veri hattı DB4-DB7 üzerinden iletilir.

Ekranla çalışmaya başlamak için, onu başlatmanız gerekir. Başlatma işlemi, belirli verilerin HD44780 kontrol cihazına seri olarak aktarılmasından oluşur. Bunları bulduktan sonra, ekranda görüntülenmek üzere veri almaya hazır olacaktır.

Attiny2313 mikrodenetleyiciye dayalı bir kontrol panosu kullanarak WH1602B ekranını 8 bit modunda başlatma sürecini inceleyeceğiz.

Peki, sağlamak için hangi adımların atılması gerekiyor? başlatma işlemi:
1) Ekranı açın
2) 20ms duraklat
3) RS=0 RW=0 olduğunda 00110000 komutunu verin
4) En az 40 µs'lik bir duraklama sağlayın
5) RS=0 RW=0 olduğunda 00110000 komutunu verin
6) En az 40 µs'lik bir duraklama sağlayın
7) RS=0 RW=0 olduğunda 00110000 komutunu verin
8) En az 40 µs'lik bir duraklama sağlayın
9) RS=0 RW=0 olduğunda 00111000 komutunu verin
10) En az 40 µs'lik bir duraklama sağlayın
11) RS=0 RW=0 olduğunda 00001000 komutunu verin
12) En az 40 µs'lik bir duraklama sağlayın
13) RS=0 RW=0 olduğunda 00000001 komutunu verin
14) En az 1,5 ms'lik bir duraklama sağlayın
15) RS=0 RW=0 olduğunda 00000110 komutunu verin.

Açıklamama izin verin: RS - yukarıda belirtildiği gibi - kayıt seçim satırı (0 - içine ekranı kapatmak, satırı kaydırmak, imleci ayarlamak vb. için komutlar yazdığımız komut kaydı adreslenir; 1 - dahili adresler baytın yazılacağı ve ekranda görüntüleneceği bellek).

RW - veri aktarım yönünü seçme satırı (0 - ekrana yazma, 1 - ekrandan veri okuma).
DB0-DB7 veri hattına veri gönderdikten ve RS, RW hatlarındaki değerleri ayarladıktan sonra, bu verileri mandallamak gerekir - bunun için E satırını 1'e ayarlamanız ve ardından sıfırlamanız gerekir. orijinal konumu - 0'a.

Mikrodenetleyicinin PD0'ını RS LCD hattına, mikrodenetleyici PD1'in çıkışını ekranın RW'sine ve PD2'yi ekranın E hattına ve DB0-DB7 veri yolu hatlarını karşılık gelenlere bağlarız. mikrodenetleyicinin B bağlantı noktasının hatları. Ekranın kendisi yukarıdaki şemaya göre bağlanmıştır.

Şimdi sıra yazılım kısmına kaldı:

"tn2313def.inc" dahil; Attiny2313, 1 MHz saat .cseg .org 0 rjmp sıfırlama ;********************************************* *** ******************************* ;Program sıfırlamanın başlatılmış kısmına standart atlama: ldi r16, düşük (RAMEND) ; MCU yığın başlatma çıkışı SPL, r16 rcall lcd_init ; Ekran başlatma; Burada mikrodenetleyici yığınını başlattık ve LCD modülünün başlatılmasına geçtik;******************************* ********* ***************************************** lcd_init: ldi r16, 0b10000000 ; tüm pull-up dirençlerini sıfırlayın MCUCR, r16 ldi r16, 0b11111111 ; Port B ayarı ddrb, r16 ldi r16, 0b00000111 ; Bağlantı noktası ayarı D çıkış ddrd, r16 ;G/Ç bağlantı noktası hatlarını yapılandırın: çekme dirençlerini sıfırlayın ve tanımlayın; ************************* ****************************** * ; Yukarıdaki başlatma prosedürüne göre aşağıdaki işlemleri gerçekleştirin: ldi r16, 0b00000000 ; IR ldi r17, 0b00110000 adresleme ; Bit derinliğinin ayarlanması Veri hattı rcall delay_20000mks; lcd rcall write_lcd'yi başlatmadan önce duraklatın; LCD'ye veri yazma gecikmesi_40mks ; LCD işlemlerini yapmadan önce gecikme rcall write_lcd ; LCD'ye veri yazma gecikmesi_40mks ; LCD işlemlerini yapmadan önce gecikme rcall write_lcd ; LCD'ye veri yazma gecikmesi_40mks ; lcd ldi r17, 0b00111000 ile işlemleri gerçekleştirmeden önce gecikme; lcd parametrelerinin ayarlanması rcall write_lcd ; LCD'ye veri yazma gecikmesi_40mks ; lcd ldi r17, 0b00001000 ; rcall write_lcd ekranını kapatın; LCD'ye veri yazma gecikmesi_40mks ; lcd ldi r17, 0b00000001 ile işlemleri gerçekleştirmeden önce gecikme; Ekranı temizle rcall write_lcd ; LCD rcall delay_1500mks'e veri yazın; lcd ldi r17, 0b00000110 ile işlemleri gerçekleştirmeden önce gecikme; Giriş modunu ayarla rcall write_lcd ; LCD'ye veri yazma gecikmesi_40mks ; lcd ret ile işlem yapmadan önce gecikme; Alt programdan çıkış;************************************************** ***** ************************* delay_20000mks: ldi r18, 0b10110010 ; Gecikme değişkenini girin ldi r19, 0b00000101 ; Ön ölçekleyiciyi ayarlama rjmp init_delay delay_1500mks: ldi r18, 0b11111010 ; Gecikme değişkenini girin ldi r19, 0b00000101 ; Ön ölçekleyiciyi ayarlama rjmp init_delay delay_40mks: ldi r18, 0b11011000 ; Gecikme değişkenini girin ldi r19, 0b00000010 ; Ön ölçekleyici ayarı init_delay: çıkış TCNT0, r18 ; TCNT0'ı başlatın TCCR0B, r19 ; T0 test_TIFR'yi başlatın: r18'de, TIFR ; TIFR sbrs r18, 1'i okuyun; Şube ise "T0 Taşması" rjmp test_TIFR ; Sonsuz kontrol TOV0 ldi r20, 0b00000000 ; T0'ı durdurun TCCR0B, r20 ldi r20, 0b00000010 ; TOV0>>0 çıkış TIFR, r21 ret ; Alt programdan çıkış;************************************************** ***** ************************* write_lcd: çıkış portu, r16 ; RS hat değerini çıkış portb, r17 ; Veri baytı çıkışı DB0-DB7 nop ; Strobe gürültü koruması sbi portd, 2 ; E>>1 hayır; Flaş gürültü koruması cbi portd, 2 ; E>>0 yok ; Kapı hattı gürültü koruması ret ; Alt programdan çıkış;************************************************** ***** ************************* user_write_IR: ldi r16, 0b00000000 ; IR Adresleme rcall write_lcd ; LCD rcall delay_40mks'e veri yaz; lcd ret ile işlem yapmadan önce gecikme; Alt programdan çıkış;************************************************** ***** ************************* user_write_DR: ldi r16, 0b00000001 ; DR rcall write_lcd adresleme; LCD'ye veri yazma gecikmesi_40mks ; lcd ret ile işlem yapmadan önce gecikme; Alt programdan çıkış;************************************************** ***** ************************* lcd_clear: ldi r16, 0b00000000 ; IR ldi r17, 0b00000001 adresleme ; Ekranı temizle rcall write_lcd ; LCD rcall delay_1500mks'e veri yazın; lcd ret ile işlem yapmadan önce gecikme; Alt programdan çıkış;************************************************** ***** *************************

Bu kod nasıl kullanılır. Ekrana bir karakter girmek için, bu karakterin koduna karşılık gelen bir byte'ı R17 registerına yazmak gerekir. Kayıt 17'ye 0x1 giriyoruz - ekrana bir karakter yazmak istiyorsak veya LCD komut kaydına bir komut yazmak istiyorsak 0x0'a sıfırlıyoruz.

Kullanıcının aradığı alt rutinleri sağladım:
user_write_IR - LCD komut kaydına bir komut yazma;
user_write_DR - LCD'de görüntülenecek verileri yazın;
lcd_clear, ekranı temizlemek için çağrılan bir alt program/komuttur.

Alt program çağrılarıyla nasıl çalışılır:

Ldi r17, 0x24; 0x24 rcall user_write_DR kodlu sembol; ldi r17, 0x2'yi görüntülemek için karakter yaz; komut 0x2 rcall user_write_IR; kayıt defterine yazın.

lcd_clear alt yordamını kullanırken, R17'de bir ön girişin gerekli olmadığını not ediyorum.
Kodunuzu nereye yazmalısınız? Burada:

Sıfırla: ldi r16, düşük (RAMEND) ; MCU yığın başlatma çıkışı SPL, r16 rcall lcd_init ; Ekran başlatma; KODUNUZ!!! Örneğin: Ldi r17, 0xC; Resmi dahil et ldi r17, 0x24; 0x24 rcall user_write_DR kodlu sembol; görüntülenecek karakter yaz

Seri dönüştürücü kartlı bu modüllerin yakın zamanda ortaya çıktığını ve 4 telli bir devre kullanarak ve bir I 2 C arayüzü üzerinden çalışan 1602 LCD ekranı bağlamanıza izin verdiğini ekleyeceğim. O. bağlantı biraz basitleştirilir ve kontrolör çıkışları kaydedilir. Modül ayrıca satın alınabilir ve mevcut bir LCD 1602'ye bağlanabilir.

Kaynak kodunu ve firmware'i aşağıdan indirebilirsiniz.

Makale, LCD'yi Arduino'ya nasıl düzgün şekilde bağlayacağınızdan bahsediyor, LCD 1602 ve LCD i2c'yi bağlama hakkında bilmeniz gereken her şey ele alınmaktadır.

HD44780 kontrol cihazını temel alan LCD 1602 ekranlar, günümüzde her türlü elektronik cihazı geliştirmek için hala en uygun fiyatlı, basit ve talep gören ekranlardan biridir.

Hem tam anlamıyla diz üzerine monte edilmiş basit birimlerde hem de kahve makineleri gibi daha ciddi endüstriyel birimlerde görülebilmeleri şaşırtıcı değildir. En popüler Arduino temalı modüller ve kalkanlar, örneğin LCD I2C modülü ve LCD Tuş Takımı Kalkanı gibi bir ekrana sahip.

Aşağıdaki adımlarda LCD'yi Arduino'ya nasıl bağlayacağınızı ve gerekli bilgileri ekranda nasıl görüntüleyeceğinizi resimlerle detaylı olarak açıklıyoruz.

Adım 2 Arduino için LCD Ekran 1602

1602 ekranlar iki farklı versiyonda mevcuttur:

  • siyah yazı ile sarı arka ışık
  • veya (bu çok daha sık olur) beyaz ile mavi arka ışık.

HD44780 kontrol ünitesindeki ekranların boyutları çok farklı ama aynı şekilde kontrol ediliyorlar. Boyutların en yaygın olanı 16 x 02 (yani iki satırda 16 karakter) veya 20 x 04'tür. Karakterlerin kendileri 5 x 8 piksel çözünürlüğe sahiptir.

Çoğu ekran Kiril alfabesini desteklemez (CTK işaretleme ekranları hariç). Ancak böyle bir sorun kısmen çözülebilir ve ardından makale bunun nasıl yapılacağını ayrıntılarıyla anlatıyor.

Ekranda bağlantı için 16-PIN konektör bulunur. Çıkışlar, kartın arkasında işaretlenmiştir, aşağıdaki gibidir:

  • 1 (VSS) - kontrolör için eksi güç.
  • 2 (VDD) - kontrolör için pozitif güç kaynağı.
  • 3 (VO) - kontrast kontrol ayarları.
  • 4 (RS) – kayıt için seçim.
  • 5 (R/W) - özellikle toprağa bağlıyken okuma ve yazma.
  • 6 (E) – etkinleştirme (etkinleştirme).
  • 7-10 (DB0-DB3) - sekiz bitlik arabirimden düşük bitler.
  • 11-14 (DB4-DB7) - arabirimdeki en önemli bitler
  • 15 (A) - arka ışığa güç sağlamak için pozitif anot.
  • 16 (K) - arka ışığa güç sağlamak için negatif katot.

Adım 3. LCD'yi Bağlama

Ekranı bağlamadan ve ona bilgi aktarmadan önce, performansını kontrol etmeye değer. Önce VSS ve VDD denetleyicisine voltaj uygulayın, arka ışığı (A, K) açın, ardından kontrastı ayarlayın.

Bu tür ayarlar için 10 kΩ potansiyometre uygundur, şekli önemli değildir. En uçtaki bacaklara +5V ve GND uygulanır ve merkezdeki bacak VO çıkışına bağlanır.

Devreye güç verildiğinde gerekli kontrastı elde etmek gerekir, yanlış ayarlanırsa ekrandaki görüntü görünmez. Kontrastı ayarlamak için potansiyometre ile "oynamanız" gerekir. Devre doğru bir şekilde kurulduğunda ve kontrast doğru ayarlandığında ekranın üst satırı dikdörtgenlerle doldurulmalıdır.

Ekranın çalışması için Arduino IDE'ye yerleşik özel kitaplık, aşağıda yazacağım LiquidCrystal.h kullanılır. 8 bit ve 4 bit modunda çalışabilir. İlk varyantta, yalnızca daha düşük ve daha yüksek bitler kullanılır ( BB0-DB7), ikincisinde - sadece daha genç olanlar ( BB4-DB7).

Ancak bu ekranda 8 bit modunun kullanılması yanlış bir karardır, yenileme hızı her zaman saniyede 10 defadan az olduğu için hız avantajı neredeyse yoktur. Metni görüntülemek için DB7, DB6, DB5, DB4, E ve RS pinlerini kontrol pinlerine bağlamanız gerekir. Bunları herhangi bir Arduino pinine bağlayabilirsiniz, asıl şey koddaki doğru sırayı ayarlamaktır.

Gerekli karakter henüz kontrol cihazının belleğinde değilse, manuel olarak belirlenebilir (toplamda yedi karaktere kadar). Söz konusu ekranlardaki hücre, beşe sekiz noktalı bir uzantıya sahiptir. Bir sembol oluşturmanın görevi, bir bit maskesi yazıp, noktaların yanması gereken yerlere, olmaması gereken yerlere sıfırlar yerleştirmektir. Yukarıda tartışılan bağlantı şeması her zaman iyi değildir, çünkü Arduino en az altı dijital çıkış kullanır.

Adım 4. İzlenecek yol

Bunu aşmanın bir yolunu keşfedelim ve sadece iki tanesiyle geçin. IIC/I2C dönüştürücü modülüne ek bir LCD gereklidir. Ekrana nasıl lehimlendiği ve Arduino'ya nasıl takıldığı aşağıdaki resimlerde görülebilir.

Ancak bu bağlantı seçeneği yalnızca, Web'de kolayca bulunabilen ve kurulabilen özel LiquidCrystal_I2C1602V1 kitaplığı ile çalışır, bundan sonra sorunsuz bir şekilde kullanabilirsiniz.

Adım 4: LiquidCrystal.h Kitaplığı

LiquidCrystal.h kitaplığı, bu sayfadaki web sitemizin Kitaplıklar bölümünden veya resmi kaynak arduino.cc'den indirilebilir. Ancak aşağıdaki bağlantıları da indirebilirsiniz:

Adım 5. Eskiz (program kodu)

Arşivi indirdikten sonra Arduino kurulum dizininizin kitaplıklar klasöründeki LiquidCrystal klasörünü değiştirin.

Örnek bir çizimi şurada görebilirsiniz:

Dosya -> Örnekler -> LiquidCrystal -> HelloWorld_SPI

Veya İngilizce bir menünüz varsa:

Dosya -> Örnekler -> LiquidCrystal -> HelloWorld_SPI

Bu, bir sonraki dersimizi tamamlıyor. Kaliteli projeler dileriz!

Her radyo amatörü, belirli bir miktarda basit DIY'den sonra, sensörler ve düğmeler kullanarak büyük bir şey inşa etme hedefine gelir. Sonuçta, verileri ekranda görüntülemek, bağlantı noktası monitöründen çok daha ilginç. Ama sonra soru ortaya çıkıyor: hangi ekranı seçmeli? Ve genel olarak, nasıl bağlanır, bağlanmak için ne gerekir? Bu soruların cevapları bu makalede tartışılacaktır.

LCD 1602

Ekranlar arasındaki birçok seçenek arasında, HD4478 denetleyicisine dayalı LCD1602 ekranı ayrıca belirtmek isterim. Bu gösterim iki renktedir: mavi zemin üzerine beyaz harfler, sarı zemin üzerine siyah harfler. LCD 1602'yi Arduino'ya bağlamak da yerleşik bir kütüphane olduğundan ve ekstra bir şey indirmenize gerek olmadığı için herhangi bir soruna neden olmaz. Ekranlar sadece fiyat açısından değil, aynı zamanda boyut olarak da farklılık gösterir. Radyo amatörleri genellikle 16 x 2, yani 2 satır 16 karakter kullanır. Ancak 20 karakterlik 4 satırın bulunduğu 20 x 4 de vardır. LCD 1602 ekranının Arduno'ya bağlanmasında boyutlar ve renk herhangi bir rol oynamaz, aynı şekilde bağlanırlar. Görüş açısı 35 derece, ekran tepki süresi 250 ms'dir. -20 ila 70 santigrat derece arasındaki sıcaklıklarda çalışabilir. Çalışma sırasında ekran için 4 mA, arka ışık için 120 mA kullanır.

Nerede kullanılır?

Bu ekranın popülaritesi sadece radyo amatörleri arasında değil, aynı zamanda büyük üreticiler arasında da var. Örneğin yazıcılar, kahve makineleri de LCD1602 kullanır. Bu, düşük fiyatı nedeniyle, Çin sitelerinde bu ekranın maliyeti 200-300 ruble. Mağazalarımızda bu teşhirin marjları çok yüksek olduğu için oradan satın almaya değer.

Arduino'ya bağlanma

LCD 1602'yi Arduino Nano ve Uno'ya bağlamak farklı değil. Ekranla iki modda çalışabilirsiniz: 4 bit ve 8. 8 bitlik bir ekranla çalışırken, hem düşük hem de yüksek bitler kullanılır ve 4 bitlik bir ekranla yalnızca düşük olanlar kullanılır. 8-bit ile çalışmanın özel bir anlamı yoktur, çünkü bağlanmak için 4 kontak daha ekleneceğinden, bu tavsiye edilmez, çünkü hız daha yüksek olmayacaktır, ekran güncelleme limiti saniyede 10 defadır. Genel olarak, lcd 1602'yi Arduino'ya bağlamak için çok sayıda kablo kullanılır, bu da bazı rahatsızlıklara neden olur, ancak özel kalkanlar vardır, ancak daha sonraları. Fotoğraf, ekranın Arduino Uno'ya bağlantısını gösterir:

Program kodu örneği:

#Dahil etmek // Gerekli LiquidCrystal kitaplığını ekleyin lcd(7, 6, 5, 4, 3, 2); // (RS, E, DB4, DB5, DB6, DB7) void setup()( lcd.begin(16, 2); // Ekran boyutunu ayarla lcd.setCursor(0, 0); // İmleci 1 başlayacak şekilde ayarla satır lcd.print("Merhaba, dünya!"); // Metni görüntüle lcd.setCursor(0, 1); // İmleci 2. satırın başına ayarla lcd.print("site"); // Metni görüntüle ) boşluk döngüsü ()( )

Kod ne yapar? Her şeyden önce, ekranla çalışmak için kitaplık bağlanır. Yukarıda bahsedildiği gibi, bu kütüphane zaten Arduino IDE'ye dahil edilmiştir ve ayrıca indirip kurmanıza gerek yoktur. Daha sonra pinlere bağlı olan kontaklar tanımlanır: sırasıyla RS, E, DB4, DB5, DB6, DB7. Ardından ekran boyutu ayarlanır. 16 karakter ve 2 satırlık bir versiyon ile çalıştığımız için bu tür değerleri yazıyoruz. İmleci ilk satırın başına getirip ilk metnimiz Hello World'ü görüntülüyoruz. Ardından, imleci ikinci satıra getirin ve sitenin adını görüntüleyin. Bu kadar! LCD 1602'yi Arduino Uno'ya bağlamak düşünüldü.

I2C nedir ve neden gereklidir?

Yukarıda belirtildiği gibi, ekranı bağlamak çok fazla pin gerektirir. Örneğin, birden fazla sensör ve bir LCD ekran ile çalışırken 1602 kontaklar yeterli olmayabilir. Çoğu zaman, radyo amatörleri, çok fazla kişinin olmadığı Uno veya Nano sürümlerini kullanır. Sonra insanlar özel kalkanlarla geldi. Örneğin, I2C. Ekranı sadece 4 pin ile bağlamanızı sağlar. Bu iki kat daha az. I2C modülü, hem kendiniz lehimlemeniz gereken hem de LCD 1602 ekranına lehimlenmiş olarak ayrı satılır.

Bir I2C modülü ile bağlanma

LCD 1602'yi I2C ile Arduino Nano'ya bağlamak çok az yer kaplar, sadece 4 pin: toprak, güç ve 2 veri çıkışı. Arduino üzerinde sırasıyla 5V ve GND'ye güç ve toprak bağlantısı yapıyoruz. Kalan iki kontak: SCL ve SDA herhangi bir analog pime bağlanır. Fotoğrafta, bir I2C modülü ile lcd 1602'yi arduino'ya bağlamanın bir örneğini görebilirsiniz:

Program kodu

Modülsüz bir ekranla çalışmak için sadece bir kütüphane kullanmak gerekiyordu, sonra modülle çalışmak için iki kütüphaneye ihtiyaç vardı. Bunlardan biri zaten Arduino IDE - Wire'da. Başka bir kitaplık olan LiquidCrystal I2C'nin ayrıca indirilmesi ve kurulması gerekir. Kütüphaneyi Arduino'ya kurmak için indirilen arşivin içeriği Kütüphaneler kök klasörüne yüklenmelidir. I2C kullanan örnek kod:

#Dahil etmek #Dahil etmek LiquidCrystal_I2C lcd(0x27,16,2); // Display void kurulumunu ayarla() ( lcd.init(); lcd.backlight();// Display backlight lcd..setCursor(8, 1); lcd.print("LCD 1602"); ) void loop ( ) ( // İmleci ikinci satıra ve boş karaktere ayarlayın. lcd. setCursor(0, 1); // Arduino'nun lcd'yi başlatmasından bu yana geçen saniye sayısını görüntüleyin. print(millis()/1000); )

Gördüğünüz gibi, kod neredeyse aynı.

Sembolünüzü nasıl eklersiniz?

Bu ekranlarla ilgili sorun, Kiril alfabesi ve semboller için destek olmamasıdır. Örneğin, yansıtabilmesi için ekrana bir karakter yüklemeniz gerekir. Bunu yapmak için, ekran en fazla 7 karakterinizi oluşturmanıza izin verir. Bir tablo hayal edin:

0 0 0 1 0
0 0 0 0 1
1 1 0 0 1
0 0 0 0 1
1 1 0 0 1
0 0 0 0 1
0 0 0 1 0
0 0 0 0 0

0 ise - orada hiçbir şey yok, 1 ise - bu gölgeli bir alandır. Yukarıdaki örnekte "gülen surat" sembolünün oluşumunu görebilirsiniz. Arduino'da örnek bir program kullanarak şöyle görünecektir:

#Dahil etmek #Dahil etmek // Gerekli kitaplığı ekleyin // Gülümseme sembolü bit maskesi bayt gülümseme = ( B00010, B00001, B11001, B00001, B11001, B00001, B00010, ); LiquidCrystal lcd(7, 6, 5, 4, 3, 2); // (RS, E, DB4, DB5, DB6, DB7) void setup()( lcd.begin(16, 2); // Ekran boyutunu ayarla lcd.createChar(1, smile); // Karakter 1 lcd oluştur. setCursor(0, 0); // İmleci 1. satırın başına getirin lcd.print("\1"); // Gülen yüzü göster (karakter numarası 1) - "\1" ) void loop()( )

Gördüğünüz gibi, bit maskesi tabloyla aynı şekilde oluşturuldu. Oluşturulduktan sonra, ekrana bir değişken olarak çıkarılabilir. Hafızada sadece 7 karakterin saklanabileceğini unutmayın. Prensip olarak, bu yeterlidir. Örneğin, derece sembolünü göstermek istiyorsanız.

Ekranın çalışmayabileceği sorunlar

Ekranın çalışmadığı zamanlar vardır. Örneğin, açılır, ancak karakterleri göstermez. Veya hiç açılmıyor. İlk önce, kişileri doğru şekilde bağlayıp bağlamadığınıza bakın. LCD 1202'yi I2C olmadan Arduino'ya bağladıysanız, kabloların dolaşması çok kolaydır, bu da ekranın yanlış çalışmasına neden olabilir. Ayrıca, minimum kontrastta LCD 1602'nin açık olup olmadığı bile görülemeyeceğinden, ekran kontrastının artırıldığından da emin olmalısınız. Bu işe yaramazsa, sorun kontakların lehimlenmesinde olabilir, bu I2C modülünü kullanırken olur. Ayrıca, ekranın çalışmamasının yaygın bir nedeni, I2C adresinin yanlış ayarlanmasıdır. Gerçek şu ki, birçok üretici var ve farklı bir adres belirleyebiliyorlar, burada düzeltmeniz gerekiyor:

LiquidCrystal_I2C lcd(0x27,16,2);

Parantez içinde iki değer görebilirsiniz, 0x27 ve 16.2 (16, 2 ekran boyutudur ve 0x27 sadece I2C adresidir). Bu değerler yerine 0x37 veya 0x3F koymayı deneyebilirsiniz. Bir diğer sebep ise LCD 1602'nin hatalı olması. Arduino için neredeyse her şeyin Çin'de yapıldığını düşünürsek, satın alınan ürünün evlilik olmadığından %100 emin olamazsınız.

LCD 1602'nin Artıları ve Eksileri

LCD 1602 ekranın artılarını ve eksilerini düşünün.

  • Fiyat. Bu modül Çin mağazalarında çok uygun fiyata satın alınabilir. Fiyat 200-300 ruble. Bazen bir I2C modülü ile birlikte satılır.
  • Bağlanması kolay. Muhtemelen bugünlerde kimse bir LCD 1602'yi I2C'siz bağlamıyor. Ve bu modül ile bağlantı sadece 4 pin alır, kablo "ağları" olmayacaktır.
  • Programlama. Hazır kütüphaneler sayesinde bu modül ile çalışmak kolaydır, tüm fonksiyonlar zaten kayıtlıdır. Ve gerekirse, karakterinizi eklemek sadece birkaç dakikanızı alır.
  • Binlerce radyo amatörünün kullanımı sırasında, büyük eksiler tanımlanmadı, yalnızca Çin ekran seçenekleri esas olarak kullanıldığı için evlilik satın alma durumları var.

Bu makale, 1602'nin Arduino'ya nasıl bağlanacağını ele aldı ve ayrıca bu ekranla çalışmak için örnek programlar sağladı. Gerçekten kategorisinin en iyilerinden biri, binlerce radyo amatörünün projeleri için seçmesi boşuna değil!