Grafik LCD de Menü oluşturma ve Ekranda butonlar yapma

Başlatan Mucit23, 03 Haziran 2011, 07:10:21

Mucit23

Anladım hocam. ozaman hocam ilgili butonun üzerine gelince kutuyu ive kutu içerisindeki yazıyı invert etmek için pixel pixel işlemeliyim. Biraz zahmetli gibi görünüyor. Daha kolay bir yolunu bulsam iyi olacak ama hiç olmadı bunu denerim. Ben yinede bu yöntem üzerinde biraz çalışayım bişeyler yapmaya çalışayım. Birde ekranı piksel piksel işleyeceğim için inş ekranda bir geçik oluşmaz. Gerçi 18F452 ve 20 Mhz de çalışıyorum. gecikme olmaz inş

Mucit23

Arkadaşlar şu Circle komutu kafamı bozuyor. Bir türlü istediğim gibi çalıştıramadım. Yapmak istedğim şey lcd ekranın tam ortasına bir daire çizmek help dosyasındakilere bakarak birşeyler yaptım. Denediğimde lcd ekranda kıpırdaşmalar oluyor fakat sadece lcd ekranın alt kısmında oluşuyor. Ne olduğu belli değil. Sizce nerede hata yapıyorum. Aynı şekilde box komutunuda bir türlü çözemedim. Ondada istediğim gibi kullanamıyorum
Yazdığım kodlar bunlar. Beni yönlendirirseniz sevinirim.
Device 18F452

Config_Start
   OSC = HS ; HS-PLL Enabled
   PWRT = On ; Enabled
   BOR = OFF ; Disabled
   WDT = OFF ; Disabled
   LVP = OFF ; Disabled
   Debug = OFF ; Disabled
Config_End

Xtal 20
TRISA=%00111111
TRISB=%00000000
TRISC=%00000000
TRISD=%00000000
TRISE=%00000000

PORTA=0:PORTB=0
PORTC=0:PORTD=0
    PORTE=0
    
All_Digital= TRUE                  'ADC PORTLARININ TAMAMI DİJİTAL GİRİŞ VEYA ÇIKIŞ
LCD_DTPort = PORTD                 'GLCD DATA PORTLARI PORTB'YE BAĞLI
LCD_RSPin = PORTB.0                'GLCD RS PİNİ PORTC.5 BAĞLI
LCD_ENPin = PORTB.2                'GLCD ENABLE PİNİ PORTC.1 BAĞLI
LCD_RWPin = PORTB.1                'GLCD RW PİNİ PORTC.4 BAĞLI
LCD_CS1Pin = PORTB.4               'GLCD CS1 PİNİ PORTC.2 BAĞLI
LCD_CS2Pin = PORTB.3               'GLCD CS2 PİNİ PORTC.3 BAĞLI
LCD_Type =  Samsung            'GLCD TİPİ GRAFİK KS0108 128*64B WİNSTAR
Internal_Font = On                 
Font_Addr = 0
    GLCD_EXTERNAL_PRINT = PPRINT
PORTB.5=1
Dim XPOS As Byte
Dim YPOS As Byte
Dim X    As Byte
Dim Y    As Byte
Dim RADIUS As Byte
Dim SET_CLR As Byte
Dim SIZE As Byte
Cls
SIZE=20
SET_CLR=1
RADIUS=20
XPOS=63
YPOS=32

 Circle SET_CLR , XPOS , YPOS , RADIUS
 DelayMS 10

End

pcb

OSC = HS ; HS-PLL Enabled
Xtal 20

PLL aktif ve kristali 20Mhz kullanıyorsan bu tür ekran problemleri olabilir. Kristali 10 Mhz kullanmalısın PLL için.
Programa bakmadım sadece üstte bunu gördüm

Mucit23

10 Mhz bir kristal ile deniyeyim. Hatta 4 Mhz de bir de deniyeyim. Daha önce birkez pll yi aktif etmiştim. Sonradan iptal ettim ama orayı düzeltmemişim. 4 Mhz de bir deniyeyim

Mucit23

