Başlarken
Bu 1-2. Rehber, en güncel olup özellikle 16x2 LCD hakkında ve LCD’nin tarihi hakkında neredeyse tüm kaynaklar toplanarak, araştırılarak hazırlanmış dev bir rehberdir. Öğreneceğiniz bilgiler ile bir yerde göreceğiniz LCD’nin nasıl çalıştığını anlayabilir ve sizde bunu yapabileceksiniz. İsterseniz hemen başlayalım. 🙂
LCD Nedir?
LCD, Liquid Crystal Display yani Sıvı Kristal Ekran elektrikle kutuplanan sıvının ışığı tek fazlı geçirmesi ve önüne eklenen bir kutuplanma filtresi ile gözle görülebilmesi ilkesine dayanan bir görüntü teknolojisidir.
LCD’lerde bulunan sıvı kristaller sıcaklığa ve madde yapısına göre termotropik ve liyotropik fazlarda bulunabilirler. Termotropik fazlı sıvı kristallerin bir alt grubu olan nematik likit kristallerin, kıvrık nematikler (twisted nematics - TN) adı verilen çeşidi uygulanan akımın gerilimine bağlı olarak düz konuma yani kıvrık olmayan nematikler haline gelir. Nematik sıvı kristaller, LCD’lerin yapılmasını mümkün kılan sıvı kristal fazıdır. LCD’lerin yapılabilmesi için ışık polarize edilebilmeli, sıvı kristaller polarize edilmiş ışığı geçirebilmeli, sıvı kristallerin molekül dizilimi elektrik akımı ile değiştirilebilmeli ve elektriği ileten bir yapıya sahip olunmalıdır.
LCD Yapısı ve Çalışma Prensibi
Evet gelelim LCD’nin yapısına ve çalışma prensibine ancak ondan önce size bir bilgi vererek başlayalım.
LCD, (Liquid Crystal Display) yani Sıvı Kristal Ekran’ın kısaltmasıdır. Temelde, bir görüntü oluşturmak için sıvı kristaller kullanan bir görüntüleme birimidir.
Bu özel tür kristale akım verildiğinde, ekranın arkasında arka ışık bloke ederek opak hale gelir. Bu sayede, Bu sayede piksel alanları diğerine göre daha karanlık hale gelecektir. Aşağıda ki fotoğrafı inceleyerek daha net anlayabilirsiniz.
Ekranın bir LED arka ışığı vardır ve her satırda 16 karakter olmak üzere iki satırda 32 ASCII karakteri görüntüleyebilir. LCD’lerin yapısı yukarıda ki resimde görüldüğü gibi farklı katmanlardan oluşmaktadır.
LCD katmanları bir araya geldiklerinde paneller meydana gelir. Panellerin çalışma mantığı en basit haliyle, üzerindeki özelleşmiş hücrelerin iyon katmanı tarafından şekillendirilmesi ve elektrik akımıyla görüntü oluşturulması şeklindedir.
Herhangi bir elektrik alan uygulanmadan önce sıvı kristaller kıvrık nematikler (TN) denilen 90 derece kıvrık olacak şekilde sıralanmışlardır. Böylece kristaller arasından geçen ışığın kutuplanmasının yön değiştirmesi sağlanır ve ekran gri görünür. Yeterince yüksek bir voltaj uygulandığında sıvı kristaller kıvrık olmayacak şekilde (untwisted) bükülmemiş sıralanırlar ve sıvı kristal katmanından geçişi sırasında ışığın kutuplanma yönü değişmez. Bu durumda ışık ikinci filtreye dik biçimde polarlanır ve katmanı geçemediği için o piksel siyah görünür.
16x2 LCD Ekranı Tanıyalım
Kullanacağımız ekran uygun bir fiyata alabileceğiniz 16×2 LCD ekran. Ekranın 16×2 olarak adlandırılması LCD’nin 2 satıra sahip olduğu ve satır başına 16 karakter görüntüleyebileceği anlamına geliyor. Yani ekran aynı anda 32 adet karakter görüntüleyebiliyor. Bunun dışında kaydırma yaparak 32 karakterden fazlasını da görüntüleyebilirsiniz.
16x2 LCD Ekranı Nasıl Çalışır?
- +5V ile çalışmaktadır.
- Back Lighting özelliğine sahiptir.
- LCD arka fon ışığı olmadan 4mA akım çekmektedir.
- Boyutları 80x36x9.4mm’dir.
- Çalışma sıcaklığı -20 ile +70 derece arasıdır.
LCD Pinleri
Günümüzde üretilen LCD panellerin çoğunda tek sıra halinde 16 pin bulunur. Bu pinlerden ilk 14 tanesi kontrol için son iki tanesi ise eğer varsa arka ışık için kullanılır. Bazı LCD’lerde kontrol için kullanılan 14 pin 2 adet 7’li sıra halinde de bulunabilir.
LCD’lerin büyük çoğunluğunda LED arka ışığı için yerleşik bir seri direnç bulunur. Direnç içermeyen bir LCD’niz varsa, 5V ile pin 15 arasında bir tane eklemeniz gerekir.
Seri direncin değerini hesaplamak için, veri sayfasından yani data sheet’inden maksimum arka ışık akımına ve tipik arka ışık voltajı düşüşüne bakabilir ve basit ohm yasasını kullanarak direnç değerini hesaplayabilirsiniz.
(Data Sheet) Veri sayfasını bulamıyorsanız, 220 ohm’luk bir direnç kullanmak güvenli olacaktır, ancak bu kadar yüksek bir değer arka ışığı biraz karartabilir.
PIN NO | İŞLEVİ | ADI |
---|---|---|
1 | Topraklama (0v) | Ground |
2 | Besleme Gerilimi (+5v) | VCC |
3 | Potansiyometre Giriş (LCD Konstrast Ayarını Yapmak İçin) | VO |
4 | Komut Register‘ı ve Veri Register‘ı arasında geçiş yapmak için ⭐ | Register Select |
5 | LCD’ye Okuma/Yazma işlemleri için kullanılır ⭐⭐ | Read/Write |
6 | Registera yazma işlemini sağlayan etkinleştirme pini | Enable |
7 | 8 Bitlik Veri Pinleri ⭐⭐⭐ | DB0 |
8 | 8 Bitlik Veri Pinleri ⭐⭐⭐ | DB1 |
9 | 8 Bitlik Veri Pinleri ⭐⭐⭐ | DB2 |
10 | 8 Bitlik Veri Pinleri ⭐⭐⭐ | DB3 |
11 | 8 Bitlik Veri Pinleri ⭐⭐⭐ | DB4 |
12 | 8 Bitlik Veri Pinleri ⭐⭐⭐ | DB5 |
13 | 8 Bitlik Veri Pinleri ⭐⭐⭐ | DB6 |
14 | 8 Bitlik Veri Pinleri ⭐⭐⭐ | DB7 |
15 | Arka Plan Işığının Gerilim Ayarı | Led + |
16 | Arka Plan Işığının Topraklaması | Led - |
LCD Pin Açıklamaları:
⭐ RS Pin LOW (0) olduğunda Komut Register‘ı seçer, RS Pini HIGH (1) olduğunda Veri Register‘ı seçer.
Komut Kaydı: Komut kaydı, LCD’ye verilen komut talimatlarını kaydeder. Komut, önceden tanımlanmış bir görevi yerine getirmesi için LCD’ye verilen bir talimattır.
Örneğin:
- Ekranı başlatmak,
- Ekranını temizlemek,
- İmleç konumunu ayarlama vb.
Komutların işlenmesi komut kaydında gerçekleşir.
⭐⭐ R/W Pinine LOW (0) değerini dönderdiğimizde yazma işlemi, HIGH (1) gönderdiğimizde okuma işlemi gerçekleştirir.
⭐⭐⭐ Bu Pinlerle LCD’ye veri veya komut gönderilir.
Veri Kaydı: Veri kaydı, LCD’de görüntülenecek verileri depolar. Veriler, LCD’de görüntülenecek karakterin ASCII değeridir. LCD’ye veri gönderdiğimizde, veri kaydına gider ve orada işlenir. RS = 1 olduğunda, veri kaydı seçilir.
Daha iyi anlayabilmemiz için tüm pinlerin ne işe yaradıklarına bir bakalım.
GND: Arduino’nun herhangi bir GND pinine bağlanmalıdır. Bu pin (eksi) topraklama bağlantısının yapılacağı pindir.
VCC: Arduino üzerindeki 5 voltluk bir pine bağlamalıyız. LCD buradan elektriğini alacak.
VO (LCD Contrast): Arduino’nun herhangi bir GND pinine bağlanmalıdır. Bu pin (eksi) topraklama bağlantısının yapılacağı pindir.
RS (Register Select): pini, Arduino’nun LCD’ye komut mu yoksa veri mi gönderdiğini söylemesini sağlar. Temel olarak bu pin, komutları verilerden ayırmak için kullanılır.
R/W (Read/Write): LCD’den veri okuyup okumadığınızı veya LCD’ye veri yazıp yazmayacağınızı kontrol etmek içindir.
E (Enable): pini, ekranı etkinleştirmek için kullanılır. Yani, bu pin LOW (DÜŞÜK) olarak ayarlandığında, LCD R/W, RS ve veri yolu hatlarında ne olduğunu önemser; bu pin HIGH (YÜKSEK) olarak ayarlandığında, LCD gelen verileri işlemektedir.
D0-D7 (Data Bus): gönderdiğimiz 8 bit verileri ekrana taşıyan pinlerdir. Örneğin, ekranda ‘A’ karakterini görmek istiyorsak, bu pinleri LCD’ye 0100 0001 (ASCII tablosuna göre) yazarak görüntüleyebiliriz, ancak bu konuya henüz gelmedik devam edelim. 😄
A-K (Anode & Cathode): LCD’nin arka ışığını kontrol etmek için pinler kullanılır.
LCD Komutları:
Serial No. | Hex Kodu | LCD Ekran Karşılığı |
---|---|---|
1 | 01 | Ekranı Temizle |
2 | 02 | Satır Başına Dön |
3 | 04 | İmleci Sola Kaydır |
4 | 06 | İmleci Sağa Kaydır |
5 | 05 | Ekranı Sağa Kaydır |
6 | 07 | Ekranı Sola Kaydır |
7 | 08 | Ekran kapalı, imleç kapalı |
8 | 0A | Ekran kapalı, imleç açık |
9 | 0C | Ekran açık, imleç kapalı |
10 | 0E | Ekran açık, imleç yanıp sönüyor |
11 | 0F | Ekran açık, imleç yanıp sönüyor |
12 | 10 | İmleç konumunu sola kaydır |
13 | 14 | İmleç konumunu sağa kaydır |
14 | 18 | Tüm ekranı sola kaydır |
15 | 1C | Tüm ekranı sağa kaydır |
16 | 80 | İmleci başa zorla (1. satır) |
17 | C0 | İmleci başa zorla (2. satır) |
18 | 38 | 2 satır ve 5×7 matris |
Pikseller:
Aşağıdaki fotoğrafa yakından bakarsanız, ekrandaki bir pikseli yani küçük dikdörtgenlerini ve bir karakteri oluşturan pikseli görebilirsiniz.
Bu dikdörtgenlerin her biri 5×8 piksellik bir ızgaradır fotoğrafta bir pikseli görüyoruz. Yalnızca metin görüntülemelerine rağmen, bir çok boyut ve renkte gelirler: örneğin, 16x1, 16x4, 20x4 mavi arka plan üzerinde beyaz metin, yeşil ekran üzerinde ise siyah metin gözükür. LCD ekran 16x2 boyutunda olup 16x2=32 karakter gösterebilir.
Her bir karakter 5 sütun 8 satırdan oluşmak üzere 8x5=40 piksel ile ifade edilir.
Şimdi, her karakterin (5x8 = 40) 40 Piksele sahip olduğunu ve 32 Karakter için (32x40) 1280 pikselimiz olacağını biliyoruz.
Ayrıca, piksellerin konumları hakkında LCD’ye bilgi vermek gerekmektedir. Bu tür işlerde kullanmış olduğumuz mikrodenetleyici aracılığıyla yapma kalkarsak, elimizdeki mikrodenetleyici bir hayli yormuş oluruz. İşte bu tür görevleri, komutları ve verileri mikrodenetleyiciden alıp, LCD ekranında gösterme görevini yerine getirmek üzere LCD’nin HD44780 ara yüzü ile gerçekleştiriyoruz.
Bu IC‘nin (yani entegre devre’nin) işlevi, MCU‘dan (yani mikrodenetleyici ünitesi) komutları ve verileri alır ve bunları LCD ekranımızda anlamlı bilgiler gösterecek şekilde işlemektir.
LCD ekranların birçoğunda HD44780 arayüzü kullanılmaktadır. LCD ekranları programlamak için Hitachi HD44780‘e ait tüm bilgileri öğrenebilirsiniz. Bu bilgilere ulaşabilmek için buraya tıklayın.
Şimdi 16×2 LCD ekranımızın arka yüzünü çevirelim ve bakalım burada neler oluyor?
LCD Ekranın Arkasındaki Siyah Dairelerin Görevi Nedir?
LCD ekranımızın arkasındaki bu siyah daireler Microdenetleyicimiz ile LCD arasında köprü görevi görmektedir. LCD’yi MCU ile kullanmamıza yardımcı olmak için bir arabirim IC‘sinden ve ilgili bileşenlerinden oluşur.
16x2 LCD’de Özel Karakterlerin Görüntülenmesi
LCD’de özel karakterler oluşturmak çok zor değildir. LCD’nin özel oluşturulmuş rastgele erişim belleği (CG-RAM) ve LCD çip denetleyicisi hakkında bilgi gerektirir. Çoğu LCD’de Hitachi HD4478 denetleyicisi bulunur.
CG-RAM adresi ondalık olarak 0x40 (Onaltılık) veya 64’ten başlar. Bu adreslerde özel karakterler üretebiliriz. Karakterlerimizi bu adreslerde oluşturduktan sonra, sadece LCD’ye komutlar göndererek onları yazdırabiliriz. Karakter adresleri ve yazdırma komutları aşağıdadır.
CG-RAM Karakterler | CG-RAM Adres (Hexadecimal) | Oluşturulan Karakterleri Görüntüleme Komutları |
---|---|---|
1ˢᵗ | 0x40 | 0 |
1ˢᵗ | 0x48 | 1 |
1ˢᵗ | 0x56 | 2 |
1ˢᵗ | 0x64 | 3 |
1ˢᵗ | 0x72 | 4 |
1ˢᵗ | 0x80 | 5 |
1ˢᵗ | 0x88 | 6 |
1ˢᵗ | 0x96 | 7 |
Yukarıdaki tabloda, yazdırma komutlarıyla birlikte her karakter için başlangıç adreslerini görebilirsiniz.
İlk karakter 0x40 ila 0x47 adreslerinde oluşturulur ve sadece 0 komutu gönderilerek LCD’de yazdırılır.
İkinci karakter 0x48 ila 0x55 adreslerinde oluşturulur ve bir komut 1 gönderilerek yazdırılır.
CG-RAM’de Özel Karakterler Nasıl Oluşturulur?
LCD’niz için kendi özel karakterlerinizi (glif) ve sembollerinizi oluşturabilirsiniz. Standart ASCII karakter kümesinin parçası olmayan bir karakteri görüntülemek istediğinizde son derece kullanışlıdırlar.
Hitachi HD44780 kontrol cihazını temel alan tüm LCD ekranlar, CGROM ve CGRAM (Karakter Üretici ROM ve RAM) adı verilen tanımlı karakterleri depolayan iki tür belleğe sahiptir. CGROM belleği uçucu değildir ve değiştirilemezken; CGRAM belleği değişkendir ve herhangi bir zamanda değiştirilebilir.
CGROM, ASCII kodları kullanılarak görüntülenebilen tüm kalıcı yazı tiplerini depolamak için kullanılır. Örneğin 0x41 yazarsak ekrana ‘A’ karakteri gelir.
CG-RAM, özel karakterler oluşturmanın ana bileşenidir. Kodda belirtilen özel karakterleri saklar. CG-RAM boyutu 64 bayttır ve bir seferde sekiz karakter oluşturma seçeneği sunar. Her karakterin boyutuda sekiz bayttır.
CG-RAM adresi ondalık olarak 0x40 (Onaltılık) veya 64’ten başlar. Bu adreslerde özel karakterler üretebiliriz. Bu adreslerde karakterlerimizi oluşturduğumuzda, sadece LCD’ye komutlar göndererek onları yazdırabiliriz. Karakter adresleri ve yazdırma komutları yukarıda ki tablodaki gibidir.
LCD ekranlarda, her karakter 5×8 matristir. Burada 5 sütun sayısı ve 8 satır sayısıdır.
‘B’ harfinin nasıl oluşturulacağına dair basit bir örnek yapalım.
‘B’ harfini oluşturmak için: char b [7] = {0x10, 0x10, 0x16, 0x19, 0x11, 0x11, 0x1E};
Yani,
Karakter oluşturmak istediğiniz yere adresi gönderiyoruz. Peki biz nasıl kendimize özel bir karakter vb. nasıl yapabiliriz? Bu bağlantıya tıklayarak kendinize özel karakter, semboller vb. şeyler yapabilirsiniz. Hayal gücünüz sınırsız. Yapabileceğimiz semboller veya harflerde Türkçe karakterleri de yapabilirsiniz.
LCD ekran standart karakter listesinde Türkçe’ye özgü harfler (ğ, İ, ö, ü, ç, ş) bulunmaz.
Tabi ki biz hex kodlarını kullanarak yazmayacağız, binary kodları kullanarak Arduino vb. mikrodenetleyici ile kullanmamız bizim için daha kolay olacaktır isterseniz tabi ki hex’te kullanabilirsiniz.
Uluslararası karakterlerin belirli ASCII kodları vardır. Örneğin biz ‘A’ karakterini kullanırız, ama mikrodenetleyici ‘A’ karakter verisini alarak 61 sayısına dönüştürür ve karakter setine bakarak karşılaştırır sonra işlemini yaparak ekranımızda ‘A’ harfini görürüz.
ASCII karakterleri standart olduğundan dolayı şöyle bir sırayla işler: Biz ‘A’ karakterini yazdığımızda mikrodenetleyici ‘A’ karakterini 1 ve 0’lardan oluşan 61 sayısına dönüştürür yani binarye oluşan bu “01100001” bitlerini LCD’ye gönderir. Şimdi neden bitleri kullanarak yazmamamız gerektiğini anladınız umarım… 😄 LCD bu binary kodunu alır ve 61 verisine dönüştürür sonra LCD karakter setine bakar, 61’in karşılığı ne diye. Bu da ‘A’ karakteridir. ASCII standardında olaylar böyle ilerler aşağıdan LCD’nin karakter setine bakabilirsiniz.
Bizim oluşturduğumuz karakterler sol üstteki (CGRAM(1) yazan yerden) başlayarak 8 satırlık yere kadar yerleşiyor. Tabloda ‘A’ karakterine bakarsanız “01100001” yani 61 adresi olduğunu görüyoruz. Bizim karakterlerimiz de bu durumda 0 ila 7 arasında yerleşecek.16x2 LCD’yi artık tanıdığımıza ve nasıl çalıştığını anladığımıza göre ikinci yazımda kodlamayı ve sanalda nasıl çalıştığını anlamaya çalışacağız. Sağlıcakla kalın… 🤗