LCD sorunu

Başlatan chailuck, 24 Eylül 2010, 13:45:39

chailuck

*ARKADAŞLAR SORUN ÇÖZÜLMÜŞTÜR
*evet sanırım isiste donanım hatası yaptım, daha önceki eklediğim dosyaları silmiyorum ama
*sorunu çözdüğüm halinide ekliyorum karşılaşırma yapbilirsiniz.
*data portunu belırtınce ==> #define LCD_DATA    PORTB
*o portun ilk 4 bitine LM016L nin 4 bit data pinlerini bağlamak gerekiyor, son 4 bitini değil..! (YADA BENİM SORUNUM BOYLE COZULDU)
*birde aynı port üzerinde denedim ilk 4 bit data, son 3 bit kurulum pinleri bu şekilde de ÇALIŞMADI..!
*
*denedim çalışan hali bu, ilgilenip okuyan ve yorumlarıyla katkıda bulunan arkadaşlarıma teşekkür ederim.
*
*   http://www.4shared.com/file/pUJ6N0je/_3__dnm8.html
*
**********************************************

bu bir topyekün lcd sorunudur...

arkadaşlar,
eklediğim dosya içinde gerekli herşey var derliyorda maşallah, ama ne yaptıysam isiste lcd üerinde karakter göremedim.
bir bakabilecek olan varmı ?
sorunu ben anlamadım?
ha birde hitech c yeni öğrendim yanlışım neyse onuda anlatırmısınız?
sevgiler, saygılar..


http://www.4shared.com/file/-nbrQP_u/dnm8.html
İmkanın sınırlarını görmek için imkansızı denemek lazım. (Fatih Sultan Mehmet)  Ayıplarını gördüğünüz komşuyu kınamayınız. Sırlarını açıklamayınız.Çünkü gördüğünüz bu sır size emanettir, emanete hıyanet kötü ve çirkin bir filldir. (Hacı Bayramı Veli )  meyve veren ağacın taşlanması çok hoş ;)

radres

lcd.h dosyasında

#define   LCD_RS RB0
#define   LCD_RW RB1
#define LCD_EN RB2

komutları var. Devre şemanda ise RS, RW ve E ucunu sen RC0, Rc1 ve RC2 ucuna bağlamışsın. Bundan olabilir mi?

chailuck

Alıntı yapılan: radres - 24 Eylül 2010, 15:02:54
lcd.h dosyasında

#define   LCD_RS RB0
#define   LCD_RW RB1
#define LCD_EN RB2

komutları var. Devre şemanda ise RS, RW ve E ucunu sen RC0, Rc1 ve RC2 ucuna bağlamışsın. Bundan olabilir mi?

olabilirdi ama ben yanlış devreyi koymuşum :D
o devre benim değil örnek devrelerin içinden almıştım,
benim devrem şu,

http://www.4shared.com/file/oMUVHnNs/_2__dnm8.html

İmkanın sınırlarını görmek için imkansızı denemek lazım. (Fatih Sultan Mehmet)  Ayıplarını gördüğünüz komşuyu kınamayınız. Sırlarını açıklamayınız.Çünkü gördüğünüz bu sır size emanettir, emanete hıyanet kötü ve çirkin bir filldir. (Hacı Bayramı Veli )  meyve veren ağacın taşlanması çok hoş ;)

radres

lcd.c dosyasında şöyle bir ifade var.

*   To use these routines, set up the port I/O (TRISA, TRISD) then
*   call lcd_init(), then other routines as required.

Buna göre port giriş çıkış yönlendirmesi yap sonra lcd_init() ve diğer komutları kullan diyor. Senin main.c programında port yönlendirme komutlarını göremedim. Buna da bir bak istersen.

chailuck

tamam main fonksiyonu içinde trisb=0x00; satırınıda ekledım, sorunun ne olduğunu gören var mı ?
yani uğraşıyorum ama göremiyorum. yardım edecek varmı ?
aha şöyle yaparsan çalışır, bunları böyle yapman lazım diye, yokmu bu konuda yardım edecek beyler?
İmkanın sınırlarını görmek için imkansızı denemek lazım. (Fatih Sultan Mehmet)  Ayıplarını gördüğünüz komşuyu kınamayınız. Sırlarını açıklamayınız.Çünkü gördüğünüz bu sır size emanettir, emanete hıyanet kötü ve çirkin bir filldir. (Hacı Bayramı Veli )  meyve veren ağacın taşlanması çok hoş ;)

chailuck

