STM32F4x Çalışmalarım

Başlatan Mucit23, 02 Aralık 2013, 00:01:25

Mucit23

Sorunu buldum. Birkaç dosyaya geri dönüşüm esnasında null karakter atanmış. Onları temizleyince düzeldi.

matador

Hocam son halini paylaşmanız mümkün mü?

Mucit23

Kütüphaneye diğer fonksiyonları (Circle, Line, Rectangle, Resim basma vs...) ekleyeyim sonra paylaşıcam. Yanlız Beyaz sorunu çözemedim. Halla 0xFFFF kabul etmiyor. Farklı fikir görüş ve önerileri olanlar yazarsa sevinirim.

matador

Ben lcd'de resim basarken renkler bozuk çıkıyor. Örneğin LCD_Clear(BLUE); komutunu gönderdiğimde ekranın rengi yeşil oluyor. Mavi ile yeşil ters. Renk sıralamasını datasheete bakıp değiştirdim datasheetteki tüm ihtimalleri tek tek denedim hiç bir şey değişmedi. Sürücü kodlarında ki;

unsigned int  HDP=799; //Horizontal Display Period
unsigned int  HT=1000; //Horizontal Total
unsigned int  HPS=51;  //LLINE Pulse Start Position
unsigned int  LPS=3;   //	Horizontal Display Period Start Position
unsigned char HPW=8;   //	LLINE Pulse Width


unsigned int  VDP=479;	//Vertical Display Period
unsigned int  VT=530;	//Vertical Total
unsigned int  VPS=24;	//	LFRAME Pulse Start Position
unsigned int  FPS=23;	//Vertical Display Period Start Positio
unsigned char VPW=3;	// LFRAME Pulse Width


bu kısım ekranın boyutuna göre mi ayarlanıyor. Bu değerler tam olarak neyi ifade ediyor. Sürücü dosyasında renk sıralamasını değiştirmeme rağmen neden tepki alamadığımı da anlamış değilim.

Ayrıca resim basarken bazen ekran donup kalıyor yavaş yavaş beyaza dönüyor. Bu sadece resim basarken de değil dokunmatik kullanırken de olabiliyor. Bu donmanın nedeni ne olabilir.

Mucit23

Alıntı yapılan: matador - 12 Aralık 2013, 11:46:33
Ben lcd'de resim basarken renkler bozuk çıkıyor. Örneğin LCD_Clear(BLUE); komutunu gönderdiğimde ekranın rengi yeşil oluyor. Mavi ile yeşil ters. Renk sıralamasını datasheete bakıp değiştirdim datasheetteki tüm ihtimalleri tek tek denedim hiç bir şey değişmedi. Sürücü kodlarında ki;

unsigned int  HDP=799; //Horizontal Display Period
unsigned int  HT=1000; //Horizontal Total
unsigned int  HPS=51;  //LLINE Pulse Start Position
unsigned int  LPS=3;   //	Horizontal Display Period Start Position
unsigned char HPW=8;   //	LLINE Pulse Width


unsigned int  VDP=479;	//Vertical Display Period
unsigned int  VT=530;	//Vertical Total
unsigned int  VPS=24;	//	LFRAME Pulse Start Position
unsigned int  FPS=23;	//Vertical Display Period Start Positio
unsigned char VPW=3;	// LFRAME Pulse Width


bu kısım ekranın boyutuna göre mi ayarlanıyor. Bu değerler tam olarak neyi ifade ediyor. Sürücü dosyasında renk sıralamasını değiştirmeme rağmen neden tepki alamadığımı da anlamış değilim.

Ayrıca resim basarken bazen ekran donup kalıyor yavaş yavaş beyaza dönüyor. Bu sadece resim basarken de değil dokunmatik kullanırken de olabiliyor. Bu donmanın nedeni ne olabilir.

