JHD204A 4x20 lcd-stm32f429

Başlatan Forever_Embedded, 15 Ağustos 2015, 16:38:34

Forever_Embedded

Merhaba,
stm32f429-disco kullanıyorum. lcd ye bir şeyler yazdırmaya çalışıyorum fakat 1. ve 3. satırlar kare ile doluyor,  2. ve 4. satırlar ise  boş gözüküyor. Bu konu ile ilgili bir başlık açılmış ama bana faydalı olmadı gibi. Yardımlarınız için şimdiden teşekkürler...
int main()
{ 
	if (SysTick_Config(SystemCoreClock / 1000))/*1 msn de bir kesmeye girmesi için*/
  { 
    /* Capture error */ 
    while (1);
  }
	/*4x20 Charecter LCD's Pin Configuration Function*/
	JHD204A_Pin_Configuration();

	/*Infinite loop*/
  while (1)
	{ 
		Delay(50);
		/*JHD204A LCD initilation*/
		JHD204A_LCD_Init();
		Delay(50);
		JHD204A_LCD_Clear();
                Delay(2);
		JHD204A_LCDStringLine("Forever_Embedded");
		Delay(1000);
	}
}

Bu da lcd için yazdığım
void JHD204A_DataSent(int LCD_DATA,int LCD_Situation)
{

 if(LCD_Situation==LCD_SENT_DATA)
 {	 
		 GPIO_SetBits(LCD_DATAPORT_RS,LCD_RS_PIN);
		 Delay(6);
		 GPIO_SetBits(LCD_DATAPORT_EE,LCD_EE_PIN);
		 Delay(6);
		 /*Gönderilecek veri için fonksiyon yazlacak yazdirilacak*/
		 JHD204A_AssigningDataToPin(LCD_DATA);
		 GPIO_ResetBits(LCD_DATAPORT_EE,LCD_EE_PIN);
 }
 else if(LCD_Situation==LCD_SENT_COMMAND)
 {	 
	 
		 GPIO_ResetBits(LCD_DATAPORT_RS,LCD_RS_PIN);
		 Delay(6);
		 GPIO_SetBits(LCD_DATAPORT_EE,LCD_EE_PIN);
		 Delay(6);
		 JHD204A_AssigningDataToPin(LCD_DATA);
		 GPIO_ResetBits(LCD_DATAPORT_EE,LCD_EE_PIN);
 }
}	


/*Call Following function firstly*/
void JHD204A_LCD_Init(void)
{
	JHD204A_DataSent(0x38,LCD_SENT_COMMAND); /* 0011 1000 B */
	Delay(5);
	JHD204A_DataSent(0x0C,LCD_SENT_COMMAND);
	Delay(1);
	JHD204A_DataSent(0x06,LCD_SENT_COMMAND);
	Delay(1);
	JHD204A_DataSent(0x01,LCD_SENT_COMMAND);
	Delay(1);
}
	

void 	JHD204A_AssigningD0ToPin(int LCD_DATA)
{
if((LCD_DATA&0x01)==1)
	GPIO_SetBits(LCD_DATAPORT_D0,LCD_D0_PIN);
else 
	GPIO_ResetBits(LCD_DATAPORT_D0,LCD_D0_PIN);	
}

void 	JHD204A_AssigningD1ToPin(int LCD_DATA)
{
if(((LCD_DATA>>1)&0x01)==1)
	GPIO_SetBits(LCD_DATAPORT_D1,LCD_D1_PIN);
else
	GPIO_ResetBits(LCD_DATAPORT_D1,LCD_D1_PIN);	
}

void 	JHD204A_AssigningD2ToPin(int LCD_DATA)
{
if(((LCD_DATA>>2)&0x01)==1)
	GPIO_SetBits(LCD_DATAPORT_D2,LCD_D2_PIN);
else
	GPIO_ResetBits(LCD_DATAPORT_D2,LCD_D2_PIN);	
}

void 	JHD204A_AssigningD3ToPin(int LCD_DATA)
{
if(((LCD_DATA>>3)&0x01)==1)
	GPIO_SetBits(LCD_DATAPORT_D3,LCD_D3_PIN);
else
	GPIO_ResetBits(LCD_DATAPORT_D3,LCD_D3_PIN);	
}
	
void 	JHD204A_AssigningD4ToPin(int LCD_DATA)
{
if(((LCD_DATA>>4)&0x01)==1)
	GPIO_SetBits(LCD_DATAPORT_D4,LCD_D4_PIN);
else
	GPIO_ResetBits(LCD_DATAPORT_D4,LCD_D4_PIN);	
}

