ana sayfa > ARM > STM32 ile Touch Panel kullanımı ve Paint Uygulaması

STM32 ile Touch Panel kullanımı ve Paint Uygulaması

Pazartesi, 01 Nis 2013 yorum ekle yorumlara git
STM32 ile Touch Panel kullanımı ve Paint Uygulaması

Merhaba arkadaşlar.

Bu uygulamamda yine STM32 ile ile touch paneller üzerine bir çalışma yapıp, basitçe paint uygulaması yapmaya çalıştım.

MCBSTM32C board üzerinde bulunan TFT modülü kullandım. Bu LCD üzerinde dokunmatik ekran sürücüsü STMPE811 çipi kullanılmış. Bu çipin driver programı için ben fazla birşey yazmadım açıkçası. Keil ile birlikte gelen örnek kodların içerisinde bulunmakta. Sadece ben kendime göre biraz düzenledim.

STMPE811 in Datasheetine Buradan ulaşabilirsiniz.

Bu enteğre bayağı karışık. Kullanıma hazır hale getirmek için birçok register üzerinde işlem yapmak gerekiyor.

Bu ayarların hepsini örnek kodlar içerisinden hazır aldım ben. Sonradan bazı registerler üzerinde oynamalar yaparak sensörün çalışmasını yaptığım uygulamaya uygun hale getirdim.. Bu sebeble Register ve görevlerini uzun uzadıya anlatmayacağım. Datasheet te gerekli açıklamalar mevcut zaten.

Touch Panel ayarlamaları aşağıdaki gibi olacaktır.

Burada kullandığım I2C kütüphanesi bir önceki accelerometer uygulamamdaki ile aynıdır. Bu donanım üzerinde hiçbir değişiklik yapmadım.

STMPE811 in intterrup çıkışı CS pinine bağlanmış. Ben dokumayı algılamak için interrupt çıkışlarını kullanmadım. Sürekli olarak TSC_CNTL Registerinin 7. Bitini kontrol ettim. Ekranda herhangi bir dokunma algılandığı zaman bu bit 1 olamaktadır. Bu sayede dokunmayı farkedebiliyorum.

Bu işi yapmak üzere ufak bir fonksiyon hazırladım.

Dokunma varsa Bu fonksiyon 1 ile geri dönüyor. Dokunma algılandıktan sonra hemen X,Y ve Z kordinat bilgilerini okuyorum. Sensör kullanımı bu şekilde. Bundan sonraki iş gelen kordinat bilgilerini analiz etmek.

Aslında internette izlediğim videolarda birde dokunmatik panel kalibrasyonu yapıldığını gördüm. Bunun için ilk başta ekranın birbirinden uzak 3 veya 4 noktasına bir işaret koyulup kullanıcının sırayla bu noktalara dokunması bekleniyor. Kullanıcı tüm noktalara dokununca elde edilen kordinat bilgileri bazı hesaplardan sonra ekranı kalibre etmekte kullanılıyor.

İnternette birkaç sitede nasıl yapıldığını anlatmışlardı fakat çok karmaşık matematiksel hesaplamaları vardı. Açıkçası bu matematiksel işlemleride anlamayınca bende kalibrasyon olmadan daha basit bir yol ile çözdüm meseleyi

Dokunmatik panelden X ve Y eksen bilgileri yaklaşık olarak 200 ile 3900 arasında geliyor. Bizim amacımız örneğin X ekseni için 3900 gibi bir değer geldiğinde elimzide 320 değeri, 200 geldiğinde ise 0 değeri olsun. Bunu yapmak için X ve Y eksenleri için birer katsayı belirleyip okuduğum kordinat bilgilerini sürekli bu değerle çarparak bana lazım olan değerleri elde etmiş oldum. Sonuç olarak elde ettiğim değerler çok küsüratlı oluyordu. Birde yuvarlamak gerekiyor bu sayıları.

Yaptığım bu işlemleri burada görebilirsiniz.

Şimdi biraz yaptığım uygulamadan bahsedeyim.

Yaptığım bu uygulamada kısaca okuduğum kordinat bilgilerine göre ekranda  o kordinata karşılık gelen kordinata nokta koydum. Araya birazda görsellik katarak paint benzeri bir uygulama yapmış oldum.

Yaptığım uygulamanın Ekran görüntüsü Aşağıdaki şekildedir.

STM32_Paint_1
Arayüz Tasarımını MikroE firmasının geliştirmiş olduğu Visual TFT Programında    yaptım. Programın görselliği çok güzel. Bazı özellikleri hoşuma gidiyor. Bunun dışında pekde bir numarası yok. Genel olarak MikroE ürünleri için tasarlandığından dolayı programın işlevleri hep kendi ürünlerine yönelik. Yoksa Aynı tasarımı diğer birçok programda yapabilirsiniz.

