pic basic pro ile glcd kullanımı

Başlatan ares2039, 16 Ağustos 2013, 10:21:12

ares2039

Merhaba arkadaşlar pic basic pro kullanıyorum. Elimde ks0108  glcd ile 16f877a bulunmakta ve bir uygulama yapmak istiyorum. İnternetten çok araştırdım fakat PBP ile olup olmadığını varsa nasıl kodlarının yapılacağını bir türlü bulamadım. Bu konuda bilgisi olan arkadaşların yardımını rica ediyorum.

homer380

#1
Tft ekranı denemeden önce glcd ile yazdığım küçük bir program var ama düzenli değil. pic16f628a ve 74hc595 kullanmıştım. umarım kodları anlayabilirsin.
@ DEVICE pic16f628A                      'i?lemci 16F628                                
@ DEVICE pic16f628A, WDT_ON              'Watch Dog Timer aç?k
@ DEVICE pic16f628A, PWRT_ON             'Power on Timer aç?k
@ DEVICE pic16f628A, PROTECT_OFF         'Kod Protek kapal?
@ DEVICE pic16f628A, MCLR_ON             'MCLR pini kullan?l?yor. on kullanılıyor.OFF kullanılmaz.
@ DEVICE pic16f628A, INTRC_OSC_NOCLKOUT  'Dahili osilatör kullan?lacak 
@ DEVICE pic16f628A, BOD_OFF
'---------------------------------------------------------------------------------------------------------------
CMCON=7    '16F628 de komparatör pinleri iptal hepsi giri? ç?k??
'---------------------------------------------------------------------------------------------------------------
 trisb=0
 trisa=0


porta=0
portb=0
say var byte 
say1 var byte
rs var porta.0
e var porta.1
cs1 var porta.2
cs2 var porta.3
reset var porta.4
rw var portb.7
komut var byte
xpos var byte
ypos var byte
karakter1 var byte
 
al var byte
durum var byte
durum=0
al=0
 
basla:

reset=1:e=0:cs1=0:cs2=0:rs=0
cs1=1:komut=$3f:gosub verig     '
cs2=1:komut=$3f:gosub verig
cs1=1:komut=$c0:gosub verig     '
cs2=1:komut=$c0:gosub verig
cs1=1:komut=$b8:gosub verig     '
cs2=1:komut=$b8:gosub verig
cs1=1:komut=$40:gosub verig     '
cs2=1:komut=$40:gosub verig


pause 5
goto temizle
'##################

        verig:
        rw=0        'lcd yazı yaazma
        shiftout  portb.1,portb.0,1,[komut]
        high portb.2
        low portb.2
       
        e=1:pauseus 1:e=0
        cs1=0:cs2=0
        return

set_x:              'sayfa secimi
rs=0
komut=$b8|say1
gosub verig:return

y_adres:             'dikey pozisyon
rs=0
komut=$40:gosub verig
return


        sil:
        for say =0 to 5
        rs=0
                                 
        cs1=1:komut=64:gosub verig                        'yatay pozisyonu                         
        cs2=1:komut=64:gosub verig
        cs1=1:komut=184+say:gosub verig                         'dikey
        cs2=1:komut=184+say :gosub verig
        rs=1                                  'veri gönderimi
    for say1=0 to 63                  'x pozisyonu
         select case durum
         case 0: gosub karakter
         case 1:gosub karakter_1
         
         
         end select
        if say1<64 then 
                        
        cs1=1:komut=karakter1:gosub verig         'veri cs1 sol taraf
        cs2=1:komut=~karakter1:gosub verig 
        else
        
       
        cs2=1:komut=karakter1:gosub verig
         endif          
    next
next
        end
        

karakter:

lookup al,[ $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00_
            ,$00,$00,$00,$00,$80,$80,$80,$80,$C0,$C0,$C0,$C0,$C0,$C0,$C0,$C0_
            ,$C0,$C0,$C0,$C0,$C0,$80,$80,$80,$80,$C0,$80,$80,$80,$80,$00,$00_
            ,$80,$80,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00_
            ,$00,$00,$00,$00,$40,$40,$E0,$E0,$F0,$F0,$F8,$F8,$FC,$FC,$FC,$FC_
            ,$FE,$FE,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$E7,$E7,$FF_
            ,$FF,$FD,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$7F,$3E,$3E_
            ,$3E,$7F,$FF,$FF,$FF,$FE,$FE,$FE,$FC,$FC,$FC,$FC,$F0,$F0,$00,$00_
            ,$00,$00,$00,$00,$00,$01,$1F,$7F,$FF,$FF,$BF,$FF,$FF,$FF,$3F,$07_
            ,$03,$02,$83,$87,$87,$C7,$C3,$C7,$C3,$C7,$C7,$C7,$C7,$C3,$C3,$C7_
            ,$C7,$C7,$C7,$C3,$C5,$C5,$C7,$C7,$C7,$E7,$E3,$E3,$E3,$E3,$E0,$E0_
            ,$E0,$E0,$C0,$03,$07,$07,$07,$0F,$3F,$FF,$FF,$FF,$FF,$7F,$3F,$DC_
            ,$00,$00,$00,$00,$00,$00,$00,$00,$11,$1F,$6F,$EF,$FF,$3F,$C0,$80_
            ,$04,$07,$07,$06,$0F,$0F,$0F,$0F,$1F,$0F,$1F,$9F,$D7,$E7,$EF,$FF_
            ,$8F,$83,$80,$80,$83,$87,$8F,$CF,$8F,$CF,$E7,$CF,$07,$87,$03,$03_
            ,$03,$01,$03,$01,$01,$01,$00,$00,$00,$00,$0F,$0F,$02,$0F,$0E,$00],karakter1    ' Z
                 
                 al=al+1
                 if al =255 then al=0 :durum=durum+1
                 
return

karakter_1:
lookup al,[  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$01,$00,$00_
            ,$00,$00,$00,$00,$20,$C0,$E0,$F4,$FC,$DD,$FF,$FF,$FF,$FD,$FF,$7F_
            ,$7F,$7F,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FC,$FE,$FE,$FF_
            ,$FF,$FE,$FC,$F8,$F8,$D0,$50,$60,$80,$80,$80,$80,$80,$00,$00,$00_
            ,$04,$04,$24,$04,$10,$30,$B0,$90,$F0,$C0,$C0,$C0,$C0,$E0,$F0,$F8_
            ,$FC,$FC,$FE,$FE,$FF,$FF,$FE,$F9,$F7,$FF,$FF,$BF,$BF,$FF,$FF,$FF_
            ,$FE,$FF,$FF,$FF,$FF,$FF,$FB,$FB,$F9,$FF,$EE,$EF,$FF,$FF,$FF,$FF_
            ,$FF,$FF,$DF,$9F,$FF,$FE,$FE,$FA,$FC,$3F,$DF,$C7,$9F,$DF,$FF,$FF],karakter1

al=al+1
if al =127 then al=0 :durum=0 
return







temizle:
for say =0 to 7
        rs=0
                                 
        cs1=1:komut=64:gosub verig                        'yatay pozisyonu                         
        cs2=1:komut=64:gosub verig
        cs1=1:komut=184+say:gosub verig                         'dikey
        cs2=1:komut=184+say :gosub verig
        rs=1                                  'veri gönderimi
    for say1=0 to 63                  'x pozisyonu
        
        cs1=1:komut=0:gosub verig         'veri cs1 sol taraf 
        
        cs2=1:komut=0:gosub verig
               
    next
next
pause 1500
goto sil
verig:
        rw=0        'lcd yazı yaazma
        shiftout  portb.1,portb.0,1,[komut]
        high portb.2
        low portb.2
       
        e=1:pauseus 1:e=0
        cs1=0:cs2=0
        return

set_x:              'sayfa secimi
rs=0
komut=$b8|say1
gosub verig:return

y_adres:             'dikey pozisyon
rs=0
komut=$40:gosub verig
return


tft'ye geçtikden sonra glcd bakmadım kodlarda bu şekilde düzensiz kaldı. umarım yararlı olur.

ares2039

valla açık konuşmak gerekirse pek fazla anlamadım ben daha basit sanıyordum bu işi. Olmadı proton öğreneceğim bu iş için sanırım PBP ile olmuyor herhalde bir devre ve çalışan bir kod olsa geliştirmek istiyorum.


ares2039

#4
Merhaba arkadaşlar.

