GLCD(KS0108) Uygulaması

Bir çok GLCD kütüphanesi bulunmakta ve bunları kendi uygulamalarımız içerisine dahil etmekte güçlük çekeriz.

http://en.radzio.dxp.pl/ks0108/

Üstteki linkte bulunan GLCD kütüphanesi kullanarak basit bir uygulama yapmak istiyorum.

Elimde hazır olarak bulunan bir kart var. Üzerindeki mcu PIC18F452. Kart eski ama böyle basit uygulamaları denemek için ideal. Hatta ilgili mcuda, epey fazla hata bulunmakta ve üreticisi tarafından başka mcular önerilmekte. Hata kayıtlarına ve diğer belgelerine alttaki linkten ulaşabilirsiniz, ancak bu konumuzla alakalı değil.

https://www.microchip.com/en-us/product/PIC18F452

GLCD ise; Winstar WG12864B-YYH-V8N. Piyasada kolayca bulunabilen KS0108 uyumlu bir grafik ekran.

Bu GLCD kütüphanesini seçmemin özel bir nedeni yok. Bir çok başka kütüphane var. Daha kapsamlı olanları var, ancak bunlar mcunun; hem FLASH alanını, hem de RAM alanını fazlaca kaplıyor.


Elimdeki kart hazır olunca buna uymak zorundaydım. Buna göre GLCD port tanımlamalarım alttaki gibi oldu. Bu tanımlamalar “KS0108-PIC16.c” dosyasının başında yer almaktadır.

Bunun haricinde bu katta, iki adet ADC kullanılmış. Birine pot, diğerine de LM35 bağladım. Pot değeri ve ekran tazelemesi 200mS, sıcaklık okuması da 1000mS aralıklarla olmaktadır. Bunun bir kuralı yok, sadece ben bu şekilde olmasını istedim. Malum, ADC okuma kısıtlaması mcuya göre değişmekte. Zaten bu kadar sık okuma yapmayacağız bu uygulamada.

ADC yapılandırma fonksiyonunu; basit uygulamalarda ve test uygulamalarında genel bir yapılandırma kullanıyorum. Proje ciddileşirse; o zaman başka kısıtlamalar veya tanımlamalar yaparak, daha özel hale getirmeye çalışıyorum.

Burada A0 ve A1, ADC kanallarında okuma yapılıyor. ADC yapılandırma ve ADC kanal okuma fonksiyonu:

Burada kritik bir durum yok. Kendi uygulamalarınızda basit değişiklikler ile daha konforlu hale getirebilirsiniz.

Ana fonksiyon ise aşağıdaki gibi:

Sayıların ekrana belli formatlarda basılmasını sağlamak için; C içerisinde bir kaç kütüphane ve bunların fonksiyonları bulunmakta. Özellikle “sprintf” kullanıldığında; FLASH alanda çok fazla yer kaplamakta. Alttaki linkte bulunan “itoa” fonksiyonu bu konuda çok kolaylık sağladı.

http://www.strudel.org.uk/itoa/

Fonksiyon ise:

Normalde fonksiyon bu şekilde tanımlanmış: “char *itoa_strudel(int value, char *result, int base)”. Ancak “base” tanımlaması XC8 içerisinde özel bir kelime olduğu için; sadece uyarı verip, hatalı yerlerin altını kırmızı ile çiziyor. Ama sorunsuz derleniyor ve çalışıyor. Bu durum gözüme takılmaması için “base” kelimesini “taban” kelimesi ile değiştirdim.

Daha önceden yaptığım başka projelerden alıntı yaptığım için; yapılandırma içinde PLL kullanılmış. Kart üzerinde 10MHz lik bir kristal mcuya bağlı. Yapılandırma dosyası(config.h) içerisinden size uygun olan hız ve diğer değişiklikler yapılabilir.

Türkçe ve bazı özel karakterler için font5x8.h dosyasına ilaveler yaptım. Siz de kendinize gerekli olan karakterler için istediğiniz değişikliği yapabilirsiniz.

GLCD_WriteString() fonksiyonu içerisinde gönderilen yazı; GLCD_WriteString() fonksiyonu içerisinde basılacak font seçimi yaparak, GLCD_WriteData() fonksiyonu ile ekrana basılmasını sağlamakta. Bu uygulamada 5×8 piksel fontlar kullanılmıştır. Farklı fontları ve farklı piksel boyutlarını basabilmek mümkün. Yukarıda bahsettiğim fontXXX.h dosyasında ve GLCD_WriteString(), vb. fonksiyonlarda değişiklik yapmak gerekmekte.

Ayrıca bu GLCD kütüphanesinde 128×64 tek renk resimleri ve/veya şekilleri gösterebilecek fonksiyonlarda bulunmakta. Bunlarla ilgili olan dosya da “bitmap.h”.

Uygulamanın videosu ve proje dosyaları ektedir.

Proje dosyaları: