Karakter LCD Kullanımı
LCD(Liquid Crystal Display); Sıvı Kristal Ekran anlamına gelir. Gömülü sistem uygulamalarında sistemin çeşitli parametrelerini ve durumlarını görüntülemek için kullanılır. Karakter LCD ekranlar, birçok elektronik cihazda temel bir bileşen olup, alfanümerik karakterleri ve sembolleri görüntülemek için basit ve etkili bir yol sunar. Bir karakter LCD ekranın nasıl çalıştığını anlamak, sıvı kristal ekranların arkasındaki teknolojiyi, kontrol mekanizmalarını ve karakterlerin oluşturulma ve görüntülenme şeklini incelemeyi içerir.
Karakter LCD Ekran Nedir?
Karakter LCD ekran; harfleri, sayıları ve sembolleri sabit bir ızgara biçiminde göstermek için özel olarak tasarlanmış bir sıvı kristal ekran türüdür. Rastgele görüntüleri piksel piksel görüntüleyebilen grafik LCD'lerin aksine, karakter LCD'ler satır ve sütunlar halinde düzenlenmiş sınırlı sayıda karakter görüntüler. Karakter LCD'ler birçok farklı boyutta mevcuttur. Örneğin 8x1, 8x2, 16x1, 16x2, 16x4, 20x2, 20x4 gibi. 16x2 LCD, her satırında 16 karakter bulunan 2 satıra sahiptir. Her karakter, genellikle 5x8 noktalardan oluşan bir piksel matrisi içinde oluşturulur. Aşağıdaki resimdeki gibi:

Karakter LCD'nin özünde sıvı kristal teknolojisi yer alır. LCD, sıvı kristallerin ışık modülasyon özelliklerini polarize filtrelerle birleştirerek ışığın geçişini kontrol eden ve görünür görüntüler oluşturan Sıvı Kristal Ekran anlamına gelir. Sıvı kristaller kendileri ışık yaymazlar, ancak arka ışıktan veya reflektörden gelen ışığı işlerler.
Ekran; sıvı kristal katmanın arasına yerleştirilmiş iki polarize cam katmandan oluşur. Elektrik alanı uygulandığında sıvı kristallerin yönelimi değişir ve bu da içinden geçen ışığın polarizasyonunu etkiler. Bu değişiklik, ışığın ikinci polarizatörden geçmesini engeller veya geçmesine izin verir. Bu da ekranda koyu veya açık pikseller oluşturur. Karakterleri oluşturan pikseller, sıvı kristal tabakasının belirli bölümlerine seçici olarak voltaj uygulanarak kontrol edilir. Voltaj olmadan kristaller polarize ışığı döndürerek ikinci polarizörden geçmesine izin verir ve pikselin parlak görünmesini sağlar. Voltaj uygulandığında ise kristaller bükülerek ışığı engeller ve pikselin koyu görünmesine neden olur. Bu kontrast, ekrandaki görünür karakterleri oluşturur. Bu prensip, karakter LCD ekranların nasıl çalıştığının temelini oluşturur.
Karakter LCD Ekranının Kontrol Çipi Hitachi HD44780
Karakter LCD ekranının çalışmasını sağlayan temel bileşenlerden biri, genellikle Hitachi HD44780 veya uyumlu varyantları olan dâhili kontrol çipidir. Bu çip içerisinde önceden tanımlanmış karakter bitmaplerini depolayan yerleşik bir font tablosuna sahip bir karakter üreteci ROM bulunur. Arduino veya başka bir mikro denetleyiciden komut aldığında her karakter hücresindeki hangi piksellerin etkinleştirileceğini kontrol eder. Bu çip aynı zamanda ekranın zamanlamasını ve yenilenmesini de yönetir. LCD çipi, piksel durumlarını güncelleyerek sabit bir görüntü sağlamak için satırları ve sütunları tarayarak ekranı sürekli olarak yeniler.
Karakter LCD'lerde yer alan bu çip içerisinde, yerleşik karakterlerin yanı sıra, özel karakterler oluşturmasına olanak tanıyan CGRAM(Karakter Üreteci RAM) bulunmaktadır. Kullanıcılar CGRAM'a özel bitmap'ler yükleyebilir ve daha sonra bu karakterleri ekranda görüntüleyebilirler. CGRAM genellikle en fazla 8 adet özel karakter tutabilir. Her özel karakter, 5×8 piksel matrisine karşılık gelen 8 baytlık bir desenle tanımlanır.
Hitachi HD44780 Çipli 16x2 Karakter LCD Ekranın Pin Yapısı

LCD 16x2, her biri 16 karakter alabilen, 2 satıra sahip, 8 veri pini (D0-D7) ve 3 kontrol pini (RS, RW, EN) bulunan 16 pinli bir cihazdır. Çok nadir olarak bazı ekranlarda ise arka aydınlatma ışığı bulunmadığından 14 adet pin yer almaktadır. LCD 16x2, 4-bit modunda veya 8-bit modunda kullanılabilir. Kontrol amaçlı kullanılabilen 8 adet data hattı ve 3 adet kontrol hattı bulunmaktadır.
Pin-1 : Vss/GND (Toprak).
Pin-2 : Vcc(+5 volt).
Pin-3 : V0 veya VEE pinidir. Bu pin, ekranın kontrastını ayarlamak için kullanılır. Bu pindeki voltaj, ekranın kontrastını belirler. Voltajı düşürdükçe kontrast artar. Kontrast ayarı için 4,7 kΩ ya da 10 kΩ 'luk bir potansiyometre bağlayabilir veya maksimum kontrast elde etmek için bu pini toprağa bağlayabiliriz.
Pin-4 : RS(Register Select) pinidir. LCD’nin komut register’ının veya veri register’ının seçimini yapmak için kullanılır. RS pininin 0 - 1 durumuna göre D0 – D7 bacaklarındaki bilgiler veri ya da komut olarak kabul edilerek veri ya da komut register’ına gönderilir.
RS = 0 : D0 - D7 pinlerindeki veriler komut olarak kabul edilir.
RS = 1 : D0 - D7 pinlerindeki veriler veri olarak kabul edilir.
Pin-5 : RW pinidir. Okuma veya yazma modunu seçer. Genellikle GND’ye bağlanır.
RW = 0: LCD’ye veri yaz.
RW = 1: LCD'den veri oku.
Pin-6 : E(Enable) pinidir. LCD'ye veri hatlarını (D0-D7) ne zaman okuyacağını belirtmek için kullanılır. LCD'nin veri pinlerindeki verileri kabul etmesini sağlamak için, bu pin kısa süreliğine HIGH'dan LOW'a geçirilir(minimum 450 ns). Bu işlem, LCD'ye, verileri belleğine kaydetmesini söyler.
Pin-7:14 : D0 - D7 veri pinleridir. LCD’ye veri ya da komut göndermek için veya bu LCD’den veri okumak için kullanılır bu pinler kullanılır. 4 veya 8 bit modda kullanılabilir.
Pin-15:16 : LED + ve LED – ya da Anot ve Katot pinleridir. Sıvı Kristal Ekranlar, yedi segmentli ekranlar gibi kendi ışığına sahip değildir. Bu nedenle, modülde bir arka aydınlatma LED'i bulunur ve 5 volt ile çalışır. Bu LED'e güç, bu pinler aracılığıyla sağlanır. LED+ pinine 5 volt 220 Ω’luk bir direnç üzerinden verilebilir. Daha küçük dirençler arka ışığı daha parlak hale getirir.
16x2 Karakter LCD Ekranın Başlangıç Ayarları
Bir LCD'yi herhangi bir mikrodenetleyiciye bağladığımızda öncelikle LCD’yi komut modundayken, başlatmamız ve yapılandırmamız gerekmektedir. Ardından veri moduna aldıktan sonra veri(karakter) göndermeye başlayabiliriz. LCD’yi yapılandırmak için kullanacağımız komutlar bu klasör içerisindeki “LCD Kütüphanesiz Kontrol.docx” dosyasında detaylı olarak anlatılmıştır.
16x2 LCD’nin Karakter Kodları
LCD'ye veri modunda bir karakter yazdırırken, o karakterin kodunu göndermemiz gerekiyor. Örneğin, LCD'ye 'E' karakterini yazdırmak istiyorsak; bin: 01000101 veya hex: 0x48 sayısını göndermeliyiz. Hangi kodun hangi karakteri yazdırdığı LCD’nin datasheet’inde tablo halinde yer almaktadır. Bunlardan bazıları alttaki tabloda yer almaktadır:


16x2 Karakter LCD Ekranın Veri Yolu(Arayüz) Modları
LCD, 4 bitlik ya da 8 bitlik veri yolu ile kullanılabilir. 2 adet 4 bitlik işlemle veya bir adet 8 bitlik işlemle LCD’ye veri göndermek mümkündür:
8 bitlik modda; D0 - D7 veri yolu hattı kullanılır.
4 bitlik modda ise; D4 - D7 veri yolu hattı kullanılır ve D0 – D3 veri yolu hatları devre dışı bırakılır. Diğer pin bağlantıları 8 bitlik modla aynıdır. 4 bitlik modda, 8 bitlik veri ya da komut LCD’ye 2 kez 4 bit veri şeklinde gönderilir. Yani 4 bitlik veriler iki kez aktarılır. Bu aktarım sırasında, dört yüksek sıra biti (8 bitlik işlem için D4 - D7) dört düşük sıra bitinden (8 bitlik işlem için D0 - D3) önce aktarılır. Dört yüksek sıra bitine, üst nibble, 4 düşük sıra bitine alt nibble denir.
LCD’ye güç verildiğinde otomatik olarak 8 bit modunda açılır. LCD'yi 4 bit modunda kullanmak için; komut modunda LCD başlatma ve yapılandırma komutları göndermemiz gerekir. LCD yapılandırıldıktan sonra veri modunda gerekli verileri gönderebiliriz.
16x2 Karakter LCD Ekranında Display Data RAM (DDRAM)
HD44780’de DDRAM, 8 bitlik karakter kodlarıyla temsil edilen görüntü verilerini depolar. DDRAM kapasitesi 80 karakterdir. DDRAM adresi (ADD), adres sayacında (AC) onaltılık olarak ayarlanır.
1 satırlık LCD’de; 80 karakterlik kapasite bulunur ve hücrelerin DDRAM’deki adresleri aşağıdaki şekildeki gibidir:

2 satırlık LCD’de; her satırda 40 karakterlik kapasite bulunur ve hücrelerin DDRAM’deki adresleri aşağıdaki şekildeki gibidir:

16x2 karakter LCD için DDRAM’de her satırda 40 karakter kapasite bulunmasına rağmen, LCD ekran her satırda 16 karakter gösterecek şekilde tasarlanmıştır. Örneğin; Arduino ile uygulama yaparken herhangi bir harfi 1. satırda soldan sağa doğru kaydırmaya başlarsak, 16. Sütuna kadar görebiliriz. 16. Sütundan sonra karakter 40. Sütuna kadar kaymaya devam eder ama biz bunu ekranda göremeyiz. 40. Sütundan sonra karakter 2. Satıra geçer ve soldan sağa doğru kaymaya devam eder. İlk satır bitiş adresi ve ikinci satır başlangıç adresinin ardışık olmadığını unutmayın.

Karakter LCD Ekranın Arduino İle Kullanımı
Arduino – 16x2 Karakter LCD Bağlantı Şeması
Hitachi uyumlu LCD'lerin 4 bit veya 8 bit modda kullanabileceğimizden bahsetmiştik. 4 bit modu Arduino'da 7 G/Ç pini gerektirirken, 8 bit modu 11 pin gerektirir. Ekranda metin görüntülemek için neredeyse her şey 4 bit modunda yapılabilir. Arduino IDE’si içerisinde dahili olarak gelen <LiquidCrystal.h> kütüphanesi LCD’yi 4 bit ve 8 bit modunda çalıştırabilir. Üstelik bu kütüphane ile LCD’nin başlatılması ve yapılandırılması basit bir şekilde yapılabilmektedir. Fakat burada dikkat edilmesi gereken bir nokta vardır:
Arduino’da kullanılan bu kütüphane, LCD ekranla SPI üzerinden iletişim kurduğundan, Arduino Uno’da SPI iletişim pinleri olan 11. ve 12. pinler kullanılmıştır. Bu durum Arduino kartına göre değişiklik gösterebilir.
Arduino – 16x2 Karakter LCD bağlantı şeması aşağıda gösterilmiştir:

Arduino Karakter LCD Komutları
Karakter LCD komutlarını kullanmadan önce programa <LiquidCrystal.h> kütüphanesinin eklenmesi gerekmektedir. Bu kütüphane, Arduino IDE ile önceden yüklenmiş olarak geliyor.
Arduino’da kullanılan bu kütüphane, LCD ekranla SPI üzerinden iletişim kurduğundan, Arduino Uno’da SPI iletişim pinleri olan 11. ve 12. pinler kullanılmıştır. Bu durum Arduino kartına göre değişiklik gösterebilir.
LiquidCrystal lcd();
Bu komut LiquidCrystal türünde lcd isminde bir nesne oluşturup LCD ile iletişim kuracağımız pinleri belirlememizi sağlar. Aynı zamanda LCD’yi 4 bit modunda mı yoksa 8 bit modunda mı kullanacağımızı belirleriz.
rw = GND’ye ya da herhangi bir pine bağlanabilir. GND’ye bağlandıysa komuttan çıkarılır. Genelde GND’ye bağlanır.
rs = pin12, e = pin11, d4 = pin5, d5 = pin4, d6 = pin3, d7 = pin2.
4 bit modda kullanmak için:
LiquidCrystal lcd(rs, rw, e, d4, d5, d6, d7); //rw pini GND’ye götürülmediyse.
LiquidCrystal lcd(rs, e, d4, d5, d6, d7); //rw pini GND’ye götürüldüyse.
8 bit modda kullanmak için:
LiquidCrystal lcd(rs,rw,e,d0,d1,d2,d3,d4,d5,d6,d7); //rw pini GND’ye götürülmediyse.
LiquidCrystal lcd(rs,e,d0,d1,d2,d3,d4,d5,d6,d7); //rw pini GND’ye götürüldüyse.
lcd.begin(sütun, satır, charsize);
LCD ekranın ara yüzünü başlatır. Üzerinde çalışacağımız LCD ekranın boyutlarını ve isteğe bağlı olarak ekranın karakter başına sahip olduğu nokta sayısını(charsize) belirtmek için kullanılır. LiquidCrystal(); yapıcı fonksiyonu ile nesnemizi oluşturduktan sonra kullanılması gerekir.
sütun : Ekranın sahip olduğu sütun sayısı.
satır : Ekranın sahip olduğu satır sayısı.
charsize(isteğe bağlı): Ekranın karakter başına sahip olduğu nokta sayısı:
5x8 için: LCD_5x8DOTS. 5x10 için: LCD_5x10DOTS. Varsayılan: LCD_5x8DOTS.
lcd.clear();
LCD ekranı temizler ve imleci sol üst köşeye konumlandırır.
lcd.home();
İmleci LCD'nin sol üst köşesine yani 0. sütun ve 0. satıra konumlandırır. LCD ekrana sonraki metni aktarırken bu konumu kullanır. Eğer o an ekranda başka yazı varsa ve temizlenmediyse onun üzerine yazar.
lcd.setCursor(sütun no, satır no);
LCD’nin imlecini, belirtilen satır ve sütun numarasına konumlandırır. Sütun ve satır koordinatları sıfırdan başlar (sırasıyla 0-15 ve 0-1).
sütun no : İmlecin konumlandırılacağı sütun numarasıdır. 0-15 arasındadır.
satır no : İmlecin konumlandırılacağı satır numarasıdır. 0 – 1 arasındadır.
lcd.write(karakter);
LCD'ye tek bir karakter yazdırır. Örneğin; lcd.write(‘M’); veya lcd.write(karakter);
lcd.print(data, BASE);
LCD’ye metin yazdırmak için kullanılır. İsteğe bağlı olarak sayıların yazdırılacağı taban(BASE) kullanılabilir. Harfleri ve sözcükleri yazdırmak için, metnin etrafına tırnak işaretleri (” “) yerleştirin. Örneğin; lcd.print(“Merhaba”); . Sayıları yazdırmak için tırnak işaretleri gerekmez. Örneğin; lcd.print(1234); veya lcd.print(3.14); gibi.
data : Yazdırılacak verilerdir. char, byte, int, long veya string türünde olabilir.
BASE : İsteğe bağlı olarak sayıların yazdırılacağı tabanı belirtir. 2’li taban için: BIN. 10’luk taban için: DEC. 8‘lik taban için: OCT. 16’lık taban için: HEX.
Örnek:
lcd.print (100, DEC) : “100” yazar.
lcd.print (100, BIN) : “1100100” yazar.
lcd.print (100, HEX) : “64” yazar.
lcd.print (100, OCT) : “144” yazar.
NOT: İmlecin(kürsor) yerini belirtmeden ya da LCD ekranı temizlemeden Loop() döngüsü içerisinde sürekli olarak LCD ekrana karakter veya yazı gönderirsek, gönderdiğimiz veri sürekli ekrana yazılarak ekran doldurulur, veriler birbirine karışır.
lcd.cursor();
LCD imlecini açar. İmleç alt çizgi (“_”) şeklindedir. Bir sonraki yazma işlemi buradan başlar.
lcd.noCursor();
Alt çizgi (“_”) şeklindeki LCD imlecini kapatır.
lcd.blink();
LCD imlecini açar. Fakat bu sefer imleç blok(█) şeklindedir. İmlecin bulunduğu hücre yanıp sönme işlemi ile belirginleştirilir. Bir sonraki yazma işlemi buradan başlar.
lcd.noBlink();
Blok (█) şeklindeki LCD imlecini kapatır.
lcd.noDisplay();
LCD ekranı kapatır. LCD’ye gönderilen verilerin ve imlecin silmeden görünürlüğünü kaldırmak için kullanılır.
lcd.display();
lcd.noDisplay(); fonksiyonu kullanılarak görünürlüğü kaldırılan verilerin ve imlecin tekrar görünür olmasını sağlar.
lcd.scrollDisplayLeft();
Ekranda bulunan verileri ve imleci bir hücre sola kaydırır.
lcd.scrollDisplayRight();
Ekranda bulunan verileri ve imleci bir hücre sağa kaydırır.
lcd.leftToRight();
LCD ekrana yazılan metnin yönünün soldan sağa doğru olmasını sağlar. Metin yönü varsayılan olarak zaten bu şekildedir. Örneğin “ARDUINO” yazısı LCD’ye gönderildiğinde, yazı ‘A’ harfinin bulunduğu hücreden sola doğru yazıldığı için ekranda “ARDUINO” olarak görünür.
lcd.rightToLeft();
LCD ekrana yazılan metnin yönünün, sağdan sola doğru olmasını sağlar. Örneğin “ARDUINO” yazısı LCD’ye gönderildiğinde, yazı ‘A’ harfinin bulunduğu hücreden sağa doğru yazıldığı için ekranda “ONIUDRA” şeklinde görünür. Burada dikkat edilmesi gereken nokta: Yazının başlangıç noktası ‘A’ harfinin bulunduğu hücre olduğundan ve sağdan sola yazıldığından, imlecin yerini 7. hücrede(hücre no:6) belirlemek gerekir. Yoksa yazının tamamı ekranda görünmez.
lcd.autoscroll();
Bu fonksiyon LCD'nin otomatik kaydırma özelliğini açar. LCD ekranındaki verinin, leftToRight(); veya rightToLeft(); ile ayarlanan metin yönünde otomatik olarak kaydırılmasını sağlar. Kayma işlemi karakter sayısı kadar hücre olur. Mevcut metin yönü soldan sağa ise (varsayılan budur), ekran sola kaydırılır. Mevcut yön sağdan sola ise, ekran sağa kaydırılır.
Örneğin; aşağıdaki resimde görüldüğü gibi 3 karakterlik metin her seferinde 3 hücre sola kayar:
lcd.noAutoscroll();
LCD'nin otomatik kaydırmasını kapatır.
16x2 Karakter LCD’nin 4-bit Mod Yapılandırması