Benzer sorunları yaşadım.

            LCD_WriteCommand(0x0001);	 // software reset
            LCD_WriteCommand(0x0001);	 // software reset
	          LCD_WriteCommand(0x0001);	 // software reset
	
						LCD_WriteCommand(0x00E2);  //SET PLL freq=120MHz ;
						LCD_WriteData(0x0021);     //23 N=0x36 for 6.5M, 0x23 for 10M crystal
            LCD_WriteData(0x0002);     //02
            LCD_WriteData(0x0004);     //04
            
            LCD_WriteCommand(0x00E0); // Start PLL 
            LCD_WriteData(0x0001);
						_delay_(10);
            LCD_WriteCommand(0x00E0); // Lock PLL 
            LCD_WriteData(0x0003);
						_delay_(10);
						LCD_WriteCommand(0x0001);	 // software reset
						
						LCD_WriteCommand(0xE6);    ///PLL setting for PCLK, depends on resolution
            LCD_WriteData(0x0002);     //0x0002
            LCD_WriteData(0x00EA);     //0x00ea
            LCD_WriteData(0x00EC);     //0x00ec

            LCD_WriteCommand(0x00B0);  // Set Lcd_Mode 
            LCD_WriteData(0x003F);     //0x003F
            LCD_WriteData(0x0080);     //0x0080
            LCD_WriteData((HDP>>8)&0X00FF);  //Set HDP
            LCD_WriteData(HDP&0X00FF);
            LCD_WriteData((VDP>>8)&0X00FF);  //Set VDP
            LCD_WriteData(VDP&0X00FF);
            LCD_WriteData(0x0000);

            LCD_WriteCommand(0x00B4);		     //HSYNC Set_hori_period.
            LCD_WriteData((HT>>8)&0X00FF);   //Set HT         
            LCD_WriteData(HT&0X00FF);
            LCD_WriteData((HPS>>8)&0X00FF);  //Set HPS
            LCD_WriteData(HPS&0X00FF);
            LCD_WriteData(HPW);			         //Set HPW 			
            LCD_WriteData((LPS>>8)&0X00FF);  //Set HPS
            LCD_WriteData(LPS&0X00FF);      
            LCD_WriteData(0x0000);

            LCD_WriteCommand(0x00B6);				 //VSYNC  Set_Vrt_period.
            LCD_WriteData((VT>>8)&0X00FF);   //Set VT 
            LCD_WriteData(VT&0X00FF);
            LCD_WriteData((VPS>>8)&0X00FF);  //Set VPS
            LCD_WriteData(VPS&0X00FF);
            LCD_WriteData(VPW);			         //Set VPW			   		
            LCD_WriteData((FPS>>8)&0X00FF);
            LCD_WriteData(FPS&0X00FF);
			
            LCD_WriteCommand(0x002A);      //SET column address
            LCD_WriteData(0x0000);         //SET start column address=0
            LCD_WriteData(0x0000);
            LCD_WriteData(0x0001);         //SET end column address=479
            LCD_WriteData(0x00df);
						
            LCD_WriteCommand(0x002B);      //SET page address
            LCD_WriteData(0x0000);         //SET start page address=0
            LCD_WriteData(0x0000);
            LCD_WriteData(0x0001);         //SET end page address=271
            LCD_WriteData(0x000f);
						
						LCD_WriteCommand(0x00B8);      //Set GPIO Configuration
	          LCD_WriteData(0x0007);         //GPIO3=input, GPIO[2:0]=output
	          LCD_WriteData(0x0001);         //GPIO0 normal
						
	          LCD_WriteCommand(0x00BA);      //Set Gpio Value
	          LCD_WriteData(0x0005);
						
            LCD_WriteCommand(0x00F0);       //Pixel data interface
            LCD_WriteData(0x0003);          //16Bit RGB565 Format
//            LCD_WriteCommand(0x003A);       //Pixel RGB Format 
//						LCD_WriteData(0x0070);          //16Bit RGB Format
						
	          LCD_WriteCommand(0x00BE);       //Set PWM for B/L
           	LCD_WriteData(0x0006);          //PWM Frequency
           	LCD_WriteData(0x00FF);          //PWM Duty Cyle
					  LCD_WriteData(0x0001);
          	LCD_WriteData(0x00F0);
           	LCD_WriteData(0x0000);
          	LCD_WriteData(0x0000);
						
	          LCD_WriteCommand(0x00D0); 
	          LCD_WriteData(0x000C);
						
            LCD_WriteCommand(0x0029);       //Display on


Şuan Bende birtek beyaz pixel basmada problem kaldı. Diğer renklerde sıkıntı yok sanırım. Birde bazen durduk yere donuyor. Oda sanırım PCLK ayarlarıyla ilgili. Ben Bu ayarlarla çok oynadım. Ekranda titreme oluyordu onları giderdim.

