STM32F4x Çalışmalarım

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

M_B

Mucit23 hocam;

Ekranın basmıs olduğu beyaz.
İlgili kodlar
SSD1963_LCD_Clear(WHITE);


Fonksiyonu:
void SSD1963_LCD_Clear(uint16_t color)
{                    
     unsigned int l=800,w;

	LCD_WriteCommand(0x002A);	
	LCD_WriteData(0x00);	    
	LCD_WriteData(0x00);
	LCD_WriteData(HDP>>8);	    
	LCD_WriteData(HDP&0x00ff);
  LCD_WriteCommand(0x002b);	
	LCD_WriteData(0x00);	    
	LCD_WriteData(0x00);
	LCD_WriteData(VDP>>8);	    
	LCD_WriteData(VDP&0x00ff);
	LCD_WriteCommand(0x002c);
		
	while(l--)
	{
	    for(w=0;w<480;w++)
		{    
          	LCD_WriteData(color);
		}
	} 
}


Renk Tablosu:
#define BLUE  0XF800
#define GREEN 0X07E0
#define RED   0X001F  
#define BRED  0XF81F
#define GRED  0XFFE0
#define GBLUE 0X07FF
#define WHITE 0XFFFF


#define BLACK 0X0000 
#define BROWN 0XBC40 
#define BRRED 0XFC07 
#define GRAY  0X8430 
#define LGRAY 0XC618 
 
#define FSIZE 16 

#define LCD_W 800
#define LCD_H 480





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

Mucit23

Mehmet Hocam Test için Teşekkür ederim. Ben birkaç test daha yapacağım.   

Umarım problemi çözebilirim.

Mucit23

Şöyle birşey denedim. LCD Ekran Aydınlatması önceden direk bağlıydı ben şimdi SSD1963'ün PWM çıkışına bağladım. Beyaz Renk gönderdiğim zaman PWM duruyor yani ekran kararıyor. Demekki SSD1963 donuyor. Ama neden donduğunu hala çözemedim

M_B

Mucit23 hocam;
Neden Beyaz gonderince donsun ki ?
Beyaz gonderdiğinizde SSD1963 besleme voltajını kontrol edin.
Varsa elinizde 3v3  dısardan besleyip deneyin.
İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

Mucit23

#49
Hocam siz 7" TFT yi Yine USB den ve discovery üzerinden besliyorsunuz değilmi? Benim USB voltajımda düşük. 4,5V civarında. 3.3V Beslemesi de 2.8V civarında. Bayağı düşük.

Tek bir pixel basmayı denedim. Tek bir beyaz pixelde herzaman donmuyor. Ard arda beyaz data gönderilince donuyor.

Ben yine Harici beslemeyi deneyeyim

Mucit23

Hocam Değişik birşey keşfettim. Şimdi Pixel Fonksiyonu ile Ekrana noktacıklar koyuyorum. Normalde Nokta koyma fonksiyonu ekrandaki verilen kordinata ait pixelin rengini değiştirir. Bende böyle olmuyor. Verilen Renk Datasına göre verilen kordinattaki pixeli ve bu pixelin hemen sağındaki pixelin rengini değiştiriyor. Ama Her renkte olmuyor. Testlerim sırasında 0xFF7F den daha büyük bir renk datası olursa eğer bu dediğim işlemin gerçekleştiği kanısına vardım. Yani iki pixel birden renk değiştiriyor. Pixel RGB data uzunluğu 16 bit. Tekrar bi göz atayım ama neden böyle olsunki? Sorun Bence bundan kaynaklanıyor.

z

Peki 0xFF7F den buyuk degil de mesela

0x0080, 0x01E0 0x02A0, 0x00FF gibi renk datalarinda da iki pixel birden renk degistiriyormu? (Merak ettim)
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Mucit23

Z hocam 0x01E0 da da oluyor. Diğer pixel biraz farklı sanki böyle titrer gibi yanıyor.  Demekki 0xFF7F ile alakası yok.

Ama şimdi Pixel format değerini 24 bite çıkardım. 0xFFFE değerine kadar bul etti. Yani donmadan pixelleri çiftlemeden ekrana bastı. Hatta Ekranın Tümünü 0xFFFE ile boyayabildim. Büyük bir gelişme ama Yine 0XFFFF de donuyor.

Aslında 0xFFFE ile 0xFFFF arasında bir fark yok ikiside beyaz. Beyaz rengi 0xFFFE olarak tanımlayabilirim ama Resim bassam sıkıntı çıkacak. 

Biraz mantık yürütelim. 0xFFFF 16 bit sınırı içerisinde. Ekranda iki adet pixelin rengi boyanması için kordinat verildikten sonra iki adet 16 bitlik data göndermek gerekiyor. Bunun dışında ne gibi olaylar olsunki ikinci pixelin rengi değişsin? Yine iş SSD1963 de bitiyor.

z

Peki 24 oncesinde renkler icin kac byte kullaniliyordu? 16 Byte mi?

FF7F den buyuk degerler kafamda su isigi yakti.

MSB LSB yi yer degistirirsek 7FFF eder. Bu 16 bit sayilar icindeki en buyuk degerdir. Bunu 1 artirirsak negatif sayilari elde ederiz.

Programda negatif degerler soruna neden oluyordur.

Bu yuzden  0x0080, 0x01E0 0x02A0, 0x00FF gibi negatif degerleri denemeni istedim.