Merhabalar
Dediğinizi gibi yaptım. Elimde 10 Mhz kristal yoktu. 4 mhz de deneyince oldu. Ekranda çember oluştu. Acaba neden yüksek frekanslarda bu komutlar çalışmıyor. Yada düzgün çalışmıyor. Bu konuda bi tecrübesi olan varmı.
Karakter lcd leri kullanırken 8 Mhz ve üzerinde lcd veri gönderiminin yavaşlatılması gerekiyor. Aynı işlemi GLCD dede yapabilirmiyiz.

Maxim

mucit,

kodun başına Declare GLCD_STROBE_DELAY = 10 yaz sonra istersen 40mhz de çalış 

ayrıca yukarıda yazmıştım yapmamışsın, tekrar yazıyorum
help içindeki print komutlarına bak

Mucit23

Alıntı yapılan: Maxim - 06 Haziran 2011, 17:21:31
mucit,

kodun başına Declare GLCD_STROBE_DELAY = 10 yaz sonra istersen 40mhz de çalış 

ayrıca yukarıda yazmıştım yapmamışsın, tekrar yazıyorum
help içindeki print komutlarına bak

Maxim hocam Kodu ekleyince düzeldi sorun. Teşekkür ederim.
İnvert işine gelince haklısınız. Sizin söylediklerinizi unutmuşum. Şimdi ben proton help dosyasına biraz göz gezdirdim. Hemen şu kısım gözüme çarptı.
Most of the above modifiers still work in the expected manner, however, the AT modifier now starts at Ypos 0 and Xpos 0, where values 0,0 will be the top left corner of the LCD. There are also four new modifiers. These are: - 
 
 FONT 0 to n  Choose the nth font, if available 
 INVERSE 0-1  Invert the characters sent to the LCD 
 OR 0-1   OR the new character with the original 
 XOR 0-1   XOR the new character with the original 
 
Once one of the four new modifiers has been enabled, all future PRINT commands will use that particular feature until the modifier is disabled. For example: - 
 
 ' Enable inverted characters from this point 
 PRINT AT 0 , 0 , INVERSE 1 , "HELLO WORLD" 
 PRINT AT 1 , 0 , "STILL INVERTED" 
 ' Now use normal characters 
 PRINT AT 2 , 0 , INVERSE 0 , "NORMAL CHARACTERS"


Acaba doğru yerlerimi inceliyorum. Ekrana yazı yazarken "INVERSE 1" komutunu eklersem(yukarıdaki gibi) yazı terslenmiş olarak çıkarmı

Son olarak birşey daha sormak istiyorum. Çevremdeki GLCD ve proton ile yapılmış uygulamaların çoğunu inceledim sayılır. Bazılarında GLCD ye yazı yazmak için programın en altına Include "FONT.INC" yani proton içerisindeki font dosyasını çağırarak ekrana Direk Print At 1 , 1 , "Merhaba" gibi bir komutla yazı yazılıyor. Ben bunu denedim Fakat yine ekranda yazıyı çıkartamadım. Bunu yapmak için acaba font dosyasında değişiklikmi yapmak gerekiyor.

Maxim

evet inverse komutu yazıyı tersler

font.inc için birşey diyemiyorum çünkü yazı gelmesi lazım
sample klasörü içinde grafik lcd için örnek bir dosya olması lazım diye hatırlıyorum
işte varmış
bu çalışır, sende niye olmuyor bilemiyorum


' Display text and graphics on a graphic LCD

    Include "Proton18_G4.Int"
    Declare Optimiser_Level = 2

    Declare Warnings = Off
    Declare Stamp_Compatible_Sin = On
' Set up some Variables

    Dim Xpos As Byte
    Dim Ypos As Byte

    DelayMS 100
    Cls
    Print "Graphic LCD Test"

Again:
    For Xpos = 0 To 63
        Ypos = Sin Xpos
        Plot Xpos , Ypos
        DelayMS 10
    Next
    For Xpos = 0 To 63
        Ypos = Sin Xpos
        UnPlot Xpos , Ypos
        DelayMS 10
    Next
    GoTo Again

    Include "Font.Inc"