Şöyle bir çıkarım yaptım. Her LCD nin türüne göre birçok ayarın değişmesi gerekiyor. Yani Sadece LCD parametreleriyle oynamak çözüm değil.
Yinede yukarıdaki kodları bir deneyin.
Renk sorunu için RGB ayarlarını yaptıysanız 0XB0 nolu adrese bakıp ayarları gözden geçirin.

matador

Hocam bu kodları denedim ekran tam istediğim gibi çalışıyor. Allah razı olsun :)

Mucit23

Sağol Teşekkürler.

Ekrana LCD_Clear ile 0XFFFF gönderebilirmisin Ekran tamamen beyaza boyanacakmı?

matador

#67
Beyazda ki sıkıntı devam ediyor

Hocam M_B'nin paylaştığı projede ki resmi basmayı dener misin bir ben denedim sıkıntı çıkmadı resmin hex kodlarında tonla 0xFF var herhangi bir sorun çıkmıyor.

Mucit23

Hocam resim basmayla ilgisi yok. Eğer SSD1963 data olarak 0xFFFF kabul etse resim basma fonksiyonunu iki dakikada bende yazarım. Ama yok öyle birşey. Ben anlamıyorum. M_B hocanın verdiği kodlar bende hiç çalışmıyor. Akşam yine LCD parametreleri hariç diğer tüm ayarları M_B hocanınkiyle değiştireceğim. Bakalım ne olacak?

işin kötüsü kamerada sıkıntı yaşayacağım. Beyaz pixel geldiyse ekran donar

matador

M_B hocanın paylaştıkları çalışmıştı bende sadece renk ayarı vardı. Sormak istediğim bir şey var M_B'nin paylaştığı projede ki 01.c resmini basarken sorun yok ama ben herhangi bir resmi image2lcd ile hexe çeviriyorum bunu lcd'ye basarken lcd donup kalıyor.

M_B hocanın paylaştığı projede ki 01.c resmini dener misiniz?

Mucit23

Tekrar Çalışmalara başladım.

Beyaz pixel problemi devam ediyor. Kitin üzerindeki reset butonuna biraz basılı tutup çekince bazen donmadan beyaz pixeli ekrana bastığı olabiliyor. Çok nadir gerçekleşiyor.

Bu konuda yorumu olan varmı?

Bu sorunu çözmem gerek! Bir Bitlik sorun yüzünden bütün ilerlemem durdu! 

Mucit23

Bir sorum olacak.

Benim discovery kitin üzerindeki 3.3V besleme hattında voltaj çok düşüyor. Genelde 2,85 volt civarında bir gelirim var. Normalde USB beslemeside 4.5 volt civarında ama ben kart üzerinde 5V hattına direk 5v veriyorum karta lcd felan bağlamama rağmen yine 3.3V çıkışı düşüyor. Bunun sebebi nedendir. 

Mucit23

Arkadaşlar neden böyle olduğunu çözemedim bir türlü. Acaba kit üzerindeki 3.3 regülatörü mü bozuk? LCD bağlı değilken sistem 40ma civarı bir akım çekiyor. LCD varken 150ma çekiliyor.

Mucit23

Artık bu 4.3" TFT ile uğraşmayı bırakıyorum. Şuan TFT stabil çalışıyor ama hala 0xFFFF renk datası gönderdiğim zaman SSD1963 susuyor. Açıkçası pes ettirdi beni :o

3.2" TFT ile devam edeceğim. Bu LCD'nin sürücüsü SSD1289 umarım abisi gibi aynı problemleri yaşatmaz.

Şimdi Stm32F407 ile bağlantılarını yapıyordum bir yerde takıldım.

LCD'nin Pin bağlantıları şöyle.

jpg upload

Daha önceki 4.3" TFT'de LCD ekran ledini SSD1963'ün PWM çıkışına bağlamıştım. Oradan parlaklığını ayarlıyordum.

Sanırım SSD1289 da böyle bir seçenek yok. Zaten sadece LED_A şeklinde pin çıkarmışlar. Parlaklık için buradan harici pwm uygulamak gerekiyor değilmi? Eğer direk yakmak istersem +3.3V'a direk bağlamam yeterli sanırım.

kantirici

Bendeki 3.2" ssd1289 LCD'de LED için ayrıca pin yok, besleme verilince ekran ışığı yanıyor. Yani sen ister direnç üzerinden 3.3V bağla ister PWM ile sür, her ikisininde olacağını düşünüyorum.