STM32F103 İLE ILI9341 TFT KULLANIMI – 8 bit paralel giriş

STM32F103 ile ILI9341 GRAFİK TFT

STM32 ile başlangıçta kullandığım popüler 2 ve 4 satırlı mavi ya da yeşil LCD lerden sonra renkli grafik ekranları kullanmaya sıra gelmişti.

Ele aldığım ILI9341 arayüzlü ilk grafik TFT ekranı çalıştırmak beni epeyi uğraştırmıştı. İnternet üzerinen bulabildiğim birkaç örnek kod ve ekranın kullanım klavuzundan da yararlanarak epeyi bir çabalamadan sonra becerdim. Bulduğum örnek yazılımlar üzerinde epeyi bir değişiklik yapmam gerekmişti. Ama şimdi elimde farklı tiplerdeki Grafik TFT ler için kullanabildiğim bir yazılım kütüphanem var.

3.5″ 320×480 TFT 8 bit paralel  – arka taraf
3.5″ TFT Ekran Ön taraf

Burada 3.5″ lik 320×480 çözünürlüklü ve 8 bit paralel arayüzlü ILI9341 TFT ile kullandığım programları ve ekranda 3 boyutlu (kabartma diyeyim) tuşları olan bir klavye çizen algoritmamı paylaşıyorum.

SPI arayüzlü, dokunmatik panelli TFT ler için geliştirdiğim kodlar başka yayınların konusu olacak.

Bu paket Smart CNC çalışmamın 4×4 mekanik tuş takımı kullanan modelinin görüntüleme kütüphanesini içeriyor. TFT de görüntüleme dışındaki  kütüphane modüllerini burada bulamayacaksınız.

STM32F103R8T6 Mini 64 Modülü

Kullandığım mikrodenetleyici de yine CNC nin STM32F103R8T6 64 pinli modülü. Bu modül ve diğerleri hakkında bilgi  için burayı tıklayınız.

TFT yi sürmek için 8 bit paralel arayüz kullanılsa da STM32F103 ün 48 pinli modelleri de kullanılabilir. Benim 64 pinli modeli kullanmamın sebebi step motorlar için fazladan gereken I/O portları.

EKRANDA TUŞ TAKIMI ÇİZİMİ İÇİN BASİT BİR ALGORİTMA

Burada TFT kütüphanesine ilaveten, bir arada kullandığım üç ayrı süreç hakkında bilgi veriyorum. Temel TFT sürücü fonksiyonlardan söz etmeyeceğim, sadece Github’da kodları vermekle yetiniyorum.

Burada sözünü edeceklerim:

  1. Ekran üzerinde esnek yapıda 3D tuş takımı çizimi
  2. Tek font dosyası ile farklı boyutlarda karakterler yazmak
  3. Tuşların tepelerine koymak üzere özel etiketler yaratmak

EKRANDA ESNEK BOYUTLARDA ve 3 BOYUTLU TUŞ TAKIMI ÇİZMEK

Aslında bu projede yola çıkış amacım STM32F103  ile Grafik TFT ekran kullandığım projelerde ekrana program akışı içinde değişebilen tuş takımı görüntüleri çizmek idi. Bu yazılım modülünü dokunmatik ekranlarla ya da muhtelif boyutlardaki mekanik tuş takımları ile kullanmayı hedefliyordum. Böylece ekranda menüler ve her seferinde fonksiyonu değişen tuşlar olabilecekti. 

Sonuçta baştan planladığımdan biraz fazlasıyla,bir düğmenin üzerine basıldığında çöken animasyonlu butonları da olan oldukça kullanışlı bir paket ortaya çıktı.

Programın algoritmalarını ve kodunu açıklamayacağım, zira buna gerek olmayacak kadar basit. Program içinde olağanüstü bir şey yok. Özellikle söz edilmesi gereken şeylerden burada söz ediyorum. 

Yapılan iş akıllı -hatta akılsız- telefonların ekranları üzerinde yapılanların yanında çok mütevazi.  Öyle albenili uygulamaları hazır kitaplıklar kullanarak, devasa bellekler ve işlemci gücü ile ben de yapabilirim, ama öylesi bu kadar keyif vermiyor. Hani bir Ferrariye atlayıp sürmek ile, her şeyiyle garajınızda kendi yaptığınız bir bisiklete -hadi motosiklet olsun- binmek gibi bir şey. İkisi çok farklı şeyler. Sonuçta bisikleti yapamayan Ferrari’nin bir parçasını dahi yapamaz.

Kaynak kodları GitHub’a yüklemekle yetiniyorum. Program “header” lerinde ve kod satırlarında açıklamalar var zaten.

ESNEK TUŞ TAKIMI GÖRÜNTÜLEMESİ

Ben projelerimde giriş aracı olarak çoğunlukla 4×4 mekanik -telefonlarda kullanılan türden- tuş takımları kullanıyorum. Aynı tuş takımını program içinde bazan sadece Evet/Hayır  bazan rakam giriş paneli olarak, bazan da menü ve alt menü seçimleri için kullanıyorum. 

CNC ana menü 2×4 tam ekran

Bu durumda tuşların bazan 16 sı, bazan 8 adetlik iki sırası, bazan da sadece 2 adedi kullanarak giriş yapılıyor.  Dolayısı ile her bir tuşun her seferinde farklı bir görevi oluyor, her bir tuşun o andaki fonksiyonunun da ekranda gösterilmesi gerekiyor. Buna “soft key” işlevi diyorlar.

