240x128 glcd kullanımı

Başlatan cundali11, 23 Ocak 2008, 06:56:44

cundali11

selam,
arkadaşlar elimde bu lcd var daha önceden 128x64 ve 7110 lcdlerini pic ile pbp dilinde kulanabilmişliğim var fakat 240x128 glcd yi bir türlü anlayamadım ingilizcemde çok kötü oldugu için datasheet lerden hiç bi sonuç çıkartamadım aceba aranızda bu lcd ile herhangi bi dilde çalışma yapmış olan var mı?? veya elinde lcd yi nasıl çalıştıracağıma dair türkçe bir kaynak yardım ederseniz sevinirim
teşekkürler

ugurtarlaci

chipset i nedir bu lcd nin?  t6963c midir?
Zoru Başarırım , İmkansız Biraz Zaman Alır....İmza... YENİ NESİL GENÇ TÜRK MÜHENDİSLERİ......

cundali11


f_machine

mikroe'nin mikrobasic derleyicisinin hazır kütüphaneleri var o glcd ile ilgili ,onları kullanabilirsin...

ugurtarlaci

hangi işlemci kontroller kullancaksın, C biliyorsun değilmi ?
ona göre birkaç kod parçası göndereceğim sana.

Öncelikle 240x128 çözünürlükteki LCD ler için drive voltaj(Negativ Voltaj) işini çözmelisin. (VEE)Birçok LCD de negatif voltaj jeneratörü dahili olarak vardır. dokumanda öncelikle buna dikkat etmelisin. Yok ise  harici bir negatif voltaj bulmalısın(<=  -17v) Hardware düzgün olmalı.
Zoru Başarırım , İmkansız Biraz Zaman Alır....İmza... YENİ NESİL GENÇ TÜRK MÜHENDİSLERİ......

cundali11

ugurtarlaci
ilgilendiğiniz için teşekkür ederim C yi bilmiyorum pbp kullanıyorum ama akmasa damlar misali onu anlamya çalışacagım zaten bana bütün program değilde komutları hangi düzenle yolluyacagım nasıl yolluyacagım gerekli

mesela 7110 un lcd si ile geçen gün uğraştım bundada hiç bir kod elimde yok tu ve hiç bişey bilmiyordum internnetten buldugum  hex dosyasını isiste pice yükleyip logic analyserle lcd ye giden komutları sırayla bir kağıda yazdım bir günlük bir çalışma sonucu neyin ne oldugunu anladım ve şimdi onu kullanabiliyorum fakat gerçek lcd ile simülasyondaki lcd arasında stun adreslerinde bi fark var o kadar

göndereceğiniz programda da böyle bir çalışma yaparak inşallah çözebilirim olayı hex dosyasınıda gönderirseniz sevinirim

tekrar teşekkürler

ugurtarlaci

hex dosyasından çözmeniz zor. Ben ACII C olarak kodları göndereyim

parça parça göndereceğim, umarım yardımı olur

LCD yi Başlatma:
/*--------------------------------------
Initialize Graphic LCD (T6963)
--------------------------------------*/
void GlcdInit(void)
{
	unsigned int iGI;
	
	GLCD_PORT_DIR = 0xff;	      //LCD DATA PORTUNU ÇIKIŞ OLARAK AYARLA
	GLCD_PORT = 0xff;                         // İLK DATA
	GLCD_CONTROL_PORT_DIR = 0xff; //lcd  KOTROL PORTUNU ÇIKIŞ OLARAK AYARLA
	GLCD_CONTROL_PORT = 0xff;        // LCD KONTROL PORTUNU İLK DEĞERİNİ VER

	GLCD_RESET = 0;	//reset controller
	iGI = 65000; while(iGI--) __no_operation();
	GLCD_RESET = 1;
	iGI = 65000; while(iGI--) __no_operation();
	
	//set signals
	GLCD_RD = 1;	//no read signal
	GLCD_WR = 1;	//no write signal
	GLCD_FS1 = 0;	//8x8 PİXEL KARAKTER SEÇİMİ
	//GLCD_FS1 = 1;	//6x8 character set
	//FS also effect graphic area. aralarda bosluk birakiyor
	//ve FS neyse butun ekran o oluyor
	__no_operation();
	__no_operation();

	//home is starting value of text or graphic address.
	//Area describes that how much column text or graphic area. if
	//graphic area 128 pixel, GraphicArea = 128 / 8 = 16
	SetTextBase(0X0000);	//TEXT BAŞLANGIZ ADRESİ
	SetTextArea(240 / 8 );	//TEXT UZUNLUGU
	SetGraphicBase(0X0200);	//GRAFİK BAŞLANGIÇ ADRESİ
	SetGraphicArea(240 / 8 );	//GRAFIK ALAN UZUNLUGU
	SetMode(0x81);			//EXOR mode
	SetDisplay(0x9c);		//GRAFİK VE TEXT OLARAK SET ET
	GlcdClear();                        // LCD BELLEĞİNİ SİL
}

Mod notu:Lütfen code tag kullanalım.
Zoru Başarırım , İmkansız Biraz Zaman Alır....İmza... YENİ NESİL GENÇ TÜRK MÜHENDİSLERİ......

ugurtarlaci

lcd Belleğini Sil
void GlcdClear(void)
{
	unsigned int iGC;

	//clear text area
	SetAddPointer(0x0000);    // TEXT BAŞLANGIÇ ADRESİNİ VER
	GlcdCommandWrite(0XB0);  // AUTO WRITE AÇIK
	for(iGC = 0;iGC < 0x200;iGC++) {  // TEXT ADRESI SONUNA KADAR SAY
			GlcdDataWrite(' ' - 32); // BOŞLUK BAS
	}
	GlcdCommandWrite(0XB2);  // AUTO WRITE KAPALI
	
	//clear graphic area
	SetAddPointer(0X0200);  // GRAFİK ALANI BAŞLANGICI
	GlcdCommandWrite(0XB0); // AUTO WRITE AÇIK
	for(iGC = 0x200;iGC < 0x3fff;iGC++) {	//GRAFİK ADRESİ SANUMA KADAR SAY
			GlcdDataWrite(0x00); // GRAFİK BELLEKLERİNE 0X00 BİLGİSİNİ YAZ
	}
	GlcdCommandWrite(0XB2); // AUTO WRITE KAPALI
}
Zoru Başarırım , İmkansız Biraz Zaman Alır....İmza... YENİ NESİL GENÇ TÜRK MÜHENDİSLERİ......

cundali11

çok teşekkür ederim umarım yapabilirim vallahi bugunun en güzel haberi bu oldu tekrar teşekkürler artık sabahleyin sağlam kafayla bu işe koyulucağım

cundali11

ugurtarlaci;
hocam bunlar yanlış anlamadıysam lcd nin açılıştaki ayarları peki bunları yaptıktan sonra satır ve stun adresleri nerden başlıyor nasıl verilecek ve zahmet olmassa şöyle en basit bi hex dosyası varsa elinizde örnegin lcdnin bir kaç yerine nokta bırakabilen bile olsa olur gönderebilirseninz sevinirim kolay gelsin

ugurtarlaci

Ben sana diğer procedureleri de vereyim ben. Tüm bunları kullanarak en son vereceğim kullanım örnekleri ile karakter ve resim basabilirsin

/*--------------------------------------
check all cabability of T6963
--------------------------------------*/
void GlcdCheck(void)
{
	GLCD_PORT_DIR = 0x00;	//set GLCD_PORT input
	__no_operation();
	GLCD_CD = 1;	//set to Command
	GLCD_WR = 1;
	GLCD_RD = 0;	//Read from Controller
	GLCD_EN = 0;	//Enable Controller
	__no_operation();
	while((GLCD_PORT & 0x2f) == 0x2f) ; 	//wait, check all cabability of T6963
	GLCD_EN = 1;
	GLCD_RD = 1;
	GLCD_PORT_DIR = 0xFF;	//set GLCD_PORT output
	__no_operation();
}


/*--------------------------------------
[b]LCD ye DATA YAZMA [/b]
--------------------------------------*/
void GlcdDataWrite(unsigned char GlcdData)
{
	GlcdCheck();	//check busy
	__no_operation();
	GLCD_PORT = GlcdData;
	__no_operation();
	GLCD_CD = 0;	//set to Data
	GLCD_RD = 1;
	GLCD_WR = 0;	//write data to controller
	GLCD_EN = 0;	//controller chip enable
	__no_operation();
	GLCD_WR = 1;
	GLCD_EN = 1;	//no chip enable
	GLCD_CD = 1;
}

/*--------------------------------------
[b]LCD YE KOMUT YAZMA[/b]
-----------------------------------*/
void GlcdCommandWrite(unsigned char GlcdCommand)
{
	GlcdCheck();	//check busy
	__no_operation();
	GLCD_PORT = GlcdCommand;
	__no_operation();
	GLCD_CD = 1;	//set to Command
	GLCD_RD = 1;
	GLCD_WR = 0;	//write data to controller
	GLCD_EN = 0;	//controller chip enable
	__no_operation();
	GLCD_WR = 1;
	GLCD_EN = 1;	//no chip enable
}
Zoru Başarırım , İmkansız Biraz Zaman Alır....İmza... YENİ NESİL GENÇ TÜRK MÜHENDİSLERİ......

ugurtarlaci

dİĞER aLT rUTİNLER

Bu verdiğim rutinleri bir kütüphanede toplarsan çok  iyi olur

--------------------------------------*/
void GlcdAddWrite(unsigned int Add)
{
	GlcdDataWrite(Add & 0xff);	//write Low Byte of Address
	GlcdDataWrite(Add >>  8 );	//write Hi Byte of Address
}

