2×16 LCD Büyük karakter yazılabilir mi?

Bu konumuzda 2×16 LCD displaylerde büyük karakterin nasıl yazılabildiğini göreceğiz. Öncelikle HD44780 LCD lerin 2 font kullanabildiğini fakat kullanıcıların genelde 5*8 fontunu kullandığını belirtelim. Bundan başka 5*10 font da kullanılabiliyormuş fakat ben hiç kullanmadım. Şayet bu konuya ilgi duyan varsa aşağıdaki linkten 5×10 font kullanımını gözlemleyebilir.
5×10 font kullanımını bu siteden (ingilizce) okuyabilirsiniz.
Fakat ben bunu göstermeyeceğim. Mesela saat yada ısı göstergesi olarak kullanmak istiyorsunuz. LCD de karakterler küçük olduğundan uzaktan görünmede sorun yaşıyorsunuz. O zaman akla 2 satırı birden tek satır gibi kullanıp numaraları büyük göstermek gerektiği geliyor. Bunun yolunu bulmalıyız.

Bu LCD nin kendi fontlarıyla mümkün olmadığından LCD nin yeni karakter kısmını kullanarak yapabileceğimiz bir güzelliktir.
Fakat burada da LCD nin 8 yeni karakter kullanım sınırlaması ile karşı karşıya kalıyoruz. ekranda aynı anda sadece 8 yeni karakter kullanabiliriz. Ekrandaki bilgi değiştiğinde başka yeni karaktere ihtiyacımız olduğunda yine 8 karakteri aşmayacak şekilde kullanabileceğiz. Tabii ki burada şuna da dikkat etmemiz lazım. Örneğin 1. yeni karakter hafızasına bir karakter gönderdiniz. Mesela türkçe karakter olarak Ş gönderdiniz. Şayet ekranı temizlemeden aynı karaktere Ç karakterini gönderirseniz ekranda bütün Ş görülen yere Ç yazacaktır ki bu da kelimenizin anlamsız görünmesine sebep olacaktır.

Mesela, AŞIK yazdınız ve sonrasında ekranı temizlemeden sadece yeni Ç karakterini gönderdiniz O zaman kelimeniz AÇIK olacaktır.
Bütün bunları göz önünde bulundursanız bile uzun bir şekilde ekrana yeni karakterleri devamlı göndermek zorunda kalacaksınız.

Kolayı var mı derseniz, EASYLCD modül kendi eprom hafızasında sizin için 24 yeni karakteri saklayabilir ve karakterleri kolaylıkla LCDSC (LCD Select Character) gibi bir komutla ekrana getirebilirsiniz. Bu modülü kullandığınızda yeni karakter sorununu aşmış olacaksınız. programda yeni karakterlerin kodlarına yer vermeniz gerekmeyecektir.

Bütün bunları aştınız diyelim. Şimdi de ekranda tüm numaraları 8 yeni karakterle oluşturmak kalıyor. Bunu da karakter jeneratörüyle oluşturup seri port üzerinden EASYLCD modüle göndererek yapabilirsiniz. Ya da EASYLCD modülün yanında verilen visual basic ile yazılmış olan arayüzü kullanarak kolaylıkla Modülün epromunu programlayabilirsiniz.

Bu resimdeki gibi oluşturacağınız karakterler 8 yeni karakter limitini aşmayacaktır. Bu şekilde ekranda saat ısı gibi değerleri büyük gösterebileceksiniz.
Bunu yaparken göstereceğiniz karakterleri de dijitlere dönüştürerek kullanmanız gerekiyor. Her dijit 3 sütundan (3 karakter alanından) oluşuyor. Bu da size 3+3= 6 karakterlik bir numara büyüklüğünü verecektir.
Bununla birlikte ısı göstergesi için derece işareti ve C kullanacaksanız zaten bunlar için yeni karakter kullanmaya gerek olmayacağından kolaylıkla kullanabilirsiniz. Hatta aynı karakter kodlarını kullanarak başka karakterler oluşturabilirsiniz. Mesela Büyük C harfi için yeni karakter yaratmadan kar1 kar2 gibi parçaları birleştirerek göstermeniz bile mümkün.

