AYNI PORT ÜZERİNDE RS VE DATA PİNLERİ

Başlatan ahmetbudak, 09 Aralık 2009, 16:35:39

ahmetbudak

Selamlar şimdiye kadar gerek forumda gerek diğer kaynaklarda gördüğüm lcd kütüphanelerinde LCD RS RW E uçları data pinleri ile farklı portlarda elimdeki geliştirme kartında ise LCD pinleri PORTB ye bağlı
bu konuda yardımcı olursanız sevinirim herkese iyi çalışmalar. saygılar...

ete

Derleyicilerin pek çoğunda ve belkide hepsinde data pinlerinin sıra takip etmesi  ve,  ya Port.0 dan (0-1-2-3) yada Port.4 pininden (4-5-6-7) başlaması zorunludur. Bunun dışında diğer pinlerin nerede olduğu pek önemli değil. Tabiiki her derleyicinin bir de default bağlantı düzeneği vardır. Ona uyuyorsanız default bağlantı kullanma zorunluluğunuz var. Ama bağlantıları tanımlarsanız E - RS pinleri istediğini bir port da olabilir. LCD den okuma yapmayacaksanız RW pinide direk GND ye bağlanabilir. BU bacak Low olursa LCD ye yazma , High olursa LCD (karekter hafızasından ) okuma yaparsınız. Zaten genelde okunacakları siz yazdığınız için okuma pek kullanılmaz ve pek çok şemada bu bacak direk GND de tutulur.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

ahmetbudak

Sayın ETE ilginize teşekkürler ancak problem şöyle lcd ye data gönderirken E pinin bir pulse yapması gerekiyor(düşen kenar tetikleme)
PORTB aynı anda her iki işlemi nasıl yapacak(c kodları ile)
teşekkürler iyi çalışmalar...

ete

Aynı anda olacak diye bir şart yok.  Öncelikle data bitleri data portuna yollanır sonra E pininden bir puls verilir hepsi bu  Bütün sistemler böyle çalışır. Aynı anda olmaz zaten.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

M_B

static bit LCD_RS	@ ((unsigned)&PORTA*8+2);	// Register select
static bit LCD_EN	@ ((unsigned)&PORTA*8+3);	// Enable

#define	LCD_STROBE	((LCD_EN = 1),(LCD_EN=0))


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

void
lcd_write(unsigned char c)
{
	PORTB = (PORTB & 0xF0) |  (c >> 4);
	LCD_STROBE;
	PORTB = (PORTB & 0xF0) |  (c & 0x0F);
	LCD_STROBE;
	DelayUs(40);
}

/*
 * 	Clear and home the LCD
 */

Hi-Tech C nin samples klasoru icinde bulunan LCD kutuphanesinden alıntı.  Üst kısımda verdiğim yerden  istedigin pini secebilirsin.
Ornek olarak  
static bit LCD_RS	@ ((unsigned)&PORTA*8+2);	// Register select
static bit LCD_EN	@ ((unsigned)&PORTA*8+3);	// Enable

kısmından istenen port ve pin secimi yapılabilir.
Ornek olarak
static bit LCD_RS   @ ((unsigned)&PORTB*8+5);   // Register select
Burda Portb nin 5 pini RS oldu. Gibi.

Kolay gelsin
İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

Erhan YILMAZ

Eğer iyi bir lcd kütüphanesi yazılmışsa sorun olmaz bunun için And ve Or işlemlerini kullanılarak maskeleme işlemi yapılır örneğin herhangi bir portun 3.bitini diğer pinleri değiştirmeden sıfır yapmak istiyorsan porttaki değeri binary 11110111 ile And leyip tekrar porta yazarsan 3.bit sıfır olur aynı şekilde diğer bitleri değiştirmeden 3.biti 1 yapmak için port değerini binary 00001000 değeri ile Or işlemine tabi tutman gerekir