LCD modüller mikrokontroller devrelerinin iletişim arayüz olarak vazgeçilmez birimlerdir. LCD modüllerin en yaygın olanları karakter LCD olarak bilinen tipleridir. Ekran üzerinde yazıdan farklı olarak şekil ve resimler gösterilmek istendiğinde karakter LCD modüllerin yetersiz kaldığı görülmektedir. Bu gibi durumlarda LCD modüllerin diğer bir tipi olan grafik LCD modülerin kullanımı söz konusu olur.
Bu projede bir ATMEGA32 işlemci ile bir grafik LCD modülün sürülmesi üzerinde çalışılacaktır.
LCD modüllerin nasıl çalıştığı ve görüntüyü nasıl oluşturduğunu internet ve diğer kaynaklar üzerinde bulabilirsiniz.
Öncelikle bu projede kullanılan LCD paralel bağlantı kullanan bir model, yani 8 bitlik veri iletişimi aynı anda yapılmakta. Bu projede kullanılan LCD modül 128x64. LCD ekran kontrol çipi olarak S6B0108 veya eşdeğeri kullanılmış o nedenle bir çip ile ilgili çalışma düzeni anlatılacaktır. Bunun anlamı yatayda 128 nokta düşeyde 64 ile toplamda 8192 nokta (piksel) nokta var demektir. Eğer bu noktalar tek tek sürülme (her bite bir bayt) durumu olsaydı işlemcinin epey zorlanacağı kesin.
İşte bu noktada işlemcinin göndereceği veriler 8 bitlik olduğunu biliniyor. Bu 8 bitlik veri (her bit bir noktaya karşılık geliyor) aynı anda 8 noktayı sürebiliyor. Yani işlemcinin tam ekran bir resim için LCD ekrana göndereceği veri 1024 bayt oluyor.
Ekran üretilirken yatay 128 nokta sürme açısından kolaylık olsun diye 64 noktalık 2 bölüme ayrılmış. Bu da LCD ekran üzerindeki 2 bacağın seçilmesi ile kontrol ediliyor. Örneğin CS1=1 ve CS2=0 ise sol bölüm kontrol edilirken, CS1=0 ve CS2=1 olması durumunda veri ve kontrol bilgisi açısından sağ taraf kontrol ediliyor.
8 bitlik verinin 8 düşey piksele karşılık geldiği belirtilmişti. İşte bu 8 pikseller sayesinde ekran ayrıca düşeyde 8 gruba ayrılmış ve sayfa olarak tanımlanmış. Bu durumda bir sayfanın 64 bayt olduğunu söylemeye gerek yok. LCD modüldeki komut adresi üst taraftan başlamak kaydı ile 0xB8 komut kodu ile başlayıp aşağı doğru artar ama otomatik değil (X adresi). Bu sayfa komutları sağ ve sol bölümler için aynıdır. Yani 2 tane 0xB8 komut kodu olduğunu belirtelim. (CS1 ve CS2 ayrı ayrı seçimleri sayesinde).
Her sayfa üzerine gönderiler veriler için 64 baytlık veri için de bir RAM adresi var. Bu parametrede Y adresi olarak tanımlanırsa elbetteki bir başlangıç adresi var ve 0x40 adresinden başlıyor. (Her sayfada aynı adreste)Veri yüklendikçe bu parametre otomatik olarak artıyor.
Ekranın kontrast ayarı için bir giriş bacağı var (Vo). Ek bir negatif gerilim gerekiyor. İsteyen bu ek gerilimi kendisi üretebilir ve bu bacağa uygulayabilir. Aynı zamanda bu ek negatif gerilim şu anda anlatılmakta olan proje için ekran üzerinde üretilmekte. (Vee) Bu bacak ile toprak (GND) hattı arasına bir trimpot bağlanır ve trimpotun orta ucu da Vo bacağına bağlanır. Bu trimpot üzerinden ekranın kontrast ayarı yapılabilir.
LCD ekran modülü üzerideki bağlantılardan bir de RS olarak tanımlanan bacak (register seçme). Eğer bu bacak RS=0 ise LCD modül kendisine gönderilen verinin veya yerine getirmesi gereken işlevin Komut ile ilgili olduğunu karar veriyor. RS=1 olması durumunda yapılan işlemin Veri ile ilgili olduğu ortaya konmuş oluyor. (Bazı bu konu ile ilgili belgelerde bu bacak farklı bir isim ile tanımlanmış).
Her elektronik alet gibi LCD ekranında nasıl iletişim kurması gerektiğini belirten bir bacak var. Bu bacak RW olarak tanımlanmış (oku/yaz) RW=0 olması durumunda alet yazma konumunda oluyor. Yani LCD ekrana gönderilen komut veya verileri kabul ediyor (meşgul değilse). RW=1 olursa bu durumda LCD modülün durumu hakkında bilgi almak için LCD ekranı okuma moduna geçiyor.Bazı uygulamalarda RW bacağı sürekli "0" seviyesinde tutulup yapılan işlemler için işlemcinin beklemesi sağlanıyor. Ekran yenilemesi kritik olmayan uygulamalar için olabilir.
Ortak veri hatlarını paylaşan aletlerin olduğu sistemlerde herbir birimin ayrı ayrı seçilmesi için genellikle en az bir bacak olur. LCD içinde böyle bir bacak mevcut bu bacak da E (izin). Yazma modu için E inen kenarda (1-0 geçişi) işlem yerine getiriliyor. Okuma modu için ise E=1 iken okuma verisi hatlarda oluyor.
LCD modül üzerinde besleme ilk verildiğinde üzerindeki kontrol birimleri ne yapmaları gerektiğini anlamayabilirler. Bunun için harici olarak bir sıfırlama bacağı var. Bu bacak "0" seviyesinde iken LCD modül sıfırlanır ,ekran kapanır ve durum oku komutundan başka işlem yapmaz. Bu bacak "1" olduğun zaman sistem normal olarak çalışır.
Karanlık ve yarı karanlık ortamlar için arkaplan aydınlatması ortam için ek ışık kaynağı ihtiyacını ortadan kaldırır.
"XIAMEN PRECISE DISPLAY CO., LTD." tarafından üretilmiş olan bu ürün mavi arkaplan aydınlatması beyaz LED'ler ile yapılan negatif bir grafik ekran. Normalde bir bit ile temsil edilen bir nokta pozitif ekranlarda bit "1" olduğu zaman nokta karır. Ama bu üründe tam tersi olarak bit "1" olduğu zaman sönerek normalde mavi olan ekranın arkaplanı beyaz olarak görülmektedir.(Tabii ki aynı üreticini bu LCD modeli için farklı alt tipleride var.)
Bacak | Simge | İşlevi |
1 | Vss | Toprak |
2 | Vdd | Besleme |
3 | V0 | LCD için besleme (kontrast) |
4 | RS | Register seç(1:veri ,0:komut) |
5 | RW | Oku/Yaz (1:oku ,0:yaz) |
6 | E | İzin sinyali |
7 | D0 | veri hattı |
8 | D1 | veri hattı |
9 | D2 | veri hattı |
10 | D3 | veri hattı |
11 | D4 | veri hattı |
12 | D5 | veri hattı |
13 | D6 | veri hattı |
14 | D7 | veri hattı |
15 | CS1 | IC1 seçme (sol taraf) |
16 | CS2 | IC2 seçme (sağ taraf) |
17 | RST | Sıfırlama sinyali |
18 | Vee | Negatif gerilim çıkışı |
19 | A | arkaplan aydınlatma |
20 | K | arkaplan aydınlatma |
Bu bacak bağlantılarının (Vss,Vdd,V0,Vee,A,K) beslemeler haricindeki tüm bağlantılar işlemciye bağlı olup işlemci üzerinden kontrol edilmektedir. Bu şekilde işlemci üzerinde kayıtlı olan resim verileri ve ekran komutları grafik LCD ekran modülüne gönderilmektedir.
Devrede basitçe üç ana bölümü ayrılabilir. İşlemci kartı, grafik LCD ve buton. İşlemci kartı haricindekilerin fazla bir ayrıntısı yok.İşlemci kartı üzerinde besleme, ekran parlaklık ayarı ve işlemciyi süren ATMEGA32 var. Ekran ile işlemcinin bağlanması konnektör üzerinden yapılması planlansa da kartın yapılında bazı aceleye getirme sorunları nedeniyle kablo ile yapılması gerekti.(Zaten görüldüğü üzere konnektör bağlantı konumu kaymış durumda.
Sistemin kalbini IC1 ile ATMEGA32 oluşturuyor. Aslında kristale gerek olmasada kesin zamanlama ihtiyacını karşılamak için XT1(3.6864MHz) kristal ile C6 ve C7 (27pF) kondansatörler ile birlikte işlemci için gereken zamanlama frekansını üretirler. R1 (1K) ve LED1 (LED) ile devrenin çalışmasını izlemek üzere kullanılsada bu bölümde ihtiyaç olmadığından devre dışı bırakılmıştır. Grafik LCD ekran şemada gösterilmese de P3 konnektör bağlatısı üzerinden kablo ile bağlanmaktadır. R3 (10K) trimpot grafik LCD'nin kontrast ayarı için kullanılmaktadır.
Devrenin beslemesi P1 konnnektörü üzerinden D1 (2W10M) köprü diyodu üzerinden IC2 (7805)regüle edilerek devrelinin ihtiyacı olan beslemeyi oluşturur.
Burada BUT1,BUT2 ve BUT3 olarak belirtilen bas bırak butonlardan aslında sadece BUT1 butonu kullanılmakta ve bir kablo üzerinden ISP konnektörüne bağlanmaktadır. ISP içinse işlemcinin programlama işlemi için kullanılmakla birlikte şu hali ile butonlar için bağlantı noktası işlevini yerine getirmektedir.
Belirtilmeyen geri kalan kondansatörler filtre amaçlıdır.
Devre montajı açısından kritik bir durum yoktur. Görüldüğü gibi devre son derece sadedir. Sadece kabloları karta lehimlerken kısa devre olmamaları için dikkatli olmak yerinde olacaktır.
1K | R1 |
27R | R2 |
10K yatık trimpot | R3 |
27pF | C6,C7 |
100nF | C1,C2,C4,C5,C8 |
10µF/25V | C3 |
3mm yeşil LED | LED1 |
ATMEGA32 (DIL) | IC1 |
7805 | IC2 |
2W10M veya benzeri | D1 |
3,6864 Mhz kristal | XT1 |
2x3Header (ISP6) | isp |
2'li klemens | P1 |
Bas bırak buton | but1, but2, but3 |
40 bacaklı entegre soketi (DIL) | - |
PGM12864 | - |
Besleme için 9V'luk adaptör, buton kartı ile işlemci kartı arasındaki kablo ve konnektörü ve LCD ekran ile işlemci kartı arasındaki kablolar unutulmamalıdır.
Ayar için devreye ilk enerji verildiğinde ekranın görülebilecek şekilde trimpot ile ayarlanır. Daha sonra bir daha dokunmaya gerek olmaksızın çalışır.
Kullanım olarak ekranı değistirmek için sadece BUT1 butonuna basılıp bırakılacak. Buton bırakldığı zaman ekran güncellenecek. Son görüntüye gelindiğinde başa dönülecektir.
Hali hazırda LCD ekran için işlemci üzerinde 12 tane görüntü kaydedilmiş durumdadır. İstendiği takdirde bu program üzerinde değişiklik yapılarak artırılabilir. Şu anki programda 13Kbayt civarında program alanı kullanılmış durumdadır. Geri kalan 19Kbaytlık'lık bölümü boş olduğu anlaşılır. Her resim 1K civarında olduğuna göre daha 19 resim tane eklenebilir demektir. ("G_LCD.asm" programında gerekli değişiklik yapılırsa tabii. Program şu hali ile sadece 12 resim gösterebilecek kapasitededir.)
LCD ekrana gönderilecek verinin hex biçiminde veya rakamlara dönüştürülmesi gerekiyor. Bu işlem için kendimizde yapabiliriz, belki? Ama epey uğraştırıcı bir iş olacağı kesin. O nedenle BMP dosyalarını HEX biçimine dönüştüren Delphi 7 ile yazılmış "BMP_GLCD.exe" programı oluşturuldu. (Program XP işletim sisteminde test edildi.)
Program penceresi üzerindeki öğeler kısaca:
- Dönüştürülecek resmin görüntüsü
- (1 nolu alandaki) resmin negatifini oluşturan buton.
- Dönüştürülecek resmi seçmek ve yüklemek için buton. Yüklenen resim 1 nolu alanda gösterilir.
- 1 nolu alanda gösterilen resmi assembler programına eklenecek biçimde kodunu oluşturur ve 6 nolu alan üzerine yazan buton.
- 6 nolu alanda oluşturulmuş bir kodu "dosyaadı.asm" biçiminde kaydetmek için buton.
- 1 nolu alandaki resimden kod oluşturulduğu zaman kod burada oluşturulur ve görüntülenir. Daha sonra kaydet işleminde bu alandaki veri kullanılarak kaydedilir.
Bu programa yüklenecek görüntüler konusunda bazı sınırlamalar olduğunu belirtmekte fayda var. Yoksa istenilen sonuç elde edilemeyebilir. Öncelikle görüntü siyah ve beyaz olmalıdır, yani resim üzerinde gri tonlama ve renkli bölümler bulunmamalıdır(en iyisi bitmap biçiminde).Resim "negatif" butonu kullanılarak negatif işlemi uygulandığında görüntüde veri kaybı olmaması gerekir. Resim 128x64 piksel boyutlarında olmalıdır. Aksi takdirde resmin sadece sol üst köşesi eşlenerek kırpma meydana getirir. En önemlisi resim BMP uzantısı ile kaydedilmiş olmalıdır(Program sadece bu dosya biçimini destekliyor).
"BMP_GLCD.exe" programı ile kod oluşturmak işin yarısıdır. Şimdi bu oluşturulmuş ve kaydedilmiş belge açılırsa "resim1:" etiketi ile karşılaşılır. Bu assemler programı tarafından kullanılacak bir etikettir. Bu oluşturulan kod hangi sırada kullanılacaksa önce bu etiketteki 1 silinir ve yerine o rakam yazılır. Bu belge kaydedilir ve kapatılır.
Grafik LCD için oluşturulan "G_LCD.asm" dosyası açılır ve en sonda yer alan .include "dosyaadı.asm" satırlara kaydedilmiş dosyanın adı yazılır. (Aynı resim etiketi taşıyan dosya olmadığına emin olunmalıdır; yani iki tane resim1 veya resim2 etiketli dosya eklendiğinde derleme işleminde sorun çıkabilir). Program derlenir ve sorun yoksa işlemciye "G_LCD.hex" dosyası yüklenir.
Şekil-25 üzerindeki örnekte (.include "yunus.asm") kod satı "yunus.asm" dosyasını belirtir. "Yunus.asm" dosyası açıldığında kodların en üst satırında görülen "resim12:" etiketi işlemci üzerinden LCD'de gösterilecek 12. sıradaki resim olduğunu belirtir. Buraya başka bir dosya adı eklendiğinde ikinci bir "resim12:" etiketi taşıyamaz. Tabbi ki (.include "yunus.asm") kodu değiştirilmedikçe veya "yunus.asm" dosyasındaki "resim12:" etiketi değiştirilmedikçe.
Ekler:
ATMEGA32 hakkında bilgi için
"Atmega32 ile Grafik LCD'nin Sürülmesi" için dosyalar-birleşik
Bu kart programı ile denenmiş Grafik LCD ekranlar
GDM12864 | |
PGM12864 | |
JHD12864 |
Bu devrenin yapım sorumluluğu size aittir. Devre yapıldı ve çalışıyor. K.A....
Hiç yorum yok:
Yorum Gönder