Picproje Elektronik Sitesi

DERLEYİCİLER => CCS C => Konuyu başlatan: mcn - 03 Kasım 2007, 09:23:03

Başlık: lcd.c derleme sorunu
Gönderen: mcn - 03 Kasım 2007, 09:23:03
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:
(http://img69.yukle.tc/images/6251adsiz.JPG) (http://www.yukle.tc)
hata2:
(http://img69.yukle.tc/images/2545aaa.JPG) (http://www.yukle.tc)
Yardımlarıınız için şimdiden teşekkürler
Başlık: lcd.c derleme sorunu
Gönderen: M_B - 03 Kasım 2007, 10:06:30
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.
}
Başlık: lcd.c derleme sorunu
Gönderen: mcn - 03 Kasım 2007, 10:54:53
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.
Başlık: lcd.c derleme sorunu
Gönderen: KONYALI - 03 Kasım 2007, 10:55:06
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
Başlık: lcd.c derleme sorunu
Gönderen: M_B - 03 Kasım 2007, 11:23:07
#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
Başlık: lcd.c derleme sorunu
Gönderen: zafzaf82 - 03 Kasım 2007, 15:44:34
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
}