Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

Lcd "d" harfi çıkmıyor

Başlatan rree, 20 Şubat 2011, 12:51:39

rree

Lcd parametrelerinde bilmediğim bir konu var sanırım.    "Led1" metin bilgisini gönderiyorum. Ekrandan Le1 diye geliyor.Kotlarım aşağıda şimdiden tşkr.

  DegerFotoTr1=1023;
  printf(lcd_putc, "\fLed1= %Lu",DegerFotoTr1 );  //Lcd Ekranında  "Le1= 1023" şeklinde geliyor
  delay_ms(2000);                                                 //    "d"   harfi niye yok.

fahri-

kodda problem yok . denedim led1 yazıyor.

RcALTIN

Kullandığınız sürücü dosyasıyla alakalı olmalı...
KİMSEYİ ENGELLEDİĞİM YOK, ÖZEL İLETİ DEVRE DIŞI !

rree

Sizin kullandığınız  LCD  dosyası hangisidir. Gönderebilirmisiniz.Benim kullandığım FLEX_LCD

eseneren

yazma fonksiyonunuz ile lcd komutlarında gerekli bekleme ile alakalı olabilir....
Seçim yapmak için durum hakkında bilgi sahibi olmak zorunda değilsin, sonucuna hazır olmak için durum hakkında kaygılanırsın.  http://bit.ly/gixfTk

RcALTIN

Alıntı yapılan: rree - 21 Şubat 2011, 12:04:37
Sizin kullandığınız  LCD  dosyası hangisidir. Gönderebilirmisiniz.Benim kullandığım FLEX_LCD

///////////////////////////////////////////////////////////////////////////
////                          rcaltin_lcd.c                            ////
////                 Driver for common LCD modules                     ////
////                                                                   ////
////  lcd_init()   Must be called before any other function.           ////
////                                                                   ////
////  lcd_putc(c)  Will display c on the next position of the LCD.     ////
////                     The following have special meaning:           ////
////                      \f  Clear display                            ////
////                      \b  Go to start of second line               ////
////                      \n  Go to start of second line               ////
////                      \o  Go to start of third line                ////
////                      \p  Go to start of fourth line               ////
////                      \v  Move back one position                   ////
////                                                                   ////
////  lcd_gotoxy(x,y) Set write position on LCD (upper left is 1,1)    ////
////                                                                   ////
////  lcd_getc(x,y)   Returns character at position x,y on LCD         ////
////                                                                   ////
///////////////////////////////////////////////////////////////////////////
////             Modified LCDD.C by Recep ALTIN (RcALTIN)              ////
///////////////////////////////////////////////////////////////////////////

// As defined in the following structure the pin connection is as follows:
//     D0  enable
//     D1  rs
//     D2  rw
//     D4  D4
//     D5  D5
//     D6  D6
//     D7  D7
//
//   LCD pins D0-D3 are not used and PIC D3 is not used.

// Un-comment the following define to use port B
// #define use_portb_lcd TRUE


struct lcd_pin_map {                 // This structure is overlayed
           BOOLEAN enable;           // on to an I/O port to gain
           BOOLEAN rs;               // access to the LCD pins.
           BOOLEAN rw;               // The bits are allocated from
           BOOLEAN unused;           // low order up.  ENABLE will
           int     data : 4;         // be pin B0.
        } lcd;


#if defined use_portb_lcd
   //#locate lcd = getenv("sfr:PORTB")    // This puts the entire structure over the port
   #ifdef __pch__
    #locate lcd = 0xf81
   #else
    #locate lcd = 6
   #endif
   #define set_tris_lcd(x) set_tris_b(x)
#else
   //#locate lcd = getenv("sfr:PORTD")    // This puts the entire structure over the port
   #ifdef __pch__
    #locate lcd = 0xf83
   #else
    #locate lcd = 8
   #endif
   #define set_tris_lcd(x) set_tris_d(x)
#endif

#ifndef lcd_type
#define lcd_type 2           // 0=5x7, 1=5x10, 2=2 lines
#endif

#define lcd_line_two 0x40    // LCD RAM address for the second line
#define lcd_line_three 0x14  // LCD RAM address for the third line
#define lcd_line_four 0x54   // LCD RAM address for the fourth 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