/*--------------------------------------
set Text Base Address to controller
--------------------------------------*/
void SetTextBase(unsigned int Add)
{
	GlcdAddWrite(Add);
	GlcdCommandWrite(0x40);	//write Text Base Address Command
}

/*--------------------------------------
set Graphic Base Address to controller
--------------------------------------*/
void SetGraphicBase(unsigned int Add)
{
	GlcdAddWrite(Add);	//write Graphic Base Address
	//write Graphic Base Address Command
	GlcdCommandWrite(0x42);
}

/*--------------------------------------
set Text Area to controller
--------------------------------------*/
void SetTextArea(unsigned int Add)
{
	GlcdAddWrite(Add);	//write Text Area
	//write Text Area Command
	GlcdCommandWrite(0x41);
}


/*--------------------------------------
set Graphic Area to controller
--------------------------------------*/
void SetGraphicArea(unsigned int Add)
{
	GlcdAddWrite(Add);	//write Graphic Area
	//write Graphic Area Command
	GlcdCommandWrite(0x43);
}

/*--------------------------------------
set Mode to controller ???????
--------------------------------------*/
void SetMode(unsigned char Mode)
{
	GlcdCommandWrite(Mode);	//write Mode
}
Zoru Başarırım , İmkansız Biraz Zaman Alır....İmza... YENİ NESİL GENÇ TÜRK MÜHENDİSLERİ......

ugurtarlaci

Grafik ve Text datalarını LCD ye basma Rutinleri
/*--------------------------------------
set address pointer (Ram Address)
--------------------------------------*/
void SetAddPointer(unsigned int Add)
{
	GlcdAddWrite(Add);	//write Address
	GlcdCommandWrite(0x24);	//set address pointer
}

/*--------------------------------------
set Display Mode to controller
--------------------------------------*/
void SetDisplay(unsigned char DisplayMode)
{
	GlcdCommandWrite(DisplayMode); //write DisplayMode
}



/*--------------------------------------
[b]GRAFIK DATA BASMA[/b]-
-------------------------------------*/
void GlcdPrintGraphic(int Xcoor, int Ycoor, int Weight, int Length, unsigned char const *p,unsigned char color)
{
	//Xcoor un her 1 deger icin 8 pixel kayma oluyor. bu da bitmap i tam olarak istenilen
	//yere oturtmayi engelliyor.
	//Weight de de 1 birim 8 pixel etkileyebiliyor.

	unsigned int k1;
	unsigned int k2;
	unsigned int WeightT;
	
	WeightT = Weight / 8;
	
	for(k1 = 0;k1 < Length;k1++) {
		//calculate and write line address
		SetAddPointer(GRAPHIC_BASE_ADD + (Ycoor + k1) * X_BYTE_COUNT + Xcoor);
		GlcdCommandWrite(AUTO_WRITE_ON);
		for(k2 = 0;k2 < WeightT;k2++)		//write data to graphic
		{ 	
		if (color == 1)
		  			GlcdDataWrite(*(p + k2 + (k1 * WeightT)));
					else
					GlcdDataWrite(~*(p + k2 + (k1 * WeightT)));	// invert pixel color
		}	
		GlcdCommandWrite(AUTO_WRITE_OFF);	
	}
}

/*--------------------------------------
[b]TEXT DATA BASMA[/b]
--------------------------------------*/
void GlcdPrintText(int Xcoor, int Ycoor, unsigned char const * p)
{
	unsigned int k1;
		
	SetAddPointer(TEXT_BASE_ADD + Ycoor * X_BYTE_COUNT + Xcoor);	//write line and coloumn address
	GlcdCommandWrite(AUTO_WRITE_ON);
	k1 = 0;
	while(*(p + k1) != 0x00) { //check NULL
		GlcdDataWrite(*(p + k1++) - 32);			//write data
	}		
	GlcdCommandWrite(AUTO_WRITE_OFF);
}

[b]
Örnek Kod Kullanımları[/b]

[b]Sol üst Köşeye bir adet A harfi Basma[/b]
								SetAddPointer(TEXT_BASE_ADD +0);
								GlcdCommandWrite(0xB0);
								t=0;
								for(i = 0;i < 8;i++)
								GlcdDataWrite('A'- 32);
								GlcdCommandWrite(0XB2);

Grafik Resim Basma 
[b]
0.kolon - 0. Satıra 64x8 bitlik [u]Veri_Big_Blink[/u] bmp dosyasını göderme[/b]

GlcdPrintGraphic(0,0, 64, 8, &Veri_Big_Blink[0],1);

------Örnek Dosya--------- Veri_Big_Blink ------------------------------
unsigned char  const Veri_Big_Blink[] = {
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
};

Hepsi bu... Umarım yardımcı olabilmişimdir

Kolay gelsin
Zoru Başarırım , İmkansız Biraz Zaman Alır....İmza... YENİ NESİL GENÇ TÜRK MÜHENDİSLERİ......