void 	JHD204A_AssigningD5ToPin(int LCD_DATA)
{
if(((LCD_DATA>>5)&0x01)==1)
	GPIO_SetBits(LCD_DATAPORT_D5,LCD_D5_PIN);
else
	GPIO_ResetBits(LCD_DATAPORT_D5,LCD_D5_PIN);	
}

void 	JHD204A_AssigningD6ToPin(int LCD_DATA)
{
if(((LCD_DATA>>6)&0x01)==1)
	GPIO_SetBits(LCD_DATAPORT_D6,LCD_D6_PIN);
else
	GPIO_ResetBits(LCD_DATAPORT_D6,LCD_D6_PIN);	
}

void 	JHD204A_AssigningD7ToPin(int LCD_DATA)
{
if(((LCD_DATA>>7)&0x01)==1)
	GPIO_SetBits(LCD_DATAPORT_D7,LCD_D7_PIN);
else
	GPIO_ResetBits(LCD_DATAPORT_D7,LCD_D7_PIN);	
}

/*D0-D7 arasi bütün pinlere bitsel datalar aktarildi*/
void JHD204A_AssigningDataToPin(int LCD_DATA)
{
	JHD204A_AssigningD0ToPin(LCD_DATA);
	JHD204A_AssigningD1ToPin(LCD_DATA);
	JHD204A_AssigningD2ToPin(LCD_DATA);
	JHD204A_AssigningD3ToPin(LCD_DATA);
	JHD204A_AssigningD4ToPin(LCD_DATA);
	JHD204A_AssigningD5ToPin(LCD_DATA);
	JHD204A_AssigningD6ToPin(LCD_DATA);
	JHD204A_AssigningD7ToPin(LCD_DATA);	
	
	Delay(50);
	GPIO_ResetBits(LCD_DATAPORT_D0,LCD_D0_PIN);
	GPIO_ResetBits(LCD_DATAPORT_D1,LCD_D1_PIN);
	GPIO_ResetBits(LCD_DATAPORT_D2,LCD_D2_PIN);
	GPIO_ResetBits(LCD_DATAPORT_D3,LCD_D3_PIN);
	GPIO_ResetBits(LCD_DATAPORT_D4,LCD_D4_PIN);
	GPIO_ResetBits(LCD_DATAPORT_D5,LCD_D5_PIN);
	GPIO_ResetBits(LCD_DATAPORT_D6,LCD_D6_PIN);
	GPIO_ResetBits(LCD_DATAPORT_D7,LCD_D7_PIN);
}

void JHD204A_MoveCoursor()
{
	/*daha sonra yazilacak*/
}

void JHD204A_LCD_Clear(void)
{
	JHD204A_DataSent(0x01,LCD_SENT_COMMAND);	
}

void JHD204A_LCDStringLine(char* lcd_string)
{ 
	int i=0;
	while(lcd_string[i]!=0)
	{ 
		JHD204A_DataSent(lcd_string[i],LCD_SENT_DATA);
		i++;
	}
}

Mucit23

LCD hiç açılmıyor gibi. Init edemiyorsun LCD yi. RW Ucunu Gnd ye bağladınmı? Lcd yi kaç voltla besliyorsun?

Forever_Embedded

#2
Pinleri de vereyim şu şekilde bağlıyorum:

/************************************************************************************************************
PIN ASSIGMENT
---------------
VEE=VSS->GND         D0->PC3          D5->PE5
VCC ->5V                   D1->PD4          D6->PE6
RS  ->PA5                  D2->PE2           D7->PG2
R/W ->GND                D3->PE3           L+->5V
E   ->PB7                   D4->PE4            L-->GND
*************************************************************************************************************/

Forever_Embedded

LCD init fonksiyonu kendi datasheetin deki örnek koddan çektiğim değerler. Onda da sıkıntı olacağını zannetmiyorum. Herşeyi denedim fakat olmadı. LCD init de nerede sıkıntı olduğunu nasıl anlayacağım? Osilaston ayarlarında sıkıntı var mı onu kontrol edeyim dedim ama orada da bir sıkıntı görmedim.

Forever_Embedded

3. Bacak Contrast Adjust bacağı normalde 10k direnç ve paralel bir kapasite ile toprağa çekiliyor ben direk 3 v bağlan yada GND ye bağladım ama değişen bir şey olmadı. Sıkıntı burada olabilir mi ??

Forever_Embedded

Teşekkür Ederim Sorun çözüldü. 3 gündür basit bir lcd için uğraştım zamanım boşa gitti resmen. Sorun lehimlerde imiş. bir bacağın lehimini iyi yapmamışım sıkıntı ondan oluyormuş. Kusura bakmayın iyi günler.