yada durun, bakın benım dosyalar yukarıda ekli, bana basit bir ( LM016L ve 877a kullanarak ) hitec c çalışan kod örnekler misiniz ?
header ve c acık kodlarını karsılastırabılrım.
aklıma baska bırsey gelmıyor kıtaplara bakıyorum, fxdevın kıtapta verdıgını denedım aynen bırebır yaptım calısmadı.
Bari çalışan bir tane biri eklesinde :) baka baka anlamaya çalışırım
İmkanın sınırlarını görmek için imkansızı denemek lazım. (Fatih Sultan Mehmet)  Ayıplarını gördüğünüz komşuyu kınamayınız. Sırlarını açıklamayınız.Çünkü gördüğünüz bu sır size emanettir, emanete hıyanet kötü ve çirkin bir filldir. (Hacı Bayramı Veli )  meyve veren ağacın taşlanması çok hoş ;)

NaMcHo

#6
   LCD_DATA    = init_value;  sunu LCD_DATA = 0x02 olarak değiştirmeniz gerekiyor  herzaman lcd ilk ayarları yapılırken ilk once 0x02 komutunu göndermeniz gerekiyor,yoksa ekranda hic birsey goremezsiniz.

-rs , rw , e uclarını da C portuna baglayın veya B portu haric herhangi bir porta daha iyi olur.


Birde ADCON1 = 0x06;    // Disable analog pins on PORTA
sunu lcd_init fonksiyonundan sil bence ADC uygulamarında sürekli bunun önüne // koymakdansa ana fonksiyonunda bu ayarı kendin yaparsın A portunu kullancagın zaman.

chailuck

Alıntı yapılan: NaMcHo - 24 Eylül 2010, 19:31:39
Net bir hata göremedim ama şunu yapıpda bir dene ;
-rs , rw , e uclarını C portuna bagla veya B portu haric herhangi bir porta.


Birde ADCON1 = 0x06;    // Disable analog pins on PORTA
sunu lcd_init fonksiyonundan sil bence ADC uygulamarında sürekli bunun önüne // koymakdansa ana fonksiyonunda bu ayarı kendin yaparsın A portunu kullancagın zaman.
deniyorum şimdi, peki sende basit bir proje varmı lcd kullanmak için? ekleyebilir misin?
İmkanın sınırlarını görmek için imkansızı denemek lazım. (Fatih Sultan Mehmet)  Ayıplarını gördüğünüz komşuyu kınamayınız. Sırlarını açıklamayınız.Çünkü gördüğünüz bu sır size emanettir, emanete hıyanet kötü ve çirkin bir filldir. (Hacı Bayramı Veli )  meyve veren ağacın taşlanması çok hoş ;)

NaMcHo

#8
Biraz düzelttim üstteki yazımı bidaha bi bakıverin
benim kullandığım kütüphane
C Kodu:
#include <pic.h>
#include "lcd216_benim.h"
#include "delay.h"


void lcd_yaz(const   char  s[])
{  
   int i=0;
   while(s[i]!='\0')
   {
   DelayMs(2);
   lcd_karakter_yolla(s[i++]);  
   }
}

void lcd_karakter_yolla(unsigned char veri)
{
   rw=0;
   rs=1;
   e=1;
   lcd_port=(veri&0xF0);
   e=0;
   DelayMs(2);
   
   e=1;
   lcd_port=((veri&0x0F)<<4);
   e=0;
   DelayMs(2);
}

void imlec(unsigned int satir, unsigned int sutun)
{
   if(satir==1)
   lcd_ayar(0x80 + (sutun-1));
   else if(satir==2)
   lcd_ayar(0x80 + (0x40 + (sutun-1)));
}

void lcd_hazirla(void)
{
   
   lcd_ayar(0x02);         //Mutlaka en başta bu komut gönderilme yoksa calısmaz lcd.
   lcd_ayar(0x28);        //4bit 5x8 2satir
   lcd_ayar(0x06);       //her karakterden sonra sağa kay.
   lcd_ayar(0x08);      //dip kapalı,yanıp sönme yok ,imlec gizli.
   lcd_ayar(0x0C);      //Disp acık,yanıp sonmez,imlec gizli.
   lcd_ayar(0x01);
   DelayMs(2);
}

void lcd_ayar(unsigned int komut)
{
   rw=0;
   rs=0;
   e=1;
   lcd_port=(komut&0xF0);
   e=0;
   DelayMs(2);
   
   e=1;
   lcd_port=((komut&0x0F)<<4);
   e=0;
   DelayMs(2);
}

void lcd_temizle(void)
{
   lcd_ayar(0x01);
   DelayMs(2);
}


H Kodu:
#define rs    RC0
#define rw    RC1
#define e    RC2

#define lcd_port    PORTB

