18F452 İle Grafik LCD (glcd) Sürme

Grafik LCD sürmeMerhaba uzun zamandır birşeyler yazmadığımı farkettim. Evde gizli gizli çalışıyorumSmile. Neyse güzel ve herkes tarafından merak edilen bir uygulamayı paylaşıyorum bu sefer. Grafik LCD ekran nasıl sürülür? Bunun için 18F452 kullandım ama siz 16F877 de kullanabilirsiniz. Ancak 18F452 nin RAM belleği bizim için daha uygun çünkü daha geniş. 16F877 de sürekli hafıza hatası alabilirsiniz. 

Proje için Karaköy'den bir adet 128x64 Grafik LCD ekran aldım. MAVİ arkaışıklı. Yaklaşık 30 ytl civarında. Ararsanız bulabilirsiniz. Alırken kontrol kolaylığı olarak KS108 işlemcili olmasına dikkat edin. 

Grafik lcd ekran ön yüz

grafik lcd ekran arka yüz

18F452 zaten pin itibariyle 877 nin aynısı fiyatı da 10 ytl idi ben alırken. Onu da 2 hafta önce felan almıştım. Sonra gelelim çalışmamıza. Burada önemli nokta Grafik LCD ekranın kontras ayarının standart karakter LCD ekranlardan farklı olması. Şimdi pinlere bakarsanız şayet şöyle göreceksiniz:

//// * 1: VSS is connected to GND ////
//// * 2: VDD is connected to +5V ////
//// * 3: V0 - LCD operating voltage is connected from a 20k Ohm POT////
//// * 4: D/I - Data or Instruction is connected to B2 ////
//// * 5: R/W - Read or Write is connected to B4 ////
//// * 6: Enable is connected to B5 ////
//// *7-14: Data Bus 0 to 7 is connected to port d ////
//// *15: Chip Select 1 is connected to B0 ////
//// *16: Chip Select 2 is connected to B1 ////
//// *17: Reset is connected to C0 ////
//// *18: Negative voltage is also connected to the 20k Ohm POT ////
//// *19: Positive voltage for LED backlight is connected to +5V ////
//// *20: Negavtive voltage for LED backlight is connected to GND //// 

grafik lcd ekran bağlantı şekli

Şimdi benım LCD  ekranımda hangi pin ne gösteriyor. Ama sorun şu ki V0 ve VEE olmak üzere iki adet pin görünüyor. İlk önce bunları karıştırdım ben hangisine pot pağlayacağım diye. Ama sonra bir siteden öğrendim ki, bağlantı şekli şu şekilde olmalıymış.

glcd kontrast ayarı

İşte bunları da yaptıktan sonra örnek bir program hazırladım. Zaten kodlarda açıklamalar da mevcut. 

İşte bu kullandığım 128x64 resim. Photoshop da normal olarak yazıp tek renk kaydettip bmp olarak.

harmankaya i know

Sonra bunu BMP2ASM programı ile açıp kodlarını aldım. Dikkat eğer programla açarken problem çıkarsa Resim dosyasını önce PAİNT ile açıp farklı kaydet diyip TEK RENK BMP OLARAK KAYDET deyin.

Bu simulasyonun ekran görüntüsü:

glcd simulasyon

 

Bu da devre üzerinde çalıştırılmış hali:

GLCD harmankaya

 

Sorunuz olursa sorabilrisiniz.

BMP2ASM Programı

BMP resmi

CCS C kodları

Proteus ISIS simulasyonunu arşivleyip aşağıya linkini ekliyorum

http://projects.harmankaya.org/PIC/uygulamalar4/GLCD/GLCD_ORNEK.zip 


Twitter Digg Delicious Stumbleupon Technorati Facebook

Etiketler: ,