Tasarladığım arayüzde  7 adet buton var. Bu butonların 5 tanesi çizgi kalınlığını seçmenize yardımcı olur. Diğer iki butonda Clear butonu ekranı seçili olan renge boyar. Bir anlamda ekranı temizler.

Silgi butonu ise silgiyi aktif eder.

Ekranda gördüğünüz butonların hepsi resimlerden oluşmaktadır. Normalde basılı hali ve basılmamış hali olmak üzere her buton için iki adet resim bulunmaktadır.  Butonlara dokunulduğu zaman basılmış efekti vermek için sadece resimler değiştirilir. İşin Bütün espirisi budur.

Şimdilik ben beyaz dahil 13 adet renk seçeneği ekledim. Butonları fazla küçültmek istemedim. Bu haliyle ideal olduğunu düşünüyorum.

Normalde Bu resimlerin hepsini 16bit 565(5bit R, 6 bit G, 5 bit B) formatında const array şeklinde diziye dökmek gerekiyor. Bu iş için birkaç program kullandım. Bazı programların ilginç bir şekilde renkleri karıştırdığını gördüm. Yani kırmızı çıkması gereken yerde mavi, mavi çıkması gereken yerlerde kırmızı çıktığını gördüm. En son aşağıdaki sitedeki programı buldum. Aralarından en düzgünü budur.

Sadece 565 değil birkaç resim formatını daha destekliyor.

Programı Buradan indirebilirsiniz.

Bu uygulamada karşılaştığım problemlerden bir taneside hafıza oldu. Aslında hiç hesaba katmamıştım. Normalde 16 bit 320X240 bir resim 150kb dan fazla tutuyor. Halbuki kullandığım STM32F107VC nin Flash hafızası sadece 256kb, Dolayısıyla ikinci bir 320×240 boyutunda resim ekleyemedim. Buna dikkat etmek gerekiyor. Hafıza bu işlerde çok büyük bir faktör.

Main içerisinde yazdığım program aşağıdaki gibidir. Bu konuda da birkaç noktaya değinmek isterim.

Bu tip TFT lerde Ekrana bir data gönderileceği zaman ilk önce işlem yapılacak alan kadar bir pencere açılıp bu pencere içerisinde çalışılır. Biz Sol taraftaki butonlara her basışımızda butonların resmi değiştiği için butonun basıldığı noktaya bir pencere açılır içerisine buton basılır.
Bu işlemin ardından tekrardan çalışma alanımıza yeni bir pencere açmak gerekir. Çünkü En son buton bastığımız alana pencere açtığımız için biz bu alan dışında işlem yapmak istersek bile bu ekrana yansımaz. Bu yüzden her renk seçilişinde veya butonlara dokunulduktan sonra en son tekrar çalışma alanına pencere açılması gerekiyor.

Kodlarda bunu daha ayrıntılı bir şekilde görebilirsiniz.

Birde şunu gördüm. Burada kullanılan Touch paneller çok kalitesizmiş. Çok fazla yanlış kordinat veriyor. Eklediğim videodada görebilirsiniz. Bazen program ekranın rastgele bir noktasına nokta koyuyor. Biraz araştırınca bunun touch panel kalitesiyle ilgili olduğunu anladım. Yazılımsal olarak bunu  önlemek için iyileştirme yaptım ama tam olarak kesemedim.

İnternetteki bu tür videolardada benzer durumu gördüm

Yaptığım uygulamanın vidosu
http://www.youtube.com/watch?v=1-BjuCyIi7I&width=600&height=360

Bunlarda yaptığım birkaç sanat eseri 😀
STM32_Paint_3
STM32_Paint_4
Bu uygulamada yaşadığım hafıza problemlerinden sonra artık SD kart işini çözmem farz oldu bana. Bir sonraki çalışmam bu yönde olacak.

Bu Uygulamaya ait dosyaları Buradan indirebilirsiniz

İyi çalışmalar

Categories: ARM Tags: , , , ,
  1. neco
    Pazar, 19 May 2013 zamanında 23:56 | #1

    bende buna benzer bir uygulama ile kısa bir süre önce uraştım kullandığım cip stm32f103vb idi ancak tft color lcd arayüz entegresindeki sorun yüzünden tam olarak çalışmadığını zannediyorum kullandığım işlemci yada eepromlarda bir uyumsuzluk olduysada tam olarak çözemedim

  2. mustafa
    Çarşamba, 13 Oca 2016 zamanında 01:30 | #2

    stmpe811 kütüphanesini projeme include yaptığımda bulunamıyor. projemi sizin anlattığınız gibi oluşturmuştum. stmpe811.c ve stmpe811.h dosyalarını proje klasörünün içerisine kopyaladım ve keil da proje ağacına ekledim fakat include ettiğimde bulunamıyor. şimdiden yardımlarınız için teşekkür ederim.

  3. Ferhat YOL
    Perşembe, 14 Oca 2016 zamanında 23:22 | #3

    Ne tür bir hata veriyor?

  1. şimdilik geri bağlantı yok