Haberler:

Eposta uyarılarını yanıtlamayınız ( ! ) https://bit.ly/2J7yi0d

Ana Menü

lcd LM016L ccs c yardım

Başlatan husam685, 13 Şubat 2012, 00:46:32

husam685

selam arkadaşlar ben lcd ile basit bi uygulama yapıyorum ama bir türlü calısmadı ekrana siyah kareler geliyor bir türlü ekrana deneme diye bir yazı yazdıramadım sebebi ne olabilir birde devreyi kuraraken bacak baglantılarını söylermisiniz özellikle

benim bildigim 1. bacak - 2. bacak + 3 bacak kontrast  ve bu 5. bacak RW - ye mi gelio yoksa PIC in bacagına mı ben pıc in bacagına bagladım

port olarakta b portunu kullandım yani b0-b1-b2-b4-b5-b6-b7 bacakları

skara1214

Serdar Çiçeğin  kitabından alıntı;

özel karakterleri basma kodu
/////////////////////////////////////////////////////////////////
//                    özel_LCD.c                           //////
// Bu LCD sürücü dosyası 2x16 HD44780 uyumlu LCD'ler        /////
// için yazılmıştır. LCD'den sadece okuma yapılacağı için   /////
// R/W ucu şaseye bağlanmalıdır. LCD bağlantısı aşağıdadır. /////
// Bu LCD dosyası ile özel karakterler de LCD gösterilebilinir //
/////////////////////////////////////////////////////////////////
// RB0 D4
// RB1 D5
// RB2 D6
// RB3 D7
// RB4 RS
// RB5 E
// R/W ucu direkt şaseye bağlanacak

#define e   pin_b5 // LCD'nin E ucu RB5 pinine bağlı
#define rs  pin_b4 // LCD'nin RS ucu RB4 pinine bağlı

//****** LCD'ye Komut Gönderme Fonksiyonu **********
void lcd_komut(byte komut)
{
   output_b(komut>>4);  // Komutun yüksek değerli 4 bitini gönder
   output_low(rs);       // LCD komut almak için ayarlandı
   output_high(e);       // E ucu lojik-1'den lojik-0'a çekiliyor
   output_low(e);
   delay_ms(2);         // 2 msn gecikme veriliyor

   output_b(komut&0x0F); // Komutun düşük değerli 4 bitini gönder
   output_low(rs);       // LCD komut almak için ayarlandı
   output_high(e);        // E ucu lojik-1'den lojik-0'a çekiliyor
   output_low(e);
   delay_ms(2);        // 2 msn gecikme veriliyor
}

