Picproje Elektronik Sitesi

DERLEYİCİLER => CCS C => Konuyu başlatan: Salih - 21 Eylül 2005, 13:48:21

Başlık: Sadece ilk 8 karakter
Gönderen: Salih - 21 Eylül 2005, 13:48:21
Yazdığım programda normal Lcd.c sürücüsünü kullandım. Elimde 1x16 karakterlik lcd var. Gönderdiğim karakterlerin ilk 8 adedi görülüyor. Nedenini bilen arkadaş varmıdır.
Başlık: Sadece ilk 8 karakter
Gönderen: SpeedyX - 21 Eylül 2005, 16:45:54
Selamlar, 2x16 ile 1x16 nın init ayarlarında fark var, yani kullandığınız lcd.c onu desteklemiyor, 2x16 da ilk satır bir blok, 2. satır diğer blok iken, 1x16 da ilk 8 karakter 1 blok, son 8 karakter diğer blok olarak tanımlı, yani adresleri farklı. init kısmında değişiklik yaparak çözebilirsiniz.
Başlık: Sadece ilk 8 karakter
Gönderen: Salih - 21 Eylül 2005, 17:44:49
Daha önce LCD_INIT_STRING içindeki değerleri değiştirip denemiştim. Olmamıştı. Herhalde olması gereken değerleri bulamadım.
Başlık: Sadece ilk 8 karakter
Gönderen: SpeedyX - 21 Eylül 2005, 18:02:45
C biliyorsunuz diye düşünüyorum;
lcd nin datasheetine bakıp, write nasıl yapılıyor ve hangi adresler görüntüleniyor, öğrenerek programın yaptığı ile karşılaştırabilirsiniz.


Belki şu kısımlarda değişiklik yapmak işinizi görebilir, asm hariç başka dil ile 1x16 lcd kullanmadım.
#define lcd_type 2           // 0=5x7, 1=5x10, 2=2 lines
#define lcd_line_two 0x40    // LCD RAM address for the second line


BYTE const LCD_INIT_STRING[4] = {0x20 | (lcd_type << 2), 0xc, 1, 6};
                            // These bytes need to be sent to the LCD
                            // to start it up.


                            // The following are used for setting
                            // the I/O port direction register.

struct lcd_pin_map const LCD_WRITE = {0,0,0,0,0}; // For write mode all pins are out
struct lcd_pin_map const LCD_READ = {0,0,0,0,15}; // For read mode data pins are in
Başlık: Sadece ilk 8 karakter
Gönderen: Salih - 21 Eylül 2005, 18:50:44
Herhalde 2. sekiz karakteri yazmak için ikinci satıra geç karakteri kullanmak en kolayı. Diğer türlü iş uzuyor.
Teşekkürler.
Başlık: Sadece ilk 8 karakter
Gönderen: SpeedyX - 21 Eylül 2005, 19:21:58
Aynen öyle.
O şekilde çalıştığını bilmiyordum, 2. bölüm reset almaz diye düşünüyorum.
2.bölümde çalışıyor mu? yani reset alıyor mu?
(0b11000000)
Başlık: Sadece ilk 8 karakter
Gönderen: Salih - 21 Eylül 2005, 19:31:52
İkinci sekiz karakterde yazmak istadiklerinizin başına \n karakterini koyunca gayet güzel çalışıyor.
örneğin
printf(lcd_putc,"\fX=%u \nIr=%Lu",x,akim_r);
Başlık: Sadece ilk 8 karakter
Gönderen: SpeedyX - 21 Eylül 2005, 19:57:10
Hımm, güzel.
Siz bunu \n koymadan yapmak istiyorsunuz fakat başka bir yolu yok yada ayrı bir fonksiyon yazabilirsiniz; göndereceklerinizi o fonksiyona verip, karakter sayarak 8 den sonra \n koymasını sağlayabilirsiniz. Bence hiç gerek yok.
Başlık: Sadece ilk 8 karakter
Gönderen: SpeedyX - 21 Eylül 2005, 20:18:28
#define lcd_type 0           // 0=5x7, 1=5x10, 2=2 lines
#define lcd_line_two 0xC0    // LCD RAM address for the second line


BYTE const LCD_INIT_STRING[4] = {0x80 | (lcd_type << 2), 0xc, 1, 6};
                            // These bytes need to be sent to the LCD
                            // to start it up.


                            // The following are used for setting
                            // the I/O port direction register.

struct lcd_pin_map const LCD_WRITE = {0,0,0,0,0}; // For write mode all pins are out
struct lcd_pin_map const LCD_READ = {0,0,0,0,15}; // For read mode data pins are in


ufak değişiklikler yaptım, acaba bu şekilde denermisiniz? yine çalışacak mı?
Başlık: Sadece ilk 8 karakter
Gönderen: Salih - 22 Eylül 2005, 09:44:13
Dediğiniz değişiklikleri denedim. Sadece ilk sekiz karakteri yazıyor.
İstediğimiz olmuyor.
Başlık: Sadece ilk 8 karakter
Gönderen: SpeedyX - 22 Eylül 2005, 18:39:23
Peki teşekkürler, \n koymakda zor değil, bu şekilde olacak artık.
Başlık: Ynt: Sadece ilk 8 karakter
Gönderen: mobland - 17 Nisan 2013, 17:48:20
lcd.c dosyasının içerisindeki lcd_puctc() fonksiyonu aşağıdaki gibi değiştirildiğinde 1x16 lcd ekran için ilk 8 karakter yazma problemi giderilmiş oluyor bizzat denendi arkadaşlar.
uzun zaman olmuş konu açılalı ama okunmamış bilgi tazedir :)

void lcd_putc( char c) {
   char z=0;
   switch (c) {
     case '\f'   : lcd_send_byte(0,1);
                   delay_ms(2);
                   z = 0;
                                           break;
     case '\n'   : lcd_gotoxy(1,2);
                   z = 8;
                                           break;
     case '\b'   : lcd_send_byte(0,0x10);
                   z = z-1;
                                           break;
     default     : if(z==9) {lcd_gotoxy(1,2);}

                   lcd_send_byte(1,c);
                   z++;
                                           break;
   }
}