signed int, unsigned int vs gibi onemli bir ayrinti atlaniyor olabilir.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

Alıntı yapılan: Mucit23 - 05 Aralık 2013, 13:27:53
Hocam Teker teker registerleri deniyorum şimdi. Renklerde problem kalmadı şuanda. Birtek Beyaz Çıkmıyor. Daha doğrusu beyaz renkte bir pixel basıldığı zaman SSD1963 donuyor?

Renk Kodlarım bunlar. Birkaç Makro kullanıyorum.

#define BLACK               RGB565CONVERT(0,    0,      0)
#define DARKBLUE            RGB565CONVERT(0,    0,      128)
#define DARKGREEN           RGB565CONVERT(0,    128,    0)
#define DARKCYAN            RGB565CONVERT(0,    128,    128)
#define DARKRED             RGB565CONVERT(128,  0,      0)
#define DARKMAGENTA         RGB565CONVERT(128,  0,      128)
#define DARKYELLOW          RGB565CONVERT(128,  128,    0)
#define BLUE                RGB565CONVERT(0,    0,      255)
#define GREEN               RGB565CONVERT(0,    255,    0)
#define CYAN                RGB565CONVERT(0,    255,    255)
#define RED                 RGB565CONVERT(255,  0,      0)
#define MAGENTA             RGB565CONVERT(255,  0,      255)
#define BROWN               RGB565CONVERT(102,  51,    0)
#define LIGHTGRAY           RGB565CONVERT(128,  128,    128)
#define DARKGRAY            RGB565CONVERT(64,   64,     64)
#define LIGHTBLUE           RGB565CONVERT(128,  128,    255)
#define LIGHTGREEN          RGB565CONVERT(128,  255,    128)
#define LIGHTCYAN           RGB565CONVERT(128,  255,    255)
#define LIGHTRED            RGB565CONVERT(255,  128,    128)
#define LIGHTMAGENTA        RGB565CONVERT(255,  128,    255)
#define YELLOW              RGB565CONVERT(255,  255,    0)
#define WHITE               RGB565CONVERT(255,  255,    255)                     
#define GRAY0       	      RGB565CONVERT(224,  224,    224)
#define GRAY1         	    RGB565CONVERT(192,  192,    192)   
#define GRAY2               RGB565CONVERT(160,  160,    160)   
#define GRAY3               RGB565CONVERT(128,  128,    128)
#define GRAY4               RGB565CONVERT(96,   96,     96)
#define GRAY5               RGB565CONVERT(64,   64,     64)
#define GRAY6	              RGB565CONVERT(32,   32,     32)

#define RGB565CONVERT(red, green, blue) (u16) (((red >> 3) << 11) | ((green >> 2) << 5) | (blue >> 3))


Beyaz pixel Basıldığı zaman 16 bit renk datası olarak 65535 gidiyor TFT ye. Renk Sıralaması RGB ama burada Renk sıralamasıda farketmezki, Her türlü beyaz çıkması gerekiyor. Ben beyaz gönderdğim zaman donuyor.

Ne yapacağım bilmiyorum. Bunun neden kaynaklanabileceği hakkında fikri olan varmı?

16 bit modunda iken 

#define RGB565CONVERT(red, green, blue) (u16) (((red >> 3) << 11) | ((green >> 2) << 5) | (blue >> 3))

kullanarak asagidaki degerlerin sonucu ne cikiyor?

#define WHITE               RGB565CONVERT(255,  255,    255)                     
#define GRAY3               RGB565CONVERT(128,  128,    128)
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Mucit23

Hocam LSB veya MSB işi olmaması gerekir. Çünkü Renk datalarını tutan değişkenler unsigned int16 şeklinde tanımlı
static __IO uint16_t TextColor = 0x0000, BackColor = 0xFFFF;

Yani negatif değerler almaması gerekiyor.

RGB565CONVERT Makrosunun çıkışını ekrana bastım.

RGB565CONVERT(255,  255,    255)     =   0xFFFF
RGB565CONVERT(128,  128,    128)     =   0x8410

çıktılar yukarıdaki gibi oldu. 

Mucit23

@Z hocam başka yorumunuz varmı?

Hala neden 0XFFFF'i kabul etmediğini çözemedim. Başka ne yapabilirim bu konuda

M_B

@Mucit23 hocam;
SSD1963_LCD_Clear(WHITE);
Fonksiyonu kullanarak denediniz mi

SSD1963_LCD_Clear(0xFFFF);
olarak
Bahsettiğim biraz mantıksız gibi ama denemek lazım.
Veya debug ederek adım adım calıstırarak test etmek lazım
İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

Mucit23

Mehmet Hocam o fonksiyonu kullanmıyorum. En temelden şekilde direk data göndererek yapıyorum. Yani ilk önce kordinatı belirleyip, sonra direk renk datası göndererek pixel basımı yapıyorum. Problem ararken datasheeti ezberlediğimi söyleyebilirim.

Şuanda bilgisayarım ölü durumda hocam. Son 1 haftaki çalışmalarım masaüstündeydi onları kurtarınca çalışmalara devam edecem.

Mucit23

Önceden derlenen program şimdi bir hata veriyor

.\Output\Discovery.axf: error: L6007U: Could not recognize the format of file .\output\startup_stm32f40xx.o.


Acaba geri dönüşüm dosya yapısınımı bozmuş.