128x64 ekran silme komutu hakkında yardıma i

Başlatan yolcu27, 04 Mayıs 2016, 23:43:14

yolcu27

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" 

tekosis

bu durum simülasyonda mı gerçekte mi oluyor. gerçekte olmaması lazım.
İlim ilim bilmektir, ilim kendin bilmektir, sen kendin bilmezsin, bu nice okumaktır.

yolcu27

#2
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?

tekosis

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.
İlim ilim bilmektir, ilim kendin bilmektir, sen kendin bilmezsin, bu nice okumaktır.

yolcu27

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
..
..
..
..

Hattusa

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.
vardım ilim meclisine eyledim talep, meğer ilim en gerideymiş illa EDEP, illa EDEP <muhyiddin Arabi K.S.>

yolcu27

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.

yolcu27

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

yolcu27

#8
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

Maxim

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

yolcu27

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

yolcu27

ş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?

Hattusa

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
vardım ilim meclisine eyledim talep, meğer ilim en gerideymiş illa EDEP, illa EDEP <muhyiddin Arabi K.S.>

yolcu27

#13
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.

yolcu27

şimdide bana yavaş çalışıyor gibi geliyor eskisine göre. acaba 20mhz kristal taksam hızlanırmı?