Mucit23

Maxim hocam invert komutunu denedim. Tamda istediğim gibi çalışıyor. Burada sıkıntım yok ama şu font dosyası kafamı karıştırıyor ???
Nedense o font dosyasını kullanarak ekrana yazı yazamıyorum ama kendi oluşturduğum font dosyası ile yazı basabiliyorum.
Yazdığım kodlar bunlar. Acaba kodlarımdamı bir hata var. Aynı tanımlamalar ilefontlu yazı basabiliyorum.
Device 18F452

Config_Start
   OSC = XT ; XT OSC
   PWRT = On ; Enabled
   BOR = OFF ; Disabled
   WDT = OFF ; Disabled
   LVP = OFF ; Disabled
   Debug = OFF ; Disabled
Config_End

Xtal 20
TRISA=%00111111
TRISB=%00000000
TRISC=%00000000
TRISD=%00000000
TRISE=%00000000

PORTA=0:PORTB=0
PORTC=0:PORTD=0
    PORTE=0
    
All_Digital= TRUE                  'ADC PORTLARININ TAMAMI DİJİTAL GİRİŞ VEYA ÇIKIŞ
LCD_DTPort = PORTD                 'GLCD DATA PORTLARI PORTB'YE BAĞLI
LCD_RSPin = PORTB.0                'GLCD RS PİNİ PORTC.5 BAĞLI
LCD_ENPin = PORTB.2                'GLCD ENABLE PİNİ PORTC.1 BAĞLI
LCD_RWPin = PORTB.1                'GLCD RW PİNİ PORTC.4 BAĞLI
LCD_CS1Pin = PORTB.4               'GLCD CS1 PİNİ PORTC.2 BAĞLI
LCD_CS2Pin = PORTB.3               'GLCD CS2 PİNİ PORTC.3 BAĞLI
LCD_Type =  GRAPHIC             'GLCD TİPİ GRAFİK KS0108 128*64B WİNSTAR
Internal_Font = On                 
Font_Addr = 0
Declare GLCD_STROBE_DELAY = 10 
GLCD_EXTERNAL_PRINT = PPRINT
Dim XPOS As Byte
Dim YPOS As Byte
Dim X    As Byte
Dim Y    As Byte
Dim RADIUS As Byte
Dim SET_CLR As Byte
Dim SIZE As Byte
    DelayMS 100
    Cls
Print At 3,20,"Mucit"
End
Include "font.inc"


Bunu derleyip simülasyonda dedediğimde ekran resimdeki gibi saçmalıyor..