//******* LCD'ye Veri Gönderme Fonksiyonu **********
void lcd_veri(byte veri)
{
   if (veri=='Ç') veri=0; // Karakter Ç ise CGRAM 0.adresteki bilgiyi gönder
   if (veri=='Ğ') veri=1; // Karakter Ğ ise CGRAM 1.adresteki bilgiyi gönder
   if (veri=='İ') veri=2; // Karakter İ ise CGRAM 2.adresteki bilgiyi gönder
   if (veri=='Ö') veri=3; // Karakter Ö ise CGRAM 3.adresteki bilgiyi gönder
   if (veri=='Ş') veri=4; // Karakter Ş ise CGRAM 4.adresteki bilgiyi gönder
   if (veri=='Ü') veri=5; // Karakter Ü ise CGRAM 5.adresteki bilgiyi gönder
   if (veri=='I') veri=6; // Karakter I ise CGRAM 6.adresteki bilgiyi gönder
   if (veri==''') veri=7; // Karakter ' ise CGRAM 7.adresteki bilgiyi gönder

   output_b(veri>>4);   // Komutun yüksek değerli 4 bitini gönder
   output_high(rs);       // LCD veri almak için ayarlandı
   output_high(e);       // E ucu lojik-1'den lojik-0'a çekiliyor
   output_low(e);
   delay_ms(1);       // 1 msn gecikme veriliyor

   output_b(veri&0x0F); // Komutun düşük değerli 4 bitini gönder
   output_high(rs);     // LCD veri almak için ayarlandı
   output_high(e);      // E ucu lojik-1'den lojik-0'a çekiliyor
   output_low(e);
   delay_ms(1);         // 1 msn gecikme veriliyor
}

//******* LCD'de İmlec Konumlandırma Fonksiyonu ********
void imlec(byte satir, byte sutun)
{
   if (satir==1)      // Eğer satır değişkeni "1" ise
      lcd_komut(0x80|(sutun-1));

   if (satir==2)      // Eğer satır değişkeni "2" ise
      lcd_komut(0x80|(0x40+(sutun-1)));
}

//********* LCD Başlangıç Ayarları Fonksiyonu ******
void lcd_hazirla()
{
   lcd_komut(0x02);// LCD'yi kullanıma hazır hale getir, imleç                // 1.satır 1.sütunda komutu
   lcd_komut(0x28);//2 satır, 4 bit iletişim, 5x8 dot matris seçildi 
   lcd_komut(0x08);//Display kapalı,alt çizgi ve yanıp sönme yok
   lcd_komut(0x0C);//Display açık,imleç alt çizgi ve yanıp sönme yok
   lcd_komut(0x06);// Her veri yazıldığında imleç bir sağa gitsin
   lcd_komut(0x01);// Display sil. İmleç 1.satır 1.sütunda
   delay_ms(1);    // 1 msn bekle 
}

//*** Özel Karakterleri CGRAM'e Yükleyen Fonksiyon ****
void ozel_karakterler()
{
   // CGRAM'de 1. Adrese "Ç" Karakteri Kaydediliyor
   lcd_komut(0x40);lcd_veri(14);
   lcd_komut(0x41);lcd_veri(17);
   lcd_komut(0x42);lcd_veri(16);
   lcd_komut(0x43);lcd_veri(16);
   lcd_komut(0x44);lcd_veri(16);
   lcd_komut(0x45);lcd_veri(21);
   lcd_komut(0x46);lcd_veri(14);
   lcd_komut(0x47);lcd_veri(4);

   // CGRAM'de 1. Adrese "Ğ" Karakteri Kaydediliyor
   lcd_komut(0x48);lcd_veri(14);
   lcd_komut(0x49);lcd_veri(0);
   lcd_komut(0x4A);lcd_veri(15);
   lcd_komut(0x4B);lcd_veri(16);
   lcd_komut(0x4C);lcd_veri(19);
   lcd_komut(0x4D);lcd_veri(17);
   lcd_komut(0x4E);lcd_veri(15);
   lcd_komut(0x4F);lcd_veri(0);

   // CGRAM'de 2. Adrese "İ" Karakteri Kaydediliyor
   lcd_komut(0x50);lcd_veri(4);
   lcd_komut(0x51);lcd_veri(0);
   lcd_komut(0x52);lcd_veri(4);
   lcd_komut(0x53);lcd_veri(4);
   lcd_komut(0x54);lcd_veri(4);
   lcd_komut(0x55);lcd_veri(4);
   lcd_komut(0x56);lcd_veri(4);
   lcd_komut(0x57);lcd_veri(0);

   // CGRAM'de 3. Adrese "Ö" Karakteri Kaydediliyor
   lcd_komut(0x58);lcd_veri(10);
   lcd_komut(0x59);lcd_veri(0);
   lcd_komut(0x5A);lcd_veri(14);
   lcd_komut(0x5B);lcd_veri(17);
   lcd_komut(0x5C);lcd_veri(17);
   lcd_komut(0x5D);lcd_veri(17);
   lcd_komut(0x5E);lcd_veri(14);
   lcd_komut(0x5F);lcd_veri(0);

   // CGRAM'de 4. Adrese "Ş" Karakteri Kaydediliyor
   lcd_komut(0x60);lcd_veri(14);
   lcd_komut(0x61);lcd_veri(17);
   lcd_komut(0x62);lcd_veri(16);
   lcd_komut(0x63);lcd_veri(14);
   lcd_komut(0x64);lcd_veri(1);
   lcd_komut(0x65);lcd_veri(17);
   lcd_komut(0x66);lcd_veri(14);
   lcd_komut(0x67);lcd_veri(4);

   // CGRAM'de 5. Adrese "Ü" Karakteri Kaydediliyor
   lcd_komut(0x68);lcd_veri(10);
   lcd_komut(0x69);lcd_veri(0);
   lcd_komut(0x6A);lcd_veri(17);
   lcd_komut(0x6B);lcd_veri(17);
   lcd_komut(0x6C);lcd_veri(17);
   lcd_komut(0x6D);lcd_veri(17);
   lcd_komut(0x6E);lcd_veri(14);
   lcd_komut(0x6F);lcd_veri(0);

   // CGRAM'de 6. Adrese "I" Karakteri Kaydediliyor
   lcd_komut(0x70);lcd_veri(4);
   lcd_komut(0x71);lcd_veri(4);
   lcd_komut(0x72);lcd_veri(4);
   lcd_komut(0x73);lcd_veri(4);
   lcd_komut(0x74);lcd_veri(4);
   lcd_komut(0x75);lcd_veri(4);
   lcd_komut(0x76);lcd_veri(4);
   lcd_komut(0x77);lcd_veri(0);

   // CGRAM'de 7. Adrese "'" Karakteri Kaydediliyor
   lcd_komut(0x78);lcd_veri(12);
   lcd_komut(0x79);lcd_veri(18);
   lcd_komut(0x7A);lcd_veri(18);
   lcd_komut(0x7B);lcd_veri(12);
   lcd_komut(0x7C);lcd_veri(0);
   lcd_komut(0x7D);lcd_veri(0);
   lcd_komut(0x7E);lcd_veri(0);
   lcd_komut(0x7F);lcd_veri(0);
}
Herkes ölür ama herkes gerçekten yaşamaz

pwm.c

#2
yazdığın kodu verseydin daha iyi olurdu. şimdi ezbere yazmak zorunda kalacağız ama neyse.
öncelikle LCD yi portB de kullanmak için şu komutu yukarıya ekle.
#include <lcd.c>   // lcd.c dosyası tanıtılıyor
#define use_portb_lcd TRUE //LCD için portb'yi kullansın


lcd bağlantıları şöyle olmalı:
RB0= E
RB1= RS
RB2= RW
RB3=
RB4= D4
RB5= D5
RB6= D6
RB7= D7

CCS önceki versiyonlarında lcd.c kütübhanesinden bazı satırların silinmesi gerekiyor. bunlar 322, 327 ve 328. satırlar. yeni versiyon derleyici kullanıyorsan buna gerek yok.
delay_ms(15);
   for(i=1;i<=3;++i)
   {
       lcd_send_nibble(3);
       //lcd_send_nibble(0);
       delay_ms(5);
   }
   
   lcd_send_nibble(2);
   //lcd_send_nibble(0);
   //delay_ms(5);
   for(i=0;i<=3;++i)
      lcd_send_byte(0,LCD_INIT_STRING[i]);


senin lcd de kareler çıkıyorsa bu donanımdan da kaynaklı olabilir.  kontrast ayarını, besleme voltajını ve bağlantıları kontrolet.
_/\/\/\_ -[ı- -ı>|- -|ı|ı|ı- -ı< -||- -l[]l-

husam685

#3
arkadaşlar kimi yerlerde rw şase diyor kimi yerlerde PIC in bacagı söyleniyor burda degişiklik neden ? birde bana sizdeki saglam kullandıgınız lcd.c dosyasını gönderebilirmisiniz. kimilerinde cok farklı sizde olan saglam calısır ve genellikle picin port b kısmını kullanıyorum aşagıda bacak sıralaması var buna uygun c dosyasını gönderirseniz sevinirim
b0  enable
//     b1  rs
//     b2  rw
//     b4  b4
//     b5  b5
//     b6  b6
//     b7  b7

pwm.c

#4
elimdeki lcd sürücülerini buraya yükledim. ayrıca farklı pin ayarlama seçeneği sunan sürücülerde bulunmaktadır.
buradan indir:
https://yadi.sk/d/u0L_s1y035bMKH
alternatif:
http://www.mediafire.com/file/xbu9ax8x4duj54g/lcd_ccs.zip
_/\/\/\_ -[ı- -ı>|- -|ı|ı|ı- -ı< -||- -l[]l-

husam685

#5
teşekkürler indirdim

husam685

ayrıca lcd ye 4mhz kristal yetiyormu yoksa 20mhz mi olması gerekiyor hersey için cok tesekkürler

izturk

lcd için 4 mhz kristal yeterli.

rw pini lcd ye yazma 7 lcd den okuma seçimini yapan pindir. bazı driverlerde okuma işlemi es geçilmiş sadece yazmak için kullanılmış. böyle olunca da o pini gereksiz yere pic e bağlamamış direk gnd ye bağlamış. gnd de lcd yazma konumunda oluyor.

husam685

arkadaşlar birde resimdeki gibi lcd de sadece alttan en sol kısımından sırf 7 tanesi siyah kare oluyor baska birsey gözükmüo ekranda sebebi nedir

mcan

Alıntı yapılan: husam685 - 13 Şubat 2012, 22:31:58
arkadaşlar birde resimdeki gibi lcd de sadece alttan en sol kısımından sırf 7 tanesi siyah kare oluyor baska birsey gözükmüo ekranda sebebi nedir
(Resim gizlendi görmek için tıklayın.)
Valla elimde 2-3 lcd vardi hepsininde enerji ve kontrast uclarini bagladigimda her hangi bir data vermeksizin ust satirdaki tum kareler aktif oluyor.Bu na gore sendeki lcd ters gibi hemde bozuk gibi.Yani pinlerini ters koymus olabilirler eger pinlerde aciklama yazmiyorsa.

husam685

bende ki lcd de hem altta hemde üste var pin girişleri alttaki 1-2-3-4........-16 ya kadar ustteki 16-15-1-2-3-4-5-6-7-8-9-10-11-12-13-14 pin sıralaması böyle lcd ekran yaouyu kym1602g1 dir