avatar_mustafa

Grafik lcd il bar grafik oluşturmak

Başlatan mustafa, 08 Ocak 2013, 15:55:51

mustafa

Merhaba arkadaşlar ;

Proton basic programlama dili ile bir bar grafik oluşturmak istiyorum. Yani örneğin adc ile ölçüm yaptığım bir işlem sonucunu grafik lcd üzerinde bar grafik yada herhangi bir grafik türü ile göstermek istiyorum. Normalde grafik lcd kullanabiliyorum yani lcd ye resim ve yazı ları basabiliyorum ancak Hareketli bir grafik nasıl oluşturacağım konusunda bir fikrim yok malesef. Bu konu ile alakalı daha önceden uğraşmış arkadaşların elinde buna benzer proton ile yazılmış örnek bir program mevcut ise paylaşabilirler ise sevinirim . İyi çalışmalar dilerim.

Mucit23

#1
Burada bir örnek var.
http://320volt.com/glcd-gostergeli-pil-olcum-devresi-pic16f877-proton-adc/

Mantığı şöyle.

Protondaki LINE fonksiyonu bu iş için kullanılabilir.

kullanımı şöyle

LINE SET_CLR , XPOS_START , YPOS_START , XPOS_END , YPOS_END

Set clear çizgi rengidir. 1 veya 0 olur.

Diğer 4 parametre ise çizilecek çizginin kordinatlarını belirlemede kullanılır. Bu 4 parametre ile iki adet nokta belirlersin.

XPOS_START ve YPOS_START parametreleri çizginin başlayacağı noktayı belirler.  XPOS_END ve YPOS_END parametreleri ise çizginin biteceği noktayı belirtir.


Örneğin ekranın 0,0 kardinatından başlayıp yine 0,127 kordinatına bir çizgi çizmek istersen eğer Şöyle bir komut yazmalısın.

LINE 1,0,0,127,0

Bu şekilde ekranın en üst noktasına bir çizgi çizmiş olursun.

Bar yapmak için ise çizilecek çizginin başlangıç kordinati sabit olacağı için sadece çizginin X eksenindeki uzunluğunu değiştirmek yeterli olacaktır.

Yani XPOS_END Parametresini 0-127 arasında değiştirsen çizgi uzunluğunda değişmiş olur.

Fakat bu şekilde sadece 1 pixel genişliğinde   bar çizmiş olursun. Daha kalın barlar çizmek için çizgi sayısını arttırman lazım.

LINE 1,0,0,XPOS_END,0
LINE 1,0,1,XPOS_END,1
LINE 1,0,2,XPOS_END,2
LINE 1,0,3,XPOS_END,3
LINE 1,0,4,XPOS_END,4

Bu şekilde 5 pixel kalınlığında uzunluğuda 0-127 arasında değişen yatay bir bar çizmiş olursun. Uzunluğu belirleyen parametre XPOS_END parametresidir.

Bu şekilde istediğin gibi bar çizersin fakat bu kodunda eksik bir tarafı var. Onuda söyleyelim. Bu şekilde Çizgi uzunluğunu arttırdığın zaman barın uzunluğunu artırırsın. Ama çizgi uzunluğunu azalttığın zaman bar uzunluğu azalmaz. Sebebi ise bizim sadece ekranda verdiğimiz çizgi uzunluğu kadar pixellerde değişme olur. Daha önceki pixellere dokunulmadığı için ekranda öylece kalır. Dolayısıyla Barımız kısalmaz.

Çözümü ise basit. Çizdiğimiz Bardan sonraki çizgileri silmekten geçiyor.

Barımızın Uzunluğu 0-127 arasında değişsin. Barın kalınlığı ise 5 pixel olsun.


LINE 1,0,0,XPOS_END,0 : LINE 0,XPOS_END+1,0,127,0
LINE 1,0,1,XPOS_END,1 : LINE 0,XPOS_END+1,1,127,1
LINE 1,0,2,XPOS_END,2 : LINE 0,XPOS_END+1,2,127,2
LINE 1,0,3,XPOS_END,3 : LINE 0,XPOS_END+1,3,127,3
LINE 1,0,4,XPOS_END,4 : LINE 0,XPOS_END+1,4,127,4

Birinci Satırı açıklayalım.

İlk yapılan işlem Ekranın 0,0 kordinatından başlayıp yine Y ekseninde 0 ama X ekseninde ise XPOS_END uzunluğunda bir çizgi çizilir. Ardından Gelen Line Fonksiyonu ile Daha önceki çizginin bittiği noktadan başlayıp aynı eksende Max uzunluk olan ekranın 127,0 noktasına kadar ekrandaki pixelleri temizler.

Alt satırlarda aynı işi yapıyor.

Ekran bar bu şekilde çizilir. Fakat çok hızlı bir değişim olacaksa bu yöntem iyi değil çünkü LINE fonksiyonları işlemciyi çok yoran fonksiyonlardır. Arka planda zilyon çeşit matematiksel işlem yapar. Dolayısıyla işlemcinin biraz vaktini alır.

Yukarıda verdiğim linkte farklı bir mantıkla yapmış. Direk ekrana 1 byte FF gönderip Ekranda 8 pixel kalınlığında  yan yana çizgiler çizerek bar yapmış. Bu yöntemde işini görür. Üstelik Daha hızlı çalışır.

Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

mustafa

MUCİT çok teşekkür ederim gönderdiğin bilgiler için en kısa sürede hepsini inceleyeceğim. İyi akşamlar...

mustafa

