Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

lcd.c derleme sorunu

Başlatan mcn, 03 Kasım 2007, 09:23:03

mcn

ccs nin bütün sürümlerini denedim,en son elimde 4.57 var.lcd.c yi başka yerlerden bularak da değiştirdim ama sanırım sorun onda değil.kaç gündür bu sorunla uğraşıorum.karşıma hep 2 durumdan biri çıkıyor.
resimlerini ekkliyorum.Hatam nerde yardım ederseniz sevinirim.(kafayı yemek üzereyim).yoksa ccs yi bırakıp tekrar assembly e dönücem :(
hata1:

hata2:

Yardımlarıınız için şimdiden teşekkürler
www.teknikyazi.com --üşenme,erteleme,vazgeçme...

M_B

merhaba kolay gelsın arkadas,
Hemen zoru gorup derleyıcı degıstırmek olurmu. Bence bıraz daha ınat et yoluna devam et. Yapamadıgın zaman bıraz bırak baska ıslerle ugras yoksa kafan ıyıce karısır o zaman hıc yapamazsın.
Umarım asagıdakı ornek ısıne yarar. Ben denedım calısıyor. Similasyonda.
Kolay gelsın.
M_B


#include <16F628.h>
#use delay(clock=4000000)
#define use_portb_lcd TRUE //lcd bilgisi için port b'yi kullanıyoruz
#include <LCD.C>
void main()
{
  lcd_init(); //lcd ekranımızı kuruyoruz
  delay_ms(6);
  lcd_gotoxy(1,1);
  lcd_putc("M_B");//Ekrana M_B yazar.
}
İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

mcn

M_B kardeşim çok teşekkür ederim.Gönderdiğin programı denedim,ccs güzelce derledi.simülasyonda da çalışıyor.Peki benim sorunum ne olabilir.Neden hep aynı hatayı alıyordum.Başka lcd ye yazdırma programlarında da  hep aynı sorunu veriyordu,sadece o yazdığım programda değil.
www.teknikyazi.com --üşenme,erteleme,vazgeçme...

KONYALI

sorun resimden de anlaşılacağı gibi 16f84 de D portunun olmayışından kaynaklanıyor yani sen lcd.c dosyasında D portunu kullanıosun ama ana programda 16f84 e göre derliyorsun bence sorun orda birde 16f877.h dosyası ile dene yada lcd.c dosyasını kullanacağın işlemciye göre yeniden yaz

M_B

#define use_portb_lcd TRUE //lcd bilgisi için port b'yi kullanıyoruz
satırını yazmadıgın ıcın olabılır.
Ben bu satırı cıkardıgımda bahsettıgın tur hatalar oluyor.
Sanırım hata bu olsa gerek ıstersen bır dene.
Kolay gelsın
İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

zafzaf82

bu lcd hadderini kullan sorunsuz çalışıyor.

/* 4x20 LCD   icin
 * Filename : lcd.h
 * Hardware : Controller  -> 18F452
 */

 /**** LCD pinleri ****/
 #define LCD_en PIN_C1 //lcdyi yetkilendirmek icin
 #define LCD_rs PIN_C0  //konut yada kod yapmak icin 
 #define LCD_D7 PIN_C5   //lcd veri yolu pin tasarrufu için 4 bit kullandık 
 #define LCD_D6 PIN_C4
 #define LCD_D5 PIN_C3
 #define LCD_D4 PIN_C2 
 /*********************/

 /* LCD'de kullanılan komutların tanımlanması */
#define Sil        1   // Ekranı temizler
#define BasaDon     2   // İmleci sol üst köşeye getirir
#define SolaYaz     4  // İmlecin belirttiği adres azalarak gider
#define SagaYaz     6   // İmlecin belirttiği adres artarak gider
#define ImlecGizle    12   // Göstergeyi aç, kursör görünmesin
#define ImlecYanSon    15   // Yanıp sönen blok kursör
#define ImlecGeri    16   // Kursörü bir karakter geri kaydır
#define KaydirSaga    24   // Göstergeyi bir karakter sağa kaydır                   
#define KaydirSola   28   // Göstergeyi bir karakter sola kaydır   
#define EkraniKapat    8   // Göstergeyi kapat (veriler silinmez)
#define BirinciSatir 128   // LCD'nin ilk satir başlangıç adresi       
                          // (DDRAM adres)
#define IkinciSatir  192   // İkinci satırın başlangıç adresi
#define KarakUretAdres 64   // Karakter üreteci adresini belirle  
                          // (CGRAM adres)

/* LCD'de Kullanılan Fonksiyon Seçimi */
#define CiftSatir8Bit  56    // 8 bit ara birim, 2 satır, 5*7 piksel
#define CiftSatir4Bit  48    // 8 bit ara birim, 1 satır, 5*7 piksel
#define TekSatir8Bit   40    // 4 bit ara birim, 2 satır, 5*7 piksel
#define TekSatir4Bit   32    // 4 bit ara birim, 1 satır, 5*7 piksel

 //LCD_rw ucu 0'a bagli

 #define LCD_DELAY 250 /* yaklasik  1 ms */
 #define LCD_clear() LCD_command(0x01)   /* Clear display LCD */
 #define LCD_origin() LCD_command(0x2)   /* Set to origin LCD */
 #define lcd_line_bir  0x80 // LCD RAM address 1. satir
 #define lcd_line_iki  0xC0 // LCD RAM address 2. satir
 #define lcd_line_uc   0x94 // LCD RAM address 3. satir
 #define lcd_line_dort 0xD4 // LCD RAM address 4. satir

/***************************************************
 * Prototype(s)                                    *
 ***************************************************/
void LCD_enable();                        // LCD yetkilendirme
void LCD_command(unsigned char command);      // LCD komut 
void LCD_putc(unsigned char ascii);            // LCD tek karakter yazma 
void LCD_puts(unsigned char *lcd_string);      // LCD string yazma
void LCD_init();
void LCD_gotoxy(unsigned char x,unsigned char y);
/***************************************************
 * Sources                                         *
 ***************************************************/

//===================================================
void LCD_enable()
//===================================================
{
    output_bit( LCD_en,0); /* Clear bit en */   //lcd yi bir kere yetki,lendirmek için 
    delay_ms(1);
    output_bit( LCD_en,1); /* Set bit en */
}

//===================================================
void LCD_command(unsigned char command)   //lcdye komut gönder
//===================================================
{
   unsigned char nibble;
   output_bit( LCD_rs, 0); /* Clear bit P2.5 */
   nibble = (command>>4) & 0x0F;  //ilk 4 bitini gönderdik 
   output_bit(LCD_D4, (nibble & 0x01) );   //pinlere tek tek gönderdik. buton tek seferde göndermediği için 
   output_bit(LCD_D5, (nibble>>1 & 0x01) ); 
   output_bit(LCD_D6, (nibble>>2 & 0x01) );
   output_bit(LCD_D7, (nibble>>3 & 0x01) );
   LCD_enable();
   nibble = command & 0x0F;
   output_bit(LCD_D4, (nibble & 0x01) );   
   output_bit(LCD_D5, (nibble>>1 & 0x01) ); 
   output_bit(LCD_D6, (nibble>>2 & 0x01) );
   output_bit(LCD_D7, (nibble>>3 & 0x01) );
   LCD_enable();
   delay_ms(1);
}
//===================================================
void LCD_putc(unsigned char ascii)   //karakter gönderir. tek karakter 
//===================================================
{   unsigned char nibble;
    output_bit( LCD_rs, 1); /* Set bit P2.5 *///veri gönderdiğin için 1 oldu. 
    nibble = (ascii>>4) & 0x0F;//0x0f ile maskeliyor. 
   output_bit(LCD_D4, (nibble & 0x01) );   
   output_bit(LCD_D5, (nibble>>1 & 0x01) ); 
   output_bit(LCD_D6, (nibble>>2 & 0x01) );
   output_bit(LCD_D7, (nibble>>3 & 0x01) );
    LCD_enable();
    nibble = ascii & 0x0F;
   output_bit(LCD_D4, (nibble & 0x01) );   
   output_bit(LCD_D5, (nibble>>1 & 0x01) ); 
   output_bit(LCD_D6, (nibble>>2 & 0x01) );
   output_bit(LCD_D7, (nibble>>3 & 0x01) );
    LCD_enable();
    delay_ms(1);
}

//===================================================
void LCD_puts(unsigned char *lcd_string)
//===================================================
{
   while (*lcd_string) 
   {
      LCD_putc(*lcd_string++);
   }
}

void LCD_init()
{
    output_bit( LCD_en, 1); /* Set bit P2.4 */
    output_bit( LCD_rs, 0); /* Clear bit P2.5 */   
    LCD_command(0x33);
    LCD_command(0x32);
    LCD_command(0x28);
    LCD_command(0x0C); //Kursörü gizle demek
    LCD_command(0x06);
    LCD_command(0x01); /* Clear */
    delay_ms(256);
}

//===================================================
void LCD_gotoxy(unsigned char x, unsigned char y)   //lcdye istediğimiz yere veri yazmamızı sağlar. satir ve sütün olarak 
//x ,y=sutun,satir
//===================================================
{
int address;  //ramdeki adresi tutar 

   switch( y )
   {
   case 1:
   address = lcd_line_bir;
   break;
   case 2:
   address = lcd_line_iki;
   break;
   case 3:
   address = lcd_line_uc;
   break;
   case 4:
   address = lcd_line_dort;
   break;
   }

address += x-1;     
LCD_command(address); //lcdye veri gönderiyor
}
Mikroişlemci bi araçtır, amaç değil.....