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.
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.
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.
https://320volt.com/protonda-glcd%E2%80%99ye-giris-grafik-lcd-uygulamalari/ (https://320volt.com/protonda-glcd%E2%80%99ye-giris-grafik-lcd-uygulamalari/)
Sanirim bu link faydali olur
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 (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 (https://www.picproje.org/index.php/topic,49397.0.html)
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.
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.
Kodlar ham. Uzerinde calismak lazim. Anlattiginiz sorunlar gercek devrede kodlar yeniden duzenlenerek asilabilir.
Zorluyacagim artık imkanları ve güzel bir proje yapacağım inşallah.
Umarim basarili olursunuz. Birde farkli frekanslari denemeyi unutmayin. 4mhz kristal yerine 8 - 10 yada 20 mhz deneyin derim.
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"
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 (https://www.picproje.org/index.php/topic,49397.0.html)
Tebrik ederim, sonunda olayı toparlamışssın. Şimdi merak ettiğim bir şey var. 20mhz kristale bağladığın kondansatör değeri nedir.
Valla is kristalde değil sanırım. 22pf kullandım 20mhz kristal
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 :(