Buraya kadar  sıkılmadan okuduysanız zaten kendi programınızda bunları uygulayabilirsiniz. Aşağıdaki örnek program size yol gösterecektir.
Bu arada önemli nokta ne diye sorarsak bu da, EASYLCD modülün 24 yeni karakter hafızasını kullanabilmek diyebiliriz. Saati gösterdiniz fakat bir de aynı ekranda grafik  seviye göstergesi de kullanmak istediğinizde onların yeni karakterlerini de Eproma bir kez aktardığınızda ekranı temizleyip gerekli karakterleri Epromdan çağırarak grafik seviye gösterimine geçebilirsiniz.

Bu örnek programda öncelikle DS1307 saat devresinden bilgileri alıp ekrana yazdırıyoruz. Daha sonra LM35 ile bilgileri alıp yazdıracağız. sonrasında ise hcr-04 ile mesafe bilgisini grafik seviye göstergesi olarak göstereceğiz. Tümü EASYLCD modül ile mümkün.

DS1307 hakkında önemli nokta : Arduino RTC kütüphanesini kullanmaya gerek yoktur. Bu entegrenin çalışmasına baktığınızda sadece 8 registeri okuyup yazarak bunun mümkün olduğunu göreceksiniz. Sadece wire.h kütüphanesine ihtiyacımız var. Çünkü DS1307 I2C iletişimi kullanıyor. En önemlisi ise modülü aldınız bağlantıları yaptınız fakat modül size saati gösterse bile bir türlü saat çalışmayacaktır. Bunun sebebi ise ilk hareket için sizden saati ayarlamanızı bekliyordur. Bunun için programda saat ayar kısmında bulunduğunuz saati yazıp bir kere DS1307 ye göndermeniz gerekiyor.

Bunun dışında ise dikkat etmeniz gereken konu. Gerçek devrede SDA ve SCL uçlarında birer Pullup direnç eklemek, bunlar I2C nin olmazsa olmazı diyebiliriz. Kullandığınız hızlara göre 4.7K – 10K arasında olabilir. Resimde görüldüğü şekilde ekleyebilirsiniz.

Bunun yanı sıra SQW/OUT  kısmını görüyorsunuz. Bu uçtan ise 1Hz lik bir sinyal alıp bunu ekrandaki saat noktalarını aç kapa yaptırarak efekt verebilirsiniz. Bunu da program içerisinde çalıştırabilmeniz için (07h) 8. kontrol registerinin ayarı yapılarak mümkün olmaktadır.
Register içerikleri aşağıda gösterilmiştir. Bu bilgileri DATASHEET ini indirerek de aytıntılı görebilirsiniz.

Yukarıdaki bilgilere bakarak programda nereleri okumanız ve yazmanız  gerektiğini görebilirsiniz.
3 adet program mevcuttur.
1-) Programda RTC+HC-SR04+LM35 yer almaktadır ve 2×16 ekran kullanmaktadır. (Bu kısımda elimde LM35 olmadığı için Proteus üzerinde gördüğünüz simulatörde LM35 kısmını görebileceksiniz. )

2-) Birinci program ile aynı şekilde Proteus üzerinde çalışacak. (LM35 elimde olmadığı için) Fakat burada 4×16 ekran kullanılıp Saat+tarih Aynı ekranda gösterilecek.

3-) Programda LM35 olmadan sadece RTC+HC-SR04 ile gerçek ortamda Arduino uno ile çalışmasını göreceksiniz. (2×16 ekranda)

Tüm programların kaynak kodlarını buradan indirebilirsiniz. (Proteus için Arduino ile bazı sensör modellerini bu linkten alabilirsiniz. Proteus ekstra modeller )
Not: Proteus da DS1307 yeni modelini kullandığımda SQW/OUT kısmı çalışmadı. Bunun yerine DS1307 için proteusun kendi entegre tipini kullandım.

Arduino Sensör Bağlantı Şeması :

 

 

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir