kodlarımı ekliyorum sorunum ekran ilk açılışta kalıntı pixeller ile açılıyor. yani son görüntü neyse kapanırken. onun bozulmuş pixelleri ile açılıyor sonra temizleniyor. bunu nasıl çözebilirim sizce?
GLCD modeli TG12864bv.1 rst pini +5 v de şuan
datasheet te baktığımda şu ibare geçiyor
Alıntı Yap17 RET H/L System reset low active
yani 17 nolu bacak rst bacagı gnd ye çekersem sorunu çözmüş olur muyum sizce?
KODLARIM
Device = 18F4520
Config_Start
OSC = xt ; xt Oscillator
FCMEN = off ; Failsafe Clock Monitor Disabled
IESO = OFF ; Int/Ext Oscillator Switch Over Disabled
PWRT = On ; Power Up Timer Enabled
BOREN = OFF ; Brownout Reset Disabled
WDT = OFF ; Watchdog Timer Disabled
MCLRE = On ; MCLR enabled
LPT1OSC = OFF ; T1 Oscillator Disabled
CCP2MX = PORTC ; CCP2 Mux Muxed with RC1
STVREN = On ; Stack Overflow Reset Enabled
LVP = OFF ; Low Voltage ICSP Disabled
XINST = OFF ; XINST Disabled
PBADEN = OFF; PORTB(4:0) as digital i/o
Debug = OFF ; Background Debugger Disabled
CP0 = OFF ; Code Protection Block 0 Disabled
CP1 = OFF ; Code Protection Block 1 Disabled
CP2 = OFF ; Code Protection Block 2 Disabled
CP3 = OFF ; Code Protection Block 3 Disabled
CPB = OFF ; Boot Block Code Protection Disabled
CPD = OFF ; Data EEPROM Code Protection Disabled
WRT0 = OFF ; Write Protection Block 0 Disabled
WRT1 = OFF ; Write Protection Block 1Disabled
WRT2 = OFF ; Write Protection Block 2 Disabled
WRT3 = OFF ; Write Protection Block 3 Disabled
WRTB = OFF ; Boot Block Write Protection Disabled
WRTC = OFF ; Configuration Register Write Protection Disabled
WRTD = OFF ; Data EEPROM Write Protection Disabled
EBTR0 = OFF ; Table Read Protection Block 0 Disabled
EBTR1 = OFF ; Table Read Protection Block 1 Disabled
EBTR2 = OFF ; Table Read Protection Block 2 Disabled
EBTR3 = OFF ; Table Read Protection Block 3 Disabled
EBTRB = OFF ; Boot Block Table Read Protection Disabled
Config_End
Xtal = 4
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.4 'GLCD RS PİNİ PORTC.5 BAĞLI
LCD_ENPin = PORTB.2 'GLCD ENABLE PİNİ PORTC.1 BAĞLI
LCD_RWPin = PORTB.3 'GLCD RW PİNİ PORTC.4 BAĞLI
LCD_CS1Pin = PORTB.1 'GLCD CS1 PİNİ PORTC.2 BAĞLI
LCD_CS2Pin = PORTB.0 'GLCD CS2 PİNİ PORTC.3 BAĞLI
LCD_Type GRAPHIC
Internal_Font = On
Font_Addr = 0
Dim Xpos As Byte
Dim Ypos As Byte
Dim Addr As Word
Dim char As Byte
bos1:
For Ypos = 0 To 7
For Xpos = 0 To 127
Addr = (Ypos*128)+Xpos
char = CRead bos+Addr
LCDWrite Ypos,Xpos,[char]
Next
Next
Cls
DelayMS 500
damla1:
For Ypos = 0 To 7
For Xpos = 0 To 127
Addr = (Ypos*128)+Xpos
char = CRead acilis1+Addr
LCDWrite Ypos,Xpos,[char]
Next
Next
DelayMS 500
Cls
For Ypos = 0 To 7
For Xpos = 0 To 127
Addr = (Ypos*128)+Xpos
char = CRead damla+Addr
LCDWrite Ypos,Xpos,[char]
Next
Next
DelayMS 1000
Cls
For Ypos = 0 To 7
For Xpos = 0 To 127
Addr = (Ypos*128)+Xpos
char = CRead acilis2+Addr
LCDWrite Ypos,Xpos,[char]
Next
Next
DelayMS 500
dikkat2:
Cls
DelayMS 100
dikkat3:
For Ypos = 0 To 7
For Xpos = 0 To 127
Addr = (Ypos*128)+Xpos
char = CRead dikkat+Addr
LCDWrite Ypos,Xpos,[char]
If PORTA.0=1 Then dikkat2
If PORTA.1=1 Then arabalar1
If PORTA.2=1 Then kamyon
If PORTA.3=1 Then asagi1
If PORTA.4=1 Then yukari1
If PORTA.5=1 Then isik1
If PORTE.0=1 Then sag1
If PORTE.1=1 Then sol1
If PORTC.1=1 Then ikiyon1
If PORTC.2=1 Then Kapanis
Next
Next
DelayMS 100
GoTo dikkat3
arabalar1:
Cls
DelayMS 100
arabalar2:
For Ypos = 0 To 7
For Xpos = 0 To 127
Addr = (Ypos*128)+Xpos
char = CRead arabalar+Addr
LCDWrite Ypos,Xpos,[char]
If PORTA.0=1 Then dikkat2
If PORTA.1=1 Then arabalar1
If PORTA.2=1 Then kamyon
If PORTA.3=1 Then asagi1
If PORTA.4=1 Then yukari1
If PORTA.5=1 Then isik1
If PORTE.0=1 Then sag1
If PORTE.1=1 Then sol1
If PORTC.1=1 Then ikiyon1
If PORTC.2=1 Then Kapanis
Next
Next
DelayMS 100
GoTo arabalar2
kamyon:
Cls
DelayMS 100
kamyon2:
For Ypos = 0 To 7
For Xpos = 0 To 127
Addr = (Ypos*128)+Xpos
char = CRead kamyonaraba+Addr
LCDWrite Ypos,Xpos,[char]
If PORTA.0=1 Then dikkat2
If PORTA.1=1 Then arabalar1
If PORTA.2=1 Then kamyon
If PORTA.3=1 Then asagi1
If PORTA.4=1 Then yukari1
If PORTA.5=1 Then isik1
If PORTE.0=1 Then sag1
If PORTE.1=1 Then sol1
If PORTC.1=1 Then ikiyon1
If PORTC.2=1 Then Kapanis
Next
Next
DelayMS 100
GoTo kamyon2
asagi1:
Cls
DelayMS 100
asagi2:
For Ypos = 0 To 7
For Xpos = 0 To 127
Addr = (Ypos*128)+Xpos
char = CRead asagi+Addr
LCDWrite Ypos,Xpos,[char]
If PORTA.0=1 Then dikkat2
If PORTA.1=1 Then arabalar1
If PORTA.2=1 Then kamyon
If PORTA.3=1 Then asagi1
If PORTA.4=1 Then yukari1
If PORTA.5=1 Then isik1
If PORTE.0=1 Then sag1
If PORTE.1=1 Then sol1
If PORTC.1=1 Then ikiyon1
If PORTC.2=1 Then Kapanis
Next
Next
DelayMS 100
GoTo asagi2
yukari1:
Cls
DelayMS 100
yukari2:
For Ypos = 0 To 7
For Xpos = 0 To 127
Addr = (Ypos*128)+Xpos
char = CRead yukari+Addr
LCDWrite Ypos,Xpos,[char]
If PORTA.0=1 Then dikkat2
If PORTA.1=1 Then arabalar1
If PORTA.2=1 Then kamyon
If PORTA.3=1 Then asagi1
If PORTA.4=1 Then yukari1
If PORTA.5=1 Then isik1
If PORTE.0=1 Then sag1
If PORTE.1=1 Then sol1
If PORTC.1=1 Then ikiyon1
If PORTC.2=1 Then Kapanis
Next
Next
DelayMS 100
GoTo yukari2
isik1:
Cls
DelayMS 100
isik2:
For Ypos = 0 To 7
For Xpos = 0 To 127
Addr = (Ypos*128)+Xpos
char = CRead isik+Addr
LCDWrite Ypos,Xpos,[char]
If PORTA.0=1 Then dikkat2
If PORTA.1=1 Then arabalar1
If PORTA.2=1 Then kamyon
If PORTA.3=1 Then asagi1
If PORTA.4=1 Then yukari1
If PORTA.5=1 Then isik1
If PORTE.0=1 Then sag1
If PORTE.1=1 Then sol1
If PORTC.1=1 Then ikiyon1
If PORTC.2=1 Then Kapanis
Next
Next
DelayMS 100
GoTo isik2
sag1:
Cls
DelayMS 100
sag2:
For Ypos = 0 To 7
For Xpos = 0 To 127
Addr = (Ypos*128)+Xpos
char = CRead sag+Addr
LCDWrite Ypos,Xpos,[char]
If PORTA.0=1 Then dikkat2
If PORTA.1=1 Then arabalar1
If PORTA.2=1 Then kamyon
If PORTA.3=1 Then asagi1
If PORTA.4=1 Then yukari1
If PORTA.5=1 Then isik1
If PORTE.0=1 Then sag1
If PORTE.1=1 Then sol1
If PORTC.1=1 Then ikiyon1
If PORTC.2=1 Then Kapanis
Next
Next
DelayMS 100
GoTo sag2
sol1:
Cls
DelayMS 100
sol2:
For Ypos = 0 To 7
For Xpos = 0 To 127
Addr = (Ypos*128)+Xpos
char = CRead sol+Addr
LCDWrite Ypos,Xpos,[char]
If PORTA.0=1 Then dikkat2
If PORTA.1=1 Then arabalar1
If PORTA.2=1 Then kamyon
If PORTA.3=1 Then asagi1
If PORTA.4=1 Then yukari1
If PORTA.5=1 Then isik1
If PORTE.0=1 Then sag1
If PORTE.1=1 Then sol1
If PORTC.1=1 Then ikiyon1
If PORTC.2=1 Then Kapanis
Next
Next
DelayMS 100
GoTo sol2
ikiyon1:
Cls
DelayMS 100
ikiyon2:
For Ypos = 0 To 7
For Xpos = 0 To 127
Addr = (Ypos*128)+Xpos
char = CRead ikiyon+Addr
LCDWrite Ypos,Xpos,[char]
If PORTA.0=1 Then dikkat2
If PORTA.1=1 Then arabalar1
If PORTA.2=1 Then kamyon
If PORTA.3=1 Then asagi1
If PORTA.4=1 Then yukari1
If PORTA.5=1 Then isik1
If PORTE.0=1 Then sag1
If PORTE.1=1 Then sol1
If PORTC.1=1 Then ikiyon1
If PORTC.2=1 Then Kapanis
Next
Next
DelayMS 100
GoTo ikiyon2
Kapanis:
For Ypos = 0 To 7
For Xpos = 0 To 127
Addr = (Ypos*128)+Xpos
char = CRead kapanis2+Addr
LCDWrite Ypos,Xpos,[char]
Next
Next
DelayMS 750
Cls
For Ypos = 0 To 7
For Xpos = 0 To 127
Addr = (Ypos*128)+Xpos
char = CRead kapanis1+Addr
LCDWrite Ypos,Xpos,[char]
Next
Next
DelayMS 750
Cls
Include "bos.inc"
Include "kamyonaraba.inc"
Include "arabalar.inc"
Include "dikkat.inc"
Include "damla.inc"
Include "asagi.inc"
Include "yukari.inc"
Include "isik.inc"
Include "sag.inc"
Include "sol.inc"
Include "ikiyon.inc"
Include "acilis1.inc"
Include "acilis2.inc"
Include "kapanis1.inc"
Include "kapanis2.inc"
bu durum simülasyonda mı gerçekte mi oluyor. gerçekte olmaması lazım.
Alıntı yapılan: tekosis - 05 Mayıs 2016, 00:04:11
bu durum simülasyonda mı gerçekte mi oluyor. gerçekte olmaması lazım.
malesef gerçekte oluyor. bir arkadaş reset pinini +5 e çekmem gerektiğini söylemişti ama datasheete baktıgımda bunun low a çekildiğinde resetlendiği yazıyor. devre şuan kartta . orayı kesip gnd ye bağlayıp deneyeceğim
mesaj birleştirme:: 05 Mayıs 2016, 00:48:58
denedim gnd ye bağladım ekrana görüntü gelmiyor hiç. acaba pic in bir portundan bağlasam rst ucunu da ilk açılışta sıfır versem bir 100ms daha sonra +5 e çeksem porttan direk olur mu ki?
o pini bir dirençle pull-up yapın. aynı reset pinini işlemcinin bir pinine de bağlayın. işlemciyi her başlatışınızda kısa süre bu pini low yaparsanız işiniz hallolur.
Alıntı yapılan: tekosis - 05 Mayıs 2016, 00:59:39
o pini bir dirençle pull-up yapın. aynı reset pinini işlemcinin bir pinine de bağlayın. işlemciyi her başlatışınızda kısa süre bu pini low yaparsanız işiniz hallolur.
ozaman şu şekilde yapayım . bu reset pinini işlemci pinine bağlayayım. işlemcinin bu pinini pull up yapayım. yazılımda başlarken port tanımlamalarını yaptıktan sonra şunu yazayım misal bağlı pin portc.5 olsun
..
..
..
trisc=%111011111 portc.5 çıkış olarak ayarlandı
low portc.5 GLCD reset pini lowa çekildi
pause 100
high portc.5 GLCD RESET high yapıldı ekran çalışıyor
..
..
..
..
bence sizin devrede glcd nin data pinleri sıralaması işlemciye doğru sıralamada gitmediği için olabilir. yok yanılıyorsam "Declare GLCD_Strobe_Delay 100" ile GLCD nin data yazım süresini uzatarak sorunu aşabilirsiniz.
Alıntı yapılan: pro-TR - 05 Mayıs 2016, 09:20:19
bence sizin devrede glcd nin data pinleri sıralaması işlemciye doğru sıralamada gitmediği için olabilir. yok yanılıyorsam "Declare GLCD_Strobe_Delay 100" ile GLCD nin data yazım süresini uzatarak sorunu aşabilirsiniz.
Data pinleri port b ye bağlı sırası ile hocam . sıra ile olmasa normalde gosterdigi resmi nasıl gösterir . şuan normal resimlerde bir sıkıntı yok .tek sorun açılıştaki kalıntı pixeller. Dediginiz kodu ekleyip deneyecegim akşam. Olmazsa dediğim gibi ilk açılışta reset pinini lowa çekip sonra high yaparım.
yok olmadı hocam bu komutu ekledim yine farketmedi
Declare GLCD_Strobe_Delay 100
hatta ekrana gelen resimler yavaşladı
bende 10 a indirdim denedim yine farketmedi
birde ilk açılışta rst ucunu lowa çekeyim diyorum. 100ms sonra high yaparak ekrana resim gelmesine izin veririm. pcb üzerinde bir atlama ile c5 e bağlayıp öyle deneyeyim.
peki illaki pull up kullanmama gerek yok sanırım . zaten once low sonra high yapacağım için pull up ne için gerekli onu anlamadım. zaten çıkış pini
Device = 18F4520
Config_Start
OSC = xt ; xt Oscillator
FCMEN = off ; Failsafe Clock Monitor Disabled
IESO = OFF ; Int/Ext Oscillator Switch Over Disabled
PWRT = On ; Power Up Timer Enabled
BOREN = OFF ; Brownout Reset Disabled
WDT = OFF ; Watchdog Timer Disabled
MCLRE = On ; MCLR enabled
LPT1OSC = OFF ; T1 Oscillator Disabled
CCP2MX = PORTC ; CCP2 Mux Muxed with RC1
STVREN = On ; Stack Overflow Reset Enabled
LVP = OFF ; Low Voltage ICSP Disabled
XINST = OFF ; XINST Disabled
PBADEN = OFF; PORTB(4:0) as digital i/o
Debug = OFF ; Background Debugger Disabled
CP0 = OFF ; Code Protection Block 0 Disabled
CP1 = OFF ; Code Protection Block 1 Disabled
CP2 = OFF ; Code Protection Block 2 Disabled
CP3 = OFF ; Code Protection Block 3 Disabled
CPB = OFF ; Boot Block Code Protection Disabled
CPD = OFF ; Data EEPROM Code Protection Disabled
WRT0 = OFF ; Write Protection Block 0 Disabled
WRT1 = OFF ; Write Protection Block 1Disabled
WRT2 = OFF ; Write Protection Block 2 Disabled
WRT3 = OFF ; Write Protection Block 3 Disabled
WRTB = OFF ; Boot Block Write Protection Disabled
WRTC = OFF ; Configuration Register Write Protection Disabled
WRTD = OFF ; Data EEPROM Write Protection Disabled
EBTR0 = OFF ; Table Read Protection Block 0 Disabled
EBTR1 = OFF ; Table Read Protection Block 1 Disabled
EBTR2 = OFF ; Table Read Protection Block 2 Disabled
EBTR3 = OFF ; Table Read Protection Block 3 Disabled
EBTRB = OFF ; Boot Block Table Read Protection Disabled
Config_End
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 = PORTB.4 'GLCD RS PİNİ PORTC.5 BAĞLI
LCD_ENPin = PORTB.2 'GLCD ENABLE PİNİ PORTC.1 BAĞLI
LCD_RWPin = PORTB.3 'GLCD RW PİNİ PORTC.4 BAĞLI
LCD_CS1Pin = PORTB.1 'GLCD CS1 PİNİ PORTC.2 BAĞLI
LCD_CS2Pin = PORTB.0 'GLCD CS2 PİNİ PORTC.3 BAĞLI
LCD_Type GRAPHIC
TRISC=%00000110
Cls
Low PORTC.5
DelayMS 200
High PORTC.5
Internal_Font = On
Font_Addr = 0
Cls
Dim Xpos As Byte
Dim Ypos As Byte
Dim Addr As Word
Dim char As Byte
bos1:
For Ypos = 0 To 7
For Xpos = 0 To 127
Addr = (Ypos*128)+Xpos
char = CRead bos+Addr
LCDWrite Ypos,Xpos,[char]
Next
Next
ekledim c5 için önce lowa çektim sonra high yaptım yine aynı sorun devam ediyor. neden oluyor anlamış değilim
daha önce yaptığım ve düzgün çalışan uygulamalara baktım şöyle yapmışım
Clear
PORTC.0=0 'lcd reset
DelayMS 500
PORTC.0=1
Cls
birde şu satırı kullanmışım, ekran ters çıktığı için
Declare GLCD_CS_Invert On
Alıntı yapılan: Maxim - 06 Mayıs 2016, 11:11:10
daha önce yaptığım ve düzgün çalışan uygulamalara baktım şöyle yapmışım
Clear
PORTC.0=0 'lcd reset
DelayMS 500
PORTC.0=1
Cls
birde şu satırı kullanmışım, ekran ters çıktığı için
Declare GLCD_CS_Invert On
Ekran yarım çıkınca bende cs1 cs2 degistirmistim şuan onda sıkıntı yok olursa dediğiniz kodu eklerim.
Clear kodunu hiç görmemiştim umarım ise yarar.
Bende reset pinini c5 e bagladim önce low sonra high yapacağım.
Toplam 12 resim yukledim 18f4520 ye daha da alır gibi. Bakalkm su sorunu da halledersem cok iyi olacak
şimdi denedim
sadece şu kodu ekledim değişim olmadı
Clear
PORTC.5=0 'lcd reset
DelayMS 500
PORTC.5=1
Cls
şu koduda eklediğimde
Declare GLCD_CS_Invert on
ekran yarım yarım bölündü yerleri şaşırdı ama ilk açılırken oluşan kalıntı pixeller kayboluyor.
şimdi ben ne yapmalıyım sizce?
hem """"Declare GLCD_CS_Invert on""" bu kodu kullanım çizimde de cs1 ile cs2 nin yerlerini değiştirirsem sorunum çözülecek midir?
sanırım siz WG12864A kullanıyorsunuz ki bende de sanki böylesi bir sorun olmuştu, tam hatırlamıyorum. CS1 ve CS2 pinlerini sadece yazılımla değiştirerek
Declare GLCD_CS_Invert on komutunu kullanın, eğer bu komutla ekran ikiye bölünüyorsa yazılımda CS1 ve CS2 nin yerini değiştirin inş. düzelecek
Alıntı yapılan: pro-TR - 07 Mayıs 2016, 11:49:26
sanırım siz WG12864A kullanıyorsunuz ki bende de sanki böylesi bir sorun olmuştu, tam hatırlamıyorum. CS1 ve CS2 pinlerini sadece yazılımla değiştirerek
Declare GLCD_CS_Invert on komutunu kullanın, eğer bu komutla ekran ikiye bölünüyorsa yazılımda CS1 ve CS2 nin yerini değiştirin inş. düzelecek
evet şimdi o komutu kullanınca açılıstaki kalıntı pixeller olmuyor ama ekran ikiye bölünüp çalışıyor. bende dedim bu komut ile birlikte cs1 cs2 yi de değiştireyim ozaman olabilir diye düşündüm.
birazdan breadboarda kurup deneyeceğim yazarım buradan sonucu
mesaj birleştirme:: 07 Mayıs 2016, 12:50:33
breadboarda düzerken aklıma geldi dedim bir şu kodlardaki cs1 cs2 lerin hangi bacaklara yazmışım diye. tam tersi yazmısım düzelttim ve
Declare GLCD_CS_Invert on
komutunu ekledim . reset ucunu basta lowa cektim sonra high verdim sorun kalmadı.
teşekkürler sorun çözülmüştür.
Eğer aynı sorunu yaşayan arkadaş olursa kod içindeki cs1 cs2 pinlerinin nereye bağlandığı konusunda yaptıgı tanımlamayı kontrol etsin arkadaşlar.
eğerki ekran ikiye bölünürsede
Declare GLCD_CS_Invert on
komutunu eklesinler.
şimdide bana yavaş çalışıyor gibi geliyor eskisine göre. acaba 20mhz kristal taksam hızlanırmı?
Selamlar Burası bilgi paylasımını esas alan tecrubelerin aktarıldıgı bir forum oldugundan ogrenme amaclı bilgilendirme yapılması yeni baslayan arkadaslarınız için ısık olmuş olursunuz yaptıgınız cozumu resimlerle ve ayrıntılı anlatırsanız arkadaslarınıza ornek olacaktır kolay gelsin :)