Arduino ile LCD Display Kullanmak

lcd wth ardu baglanti

Bu konuda alfanümerik bir LCD ekranın, Arduino’ya nasıl bağlanacağını ve nasıl kullanılacağını öğreneceğiz.

lcd wth ardu lcd

Ekran, LED arka ışığa sahiptir ve her satırda 16 karaktere kadar olan iki satırı görüntüleyebilir. Ekrandaki her karakterin dikdörtgenlerini ve her karakteri oluşturan pikselleri görebilirsiniz. Karakterler, bu dikdörtgenler içerisinde oluşur. 16×2 LCD, satır başına 16 karakter görüntüleyebileceği ve böyle 2 satır olduğu anlamına gelir. Bu LCD’de her karakter, kendisi için ayrılan özel dikdörtgen içerisinde 5×7 piksel matriste görüntülenir. Ekran sadece metin ve bazı sembolleri göstermesi için tasarlanmıştır.

Bir karakter LCD’sinde 5×8 veya 5×7 matrisinde bir karakter oluşturulduğunda. 5, sütun sayısını gösterirken, 7 yada 8 ise satır sayısını gösterir. Matrisin maksimum büyüklüğü 5×8’dir. 5×8 boyut matrisinden daha büyük karakter gösteremezsiniz. Normalde karakterleri 5×7 matrisinde görüntüleriz ve imleç için 8. sırayı bırakırız. Karakter görüntüleme için matrisin 8. sırasını kullanırsak, imleç için yer kalmayacaktır. Aşağıdaki resim 5×8 nokta vuruşlu piksel düzenlemesini göstermektedir.

lcd 5x7

Lcd 16×2 Pin çıkışları:
Tüm karakter lcdlerde aşağıdai pinler vardır.
8 adet data pini D0-D7
Vcc (Buraya +5 volt uygulayın)
Gnd (Bu pini toprağa (GND) bağlayacağız)
Rcs (Kayıtçı – Register- seçimi)
Rw (Oku – Yaz)
En (Enable)
V0 (Lcd kontrastını ayarlar – potansiyometre vasıtası ile)
16×2 lcd pin şeması aşağıda gösterilmiştir.

lcd_pinouts

Yukarıdaki resim, LCD’den çıkan pinleri göstermektedir. Neredeyse tüm karakter lcd’leri aynı pinlerden oluşur. Toplam pin sayısı 14’e eşit olan Lcd’ler, arka ışık kontrol seçeneğine sahip değildir. Toplam 16 adet pin sayısında 2 adet ekstra A ve K pinleri (led+ ve led-) bulunur. A anot ve K katod anlamına gelir, bu pinleri lcd’nin arka ışığını kontrol etmek için kullanırız.

Karakter lcd denetleyicisi – HD44780

LCD’ler karakter gösterimi yapabilmeleri için bir denetleyiciye sahiptir. Karakteri LCD ekranında göstermek için aslında biz, bu kontrol cihazıyla konuşuyoruz. Burada bahsedeceğimiz denetleyici HD44780 denetleyicisidir ve aynı zamanda Arduino’da kullanacağımız LiquidCrystal kütüphanesi de bu tip denetleyici için yazılmıştır ancak bu tip LCD’lerde aşağı yukarı bütün denetleyici özellikleri birbirleri ile benzerdir, bu denetleyicilere bir örnek olarak st7066 denetleyicisini de söyleyebiliriz.

Herhangi bir veri göndermeden önce HD44780 uygun şekilde kullanılmalı ve başlatılmalıdır. HD44780, LCD’de karakter gösterimi için başlatılmış ve manipüle edilmiş bazı kayıtçılara sahiptir. Bu kayıtçılar karakter lcd pinleri ile seçilir.

Lcd Rs (Kayıtçı seçimi) Pini – (Register Select)

Kayıtçı seçimi, HD44780 kontrol cihazı kayıtçılarını seçer. Komut ve Veri kayıtçısı arasında geçiş yapar.
Komut Kayıtçısı (Rs=0)
LCD’ye komutlar gönderdiğimizde bu komutlar, Komut kayıtçısına gider ve işlenir. Komutlar ve tam açıklamaları, aşağıdaki resimde verilmiştir. Rs pini = 0 olduğunda, komut kayıtçısıı seçilmiş demektir ve buradaki komutları işletebilriz.
Veri kayıtçısı (Rs=1)
Veriyi lcd’ye gönderdiğimizde veri kayıt defterine gider ve işlenir. Rs pini= 1 olduğunda, veri kayıtçısı seçilmiş demektir.