“18F452 İle Grafik LCD (glcd) Sürme” yazısına gelen cevaplar;

  1. Anlatım için teşekkürler önümüzdeki hafta bu uygulamayı deneyeceğim :).

  2. Denedikten sonra siz de deneyimlerinizi paylaşırsanız sevinirim. Mesela PIC 20Mhz ikn ben çalıştıramadım. Ekranda böyle bozuk bişeyler çıktı :)

  3. Bu da videom



    http://www.youtube.com/watch?v=IJXuiWloVe0

  4. Pic16f877 ile aynı bağlantıları yaparak çalıştırdım. anlatımınız için tekrardan teşekkürler.



    20Mhz ile deneme şansım yok pic 4mhz lık :).



  5. Merhaba 16f877 de 20mhz lik frekansı destekliyor (:



    Bu arada yazmayı unutmuşum grafik lcd kütüphanesinde delay_cycle() şeklinde tanımlanmış cycle hesabı gecikmeleri 5 ile çarpıp içlerine yazdım ve düzeldi. :) Yani 20Mhz de de çalıştırıyorum

  6. merhaba,



    ben bu entegrenin üzerinde PIC16f877 -04/P yazıyor. elimdeki bu pic 20mhz desteklemiyor.



    Birşey sormak istiyorum size,



    ben bu lcd yi kablosuz olarak yazılanları nasıl değiştiririm ?



  7. Elbette değiştirebilirsiniz. Şimdi bir arkadaşımın projesi zaten. Bluetooth ile yapıyor o. Ama siz RF modül kullanıp (10 ytl felan alıcı + vericisi) ayrıca RS232 portunu kullanarak yapabilirsiniz.

  8. BEN SİZİN PROJELERİNİZDE BİR EKSİKLİK GÖRDÜM VE SÖYLEMEM GEREKİR.MALZEME LİSTESİ YOK VE BEN BNLARI YAPMAK İSTİYORUM YARDIMCI OLURMUSUNUZ.

  9. üstad şu proğramı birde 877 ile yapsan

  10. paylaşım için teşekkürler...elinize sağlık

  11. Çok bir farkı yok aslında 877 ile zaten pinleri aynı tek fark programın başındaki configürasyonlar değişiyor :)

  12. Merhabalar,

    Yaptığınız çalışmadan dolayı ellerinize sağlık, Allah razı olsun. Hakikaten çok faydalı oldu.



    Kafama takılan bir durum var, grafik lcdYe yazı yazdırırken değişken yazdırmayı nasıl yapıyoruz bir türlü çözemedim kafayı yiyeceğim.



    Hani printf("%d",degisken); şeklinde ifade ediyoruz ya, glcd_text57 komutu ile olmuyor sanırsam. Yardımlarınız için şimdiden teşekkürler.

  13. Merhablar,



    Değişkeni ekrana yazdırmak için kullanılan komut



    char degisken[]="ekran";

    glcd_text57(2,0,degisken,1,ON);



    2 : X koordinatörü ( x,y yeri ters olabilir )

    0 : Y koordinatörü

    degisken : Ekrana yazdırılcak değişken

    1 : Yazı kalınlığı

    ON : Yazı rengi



  14. Merhabalar,



    Arkadaşlar problemi çözdüm.. Mert arkadaşa teşekkür ederim.



    Yalnız değişken ekrana yazdırmayı şu şekilde yapabiliyoruz, eğer başka şekillerde yapılabiliyorsa bilmiyorum diğerlerini, bilen olur da paylaşılırsa memnun ve mesrur oluruz:D



    mesela int i; gibi değişkenimiz olsun. Ve i değişkeni her değiştiğinde ekrana son değerini yazdırmamız gerekiyor olsun.



    İki seçeniğimiz var: ya i'nin alacağı değerleri tek tek karakter olarak tanıtıp, her değere karşılık gelen karakteri if() ifadesiyle yazdırmak,(bu zor olan)



    ya da, sprintf komutuyla halledivermek..

    ekrana yazılabilecek en uzun karakterli için bir dizi tanımlarız: char karak[50];



    devamında;



    ....

    sprintf(karak,"i'NIN SON DEGERI=%d",i);

    glcd_text57(1,1,karak,1,ON);



    şeklinde yazdırabiliriz..

  15. Hocam süpersin. Harika bi paylaşım olmuş. GLCD ye yeni başlayanlar için çok güzel bi kaynak..

  16. beyinlerinize sağlık bir de asm de bir örnek bulabilsem minnettar kalacağım aylardan beri arıyorum başka dile de kafa artık basmıyor .yinede cok teşekkürler

  17. Musa bey;

    asm ile örnek var mı bilmiyorum ama oturup kendiniz yazarsanız gerçekten eziyet olur diye düşünüyorum onun yerine C ye birazcık başlasanız daha kolay.

    Selamlar

  18. Erhan bey ccs c ye başladım bayağı kolaymış
    bir sayfayla her şey halloluyormuş ama ilk göz ağrım asm

  19. Tebrikler :)

    ASM ile bunları yazarsanız eğer bana gönderin sitede sergileyelim :) Sayfalarca kod hayal bile demiyorum :)

  20. kolay olanı bilmezsen zor olanla yetinirsin ben kendi cabamla öğrenmeye çalışıyorum tabii sizlerin yardımıyla

  21. Ben de ilk ASM ile başladım ancak PWM ve ADC sonrasında artık C ye atladım. Bir üst seviye dil ile yazmak aslında bzen işleri kolaylaştırıyoruz ancak hata bulmayı biraz zorlaştırıyor.

    Hoş asm ile yazınca da bulamıyorum hatayı. Hatta yazdıkdan 1-2 ay sonra koda bakınca ne düşünmüş de böyle yazmışım diye düşünüyordum :)

  22. merhaba Erhan bey aslında haklısınız asm de sanki kontrol bende gibi hissediyorum
    ccs de hazır alt programlar işi kolaylaştırıyor.neyse ccs c ye başladım ilk glcd mi çalıştırdım
    Bir sorum olacak ks108 li bir devreye t6963 lü glcd bağlasam çalışırmı tabii pinleri doğru bağlamak şartı ile ilk kurulum komutları aynımıdır teşekkürler.

  23. merhaba bende bu uygulamayı yapmaya çalışıyorum ancak ekranda çıktı alamıyorun dümdüz mavi ekran geliyor osilatorü hangi frekansta kullanmalıyız ve kondansatörlerin değeri verimli çalışması için ne olmalı. glcd yi s6bo108 kontrollü almışım selanik pasajından ancak o seride kso108 ailesindenmiş.bu şekilde çalışmazsa acaba bu kontrollünün .h dosyası ccs c de varmı biliyormusunuz desteğiniz için teşekkürler ...glcd pgm12864a-nsw

  24. ismail kardeşim birincisi glcd ks 108limi bilmiyorum öyle satmış olabilirler.ikincisi pin bağlandıların ücüncüsü kontrast ayarı gerekli yoksa benim gibi çok uğraşırsın ks 108 in ccs cde dosyası var ben çalıştırıyorum.web den pgm12864a ya bak işlemcisi ne diye

  25. birde ben 16f877 kullandım 20mhz olanından
    sorunsuz çalışıyor
    kolay gelsin

  26. musa kardeşim glcd işlemcisi (S6B0108 veya Eşdeğer) şeklinde yazıyor kataloğunda ancak araştırdım bi sitede bu işlemciyi de kso 108 ailesi içinde gösteriyor ancak hala daha bir sonuç elde edemedim :)

  27. ismail kardeş glcdnin vo pinini şemadaki bağlantısını yaptınmı potu cevirerek ekranda siyaha kacan fon görmen lazım pin bağlantılarından eminmisin

  28. erhan bey yardımınıza lütfen yardımınız lazım glcd ekranda analogdan okuduğum değeri yazıyorum fakat gözü çok rahatsız eden titreşimde çalışıyor sorunu bir türlü çözemedim yardım ederseniz minnettarım tşk.

    while (1)
    {
    glcd_init(on);
    deger=read adc();
    delay_us(20);
    sprintf(deger,"%d",1);
    glcd_text57(1,1,deger,1,ON);
    }

  29. Merhaba Musa;

    Evet çünkü glcd_init(0n) ile sürekli LCD ekranını temizleyip yeniden yükleme yapmaya çalıştığın için. Sonsuz döngünün üstüne koyarsan daha faydalı olur.

    Son olarak Genelde Grafik LCD komple temizlenip yazmaya kalkarsanız o titreşim olur. Tavsiyem sadece ekranın neresine yaz yazacaksınız orayı silip değiştirmeniz.

    Bir de :) 20Mhz kristal kullanırsanız sorun biraz daha azalır.

  30. erhan bey ilgilendiğin için teşekkürler. acaba diğer progamlama dillerindede aynı sorun varmı mesela jal'da .

  31. Musa Bey;

    Olay şöyle aslında. CCS de hazır bir grafik sürücü kullandığımız için haliyle içine girip müdehale etmiyoruz. Sadece bilinen fonk. kullanıyoruz. İyi bir C & C++ ile bu kodlar incelenip size özelleştirilmiş bir kütüphane hazırlarsanız sanırım daha faydalı olur. Çünkü kütüphane kullanmanın en büyük dezavantajı işte kod satırı fazla olduğu için işlem süresi bir hayli uzuyor.

    Ama benim dediğim gibi sadece güncellemek istediğiniz yeri belirtip orayaı siler ve üzerine yazarsanız o titreme olayından kurtulursunuz. Misal ben bu olayı (GLCD+PIC) bir de RFID ile birleştirmiştim. Orada ekran üzerinde bir de Tarih/Saat vardı.

    Haliyle saniye bölümünün sürekli güncellenmesi gerekiyordu. İşte dediğim yöntemle yaptım. Videolardan izleyebilirsiniz.

    Kolay gelsin

  32. Erhan bey sorunumu dediğin gibi hallettim fonksiyonla pixel,pixsel sildim gayet güzel oldu yardımların için çok teşşekür ederim.

  33. Musa kardeş proteusta pic in ürerine gelip 2 kere sağ tıklayıp açılan pencerede pic. in clock frekensını 20Mhz yaparsan düzelir

  34. Merhabalar arkadaslar ilk once boyle bir devre için tesekkur etmek isterim fakat bu devrede bilmeyenler de olabilir.Misal ben bu işe baslarken hiçbirsey bilmiyordum devreyi yaptım baskıyı çıkardım devre çalışmadı cunku ne trimpot ne cristal nede diger elemanlar vardı.Bilmedigimiz için baglayamadık sonra ogrendik.Sorunum su burada malzeme listesini verirseniz çok sevinirim simdiden tesekkur ederim.

  35. @cem

    haklısınız aslında orası da eksik kalmış. Zaten bi ara bu devreyi toparlayıp içinde RS232+GLCD+SICAKLIK SENSORU+RTC Vs şeyler olan mini bir board hazırlamayı düşünüyorum sanırım o devre bütün sıkıntılarımızı çözmüş olacak :)

  36. Piyasadaki Winstar WG12864C-TMI-V#N Glcd için yapılacak bir kod değişikliğine ihtiyaç olduğunu fark ettim. Bu Glcd ile çalışma yapacakların, glcd_text57 fonksiyonu için;

    graphics.c kütüphanesinde Satır 546

    -- glcd_pixel(x+m, y+k*size+l, color);

    Aşağıdaki kod ile değiştirmeleri gerekmektedir.

    -- glcd_pixel(x+m-64, y+k*size+l, color);

    Tüm fonkisyonlar için ise HDM64GS12.c kütüphanesinde değişiklik yapmak gerekmektedir. Onunla ilgili tüm verileri denemediğim için yorum olarak şimdilik yazmıyorum.

    İyi Çalışmalar,

    Hayırlı teskereler :)

Yorum Gönder

İsim

E-mail Adresi

Web Sayfanız (Spamı sevmiyoruz)

Güvenlik Kodu

güvenlik kodu

Mesajınız

Yeni yorumlardan beni haberdar et.

working..