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 beş bölümü yayınlanmış olan Dot Matrix LCD’lere ilişkin yazı dizisinin altıncı bölümü.
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.
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.
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.
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.
Yazar: arsivden · Published 1 Temmuz 2004