3

GLCD

Başlatan 3mZ, 27 Nisan 2012, 20:23:07

3mZ

Arkadaşlar,

Bu glcd'yi benim gibi kullanmak isteyen bir çok kişi var fakat tam anlamıyla hiçbir forumda ders mahiyetinde bir şey bulamadım. Kütüphane açısından protonda kullanmak istiyorum. Amacım glcd şekil grafik çizmeden ziyade ekranı büyütmem gerekiyor  fakat glcd adam akıllı bir şey bilmediğim için 4*20 nin içine sıkış tıkış ediyorum mecburen.Sadece ETE hocanın bir çalışması var oda MCS farklı bir yöntem benim projelerimde hafıza açısından problem ve baya zahmetli yoksa her zamanki gibi ETE hocam hakkını verir. Eğer varsa elinde döküman ya da 128*64 de 7-8 satır yazı en azından elimizde şablon bir program olur ve anlamamız daha kolay olur ve GLCD hakkında sorulacak her soru burada sorulur ise forumu kirletmemiş oluruz diye düşünüyorum.
Paylaşımlarınız için şimdiden teşekkür ederim.

3M

Mucit23

#1
Ben anlatayım.

Grafik LCD kullanımı Protonda çok kolaylaştırılmış Birçok desteği mevcut. Hazır komutları ile daire, Çizgi, kare çiziebiliyor. Buna benzer birçok fonksiyonu var.
Protonda Grafik LCD kullanmak için kullanılan bazı komutlar var. Bunların ne işe yaradığını birazdan açıklayacağım.

İlk önce İşlemciye Grafik lcd ile ilgili Declare tanımlamalarımızı yapmamız gerekiyor.
Bu tanımlamalar aşağıdaki gibidir.

Declare LCD_DTPort = PORTB                 'GLCD DATA PORTLARI PORTB'YE BAĞLI
Declare LCD_RSPin = PORTC.5                'GLCD RS PİNİ PORTC.5 BAĞLI
Declare LCD_ENPin = PORTC.1                'GLCD ENABLE PİNİ PORTC.1 BAĞLI
Declare LCD_RWPin = PORTC.4                'GLCD RW PİNİ PORTC.4 BAĞLI
Declare LCD_CS1Pin = PORTC.2               'GLCD CS1 PİNİ PORTC.2 BAĞLI
Declare LCD_CS2Pin = PORTC.3               'GLCD CS2 PİNİ PORTC.3 BAĞLI
Declare LCD_Type =  GRAPHIC                'GLCD TİPİ GRAFİK KS0108 128*64B WİNSTAR             
Internal_Font = On                 
Font_Addr = 0


Tanımlamalarımız bu şekilde

Bu tanımlamarımızı yaptıktan sonra birde programımıza font dosyasını eklememiz gerekiyor.
Protonun kendi bünyesinde font dosyası bulunmaktadır. Bu yüzden programımıza Include "font.inc"  komutunu ekleyerek direk font dosyasını eklemiş oluyoruz.
Bu dosya olmadan lcd ye yazı yazamayız..
Bundan sonra Direk Print komutuyla lcdye yazı vs yazabiliriz

Print komutununda kullanımı şu şekildedir.

Print At Ypos,Xpos,"www.etepic.com" 

Burada lcdye yazılacak yazının konumunu belirleyen Ypos ve Xpos olmak üzere iki adet değişken var.
Aslında Grafik LCdyi yazı yazmak için kullanırken LCD yi 8X128 bir karakter lcd gibi düşünebilirsiniz. LCD 8 satır ve 128 Sütün olarak kullanılıyor.
Burada Ypos Değişkeni 0 ile 7 arasında değer alır Ve satırı belirleyen değişkendir.
Xpos değişkeni ise Sütünü belirleyen değişkendir. 0 ile 127 arasında değer alabilir.

Şimdi ufak bir program yazalım.
Device = 16F877A                   'MCU 16F877A
Xtal = 4                           'KRİSTAL 20MHZ

TRISA=0:PORTA=0
TRISB=0:PORTB=0
TRISC=0:PORTC=0
TRISD=0:PORTD=0
TRISE=0:PORTE=0

All_Digital= TRUE                  'ADC PORTLARININ TAMAMI DİJİTAL GİRİŞ VEYA ÇIKIŞ
PortB_Pullups OFF
;_____________________________GLCD TANIMLAMALARI___________________________________
Declare LCD_DTPort = PORTB                 'GLCD DATA PORTLARI PORTB'YE BAĞLI
Declare LCD_RSPin  = PORTC.2               'GLCD RS PİNİ PORTC.5 BAĞLI
Declare LCD_ENPin  = PORTC.0               'GLCD ENABLE PİNİ PORTC.1 BAĞLI
Declare LCD_RWPin  = PORTC.1               'GLCD RW PİNİ PORTC.4 BAĞLI
Declare LCD_CS1Pin = PORTC.3               'GLCD CS1 PİNİ PORTC.2 BAĞLI
Declare LCD_CS2Pin = PORTC.4               'GLCD CS2 PİNİ PORTC.3 BAĞLI
Declare LCD_Type   = GRAPHIC               'GLCD TİPİ GRAFİK KS0108 128*64B WİNSTAR         
Internal_Font = On                 
Font_Addr = 0
'___________________________________________________________________________________
Cls                                        'GLCD EKRANINI TEMİZLE
DelayMS 500
BASLA:
Print At 0,0,"www.etepic.com"                     
DelayMS 1000
Print At 1,0,"Mucit23"
DelayMS 1000
Print At 2,0,"Grafik LCD deneme"
DelayMS 1000
Print At 3,0,"Programidir. "
DelayMS 1000
Print At 4,0,"LCD 8 SATIR 128 SUTUN"
DelayMS 1000
Print At 5,0,"OLARAK KULLANILIR."
DelayMS 1000
Print At 6,0,"ABCDEFGHIiJKLMNOPRSTU"
DelayMS 1000
Print At 7,0,"VYZW 123456789-/()*+?"
DelayMS 1000
GoTo BASLA

