Ynt: 3 buton ile GLCD de resim geçişleri

Başlatan yolcu27, 07 Nisan 2016, 11:21:25

dursuncemal

#15
cok uzun suredir kullandigim bir urun olmadigi icin vede islemciye kendim baglamadan ezberden bir sey soyleyip yonunu bozmak istemiyorum. paralel seri icin data sheet'e bir bakmak lazim sen benim gonderdigim link teki kodlari  ve baglanti sekillerini inceledin mi.?
:=

yolcu27

Hocam inceledim fakat farklı dille yazıldığı için daha doğrusu benim ccs.c diline daha da yabancı olduğum için fazla birşey anlamadım.

yolcu27

cs1 cs2 pinlerinin bulunduğu lcdl geldi bugün gerektiği gibi bağlantı yapınca gayet temiz bir görüntü elde ettim.

ufak tefek sorunlarım kaldı onuda halledemezsem yazarım buradan yeniden :)

dursuncemal

hadi gozun aydin ama oburunude calistirmalisin.
:=

yolcu27

Onu ardiuno ile kullanmayı düşünüyorum genelde onunla ilgili projeler gordum internette de ondan dolayı. Şimdilik bunu yaptım.  Simdi aklımda resim sayısını çoğaltmak var. Suan 4resim ekli ama bunu 12 filan yapmak istiyorum yeterli gelir mi acaba 16f877 yeterli gelecek midir


dursuncemal

derlemeyi yaptiktan sonra kalan yere bakarsan anlarsin 12 adet tam resim ise  sadece resimler 1024 * 12 = 12288 byte yapar 877 yetmez.
:=

yolcu27

Anladım hocam  ozaman aynı bağlantı ile belleği daha fazla olan bir işlemci kullanırız.

Peki şunu nasıl yapabilirim.

Etiket içinde butona basınca başka etikete gidiyor ama ben etiketin sonuna koyuyorum bu if then komutunu. Sıra oraya gelmeden butona basınca buton işlev yapmıyor.  Etiket içerisinde hangi sırada olursa olsun butona basınca yani porta.1=1 olunca başka bir etikete yönelmesini nasıl yaparım

dursuncemal

hocam malesef basic bilmiyorum.fakat  eger etiketin icine kocaman bir bekleme koyarsan tabiki o sure bitmeden program oradan cikmaz ,  istedigin zaman cikmaz.mutlaka o gecikmeyi yerine getirir buda sana uzun bir sure gibi gelir.
bunun icin mumkun oldugu kadar etiketlerin icine gecikme yazmamalisin.yapiyi ve isleyis tavrini bilemedigim icin senide yaniltmamak amaci ile sudurr diyemiyorum sadece tahmin ediyorum.yani inteerup kullanmayi ogren derim sana tus okumalarini yapacagin en mantikli yer interruptur.cunku sen programin neresinde olursan ol eger kullanirsan periyodik olarak program seni interrupta goturur.orada yapacagin tus okumalari veya daha baska zamanlamali isleri cok daha rahat edersin.
:=

yolcu27

#23
Şuan bilgisayar başında olmadığını için deneyemiyorum. Kodlarım şu şekilde
Device = 16F877
Config HS_OSC,WDT_OFF,PWRTE_ON,BODEN_ON,LVP_OFF,DEBUG_OFF,CP_OFF  
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   Samsung  
Internal_Font = On                 
Font_Addr = 0
GLCD_CS_Invert On 
Cls
DelayMS 500	        
 
Dim  Xpos    As Byte
Dim  Ypos    As Byte
Dim  Addr    As Word
Dim  char    As Byte
If PORTA.0=1 Then arabalar1
If PORTA.1=1 Then dikkat2
If PORTA.2=1 Then kamyon

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]
         Next
     Next
 
 If PORTA.0=1 Then arabalar1
If PORTA.1=1 Then dikkat2
If PORTA.2=1 Then kamyon
     DelayMS 100
 
     GoTo    arabalar2 
     
 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]
         Next
     Next
     If PORTA.0=1 Then arabalar1
If PORTA.1=1 Then dikkat2
If PORTA.2=1 Then kamyon
 
     DelayMS 100
 
     GoTo    dikkat3 
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]
         Next
     Next
     If PORTA.0=1 Then arabalar1
If PORTA.1=1 Then dikkat2
If PORTA.2=1 Then kamyon
 
     DelayMS 100
 
     GoTo    kamyon2 
 
 
Include  "kamyonaraba.inc"
Include  "arabalar.inc"
Include  "dikkat.inc"
   


Buradaki if then komutlarını for next içinde mi kullansam daha mı iyi olur acaba diye düşündüm. Akşam deneyecegim

yolcu27

Alıntı yapılan: dursuncemal - 13 Nisan 2016, 22:37:35
hocam malesef basic bilmiyorum.fakat  eger etiketin icine kocaman bir bekleme koyarsan tabiki o sure bitmeden program oradan cikmaz ,  istedigin zaman cikmaz.mutlaka o gecikmeyi yerine getirir buda sana uzun bir sure gibi gelir.
bunun icin mumkun oldugu kadar etiketlerin icine gecikme yazmamalisin.yapiyi ve isleyis tavrini bilemedigim icin senide yaniltmamak amaci ile sudurr diyemiyorum sadece tahmin ediyorum.yani inteerup kullanmayi ogren derim sana tus okumalarini yapacagin en mantikli yer interruptur.cunku sen programin neresinde olursan ol eger kullanirsan periyodik olarak program seni interrupta goturur.orada yapacagin tus okumalari veya daha baska zamanlamali isleri cok daha rahat edersin.

Hocam peki bazen ekranın yarısı çıkmıyor resimlerim tam ortadan yarım çıkıyordu dedim sanırım cs1 cs2 pinleri breadboard da tam oturmuyor bundan mıdır çünkü biraz sağlam tutunca tam ekran çıkıyor.

Birde ilk açılışta son görüntünün pixelleri gorunuyor tam olmamakla beraber rastgele şekilde bunu önlemek için ne yapabilirim yani ilk açılışta data portlarini sıfıra cekmek ise yarar  mı acaba. İlk açılışta  CLS komutu ile ekranı silmesi gerekli ama yinede pixel kalıntıları oluyor yinede

Bu iki sorunun cevabı yine sizde saklıdır biliyorum :)

Bu arada tesekkur ederim ilginiz için

dursuncemal

evet cs1 cs2 pinlleri zanedersem moduldeki 2 cipe ayit  ekranin yarisi 1 i obur yarisi 2. cip ile suruluyor olabilir.data sheete bir bakmak lazim.
eger ekranda aktif piksel kaliyor ise  kesin  senin cls fonksiyonun calismiyorsur.sana amelece bir cozun ureteyim hemen beyaz bir zeminden bir tablo yap silmek istediginde ekrana onu yazdir.biraz kaba oldu ama bunu yapabilecegini biliyorum.zira ben basic bilmiyorum.:=)
:=

yolcu27

Toplamda 10 resim kullanmayı dusunuyorum artık.
Bunun için 16f877 yerine 18f452 kullanirsam direk kodlardaki tanımlamayı ayarlayarak sorun olur mu  acaba. Port pinleri aynı sonuçta .sadece kod içindeki tanımlamalar değişecek gerisi aynı kalacak. 32k hafıza bana hayli hayli yeterli gelecek 10 resim için . 877 nin 8k hafızası var yetmiyor