Bu yöntemde LCD’nin 3 kontrol pini (RS, RW, EN) ve D4 - D7 data pinleri mikro denetleyiciye bağlanır. 4 bit modunda, veri/komut 4 bit (nibble) formatında gönderilir. Bunu yapmak için önce yüksek 4 bit, ardından düşük 4 bit veri/komut gönderilir.

DL: Ara yüz Veri uzunluğu
0 = 4 bit
1 = 8 bit
N: Görüntüleme satırı sayısı
0 = 1 satır
1 = 2 satır
F: Karakter Yazı Tipi
0 = 5x8 nokta
1 = 5x10 nokta
D1:D0 : Bu bitler 0 olarak ayarlanır.
D7:D6 : Bu bitler 0 olarak ayarlanır.
D5 : Bu bit 1 olarak ayarlanmalıdır.
LCD16x2’nin 4 bit modunu programlama:
LCD’ye güç verildikten sonra 15 ms bekleyin.
LCD'yi 4 bit modunda başlatmak için 0x02 komutunu gönderin.
LCD'yi 2 satır, 4 bit modunda ve 5x8 noktada yapılandırmak için 0x28 komutunu gönderin.
Herhangi bir “Ekran AÇIK” komutu gönderin(Örn: 0x0E, 0x0C).
0x06 komutunu gönderin (imleci artırın).
Artık LCD'yi başarıyla başlattık ve 4 bit modunda görüntülemek için veri almaya hazır.
0 comments:
Yorum Gönder