Ben bir şeyler yaptım akşam fakat benim ekran devamlı böyle bozuk oluyor. Nedenini bilen var mı ?
Yazılar ekranda alt alta olması gerekirken tek satırda üst üste çıkıyor birde :(

Şöyle her şeyi ile adam gibi çalışan bir devre ve kod bulamadım.



http://n1308.hizliresim.com/1d/k/rlfcs.jpg

Edit Subram: Resim boyutları çok büyük lütfen daha küçük resimler kulanın
https://www.picproje.org/index.php/topic,49397.0.html

dnacikaya

Sanırım verdiğim linki uyguladınız. İsis devresini ve kodları kontrol ettim simulasyon çalışıyor. Bağlantı hatası yada temassızlık olabilirmi.

ares2039

Bağlantı hatası veya temassızlik olabilir belki ama devrenin çalışması malesef zor wg12864a kullaniyorum ve E ucunu söküp katiyorum ve C1 ve C2 uçlarının yerlerini degistiriyorum o zaman resim baskisi falan yaptım Lâkin enerjisini kesip verdim mi devre yine çalışmıyor. Acayip bir iş bu grafik lcd işi :( baya ugrastiracak anlaşılan.

dnacikaya

Kodlar ham. Uzerinde calismak lazim. Anlattiginiz sorunlar gercek devrede kodlar yeniden duzenlenerek asilabilir.

ares2039

Zorluyacagim artık imkanları ve güzel bir proje yapacağım inşallah.

dnacikaya

Umarim basarili olursunuz. Birde farkli frekanslari denemeyi unutmayin. 4mhz kristal yerine 8 - 10 yada 20 mhz deneyin derim.

ares2039

Farklı frekanslarda denedim ama devremde söyle bir sıkıntı oluşuyor maalesef ekranda hiçbir hareketlilik olmuyor ancak C1 veya C2 uçlarını yerinden söküp enerji kesip verdiğimde ekrana görüntü çıkıyor. Bir türlü şöyle normal çalıştıramadım devreyi yaa :( ne olur bana yardım edin artık..


Device = 16F877A
;Config XT_OSC,WDT_OFF,PWRTE_ON,BODEN_ON,LVP_OFF,DEBUG_OFF,CP_ALL 
XTAL = 20
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  = 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    

Dim  Xpos    As Byte
Dim  Ypos    As Byte
Dim  Addr    As Word
Dim  char    As Byte



START:

     For Ypos = 0 To 7
         For Xpos = 0 To 127

             Addr = (Ypos*128)+Xpos
             char = CRead galatasaray_logo+Addr
             LCDWrite Ypos,Xpos,[char]
         Next
     Next

     DelayMS 100

     GoTo    START


Include  "galatasaray_logo.inc"


ares2039

#11
ve sonunda başardım arkadaşlar şuan devreye enerji verdiğimde direk ekrana görüntü çıkıyor. açık kodlar bunlar benim gibi madur olan arkadaşların işine yarar umarım...

ttp://n1308.hizliresim.com/1d/p/rqx2n.jpg



Device = 16F877A
XTAL = 20
ALL_DIGITAL= TRUE      'ADC PORTLARININ TAMAMI DİJİTAL GİRİŞ VEYA ÇIKIŞ
Declare LCD_DTPORT PORTD     '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_RSTPIN PORTC.6   'GLCD RESET PİNİ PORTC.6 BAĞLI
Declare LCD_TYPE   SAMSUNG   'GLCD TİPİ GRAFİK KS0108 128X64A WİNSTAR
INTERNAL_FONT = On                 
FONT_ADDR = 1
GLCD_CS_INVERT On            'LCD tipi bunu destekliyor proteusta olmaycak gercekte olacak

GLCD_EXTERNAL_PRINT = PPRINT
Cls
DelayMS 500

Dim  Xpos    As Byte
Dim  Ypos    As Byte
Dim  Addr    As Word
Dim  char    As Byte

START:

     For Ypos = 0 To 7
         For Xpos = 0 To 127

             Addr = (Ypos*128)+Xpos
             char = CRead galatasaray_logo+Addr
             LCDWrite Ypos,Xpos,[char]
         Next
     Next

     DelayMS 100

     GoTo    START


Include  "galatasaray_logo.inc"


Edit Subram: Resim boyutları çok büyük lütfen daha küçük resimler kulanın
https://www.picproje.org/index.php/topic,49397.0.html

dnacikaya

Tebrik ederim, sonunda olayı toparlamışssın. Şimdi merak ettiğim bir şey var. 20mhz kristale bağladığın kondansatör değeri nedir.

ares2039

Valla is kristalde değil sanırım. 22pf kullandım 20mhz kristal

ares2039

Merhaba arkadaşlar acaba grafik lcd 128x64 ile analog göstergeli ivme ölçer yapan varmı? line komutu ile istediğim gibi konum yapamadım :(