Include "font.inc"                 'Programa font dosyası dahil ediliyor..
End

Program sırayla lcdye yazılar yazıyor
Şimdilik LCD ye yazı yazma konusunda diyeceklerim bu kadar. İlerde vaktim olursa diğer geometrik şekilleri çizmemize yarayan komutlarıda anlatırım.
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

3mZ

@Mucit 23,

Çok teşekkür ederim. Şimdilik başlamam ve kendimi glcd'de geliştirmem için yeterli umarım üyelerin çoğuda glcd konusuna merak duyacaktır.

3M

Hattuşa

slm arkadaşlar
GLCD ile resim basma işlemide yapabiliyor proton biliyorsunuz. benim sormak istediğim, bir resmi ekranın belirli bir yerine kısmi olarak basamayız mı?

For YpOs= 0 To 7
    For XpOs = 0 To 127
             AdR =(YpOs *128) +XpOs
             ReSm =CRead cerc +AdR
             LCDWrite YpOs, XpOs, [ReSm]
                 Next
                 Next


bu şekilde 128x64 basıyoruz peki resmi daha küçük ebatta çevirip o ebata göre basabilmek için ne yapmalıyız


Mucit23

KS0108 çipsetli grafik lcd'leri 8 satır 128 sütün gibi düşünmek gerek. Adresleme işlemi bu şekilde yapılıyor.

İlk önce ekranın veri yapısını bilmek gerek. Yukarıda dedim ya ekranı 8 satır 128 sütün gibi düşünmek gerek. Ekrandaki adresleme yapısı bu şekilde.

Verdiğin LCDWrite fonksiyonunu inceleyeyim.

LCDWrite Ypos, Xpos, [DATA]

Şeklinde kullanımı var.

Burada Xpos parametresi 0-127 arası bir değer alır. Ypos parametresi ise 0-7 arası bir değer alıp ekranda satır seçimi buradan yapılır.
DATA değeri ise ekrana ilgili kordinatına gidecek olan 1 byte'lık veridir.

Diyelimki LCDWrite 7, 127, [255]  şeklinde bir komut kullandık. Deneyip görürsen eğer ekranın sağ alt köşesine üst üste 8 pixelden oluşan bir çizgi göreceksin.
LCDWrite 7, 127, [128] yazsaydık eğer ekranın sağ alt köşesinde bir nokta görürdün. Aynı şekilde LCDWrite 0, 0, [1] komutuyla ekranın sol üst köşesine nokta koyarsın. Dediğini yapabilmen için Öncelikle isiste bu tür denemeler yaparak ekranın çalışmasını anlaman gerekir.

LCDWrite fonksiyonunu iyice öğren daha sonra dediğine bakalım.
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

Hattuşa

slm arkadaşlar;
malum yazdığımız kodları isisde deniyoruz. bu deneme esnasında isis aşağıdaki resimdeki gibi hata veriyor. Bu hata gerçekte olmayan ama isisin hata olarak gördüğü bir durum. ne yaptımsa bu hatayı çözemedim. sizce bu hata iletisini almamak için isisde neyi düzeltmeliyim?

ete

Bu pin çakışmasını gösteriyor.. Bazı pinlerde hig ile low çakışıyor gözüküyor.
Genelde bazen input bazen output olan pinlerin karşılaştığı durumdur. Bir tane ikaz göz ardı edilebilir ama birden fazla olursa bir sorun var deyip incelemen gerekir.

Ete

Hattuşa

Alıntı yapılan: ete - 01 Aralık 2015, 13:35:58
Bu pin çakışmasını gösteriyor.. Bazı pinlerde hig ile low çakışıyor gözüküyor.
Genelde bazen input bazen output olan pinlerin karşılaştığı durumdur. Bir tane ikaz göz ardı edilebilir ama birden fazla olursa bir sorun var deyip incelemen gerekir.

Ete

hocam print komutu sonrası gecikme uygulamadığım zamanlarda oluyor bu, yoksa kodda sorun olmadığı kesin zira çalışıyor.
mesela PLL ile 40 mhz de işlemciyi çalıştırdığımızda isisde 40mhzde GLCD ekran çalışmıyor. gerçekte çalışıyor. isisde deneme yaparken hep kodu 8MHZ altında derleyip simülasyon yapıyorum yada bunun bir çözümü vardır belki ama ben bilmiyorum

Powered by EzPortal