Başka fikri olan yokmu arkadaşlar Neden protonun kendi içerisindeki font dosyasıyla ekrana yazı yazamıyorum :(

muhittin_kaplan


Mucit23

Bu gün akşama kadar oturup proton komutlarının(Daha doğrusu kullandığım komutların) ne işe yaradığını öğrenmeye çalışacağım. Dediğinizi yaptım. Sorun düzeldi. Şimdi aklımda şu soru oluştu.
"GLCD_EXTERNAL_PRINT = PPRINT" Bu komut ne işe yarıyorki glcd nin saçmalamasına yol açıyor

Mucit23

Muhittin Hocam Yukarıdaki gibi GLCD_EXTERNAL_PRINT = PPRINT
komutunu kaldırınca direk prınt komutuyla ekrana yazı yazmaya başladım. Ama şimdi farkettmiki Ekrana hem prınt komutyla normal yazı hemde font oluşturup fontlu yazı yazılmıyor. Mesela örnek vereyim. Yukarıdaki komutu programa ekleyince istediğim fontta ekrana yazı yazabiliyorum ama direk proton içerisindeki font dosyasıyla yazı yazamıyorum. Ekranda resimdeki gibi bişeyler çıkıyor. Yukarıdaki komutu programdan kaldırınca bu sefer fontlu yazı yazamıyorum ama Normal yazı yazabiliyorum. Şimdi merak ettiğim şey İkisini bir arada nasıl kullanabilirim. Bunu öğrenmek istiyorum.

Birde normal font dosyasıyla ekrana yazı yazarken adresleme işi biraz aklımı karıştırdı. Şimdi ekranı normal karakter lcd gibi mi düşünmek lazım  anlamadım gitti Denemelerim ile anladığım kadarıyla ekranda 8 satır oluşuyor. Yazı yazarken bu 8 satırlar içerisinde yazı yazıyoruz. Satırlar tamamda bu sütünları anlamadım. Ekran karakter lcdlerdeki gibi 5x8 kutuclarla dolu gibimi düşünmek lazım.

muhittin_kaplan

Aykutun konuyla ilgili güzel örnei var.
Device = 16F877
Config XT_OSC,WDT_OFF,PWRTE_ON,BODEN_ON,LVP_OFF,DEBUG_OFF,CP_ALL
XTAL = 4
ALL_DIGITAL= TRUE 'ADC PORTLARININ TAMAMI DİJİTAL GİRİŞ VEYA ÇIKIŞ
LCD_DTPORT = PORTD 'GLCD DATA PORTLARI PORTD'YE BAĞLI
LCD_RSPIN = PORTC.5 'GLCD RS PİNİ PORTC.5 BAĞLI
LCD_ENPIN = PORTC.1 'GLCD ENABLE PİNİ PORTC.1 BAĞLI
LCD_RWPIN = PORTC.4 'GLCD RW PİNİ PORTC.4 BAĞLI
LCD_CS1PIN = PORTC.2 'GLCD CS1 PİNİ PORTC.2 BAĞLI
LCD_CS2PIN = PORTC.3 'GLCD CS2 PİNİ PORTC.3 BAĞLI
LCD_TYPE = GRAPHIC 'GLCD TİPİ GRAFİK KS0108 128*64B WİNSTAR
INTERNAL_FONT = On
FONT_ADDR = 0
GLCD_EXTERNAL_PRINT = PPRINT
Cls
DelayMS 500
BASLA:
Print Font ArialK____12
Print At 3,20,"AYKUT 54"
DelayMS 2000

Print Font ArialK____12
Print At 20,0,"320VOLT.COM"
DelayMS 2000

Print Font Arial____8
Print At 35,0,"glcd2 karakter basma"
DelayMS 2000

Print Font ArialK____12
Print At 50,0,"16F877 + GLCD :)"
DelayMS 2000
End
Include "Arialk12.txt"
Include "ARIAL8.txt"


http://www.teknomerkez.net/ek/476/glcd2-karakter-basma.zip

Mucit23

Evet aykut hocamızın bu örneklerinibiliyorum. Benim anlamadığım Neden kendi oluşturduğum font dosyasıyla proton içerisindeki font dosyasını bir arada kullanamıyorum. Aslında bunun sebebi belli yukarıda anlatmışım. Dediğim gibi GLCD_EXTERNAL_PRINT = PPRINT komutunu kaldırınca normal fontta yazı yazabiliyorum ama büyük fontlu yazılar yazamıyorum. Bu komutu ekleyincede kendi oluşturduğum fontlarda yazı yazabiliyorum ama protonun font dosyasını kullanarak yazı yazamıyorum. Zaten verdiğiniz örnektede aykut hocamız sadece kendi oluşturduğu font dosyalarıyla yazı yazmış. Umarım anlatabilmişimdir. Bunun çözümü nasıl olur. Kendi oluşturduğum font dosyalarında fazla küçük yazılar yazamıyorum. Yani anlayacağınız hem kendi oluşturduğum font dosyalarını hemde protonun kendi font dosyasını bir arada kullanamak istiyorum. Bunu yapmam lazım. Nasıl yapabilirim bunu yardımlarınızı bekliyorum

Mucit23

Arkadaşlar resmen duvara toslamış durumdayım.  :( Bu işi nasıl halledebilirim bilmiyorum. Açıkçası kendi oluşturduğum font dosyaları protonun font dosyaları gibi olmuyor. İstediklerimi karşılamıyor. Üstelik kendi oluşturduğum fon dosyalarında boşluk koyamıyorum. Öyle bir karakter desteği yok. Karakterden sayılmıyor. Yardımlarınızı bekliyorum