BYTE lcd_read_byte() {
      BYTE low,high;
      set_tris_lcd(LCD_READ);
      lcd.rw = 1;
      delay_cycles(5);
      lcd.enable = 1;
      delay_cycles(5);
      high = lcd.data;
      lcd.enable = 0;
      delay_cycles(5);
      lcd.enable = 1;
      delay_us(5);
      low = lcd.data;
      lcd.enable = 0;
      set_tris_lcd(LCD_WRITE);
      return( (high<<4) | low);
}


void lcd_send_nibble( BYTE n ) {
      lcd.data = n;
      delay_cycles(5);
      lcd.enable = 1;
      delay_us(5);
      lcd.enable = 0;
}


void lcd_send_byte( BYTE address, BYTE n ) {

      lcd.rs = 0;
      while ( bit_test(lcd_read_byte(),7) ) ;
      lcd.rs = address;
      delay_cycles(5);
      lcd.rw = 0;
      delay_cycles(5);
      lcd.enable = 0;
      lcd_send_nibble(n >> 4);
      lcd_send_nibble(n & 0xf);
}


void lcd_init() {
    BYTE i;
    set_tris_lcd(LCD_WRITE);
    lcd.rs = 0;
    lcd.rw = 0;
    lcd.enable = 0;
    delay_ms(15);
    for(i=1;i<=3;++i) {
       lcd_send_nibble(3);
       delay_ms(5);
    }
    lcd_send_nibble(2);
    for(i=0;i<=3;++i)
       lcd_send_byte(0,LCD_INIT_STRING[i]);
}


void lcd_gotoxy( BYTE x, BYTE y) {
   BYTE address;
   
   if(y==1)
   {address=0;}
   else if (y==2)
   {address=lcd_line_two;}
   else if (y==3)
   {address=lcd_line_three;}
   else if (y==4)
   {address=lcd_line_four;}
   else
   {address=0;}
   address+=x-1;
   lcd_send_byte(0,0x80|address);
}

void lcd_putc( char c) {
   switch (c) {
     case '\f'   : lcd_send_byte(0,1); delay_ms(2); break;
     case '\b'   : lcd_gotoxy(1,1);        break;
     case '\n'   : lcd_gotoxy(1,2);        break;
     case '\o'   : lcd_gotoxy(1,3);        break;
     case '\p'   : lcd_gotoxy(1,4);        break;
     case '\v'   : lcd_send_byte(0,0x10);  break;
     default     : lcd_send_byte(1,c);     break;
   }
}

char lcd_getc( BYTE x, BYTE y) {
   char value;

    lcd_gotoxy(x,y);
    while ( bit_test(lcd_read_byte(),7) ); // wait until busy flag is low
    lcd.rs=1;
    value = lcd_read_byte();
    lcd.rs=0;
    return(value);
}


kaynağı tam olarak hangisi hatırlayamıyorum ama, çaldığım bu dosya üzerinde ben kendime göre bazı değişiklikler yaptım (4 satır ve 20MHz çalışabilsin deyü) adınıda kafama göre koydum, madem istediniz paylaşayım... Ben hiçbir projemde, lcd'de küçük harf görüntületmem, bu yüzden de '\o' , '\p' gibi aslında özel karakter olmayan, ifadelerden kısayollar tanımladım, bu demek oluyor ki küçük harf kullanırsanız o'larda 3. satıra, p'lerde 4. satıra atar string ifadenizi, kısacası küçük harf ile bu sürücü kullanılmaz... Buna dikkat, sonra driver bozuk, baştan uyarmadın olmasın... :)
KİMSEYİ ENGELLEDİĞİM YOK, ÖZEL İLETİ DEVRE DIŞI !

rree

Ben CCS V4.11 kullandım.Kendi Lcd kütüphanesinden isis de görüntü alamadım.Hatasız derliyor ama ekran çıktısı yok. Pic projeden flexLcd.c buldum bu küçük harf b çıkarmıyor.Sizin dirveri kullanacağım sonucu sizinle paylaşırım.Benim pin konfigirasyonum şu şekilde.

#define LCD_E PIN_C7
#define LCD_RS PIN_C6
#define LCD_RW PIN_D4
#define LCD_DB4 PIN_B0
#define LCD_DB5 PIN_B1
#define LCD_DB6 PIN_B2
#define LCD_DB7 PIN_B3
Sizin lcd sürücüsünün ilk satırlarına bu pin konfigirasyonuna yazsam yeterlimidir.