Merhabalar.
Geçtiğimiz aylarda birkaç basit ve pratik alıştırmayla,
karakter tabanlı LCD modüllerin yeteneklerine kısa bir bakış atmıştık. Komut
setini denemek için tüm gereken, komutların ikili (veya hexadecimal) formda
girişini mümkün kılan, bir seri anahtardı. Bununla birlikte, bir LCD’nin
mikroişlemci veya mikrokontrolörlü bir tasarımda kullanılması durumunda
sürülmesi gerekeceğinden bahsetmiştik. Bu aydan başlayarak önümüzdeki 2-3 ay
boyunca bunu öğreneceğiz.
İYİ ZAMANLAMA
Good Timing
Karakter tabanlı LCD modüllerinin çoğunda kontrol elemanı
olarak kullanılan HD44780 entegresinin zamanlama gereksinimleri aşağıdaki
diagramda gösterilmiştir. Diagram, bazı veri sayfalarında ayrı ayrı gösteriliyor
olmalarına rağmen, hem okuma hem de yazma döngülerine ait bilgileri aynı anda
sağlamaktadır. Altında gördüğümüz tablo ise, diagramdaki zamanlama
parametrelerine ait detaylara yer vermektedir.
Geçen aylarda yaptığımız deneylerde; komutları, deney
setindeki anahtarlara basarak display’e gönderilmiştik. Orada ters giden bir şey
olmamıştı, peki neden şimdi bu karmaşık zamanlama diyagramına ihtiyacımız var?
Aslında bunu çoğumuzun bilmesine rağmen inatla bunu açıklamak istiyorum. Biz
insan olarak, bir tuşa bastıktan sonra, bir daha basana kadar bir miktar zaman
bırakırız, böylece LCD kontrolörü, bizi kolaylıkla takip edebilir.
Mikrokontrolörler bizim olduğumuzdan daha hızlıdırlar, bir kontrol hattının
durumunu saniyede birkaç milyon kez değiştirebilirler. Bu hızda LCD kontrolörü,
komutları takip edemez.
Yukarıdaki zamanlama diyagramı ve çizelge bize, LCD
entegresinin hangi hızla cevap verdiğini göstermektedir, böylece mikrokontrolörü
uygun şekilde programlayabiliriz. Ben örneklerimde PIC16F84’ü kullanacağım. PIC
hakkında bilgisi olmayan okuyucular arşivde inceleme yaparak Barbaros
AŞUROĞLU’nun PIC16F84 hakkındaki yazı dizisini inceleyebilirler. Ayrıca şunu
da belirtmeliyim ki, bu noktadan sonraki anlatımlarımda sizin PIC programlama
konusunda temel bilgiye sahip olduğunuzu ve uygun yazılım ve ekipmanları
kullanabildiğinizi kabul edeceğim.
LCD’nin RS hattının doğru Lojik seviyeye
ayarlanmasıyla, PIC mikrokontrolörü programlanmaya başlanabilir. Bu hat, LCD’nin
veriyi, kontrol komutu olarak mı yoksa karakter bilgisi olarak mı alacağını
belirler. Verinin LCD den tekrar okunmasının gerektiği durumlarda,
mikrokontrolörün R/W hattını da kontrol etmesi gerekir. Aksi durumda bu
hat, test devresinde olduğu gibi toprağa bağlanabilir. Mikrokontrolör, bu iki
hattın her ikisini aynı andan set edebilir veya birini diğerinden önce set
edebilir. Bunun gerçekte önemi yoktur. Önemli olan, “E” (Enable)
hattındaki seviyenin lojik 0’a yükselmesinden önce, minimum bir zaman periyodu
boyunca bu her iki hattın da “geçerli” ve “kararlı” bir durumda
olmasıdır. Bu ne demektir dilerseniz bir onu inceleyelim. Elektronik ile ilgisi
olan kişiler büyük bir ihtimal ile yukarıdaki figürün ne anlama geldiğini ve
LCD’yi bir mikrokontrolör ile hangi zamanlamalara riayet ederek kullanacağını
anlamıştır. Ancak ben çoğunluğun bunu anlamadığını varsayarak dikkat edilmesi
gereken zamanlamalardan bahsedeyim.
Yukarıdaki figürde bu periyot “tAS” (time-address
setup) olarak gösterilmiştir ve tabloda minimum 140ns olarak verilmiştir. Bu
zaman 140ns’den daha az olmamalıdır. E hattı bir kez
yükseldiğinde, en az 450ns geçmeden tekrar düşmemelidir. Bu zaman “tEH”
(time-enable high) olarak gösterilmiştir. Ayrıca, E hattı tekrar
düşürülmeden önce, sekiz veri hattının tümü kendi uygun lojik seviyelerine
ayarlanmalı ve en az 200ns’lik “tDS” (time-data setup)
periyodu boyunca beklenerek kararlı hale gelmelerine izin verilmelidir. Burada
LCD’nin, E hattı yükseltildikten sonra veri hatlarının set edilmesine izin
verdiğine dikkat edin. Geçen sayıdaki deneylerde, E anahtarına basılmadan
önce veri yerleştirilmekteydi, ancak her iki duruma da izin verilmiştir.
E hattı düşük seviyeye geri getirildiğinde, hesaba katılması
gereken iki tutma zamanı daha vardır. “tAH” (time-address hold)
parametresi, RS ve R/W hatlarının en az 10ns boyunca, “tDH”
(time-daha hold) ise veri hatlarının hiç birinin en az 20ns boyunca
değiştirilmemeleri gerektiğini göstermektedir. Bir kısıtlama daha kaldı. E
hattı, 500ns “tEL” (time-enable low) geçmeden önce, bir
sonraki komut için tekrar yüksek duruma getirilmemelidir. Bunun anlamı, E hattı
için toplam döngü zamanının 450ns + 500ns olması demektir. “tRF” (time-rise
& fall) olarak gösterilen ve 25ns den fazla olmaması gereken düşme ve
yükselme zamanları ile birlikte bu değer yaklaşık 1ms
olarak hesaplanabilir. Bu, display’e saniyede bir milyon komuttan (veya bir
milyon karakterden) fazlası gönderilemeyecek anlamına gelir.
MEŞGUL DURUMU
Busy Status
Bununla birlikte, zamanlama diyagramı tüm hikayeyi
anlatmamaktadır. LCD’nin komut ve verileri işlemesi için aktif hale getirilmesi
için daha uzun gecikmeler gerekir. Komutların çoğu, LCD’yi 40ms kadar meşgul ederler. Buna karşın, Clear Display
ve Display & Cursor Home komutları daha fazla zaman alırlar.
Tüm komutların işlenme zamanları aşağıdaki tabloda
gösterilmiştir. Tablo, display’e veri yazma ve display’den veri/durum okuma gibi
tüm komutları içermektedir. Şuan için “Read Data” ve “Read Status”
komutlarıyla bir deneme yapmadık ancak LCD’nin durumunu okumak, onun meşgul olup
olmadığını belirlemek için kullanılan bir yöntemdir.
Pratikte bu komut zamanlamaları için yapılması gereken
sadece birbirini takip eden komutlar arasına bir gecikme koymaktır. İlk iki
komut, Clear Display ve Display & Cursor Home birkaç faktöre bağlı
olarak değişen farklı çalışma zamanlarına sahiptirler. Veri sayfalarında bu
farklılıklar için pek fazla şey söylenmemektedir. Bu farklılıklar imlecin $80
adresine geri dönmesini, display’de harflerin kaymamasını ve Clear Display
durumunda her bir display adresinin arasına boşluk karakterinin konulmasını
içerir.
LCD meşgul iken bir önemli durum daha vardır. Bu durum
LCD’ye enerji verildikten hemen sonra oluşur. Tam bir hazırlık aşamasının
gerçekleşmesi için 10-15 milisaniye’lik bir zaman gerekir. Bu süre
zarfında herhangi bir komut çalıştırılamaz. Bu bir mikrokontrolör kullanan
devreler için önemli bir durumdur. Programın başlangıcına uygun bir gecikme
eklenmelidir, aksi takdirde LCD ilk birkaç komut gönderilene kadar hazır
olamayacaktır. Bu durumda LCD’nin kilitlenmesine sebep olunabilir ve hatta
resetlenmesine kadar varabilir.
YENİ DEVRE
Bu aşamadan sonra PIC’leri işin içine almak için yeni bir
deneysel devre yapmanın zamanı geldi. Yeni devre tasarımı aşağıda
gösterilmiştir. Artık de-bounce devresine ihtiyacımız kalmadı, çünkü
mikrokontrolör çok temiz çıkış sinyalleri sağlayabilir. Şemada verilen PIC16F84
entegresini kullanmak şart değildir, 54, 56, 61 ve 71 tipleri de kullanılabilir.
Ancak bu durumda pin bağlantılarında bir iki küçük değişiklik yapmak
gerekebilir.
Bununla birlikte, içlerinde EEPROM bulunduran bir
mikrokontrolör versiyonu olduğu için PIC16F84 ile alıştırma yapmak en iyisidir.
Mikrokontrolörün saat seçimi RC’ye (direnç/kapasitör) veya
herhangi bir XT (kristal) seçeneğine ayarlanabilir. Bu uygulamanın
test devresi olması nedeniyle maliyeti düşürmek için ayrıcada buradaki durumda
kesin zamanlama ayarı önemli olmadığından RC saat devresi kullanılmıştır.
OSC1 girişine bağlanmış C1 kapasitörü ve R1 direncinin değeri,
hemen hemen 2MHz’lik bir saat frekansı verecektir. Başlangıçta, yazılım
gecikmelerinin yeterince uzun olduğundan emin olmak için, daha düşük değerdeki
direnç ve kapasitörden kaçınılmalıdır.
Bu aylıkta bu kadar bilgi almamız sanırım yeterli olacaktır.
Önümüzdeki yazıda yeni devremiz için gerekli PIC programını burada bulacaksınız.
Her türlü programlamada meşhurdur “HELLO” veya “MERHABA” yazmak biz farklı bir
şey yapıp “ANTRAK” yazacağız. Önümüzdeki ay görüşmek dileğiyle, hoşça kalın.