C18 LCD Kütüphanesinde Hata

Başlatan Tagli, 05 Nisan 2011, 00:26:55

Tagli

Bugün ilk kez C18 içindeki hazır kütüphane ile karakter LCD sürmeyi denedim ve kütüphanedeki bir hata, ben kendisini fark edene kadar baya zamanımı aldı...

Sorun öncelikle yazıların ters çıkması ile kendini gösterdi. Aslında ilk denemelerimde yazmaya ekranın solundan başlayınca yazının ters olduğunu da fark edemedim, ekranda sadece yazının ilk karakteri çıkıyordu ve bir anlam verememiştim. Daha sonra ekranın ortasında bir yerden yazıyı başlatınca yazının sola gittiğini fark ettim.

Neyse, lafı fazla uzatmayayım, sorun temel olarak LCD'nin "Entry Mode Set" komutundan kaynaklanıyor. Bu komut ile, yazılan her karakterden sonra ekranın veya imlecin sağa veya sola kayması sağlanıyor. Burada I/D artma veya azalmayı, S ise artma azaltmanın ekran mı yoksa imleç mi üzerinde uygulanacağını belirtiyor. Gerçi S'nin çalışmasını tam olarak anladığımdan ben de emin değilim.
[IMG]http://img845.imageshack.us/img845/5840/entrymode.jpg[/img]

Kütüphanede (v3.37.01), WriteCmdXLCD komutu için xlcd.h dosyasında geçen ön tanımlı ayarlar şöyle:
/* Cursor or Display Shift defines */
#define SHIFT_CUR_LEFT    0b00000100  /* Cursor shifts to the left   */
#define SHIFT_CUR_RIGHT   0b00000101  /* Cursor shifts to the right  */
#define SHIFT_DISP_LEFT   0b00000110  /* Display shifts to the left  */
#define SHIFT_DISP_RIGHT  0b00000111  /* Display shifts to the right */


Belli ki yazan adam durumu yanlış anlamış ve LCD komutlarındaki "Cursor or Display Shift" ile karıştırmış. Ama bit biçimi o komuta da uymuyor. Örneğin düz bir yazı çıkarmak için "SHIFT_CUR_RIGHT" kullanıldığında yazı ters gidiyor. Bununla da kalmıyor, ekran da kayıyor.

İstenilen ekran kaydırmasız soldan sağa yazıya ulaşabilmek için 0b00000110 ifadesi gerekli.

Atladığım bir yer var mı? Ben mi yanlış düşünüyorum yoksa?

Şöyle olsa sorun çözülür müydü? Ben de denemedim henüz.
/* Cursor or Display Shift defines */
#define SHIFT_CUR_LEFT    0b00000100  /* Cursor shifts to the left   */
#define SHIFT_CUR_RIGHT   0b00000110  /* Cursor shifts to the right  */
#define SHIFT_DISP_LEFT   0b00000101  /* Display shifts to the left  */
#define SHIFT_DISP_RIGHT  0b00000111  /* Display shifts to the right */
Gökçe Tağlıoğlu