Lcd RW (Okuma / Yazma) Pini – (Read / Write)

Rw pini, HD44780 lcd kontrolörünün veri ve komut kayıtçılarına veri okumak veya yazmak için kullanılır. Rw = 1 olduğunda lcd’den veri okuyabiliriz. Rw = 0 olduğunda, lcd’ye yazabiliriz.

Lcd En (Enable) Pin

Rs kayıtçısını (Command and Data) seçip, Rw (read – write) ayarını yaptığımızda ve ham değeri 8 veri hattına (D0-D7) yerleştirdiğimizde, artık talimatı yerine getirme zamanıdır. Talimatla demek istediğim, 8-bit veri veya 8-bit komutun LCD veri hatlarında mevcut bulunması durumudur. Veri hatlarında bulunan en son mevcut veriyi / komutu, ilgili kayıtçıya göndermek için bu enable pinini kullanırız. Genellikle En pini = 0 kalır ve talimatı uygulamak istediğimizde birkaç milisaniye için En pini = 1 yapıyoruz. Bundan sonra tekrar En pini = 0 yapıyoruz.

Kontrast ayarlı pimin LCD V0’ı

LCD ekran netliğini ayarlamak için bu pini kullanırız. Potansiyometre gibi değişken direnç kullanmak karakter kontrastını keskinleştirir. Potansiyometrenin orta ucunu bu pine bağlayarak, Lcd kontrastını ayarlamak için potansiyometre düğmesini ileri ve geri çeviririz.
NOT: Lcd’ye bir karakter göstermek için tasarlandığından lcd’ye integer, float, long, double tip veri gönderemiyoruz. Yalnızca HD44780 denetleyicisi tarafından desteklenen karakterleri gönderebiliyoruz. LCD’de hangi karakterleri gösterebileceğimizi öğrenmek için HD44780 bakın. LCD üzerindeki 8 veri pini, karakterin yalnızca Ascii 8 bit kodunu lcd’ye taşır. Verilerimizi, karakter tipi dizisinde dönüştürerek tek tek lcd’ye gönderebiliriz. Lcd 8 bit veya 4 bit modunda kullanılarak, veriler gönderilebilir. 4 bit modu kullanılıyorsa, tam sekiz bitlik bir aktarımın tamamlanması için iki veri verisi (İlk önce yüksek dört bit ve sonra düşük dört bit) gönderilir. 8 bit modu en iyi, uygulamada hız gerektiğinde ve en az on G / Ç pini bulunduğunda kullanılır. 4 bit modu en az yedi bit gerektirir. 4 bit modunda, yalnızca son 4 veri pini (4-7) kullanılır.

İşlevleri ile birlikte standart Lcd Komutları aşağıda açıklanmıştır.

Bu kısma kadar öğrendiğimiz teorik bilgileri nasıl kullanacağımıza gelirsek, Arduino da bu tip LCD ekranlar için hazırlanmış bir kütüphane mevcut. Bütün bu ayarlamaları teker teker yapmak yerine, kütüphanedeki hazır fonksiyonları kullanarak istediğimizi yapabiliyoruz.

Breadboard Düzeni

LCD ekran, tümü dijital çıkış olacak şekilde ayarlanmış altı Arduino pinine ihtiyaç duyar. Ayrıca 5V ve GND bağlantılarının yapılamsına da ihtiyaç var.

lcd wth ardu baglanti2

Yapılması gereken bağlantı yukarıdaki resimde görülmektedir. LCD ekranı breadboard’un üstüne pinleri rahatça görebileceğimiz sırayla koymak, çok fazla saymadan pinlerini tanımlamaya yardımcı olur. Potansiyometrenin orta bacağını ekranın 3 no’lu pinine bağlayan uzun sarı kabloyu bağlamayı unutmayın. ‘Pot’, ekranın kontrastını kontrol etmek için kullanılır. Ekranınızın pinleri olmadan satın almış iseniz, lehim yapmak için bir sonraki bölümdeki talimatları izleyin.

Ekrana Pimleri Lehimleme

Ekranın 16 pine ihtiyacı var, bu nedenle doğru sayıda pin kesmeyi unutmayın. Ardından 16 pini, LCD ekrandaki lehim yuvalarına yerleştirin ve bir ucundan başlayarak pimlerin her birini lehimleyin. Pinlerin uzun ucunu, pinlerin düz tutulması için bread boarda koymak daha kolay olabilir.

lcd LCD LEHİM

Bunu yapmazsanız, ilk önce bir pini lehimleyin ve ardından pimleri düz bir şekile getirin, herhangi bir ayar yapmadan önce lehimi pimin üzerinde eritin yoksa lehim kırılabilir ve lehimleme noktasına pakete zarar verebilir.

Programda kullanılan LiquidCrystal kütüphanesi, Arduino IDE kütüphanesi içerisinde hazır olarak bulunuyor, içerisinde bir çok örnek program da var. Kütüphaneye ait orjinal fonksiyon açıklamalarına buradan ulaşılabilir. Fonksiyonların açıklamaları aşağıdaki gibidir;

  • LiquidCrystal(rs, enable, d4, d5, d6, d7) = LCD için pin tanımlamalarını yapıyoruz, örneğin LiquidCrystal lcd(7,8,9,10,11,12); ifadesi ile LCD rs,enable,d4,d5,d6,d7 pinlerni Arduino’da hangi pinlere bağlayacağımızı belirtiriz.
  • lcd.begin(satır_no, sütun_no) = LCD ekranı hazır hale getiri ve ekranın boyutlarını (genişlik ve yükseklik) belirtir. lcd.begin(), diğer LCD komutlarını kullanmaya başlamadan önce çağırılmalı ve LCD kullanıma hazır hale getirilmelidir. Örneğin lcd.begin(16,1); ifadesi ile LCD ekranın 1. satırında (alt kısmı) 16 karakter gösterecek kadar yer ayırırız.
  • lcd.clear() = Ekrandaki herşeyi siler ve imleci üst satırın en başındaki karakter bloğuna getirir.
  • lcd.home() = İmleci LCD’nin sol üst kısmına getirir.
  • lcd.setCursor(sütun_numarası, satır_numarası) = LCD imlecini belirttiğimiz satır ve sütun bloğuna getirir; yani, LCD’ye yazılacak olan sonraki metnin görüntüleneceği yeri ayarlar. örneğin lcd.setCursor(7,0); ifadesi ile imleci 7. satır ve 0. sütuna konumlandırır.
  • lcd.write(data) veya lcd.print(data, BASE) = LCD’ye sadece bir tane karakter yazar.  LCD’ye veri veya text yazdırır. Örneğin aşağıdaki komut LCD ekranına hello world yazdırır,

lcd.print(“hello, world!”)

data= yazdırılacak olan veri (char, byte, int, long, or string)

BASE= Bu parametre data ile bildirilen değişkenin içeriğindeki sayının gösterileceği formatı belirtir.  BASE parametresi ikilik taban için BIN, onluk taban için DEC, sekizlik taban için OCT ve on altılık taban için HEX değerleri ile kullanılır.

  • lcd.cursor()= LCD imlecini görüntüler. Sonraki karakterin yazılacağı konumda bir alt çizgi (satır) belirir.
  • lcd.noCursor()= LCD imlecini gizler.
  • lcd.blink()= LCD imlecini yanıp sönen şekilde görüntüler. 
  • lcd.noBlink ()=  fonksiyonu ise imlecin yanıp sönerek belirginleştirilmesi işlemini devre dışı bırakır.
  • lcd.display()= lcd.noDisplay() ile kapatılmış olan LCD ekranı tekrar geri açar. Bu komut ile ekrandaki metin ve imleç tekrar ekrandaa görülebilecektir.
  • lcd.noDisplay()= LCD ekranı kapatır. Ekran üzerinde gösterilen metin kaybolmaz, sadece LCD ekran kapanır. Ekran geri açıldğında metinler de ekranda tekrar belirir.
  • lcd.scrollDisplayLeft()= Fonksiyonu ekranda bulunan verileri sola kaydırmak için kullanılır. Bu fonksiyon her çağrıldığnda ekranda bulundan verilerin tümünün birer hücre sola kaydırılmasını sağlarlar. 
  • lcd.scrollDisplayRigth()= Fonksiyonu ekranda bulunan verileri sağa kaydırmak için kullanılır. Bu fonksiyon her çağrıldığında ekranda bulundan verilerin tümünün birer hücre sağa kaydırılmasını sağlarlar. 
  • lcd.autoscroll()= LCD’ ekranında yazan yazıların otomatik olarak sağa veya sola doğru kaydırılmasını açar. Bu, ekrana çıkan her karakterin önceki karakterleri bir boşluk öteye itmesine neden olur. Geçerli metin yönü soldan sağa ise (varsayılan), ekran sola kayar. Geçerli yön sağdan sola ise, ekran sağa kayar. 
  • lcd.leftToRight()= LCD’ye yazılan metnin yönünü varsayılan olarak soldan sağa doğru kayacak şekilde ayarlar. Bu, ekrana yazılan sonraki karakterlerin soldan sağa doğru kaydırılacağı anlamına gelir.
  • lcd.rightToLeft()= LCD’ye yazılan metnin yönünü sağdan sola doğru kayacak şekilde (varsayılan olarak soldan sağa doğrudur) ayarlar. Bu, ekrana yazılan sonraki karakterlerin soldan sağa doğru kaydırılacağı anlamına gelir.
  • lcd.noAutoscroll()= LCD’deki yazıların otomatik olarak kaydırılmasını kapatır.
  • lcd.createChar(num, data)= LCD’de kullanmak için özel bir karakter (glyph) oluşturmakçin kullanılır.  Sekiz adede kadar 5×8 piksel karakter desteklenir (0 ile 7 arasında numaralandırılmıştır). Her özel karakterin görünümü, her satır için bir tane olmak üzere sekiz baytlık bir diziyle belirtilir. Her baytın en az anlamlı beş biti, o satırdaki pikselleri belirler.  Örneğin; Ekranda Gülen yüz karakteri oluşturmak için aşağıdaki kodu kullanılabilir. Bu yöntem ile oluşturulan karakterler write() fonksiyonu ile birlikte kullanılır. 
#include <LiquidCrystal.h>

LiquidCrystal lcd(7, 8, 9, 10, 11, 12);

byte smiley[8] = {
  B00000,
  B10001,
  B00000,
  B00000,
  B10001,
  B01110,
  B00000,
};

void setup() {
  lcd.createChar(0, smiley);
  lcd.begin(16, 2); 
lcd.clear(); }
void loop()
{
lcd.write(byte(0)); // ekrana gülen yüz yazdırır
}
 

Arduino Kodu

Arduino IDE, kullanacağımız LCD kütüphanesini kullanma örnekleri içermektedir. Bunu, Examples->Liquid Crystal->HelloWorld altındaki Dosya menüsünde bulabilirsiniz.

Bu örnekte kullandıklarımızdan farklı pinler kullanılıyor, bu nedenle aşağıdaki kod satırını bulun:

const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;

ve devremize uygun olması için aşağıdaki ile değiştirin:

const int rs = 7, en = 8, d4 = 9, d5 = 10, d6 = 11, d7 = 12;

Kodu Arduino kartınıza yükleyin; ekranda ‘merhaba, dünya’ mesajı ve ardından sıfırdan başlayıp yukarı doğru sayılan bir sayı göreceksiniz.

Programdaki ilk satır aşağıdaki gibidir:

#include <LiquidCrystal.h>

Bu Arduino’ya LiquidCrystal kütüphanesini kullanmak istediğimizi söyler. Sonra değiştirmek zorunda olduğumuz satıra geliriz. Bu, Arduino’nun hangi pinlerinin ekranın hangi pinlerine bağlanacağını tanımlar.

const int rs = 7, en = 8, d4 = 9, d5 = 10, d6 = 11, d7 = 12;
Bu argümanlar aşağıdaki gibidir:
Ekran Pin Adı          LCD Pin Numarası                Arduino Pin (bu örnekte)
RS                                           4                                                          7
E                                             6                                                          8
D4                                          11                                                        9
D5                                          12                                                       10
D6                                          13                                                       11
D7                                          14                                                       12

Bu kodu yükledikten sonra, arka ışığın yandığından emin olun ve potansiyometreyi tam olarak metin mesajını görene kadar sağa/sola çevirerek ayarlayın.

‘Setup’ fonksiyonunda iki komutumuz var:

lcd.begin(16, 2);
lcd.print(“hello, world!”);

İlki, Liquid Crystal kütüphanesine ekranın kaç tane sütun ve satır içerdiğini söyler. İkinci satır, ekranın ilk satırında gördüğümüz mesajı görüntüler.
‘Loop’ fonksiyonunda iki komutumuz vardır:

lcd.setCursor(0, 1);
lcd.print(millis()/1000);

İlki, imleç konumunu (sonraki metnin görüneceği yer) sütun 0 ve satır 1 olarak ayarlar. Hem sütun hem de satır numaraları 1 yerine 0’dan başlar.
İkinci kod ise Arduino’nun resetlenmesinden bu yana milisaniye sayısını gösterir.

ilk örneğimizi başarı ile yaptığımızı varsayıyorum.

Diğer örnekler için bu linkten faydalanabilirsiniz. LCD ekran pinlerinizi örneklerdeki pinlerle eşleştrmeyi unutmayın. Gerekiyorsa, örneklerde gösterilen devreleri kurun önce.

Umarım faydalı olmuştur.

Yorum bırakın