2×16 Paralel LCD Ekranlar
Uzun zamandır bir şey yazamadım, elle tutulur bir çalışma yapmadan yazmak istemiyorum çünkü. Son haftalar hep ufak tefek çalışmalarla geçtiğinden anlatacak çok da bir şey yok. Bir önceki günlük notunda da yazdığım gibi 3310 un LCD ekranını acaba okuyabilir miyim diye düşünürken LCD ekranları masaya yatırmam gerektiğini anladım. Her ne kadar nokia nın ekranı klasik paralel LCD ler gibi olmasa da 2×16 paralel LCD lerden girdim LCD dünyasına. Bu zamana kadar LCD leri hep bir mikro kullanarak ve yükek seviyeli bir dil kullanarak sürdüğümden ne olup bittiğini pek bilmezdim, malum 3 bağlantıyı RS (register select), E (enable), R/W (read write) ve 4-8 bitlik data bağlantısını yapar ekranı çalıştırırdım.
LCD ekranlar genelde çıkış (output) aracı olarak kullanılıyor ancak R/W ucunda R seçeneği olduğuna göre okunabilmeli de, nitekim okunuyor.
Burda bahsedeceklerim hitachi nin HD44780U LCD sürücüsü için geçerlidir, ancak komutlar hitachi ye özgü değil standart sanırım. 2×16 paralel LCD nin özelliklerini anlamanın en kolay yolu bağlantısını vereceğim dokumanlardan ilkindeki 2 tabloyu göz önüne alarak isis simülasyon yapmaktır.
R/W ucu eğer 0 da ise sinyal akış yönü dışardan LCD ye, yani yazma modu; R/W ucu 1 de ise sinyal akış yönü LCD den dışarıdır, yani okuma modu.
RS pini ise eğer yazma modundaysak yani R/W ucu 0 da iken; 8 veya 4 bit le gönderilen sinyallerin komut mu yoksa data mı olarak algılanacağını belirler; okuma modundayken (R/W 1 iken) okunacak verinin lcd nin durumu mu yoksa o anda kursorun bulunduğu yerdeki data mı olacağını belirliyor. Yanlış hatırlamıyorsam yazma modundayken(r/w=0) RS=1 data, RS=0 komut gönderimi için.
E ise işlemin tetiklenme anını belirler. Örnek: LCD ye sinyal (data veya komut) göndermek istiyorsunuz data pinlerine uygun datayı yerleştirdiniz, RW ucunu 0 a çektiniz(veya sadece yazma yapıyorsanız bu uç hep 0 da kalabilir), sinyalin gönderilmesi için E pini lojik 1 den lojik 0 a düşüş geçişi yapmalıdır. Sinyal tam bu geçiş esnasında gönderilir. Okuma işlemi ise E pinin lojik 0 dan lojik 1 e geçişinde veya E pini lojik 1 de iken olabilir. Aslında 2×16 paralel LCD kullanımı bu bilgilerden ibaret, gerisi tabloya bakıp uygulamak.
Denemeler esnasında kafamı karıştıran birkaç durum oldu, veri akışı için 4 bitlik seçmek istediğinizde bakıyorsunuz ki göndermeniz gereken komut 8 bitlik 😀 4 bitlik bağlantı yaptığımızda 8 bitlik komutu nasıl göndereceğim diye sormuştum kendi kendime. PIC ler 4 bitle LCD leri çalıştırabiliyordu, sonra acaba PIC bu 4 pinden ne yazıyor diye araştırmaya başladım, CCS C nin asm çıktılarını incelemeye başladım, baktım asm okumakla olmayacak ISIS da lcd pinlerine lojik analizör bağladım. Ancak lojik analizörle elde ettiğim verileri ayıklamak pek kolay görünmediğinden ondan da vazgeçtim. Sahi PIC in çalışma esnasında portlara yazdığı verileri en kolay nasıl kayıt -log- altına alırız? Neyse, sonra yine çözümü komut tablosunda buldum, gözümün önündeki function set komutunun ilk 4 bitini dikkate almayıp sadece son 4 bitini gönderdiğinizde ekran 4 bit moda geçiyormuş 🙂 ( 4 bitlik moda geçmek için 8 bitlik komuta gerek yok doğal olarak. İlk 4 biti dikkate almamayı tesadüfen buldum, normalde bir komut 8 bitten oluşuyor. Ancak 4 bitlik moda giriş bir defaya mahsus sadece 4 bitlik komut göndermekle başlıyor(bknz. katalog 41. sayfa).
Read işleminde ise LCD sürücüsüyle çıkan datayı çakıştırmamak için read yapmadan önce sürücü-lcd nin izole edilmesi gerekiyor, 74-541 bu iş için uygun gibi.
Isis deneme yapmak için LM016L LCD ekranını ve “logic state”leri kullanabilirsiniz. Logic state in de “momentary” ve “latched” olmak üzere iki türü var. Momentary olanı Enable işaretinin verilmesi için kullanılırsa daha kolay oluyor.
İlgili dosyalar:
Proteus’ta Pinlere Logic Stateler Bağlanmış LCD Ekran
Doküman
HD44780u Katalog
ŞİFRELİ KİLİT YAPIYORUM VE LM016L LCD NİN YERİNE BAŞKA NE KULLANABİLİRİM Bİ YARDIMCI OLURMUSUNUZ
merhaba C dilinde 8051 ailesine kod yaziyorum 16*2 lm016l displayinin 2. satırına kodu görüntüleyemedim pinlerdeki hareketlenmeden simülasyonda verinin gittiği anlaşiliyor ancak ekranda görememekteyim yardimci olursanız sevinirim
elinizdeki örnek çalişmaları görmem kafi olabilir.
teşekkürler kolay gelsin. .
Fatih hocam ilk dört biti göndermek yeterli demişsiniz fakat ben öyle olduğunu düşünmüyorum çünkü komut setine bakar iseniz her komutun 0. bitinden başlayarak gerekli ayarlar için bir bit ayar yeri bırakılmış ve bittiği yerde 1 koyulmuş.. Ne demek istediğimi bir örnek vererek anlatayım mesela display on/off komutuna bakacak olur isek sekiz bitin şu şekilde yazıldığını görürüz 00001DCB ; burada ayarlanabilecek 3 parametre var ve bunlar D(Display on/off), C(Cursor on/off), B(Blinking on/off yani imlecin yanıp sönmesi ayarı). Ve ayarlanabilecek komutlar bittiği anda da 3. bit 1 yapılmış. Dolayısı ile LCD nin denetleyicisi bu komutta değişiklik yapılırsa bunu şu şekilde anlıyor.. Biz programımızda ilk önce yüksek değerlikli bitleri gönderiyoruz eğer 4 bit ile haberleşmek ister isek.. O zaman öncelikle 0000 bilgisi ulaşacak. Daha 1 olan bit gelmedi dolayısı ile Lcd dahaca hangi kod geliyor bilmiyor. Şimdi de düşük değerlikli 4 biti yollayalım. 1DCB (örn:1000) Şimdi lcd Display on/off ile ilgili bir komut geldiğini anladı !!!!! Nasıl ?? Çünkü komutların içerisinde 3. biti 1 olan başka komut yok!!!! Ve kodu şu şekilde yorumlayacak 1000 geldi ise display off, cursor off, blinking off yapmalıyım.. Şimdi buraya kadar çalışmayı bu şekilde anladım ben.. Eğer sizin dediğiniz gibi sadece düşük değerlikli 4 biti yollar isek komut tablosundaki ilk 4 kodu lcd anlayacaktır fakat daha sonraki kodlar için ne yapacağını kestiremeyiz çünkü 1 bitlerini okuyamamış olur.. Ben Bu şekilde çalışmayacağını düşünüyorum,, bende işin mantığını öğrenmeye çalışıyorum sizin sitenizden de istifade ettim elinize sağlık eminim bir çok arkadaş da okuyor bu yazıları o yüzden bu yorumu eklemeyi luzumlu gördüm 🙂 affınıza sığınarak soruyorum şimdi ilk 4 bit yollanarak çalıştırabildi iseniz izahını yaparsanız sevinirim.. Komut tablosuna aşağıdan bakarak iseniz ne demek istediğimi size daha açık anlatmış olacağım:
http://www.berkbaykal.com/upload/msp430-lcd-2.png
Teşekkürler iyi çalışmalar…
Hocam net cevap veremeyeceğim, 4bit modda normalde 8 bit komutları 2 nibble halinde gönderiyoruz ancak LCD açıldığında 4bit moda giriş için 8 bit gerekmiyordu sanırım. Verdiğim datasheet 42. sayfada sadece o işlemin 4 bitle tamamlanacağı yazılmış, onu yazmış olmalıyım. Diğer komutlar için 4+4, 8 bit gönderilmesi gerekiyor zaten. Selamlar.
laptopu lcd ye bağladım ama ekran kayık ne yapmam lazım acil cvp lütfen..