Protonda GLCD üzerine yeni algoritmalar kurma

Başlatan Mucit23, 31 Ağustos 2011, 21:55:26

Mucit23

Arkadaşlar protonda GLCD ile uğraşırken çok yapmak istediğim bazı uygulamalar var. Mesela protonda Resim kaydırma türevi işlemler yapılabilirmi. Yani iki resim arasındaki geçiş soldan sağa veya sağdan sola doğru kayarak geçmesi için nasıl bir mantık yürütebiliriz.
Diğer bir yandan resim üzerine resim basmak istiyorum. Yani ekranda bir resim varken eski resmi silmeden ekrandaki resmin herhangi bir yerine daha ufak bir resim basabilirmiyiz. Bu konuda fikirlerinizi söylerseniz sevinirim.

Tagli

Yapılabilir şeyler ama kendi GLCD kütüphaneni sıfırdan yazman gerekebilir. Yalnız eğer resimleri belli oranda küçültebilmek gibi bir amacın varsa, bu cidden zor olacaktır. Yoksa boyutları değiştirmeden üst üste basmak zor olmasa gerek.

Kaydırma işlemlerini yapabileceğin hafızan varsa işin daha hızlı olur. Yoksa GLCD'den sütunları byte byte okuyup yandaki sütuna yazman gerek. Bu işlem tatmin edici bir hızda yapılabilir mi bilmiyorum. Denemek gerek.
Gökçe Tağlıoğlu

Mucit23

Anladım demek istediğinizi. Epeyce oturup çlışmak gerek. Resim kaydırma için araştırma yapacağım. Resim üzerine resim basma işini çözdüm sayılır ama biraz kısıtlı oldu.

z

GLCD nin dokumanina bakmak lazim. Belki sadece baslangic adresini degistirerek bile kaydirma yapabiliyordur.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Mucit23

Bana Tagli hocamızın dediği daha mantıklı geldi ama lcd yapısını iyi bilmek lazım. Basit bir for düngüsüyle yapılabilir.Hız faktörü çok Büyük engel olur. Bilmiyorum eğer ekrandaki data okunup adres kaydırılıp sonra tekrar yazılması gözle farkedilebilir derece yavaş olursa bu hiçbir işe yaramaz.

Tagli

bunalmis'ın bahsettiği nokta da önemli. Piyasada yaygın olan 128x64 GLCD'lerde (sık kullanmadığım için çip ismi aklımda değil) dikey kaydırma bu şekilde rahatlıkla yapılabiliyor. Byte'ların hafızadaki yerleri değişmiyor, ama ekrana basılmaya başladıkları nokta (satır) değişiyor.

Eğer uygulamanda yatay kaydırma şart değilse, yatay yerine dikey kaydırma işini kolaylaştırabilir. Hatta bir cinlik yapıp yatay kaydırma için ekranı yan monte edip dikey kaydırma yapabilirsin.

Ama anladığım kadarıyla senin istediğin biraz daha farklı. Sabit bir resmi kaydırmak değil, kayarken aynı zamanda yerini bir başka resme bırakmasını da istiyorsun.
Gökçe Tağlıoğlu

z

#6
Eger kaydırmaya izin veriyorsa resmi 1 pixel kaydır, son sutuna (? satıra) yeni resmin ilk sutununu (? satırını) yerleştir şeklinde algoritma ile eski resim kayarken yeni resim de ekrana gelmeye başlayabilir.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Mucit23

Resmin yatay veya dikey kyması ile ilgili bi sınırlamam yok. Menü için bir joystick var zaten Önceden menüler arası geçişi sağ ve sol yön tuşlarıyla yapıyordum.Bu sefer yukarı aşağı yön butonları ile yaparım. Ama benim aklıma yatmadı. 128X64 GLCD nin ekran yapısı  8 satır 128 sütündan oluşmuyormu. 8 Satır dediğim yani her satırda 8 pixel var.Sütün olarak sorun yok. Ks108 ekranı nasıl tarıyor bilmiyorum. Ama biraz düşününce Yatay kaydırma daha kolay olabileceğini düşünüyorum. Sonuçta Senin sadece başlangıc adreslerini değiştirmen yeterli oluyor. Hangi adresten başlıyacaksa o adresten itibaren resim basılmaya başlamazmı?

Resim basmak için hep bu döngüyü kullanıyorum.
   For Ypos = 0 To 7      
             For Xpos = 0 To 127 
             Addr = (Ypos*128)+Xpos
             char = CRead resım+Addr
             LCDWrite Ypos,Xpos,[char]
         Next
     Next

Bu kod parçacığı üzerinde biraz kafa yorsak fena olmazdı. Yukarıda resim dataları soldan sağa doğru Herbir sütün için yukarıdan aşağı doğru ilerliyerek basılıyor değilmi. Burada xpos başlangıc adresini değiştirsem resim farklı bir noktadan itibaren basılır.Bunu sürekli tekrarlıyarak kayma efekti verilir. Ama silinen datanın yerine yeni resim datasını nasıl yerleştiririm onu çözemedim hala..


Kadir Can(16F84)

Hocam hız çok büyük sorun olur.
Başka bir yöntem denemek gerekir.
Donanım tarafından desteklenen bir kaydırma yöntemi olabilir belki.

pcb

2 resim kaydırman çok zor
mesela 128*64 lcd olduğunu varsayalım, 2 resminde % 50 lik kısımları ekranda olmaları için ilk resmin 64. pixelinden itibaren 128 e kadar 2 resimin ise 0 dan 63. pixel e kadar bastırmak gerekli bunu bir resmin ekrandan sağa veya sola kaymaya başlaması ile diğer resmin ekranda yavaş yavaş belirmesini yine yukarıda bahsettiğim pixel leri hesaplayarak ayarlaman gerekli. böyle bir çalışma yapmıştım zamanında

Mucit23

Hocam sorun olmazsa yaptığınız çalışmaya örnek gösterebilirmisiniz.