Tuş fonksiyonlarını her tuşun tepesine koyduğumuz etiketlerle belirtiyoruz. Tuş takımının ekrandaki boyutlarına göre tuşlar büyüyüp küçüldükçe bu etiketlerin de büyüyüp küçülmesi gerekiyor. Burada sözünü ettiğim ölçeklendirilebilir font ve semboller de bunun için gerekiyor.

TUŞLAR ÜZERİNDE KARAKTER VE SEMBOLLERİN OLUŞTURULMASI

İnternette grafik TFT ekranlar üzerinde harf ve yazıları görüntülemek için bol miktarda kod örneği bulmak mümkün.

Ancak kullanmak zorunda olduğunuz font dosyaları RAM ya da FLASH bellek üzerinde oldukça büyük yer tutuyor.

Sözünü ettiğim font dosyaları ASCII karakter setinin her bir karakteri için 16×8 (16 satır 8 kolon) bir bit matrisi içeren bir hex dosyasından ibaret. farklı boyutlardaki karakterler için bunun 7×6, 32×16 … vb versiyonlarını da kodunuz içine koymanız gerekiyor. Bu dosyaların her birisi en küçüğü 2 Kbyte dan başlayıp bunun katları büyüklüğünde oluyor.

Yukarıda dediğim gibi kullanacağınız her farklı boyuttaki karakter takımı için ayrı bir font dosyası kullanmanız gerekiyor. Bellek darboğazı olduğunda da bu durum ciddi sorun yaratıyor. 

mikrodenetleyicinizin bellek alanı problemi olmasa bile, özellikle benim gibi geliştirme platformlarının ücretsiz sürümlerini kullanıyorsanız izin verilen kod boyutu sınırlı oluyor. Böylece hamallığını yaptığınız bu hantal “font” dosyaları sizi rahatlıkla sınırın ötesine itebiliyor.

(Not: Ben gömülü C programlama çalışmalarımda KEIL MDK5 ücretsiz sürümünü kullanıyorum. – Güncelleme : Ekim 2018 den itibaren ST firmasının kendi chipleri için sunduğu Atollic True Studio’ya geçtim. Bunda herhangi bir sınırlama yok.)

Burada, tek bir font dosyasını kullanıp bunu büyültüp küçülterek kullanabilmek için geliştirdiğim basit bir algoritmayı veriyorum. Böylece sadece 2 Kbyte boyutunda mütevazi bir font dosyası kullanarak orijinal boyutunun 2,3,4,5 katı büyüklükte karakter ve sembolleri yazabiliyorum. 

Elbette bunun karşılığında ödenen bir bedel de var: 4-5 katı büyütülmüş sembollerin albenisi o kadar yüksek olmuyor. Sembolleri büyültmek-küçültmek için programa görüntüleme hızını düşürebilecek birkaç kontrol adımı daha ekleniyor. Ama gene de amaca hizmet ediyor.

STANDARD ASCII KARAKTER SETİ DIŞINDA SEMBOLLER OLUŞTURMAK

Buraya kadar anlatılanlar ile ASCII karakter setinde yer alan sembolleri tuşların tepelerinde yazmak mümkün. Ancak projelerimde bu yeterli olmuyor. Örneğin  sağ sol yukarı aşağı blok oklar, Exit ve Check işaretleri, özel ikonlar vb. gerekiyor.

Bunların her birini birer karakter fontu gibi bitmap olarak tasarlayıp, ilave bir font dosyası gibi kaydedip kullanmak gerekiyor. Ben bunu yapmak için basit bir excel tablosu ve birkaç makro kullandım. Bu excel aracı gayet basit, esas olarak tablonun sol tarafında hücrelere “1” ler konarak oluşturulan resimi sağ taraftaki Hex kod dizinine çeviren bir makrodan ibaret. Burada verdiğim örnek 16×8 matris yapısındaki tasarımlar için. Ama bunu ya da bundan ilham alarak geliştireceğini tabloları kullanarak istediğiniz BMP (Bit Map) sembolü tasarlayabilirsiniz.

GitHub’a yüklediğim yazılım, paketin bütünlüğü açısından gerek duyulan tüm kütüphane ve sürücüleri de içeriyor. Paket KEIL MDK5 Platformuna yönelik proje yapılandırma dosyalarını da içeriyor. Kodların özellikle ILI9341 TFT sürücülerine ilişkin olanlarının en başlangıçtaki kaynağı ben değilim. Ama STM32F103 ve kullandığım ILI9341,  ILI9320 vb. sürücülü TFT ler için öyle çok değişiklik yaptım ki, ne kadarı benim, ne kadarı orijinal yazılımcının olduğunu artık ayıklamak mümkün görünmüyor. Örneğin, kullandığım ASCII Font dosyası kesinlikle benim tasarımım değil.

Dokunmatik ekran kullanmaya imkan veren kodu da ilk fırsatta yayınlayacağım.

 

Bu yayının sonu – Selçuk Özbayraktar 22.6.2018

One Reply to “STM32F103 İLE ILI9341 TFT KULLANIMI – 8 bit paralel giriş”

  1. Merhaba Selçuk Bey,

    ILI9341 ekranını stm32f103 ile kullanmak istiyorum fakat bir yol kat edemedim. Kütüphanenizi paylaşma imkanınız var mı ? Bu yazı dizisine devam edecek misiniz ?

    İyi çalışmalar dilerim.

Comments are closed.