lcd sorun

Başlatan deserteagle, 27 Mart 2007, 01:01:34

deserteagle

pic16f628 ile 4*20 lcd de menu oluşturup ra1 ve ra0 a bağlayacağım cihazları kontrol etmek istiyorum cok basit bir algoritma fakat her nedense lc de deki imlec yanıp sönüyor ve hiçbir yazı falan cıkmıyor.
sayın üstatlarım acaba sorun nerededir.saygılarımla.

kodu
#include<pic.h>
#include<delay.c>
#include<lcd.c>
#define tus1 RB4
#define tus2 RB5
#define tus3 RB6
void main()
{
char ilk[]="BY desert_eagle";
char iki[]="CALISACAK CIHAZ SEC";
char uc[]= "[[C1]] [[C2]] [EXT]";
CHAR cik[]="CIKMAK ICIN EXT BAS";

TRISA=0;
TRISB=0b11110000;
lcd_init();
lcd_clear();
lcd_puts(ilk);
lcd_goto(0x40);
lcd_puts(iki);
lcd_goto(0x54);   //4 satırın basına git
lcd_puts(uc);


for(;;)
{
if(tus1==0)   //birinci tusa basılırsa döngüye gir ve tus 3 e basılana kadar  döngüde kal
{
while(tus3!=0)
{
lcd_clear();
lcd_puts(ilk);
lcd_goto(0x40);
lcd_puts("CIHAZ 1 CALISIYOR");
RA0=1;
lcd_goto(0x14);
lcd_puts(cik);
lcd_goto(0x54);
lcd_puts(uc);

}
RA0=0;
break;
}
if(tus2=0)
{
while(tus3!=0)
{
lcd_clear();
lcd_puts(ilk);
lcd_goto(0x40);
lcd_puts("CIHAZ 2 CALISIYOR");
RA1=1;
lcd_goto(0x14);
lcd_puts(cik);
lcd_goto(0x54);
lcd_puts(uc);
}
RA1=0;
break;
}
}


seması
[/URL][/img]

acetiner

aynı sorunu ben de cc5x te yasamıstım ama sonuc alamammısttım yani imlec yanıp sonuyor sadece eger sonuc alabilirsen benim de haberim olsun ben de aynı problem uzerinde takıldım. Buradan benim foruma gonderdigim koda bakabilirsin.
https://www.picproje.org/index.php/topic,14757&highlight=

deserteagle

sayın acetiner hocam ben bu işte yenıyım.undan dolayı soruna eemkutay  hocam aşagıdaki yanıtı verdi ama ben birşey anlamadım.

imleç'in yanıp sönmesini istemiyorsan ,
LCD'ye komut olarak 0CH gönder.

sayın hocam sen bir çözüm bulursan buraya yazarsın.
saygılarımla.

CLR

Şimdi şöyle anlatayım, LCD'ye iki şekilde veri transferi yapılır. Birincisi LCD ekranına karakter yazmak (A,B,...1,2,3 gibi)
İkincisi ise LCD'ye komut yazmak, mesela imleç on/off,blink on/off, LCD clear, Return home,shift on/off .....vb. (hd44780 datasheetini inceleyebilirsin tüm bu özellikler için)

 Ben Hi-tech C kullanıyorum ama sanırım sen CCS C kullanıyorsun ve sırf senin için programı kurdum, (setup'ı vardı ). Çünkü senin sorunun yanıtı senin programındaki LCD.C  included dosyasındaydı.

şimdi program files içinde PICC içindeki drivers klasörüne girip bakarsan LCD.C dosyasına ulaşırsın. İçinde LCD'ye CCS C 'de nasıl komut gönderdiği şu şekilde yazıyor.

"  void lcd_send_byte( BYTE address, BYTE n )  "

ile ekrana data veya komut gönderiyor.

address yazan yere 1 yazarsan ekrana data gönderiyor, 0 yazarsan komut gönderiyor.

Yani aşağıdaki satırı yazacaksın

lcd_send_byte( 0, 0x0C );    // ekrana komut olarak 0CH gönderir.

Bu satırı lcd_init(); 'ten sonra programına ekle herşey çözülecektir. Diğer komutları veya karakterleride bu şekilde gönderebilirsin.

Kolay gelsin.
Knowledge and Experience are Power

deserteagle

sayıneem kutay hocam diğer başlıktaki yanıtınızı görünce buraya baktım.sizede zahmet oldu ama ben hi tech de yazıyorum(yada yazmaya çalışıyorum) yani kusura bakmayın size de ccs kurdurdum.ama bana söylediğin tavsiye sonucu hi tech in include klasörüne baktım .daha önce hiç aklıma gelmemişti.burada hiç görmediğim bilgiler var bunları inceleyeceğim.
sanırım soruma şu satır çözümleyecek.bi deneyeyim.


/* write a byte to the LCD in 4 bit mode */

extern void lcd_write(unsigned char);


bu arada aşağıdaki satır ne işe yarıyor.benim anladığım kadarıyla kürsörü bir sabit pozisyonamı sabitliyor.

/*   Set the cursor position */

#define   lcd_cursor(x)   lcd_write(((x)&0x7F)|0x80)

tekrar teşekkürler.
saygılarımla.

CLR

@deserteagle

lcd_write(unsigned char);   ile sadece LCD'ye bir byte yazıyorsun. Yani sadece bu satır sana yetmez. Aşağıya istediğini yazdım.



 LCD_RS = 0;                 // RS=0 için LCD'ye komut gönderilir
                                     // RS=1 için LCD'ye data gönderilir veya okunur

 lcd_write(0x0C);           // Display On - İmleç Off - Blink Off
 DelayUs(100);              // Komutun çalışması için 100usn delay

Gerçekte 40usn yeterli, ama biz garantiye aldık.

Yukarıdaki satırları LCD init'ten sonra yazarsan imleç(cursor) yanıp sönmeyecektir.

Veya hiç bunları yapmayayım , herzaman cursor off olsun diyorsan

LCD.C içindeki şu satırı aşağıdaki ile değiştir.

lcd_write(0xF); // Display On, Cursor On, Cursor Blink  yerine

lcd_write (0x0C): // yaz

işlem tamam

Soruna gelince , cursor'ü kapatınca aşağıdaki işlemin pek faydası olmaz.

#define lcd_cursor(x) lcd_write(((x)&0x7F)|0x80)  

// cursorun yerini değiştirir ama ancak  cursor yanıp sönerken takip edebilirsin. Cursor'u kapalı kullanacaksan , LCD'nin data registerlerinin adreslerini (DDRAM adresi) bilmen gerekir (datasheet'e bakabilirsin)
Knowledge and Experience are Power

acetiner

yazılan cevaplarda hep lcd nin imlecinin yanıp sonmesi dusunulmus asıl sorun lcd nin sadece initilaze edilmesi ve istenen satırların izlenememesi olmalı ben oyle yorumladım benim foruma attıgım mesajada da aynı problem var...mesajıma daha onceki gonderdigim cevaptan ulasabilirsiniz...........

semesu

arkadaslar mrb
bende lcd ıle  adc uygulamaları yapıyorum ancak
benım sımulasyonumda da ımlec sureklı yanıp sonuyor ve birde lcd de 2.satırada bılgı  yazdırmak ıstıyorum ancak bır turlu olmadı .
yardımcı olursanız  sevınırım.
iyi calısmalar