Merhabalar MUCİT gönderdiğin örneği inceledim ve üzerinde değişiklikler yaparak istediğim şeyi elde etmeye çalıştım ancak bir sorunla karşılaştım. Sorunum şudur ; ben bar grafiğin  yan olarak değilde yukarı aşağı şekilde artıp azalmasını istiyorum. Bar grafiği dikey olacak şekilde ayarladım ve  artım azalma işlemi de tamam ancak oradaki sorun potu çevirip voltaj değerini arttırınca grafik şeklinin en alttan başlayıp yukarıya doğru artması gerekirken 0,0 dan başlayarak aşağıya doğru azalıyor. Sizce bu konuda nasıl bir yol izlemeliyim?

mustafa

#4
arkadaşlar yaptığım değişiklikler ektedir. Arkadaşlar ayrıca bir resim ekledim o resimde benim istediğim  gibi birşey yapmış arkadaş.

Mucit23

Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

mustafa

Yaptığım araştırmalar neticesinde sanırım öncelikle fastlcd ile bir bargrafik resmi çizim daha sonra mucit in vermiş olduğu örnektekine benzer bir şekilde resmini çizdiğimiz bar grafiğin içini pixeller ile doldurabilirsek sanırım bu iş çözülmüş olur yanlış mı düşünüyorum sizce ?

askb

Merhaba kolay gelsin.Bu konuda benimde sıkıntım var.Aynı şekilde bende bar grafık yapmaya çalışıyorum.
Proton kullanıyorum.Bu konuda yardım rica ediyorum.

Mucit23

Line komutlarını kullanarak bar oluştur. LCdwrite komutunu kullanarak dikey bar yapmak daha zor
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

mustafa

Mucit elinde bu şekilde yapılmış bir örnek varsa rica etsem incelemem için göndereilirmisin ?

askb

sayın,Mucit 23
Çözmeye çalışıyorum.Henüz sonuca ulaşamadım. Örnek gönderebilme imkanınız varsa çok ikrama geçer.Büyük fontlu yazı yazma işinide halledemedim.Microelektronikanın "Font creator"programını kurdum fakat onunla da yapamadım.Microelektronikanın oluşturduğu dosyanın uzantısı  ...... .lcd şeklinde.bu iki konuda sıkıntım var.Örnek uygulamalar buldum.Orada Include "arial18.inc" gibi dosyalar oluşturulup,programda include yapılarak büyük fontlu yazı yazılabiliyor.Bunu oluşturan programı bulamadım.
 

Mucit23

http://320volt.com/glcd-gostergeli-pil-olcum-devresi-pic16f877-proton-adc/

Buradaki gibi fontlu yazıları ekrana basmak için font dosyalarını protonun anlayacağı dilde .TXT dosyasına çevirip programa include etmek gerekiyor.

Çeviri işlemi için ben font converter programını kullanıyordum.

Aşağıdaki linkten indirebilirsin.

Kullanımı için ise yine verdiğim örneğe bak..

FontConverter
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

askb

Çok teşekkür ederim,Hocam.
Ögleden sonra hemen deneyeceğim.Sonucu bildiririm.

askb

S.a   mucit23,
Şöyle bir durumla karşılaştım.
1.) Verdiğiniz linkteki pil ölçüm örneğini indirdim ve direk simulasyonda açıp çalıştığını gördüm.
Daha sonra ADC.BAS dosyasını incelemek için protonda açıp inceledim.(hiçbir değişiklik yapmadım)F9 ile derleme yaptırıp tekrar isiste denemek istediğimde,Az önce çalışan devrenin çalışmadığını ve glcd de siyah VE okunmayan karekterler olduğunu gördüm.Emin olmak için 2.kez dosyayı yeniden indirip,yukarıdakı adımları tekrarladığımda,sonucun aynı olduğunu gördüm.
Proton basicde ADC.BAS dosyasını açıyor ve başarılı bir şekilde derlemesini yapıyorum.Bu derlenen dosyayı Proteus'a attıgımızda Hata alıyorum.Sanırım benim proton da sorun var.
        Kullandığım versiyon:PROTON IDE versiyon 2.0.1.2
                                       PROTON BASIC COMPILER LOADER VERSIYON 3.5.2.7
2.olarak verdiğiniz linktedi convert programını kullanmaya çalıştım.(tam olarak nasıl kullanılacağını bilmiyorum.)Ama sırası ile şöyle yaptım:
1.Fonconverter.exe yi çalıştırdım.
2."destination directory"ile kaydedileceği yeri belirledim.Proton konunu olduğu klasör.
3."font" ile arial 12 seçtim.
4.Convert yaptım.
5.Oluşan dosya TXT uzantılı.Bu protonda INCLUDE yapadım.Bu yüzden Dosyanın Uzantısını INC olarak değiştirip
   Protonda include yapabildim.
6.Yazıyı büyük yazdırmak için,lcd ye yazıyı göndermeden hemen öce "Print Font Arial____8" veya 12  diye
    yazan satırı(İşin bu kısmını anlamadım zaten) elle kendim yazıyorum.sonra derlemesini yapıp,isise geçiyorum.
7."Print Font Arial____8" satırını kullandığım zaman,isis alt satırda durmadan
     artan şekilde uyarı mesajı veriyor".[PIC18MEMORY]PC=0X00EA.Adress for TBLRD*+ instruction (0x0000F283)is not in code memory-zero returned."Şeklinde uyarı alıyorum.Bu satırı kaldırırsam uyarı almıyorum.

Sonuç olarak Büyük fontlu yazı yazmayı beceremedim.


mustafa

Yazmak istediğin font un include edilmediği için o hatayı veriyor. Programda alt satıra örneğin

INCLUDE "metin.txt"
INCLUDE "metin2.txt"

şeklinde bu fontları eklemelisin.

Powered by EzPortal