extern void lcd_yaz(const    char  s[]);
extern void lcd_karakter_yolla(unsigned char veri);
extern void imlec(unsigned int satir, unsigned int sutun);
extern void lcd_hazirla(void);
extern void lcd_ayar(unsigned int komut);
extern void lcd_temizle(void);


Örnek uygulama : http://hotfile.com/dl/71477030/f0c019c/karma_deneme1.rar.html

chailuck

Alıntı yapılan: NaMcHo - 24 Eylül 2010, 19:38:34
Biraz düzelttim üstteki yazımı bidaha bi bakıverin
benim kullandığım kütüphane
C Kodu:
#include <pic.h>
#include "lcd216_benim.h"
#include "delay.h"


void lcd_yaz(const   char  s[])
{  
   int i=0;
   while(s[i]!='\0')
   {
   DelayMs(2);
   lcd_karakter_yolla(s[i++]);  
   }
}

void lcd_karakter_yolla(unsigned char veri)
{
   rw=0;
   rs=1;
   e=1;
   lcd_port=(veri&0xF0);
   e=0;
   DelayMs(2);
   
   e=1;
   lcd_port=((veri&0x0F)<<4);
   e=0;
   DelayMs(2);
}

void imlec(unsigned int satir, unsigned int sutun)
{
   if(satir==1)
   lcd_ayar(0x80 + (sutun-1));
   else if(satir==2)
   lcd_ayar(0x80 + (0x40 + (sutun-1)));
}

void lcd_hazirla(void)
{
   
   lcd_ayar(0x02);         //Mutlaka en başta bu komut gönderilme yoksa calısmaz lcd.
   lcd_ayar(0x28);        //4bit 5x8 2satir
   lcd_ayar(0x06);       //her karakterden sonra sağa kay.
   lcd_ayar(0x08);      //dip kapalı,yanıp sönme yok ,imlec gizli.
   lcd_ayar(0x0C);      //Disp acık,yanıp sonmez,imlec gizli.
   lcd_ayar(0x01);
   DelayMs(2);
}

void lcd_ayar(unsigned int komut)
{
   rw=0;
   rs=0;
   e=1;
   lcd_port=(komut&0xF0);
   e=0;
   DelayMs(2);
   
   e=1;
   lcd_port=((komut&0x0F)<<4);
   e=0;
   DelayMs(2);
}

void lcd_temizle(void)
{
   lcd_ayar(0x01);
   DelayMs(2);
}


H Kodu:
#define rs    RC0
#define rw    RC1
#define e    RC2

#define lcd_port    PORTB

extern void lcd_yaz(const    char  s[]);
extern void lcd_karakter_yolla(unsigned char veri);
extern void imlec(unsigned int satir, unsigned int sutun);
extern void lcd_hazirla(void);
extern void lcd_ayar(unsigned int komut);
extern void lcd_temizle(void);


Örnek uygulama : http://hotfile.com/dl/71477030/f0c019c/karma_deneme1.rar.html


:) arkadasım cok tesekkur ederım, bende yenı bırseyler yazarken gondermıssın gormedım.
Senın kutuphanelerını de alıyorum, teşekkürler.
İmkanın sınırlarını görmek için imkansızı denemek lazım. (Fatih Sultan Mehmet)  Ayıplarını gördüğünüz komşuyu kınamayınız. Sırlarını açıklamayınız.Çünkü gördüğünüz bu sır size emanettir, emanete hıyanet kötü ve çirkin bir filldir. (Hacı Bayramı Veli )  meyve veren ağacın taşlanması çok hoş ;)

NaMcHo

Rica ederim.
Bende FxDev in kitabından ve CCS ile PIC PROGRAMLAMA(Serdar Çiçek) kitaplarından öğrendim az da olsa , öğrenmeye devam ediyorum :)

chailuck

Alıntı yapılan: NaMcHo - 24 Eylül 2010, 20:05:09
Rica ederim.
Bende FxDev in kitabından ve CCS ile PIC PROGRAMLAMA(Serdar Çiçek) kitaplarından öğrendim az da olsa , öğrenmeye devam ediyorum :)
hımm serdar çiçeğin kitabı bendede var, ccs c o, piyasada en çok hitech tercih ediliyor diye ona devam ettim fxdevin hazırladığı kitap gerçekten güzel.
microC ye de başladım temel olunca hızlı ilerleniyor.
çalışmalarında başarılar dilerim.. :)
İmkanın sınırlarını görmek için imkansızı denemek lazım. (Fatih Sultan Mehmet)  Ayıplarını gördüğünüz komşuyu kınamayınız. Sırlarını açıklamayınız.Çünkü gördüğünüz bu sır size emanettir, emanete hıyanet kötü ve çirkin bir filldir. (Hacı Bayramı Veli )  meyve veren ağacın taşlanması çok hoş ;)