Dot Matrix LCD
Yazarımız Sedat Öztunalı, askerlik görevi dolayısıyla ara vermiş olduğu yazılarına yeniden devam ediyor. Eski sayılarımızda ilk iki bölümü yayınlanmış olan Dot Matrix LCD’lere ilişkin yazı dizisinin üçüncü bölümü.
Bu yazıyı okuyan herkese merhaba. Uzunca bir aradan sonra yeniden yazmak oldukça güzel bir olay. Askerlik boyunca geçen 15 ay boyunca ve sonrasındaki birkaç ayda Mart 2003 ve Nisan 2003 tarihlerinde yayınlanan “Dot Matrix LCD” başlıklı makaleler hakkında sayısız Email aldım. Hal böyle olunca belirle nedenlerle yarım kalan makaleleri tamamlamak ihtiyacı doğdu.
Bu aydan başlayarak 5 ay boyunca (bir terslik olmazsa Mayıs 2005’e kadar) LCD’yi kullanmak ile ilgili “temel bilgileri” öğrenmiş olacağız. O halde başlamanın zamanıdır.
TEMEL KOMUTLAR
LCD’ye enerji verildiğinde, muhtemelen display’in bir kısmında bir seri halinde siyah kareler görünecektir, bu sizi korkutmasın. Bu karakter hücrelerinin kendi “Off” durumlarıdır ve böylece kontrast ayarlamasının yapılmasına olanak vermektedir. Kontrast kontrolü prototip devremiz için “saat yönünün tersi” istikamette yapılmalıdır.
Display modülleri genelde ilk enerji uygulandığında kendi kendilerini “reset” ederler. Bu durumda karakter girişi olsa dahi bunlar display’de gözükmeyecektir. Bu aşamada displayimizi kullanabilmek için bir komut girmemiz gerekir. Komutların tam bir listesi Binary (İkili) ve Hexadecimal (Onaltılı) değerleri ile aşağıdaki tabloda verilmiştir ve Power-On’dan sonra LCD’nin varsayılan değerleri asteriks (*) ile işaretlenmiştir.
Makale boyunca, her bir komut için hangi veri bitlerinin set-reset edileceğini gösteren ikili gösterim kullanılacaktır ancak her ikili sayıdan sonra da parantez içinde sayının onaltılı eşdeğeri yazılacaktır. Burada $ sembolü sayının onaltılı olduğunu göstermektedir.
“Display On-Off ve Cursor” komutu display’i çalıştırmak ve aynı zamanda da kullanılacak cursor (imleç) tipini seçmek için kullanılmaktadır. İlk kullanımlar için altçizgi şeklinde yanıp-sönen bir imleç en uygunu olacaktır. Böylece imlecin konumu açıkça görülebilecektir. Bu işlem için gerekli kod şu şekildedir, “0000 1111” ($0F.)
Sıra geldi ilk komutumuzu göndermeye,
1. Veri anahtarlarını (S1’den S8’e doğru) “0000 1111” ($0F) olarak ayarlayın,
2. RS anahtarının “Lojik 0” olarak ayarlayın ki, LCD bunun komut olduğunu anlasın,
3. Şimdi’de E butonuna (S9) basıp bırakın.
Eğer uygulama devresini doğru kurduysanız ve komutları doğru gönderdiyseniz, altçizgi şeklinde yanıp sönen bir imleci en solda göreceksiniz.
LCD’mizi 2 satırlı modül olarak kullanmak istiyorsak, ikinci satırı aktif etmek için “Function Set” komutunu kullanabiliriz. Bu komut aynı zamanda, 8/4 bit’lik veri aktarım modunu ve karakter formatını belirlemek için kullanılır. Örneğin; 8 bit veri modu, 2 satır ekran ve 5×7 karakter formatını kullanmak için “0011 1000” ($38) komutunu yollamalıyız ..
Bunu yollamak için,
1. Veri anahtarlarını (S1’den S8’e doğru) “0011 1000” ($38) olarak ayarlayın,
2. RS anahtarının “Lojik 0” olarak ayarlayın,
3. Şimdi’de E butonuna (S9) basıp bırakın.
Tebrikler, 2 satırlı moda geçtiniz. Ancak sizde fark etmiş olmalısınız ki kontrast biraz düştü. Bunun nedeni 2 satır modunun farklı sürme gereksinimleri göstermesindendir. Bu nedenle kontrastı biraz arttırabilirsiniz.
Şu ana kadar yaptıklarımızı özetlemek gerekirse LCD’mizi açtık ve kullanım özelliklerini belirledik. Peki ama LCD’ye bilgi nasıl yazdırılıyor. Aslına bakılırsa LCD’ye komut göndermek veya karakter göstermek için yapılan işlemlerin sırası tamamen aynıdır. Tek dikkat edilmesi gereken konu RS anahtarının konumudur.
Örneğin ekrana “A” yazmak için yapmamız gereken işlemlere bakalım,
1. Veri anahtarlarını (S1’den S8’e doğru) “0100 0001” ($41) olarak ayarlayın,
2. RS anahtarının “Lojik 1” olarak ayarlayın,
3. Şimdi’de E butonuna (S9) basıp bırakın.
$41 “A” harfinin karakter tablosundaki ASCII kodudur. Yalnız sizde fark ettiyseniz ortada ters giden bir şeyler var. Çünkü ekran tamamen “A” harfi ile doldu. Sanırım ekranda düzgün bilgiler yazdırmamız biraz zaman alacak. Şimdi neden bu sorun ile karşılaştığımızı inceleyelim.
BOUNCE
Karşılaştığımız sorun PIC vb. gibi elemanlar ile programlama yapanların iyi bileceği kontak sıçraması sorunudur. Çünkü bildiğimiz gibi butonlar mekanik elemanlardır ve pratikte siz butona bir sefer bassanız dahi, kontaklar’da bir takım titreşimler meydana gelir ve buda yorumlayıcı elemanın aslında butona defalarca basılmış gibi algılamasına neden olur. Bu problemin genelde 2 ana çözümü vardır. Ya donanım ile bu sıçrama bastırılacak, yada yazılım ile butona ilk basılış anında işlem yapılacak daha sonrakiler göz ardı edilecektir.
Prototip devremiz için donanım temelli bir çözüm aşağıda gösterilmektedir. Devre temelinde basit bir toggle devresidir. Devreyi incelediğimizde bir çift NAND (VE DEĞİL) kapısı Set-Reset Latch’i (veya flip-flop) oluşturmak üzere çapraz bağlanmıştır. Bu devrede TTL74LS00 veya CMOS 74HC00’dan herhangi birisi kullanılabilir. Anahtarlar S.P.D.T (Single-Pole, Double-Throw) özellikte seçilmelidir. İdeali bir mikroswitch’tir.
Bu durumda aklınıza şu soru gelebilir, peki daha önce girdiğimiz komutlarda neden kontak sıçramaları olmadı? Biz fark etmemiş olsak bile onlarda da kontak sıçraması oldu. Çünkü bundan önce girdiklerimiz komuttu. O komutların 1 veya 100 sefer kullanılmasının bir önemi yoktu. Kaç sefer kullanılırsa kullanılsın yine aynı sonuca ulaşılacaktı.
Bu devreyi prototip devresine ekledikten sonra, “A” dolu olan ekranımızı bir “Clear Display” komutu ile temizleyebiliriz. Bunu yapmak için,
1. Veri anahtarlarını (S1’den S8’e doğru) “0000 0001” ($01) olarak ayarlayın,
2. RS anahtarının “Lojik 0” olarak ayarlayın,
3. Şimdi’de E butonuna (S9) basıp bırakın.
Dikkat ettiyseniz, “De-Bounce” devresinin çıkışı, anahtara basıldığında “Lojik 1” ve anahtar bırakıldığında ise “Lojik 0” olmaktadır. LCD modüllerinde veriler düşen kenarda tutulduğu göz önüne alınırsa, karakterler display’de; butona basıldığında değil, buton bırakıldığında görülecektir.
TEST GİRMEK
Başlamadan önce küçük bir ipucu: karakter ve komutları onaltılı girmek, binary girmekten kolaydır. (Buna rağmen, şüphesiz komutları ikili den onaltılıya çevirmemiz gerekecektir ki böylece, hangi bitleri set edeceğimizi bilelim.) Bu nedenle D.I.L. anahtar paketini, bir çift “Sub-Miniature Hexadecimal” döner anahtara değiştirmek biraz daha kullanışlı olabilir. Anahtar, On = Loji
k 0 olduğu tipte olmalıdır. Böylece, “0” konumuna çevrildiğinde, dört çıkışın hepsi de orta pin’e kısa devre olmalıdır, aynı şekilde “F” konumunda dört çıkışın hepsi de açık devre olmalıdır.
Aşağıda modül içine yapılandırılmış tüm karakterleri gösteren bir tablo görülmektedir. Tabloyu incelersek, karakterlerle ilgili kodların ikili ve onaltılı formatta işaretlenmiş olduğunu göreceksiniz, en anlamlı bitler yukarıda, en az anlamlı bitler de sol tarafta aşağı doğru verilmiştir. Bunlar akıllı modülerde görülmektedir ki Uzakdoğulular sadece kendi “Katakana Phonetic” sembolleri de karakterlere katılmıştır. Daha geniş olan ve Japonlarla Çinlilerin ortak kullandıkları birkaç bin karakter içeren “Kanji” karakter seti dahil edilmemiştir.
Tipi her ne olursa olsun, anahtarları kullanarak ve aşağıdaki tablodan faydalanarak, display’e sayı ve harfler içeren birkaç karakter girin. RS anahtarı (S10), karakterler gönderilirken “Lojik 1” olmalıdır ve her defasında E anahtarına (S9) basılmalıdır. Bu şekilde işlem sırası şöyle olmalıdır; RS’i “Lojik 1” yap, karakteri gir, E’yi tetikle, RS’ i “Lojik 1” bırak, sonraki karakteri gir, E’ yi tetikle…
Tablodaki ilk 16 kod, “0000 0000″dan “0000 1111″e ($00’dan $0F’e) CGRAM (Character Generator RAM) olarak ayrılmıştır. Burası, kullanıcı tanımlı grafik karakterleri tutan “Karakter Üretici Ram”‘dir. Bu tip modüllerin, bar grafikler, yanıp sönen semboller, canlandırılmış harfler gibi yetenekleri sağlayan potansiyellerinin gösterilmeye başladığı noktadır.
“0001 0000″‘dan “0001 1111″‘e ($10’dan $1f’e) kodlar display boşluk karakteri olarak kullanılmaktadır. ASCII kodları tam olarak “0010 0000” ($20)‘den başlayıp “0111 1111” ($7f)’ e kadar sürmektedir. “1000 0000” ($80)’dan “1001 1111” ($9f)’e kadar olan kodlar kullanılmaz,ve “1010 0000” ($A0)’dan “1101 1111” ($DF)’e olan kısım japon karakterleridir.
“1110 0000” ($E0)’dan “1111 1111” ($FF)’e olan kodlar ilginçtir. Bu son blok temel olarak “Greek karakterleri” içermesine rağmen, aynı zamanda aşağı doğru kuyruğu olan küçük harfleri de içerir. Bunlar “g, j, p, q, y” harfleridir. Bu harflerin kuyrukları, normal büyük harflerin taban çizgilerinin altına düşmektedir. Bunlar, eğer j küçük harfini görüntülemeye çalışmışsanız göreceğiniz gibi 5×7’den çok 5×10 Dot Matrix format gerektirirler.
Bazı tek satır displayler, bu karakterlerin aralıksız gösterilmelerine izin veren 5×10 format yeteneğine sahiptir. 5×7’lik iki satırlı displaylerde bu yetenek, ikinci satırın üstünden üç pixelin ödünç alınıp bir 5×10 matrix’in oluşturulmasıyla simüle edilebilir.
Bu simülasyon için RS hattını entegreyi komut moduna getirilmek üzeri “Lojik 0” yapın. Veri anahtarında, “0011 0100” ($34) ikili sayısını girerek “Function Set” komutunu verin. E butonuna basılıp bırakın.
Evet bu aylık bu kadar. Önümüzdeki ay; adresleme, display’e yazdırma ve karakter girişi modu konularını ele alacağız.
Sedat ÖZTUNALI
hpre2@yahoo.com
http://www.elektrosite.net/