STM32F407VG + SSD1289 Resim Basma Sorunu

Başlatan yuc0, 08 Aralık 2013, 20:16:36

yuc0

Merhaba arkadaşlar,dokunmatik ve yazı yazma konusunda sıkıntım yok fakat resim basma konusunda problem yaşıyorum. sizce problem ne olabilir ? resim'i hex'e çevirme programım image2lcd.

main.c

#include "stm32f4xx.h"
#include "delay.h"
#include "SSD1289.h"
#include "husky.h"
void tft_yaz(void);
extern unsigned int xxx,yyy;
extern unsigned char flag;
extern u8 gImage_husky[];
int main(void)
{
 Delay(0x3FFFFF);
 LCD_Init();
 Delay(0x3FFFFF);
 LCD_Clear(BLUE);
 LCD_SetTextColor(GREEN);
 LCD_SetDisplayWindow(0, 0, 239, 319);
 while(1)
 {
 tft_yaz();
 Delay(5000000);
 LCD_Clear(BLUE);
 Delay(0x3FFFFF);
 LCD_WriteBMP(239,139 ,100 ,100, gImage_husky);
 Delay(5000000);
}
}
void tft_yaz(void)
{
 LCD_SetTextColor(GREEN);
LCD_SetBackColor(WHITE);
 LCD_BackLight(100);
 LCD_StringLine(100,20, "deneme");
}





M_B

Problem
TFT ekranın init kodundan veya
LCD_WriteBMP();
fonksiyonun dan olabilir.
Ekrana resim basmaya çalıştığınızda ekranda nasıl bir durum oluyor.
İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

yuc0

#2
Resimi ana mesajıma eklemiştim ama sanırım karakter sınırı var mesajlarda.
Buyrun Hocam şöyle bir resimle karşılaşmaktayım:
http://u1312.hizliresim.com/1j/8/vb67b.jpg
tft lcd'de görmek istediğim resim de bu :



M_B

Lcd_init () Foknsiyonu altaki fonksiyonla karşılaştır bakalım
Bir fark var mı ? Bu fonksiyonda dik yazmak icin ayarlanmıştır.

void LCD_Init(void)
{ 
  LCD_CtrlLinesConfig();
  Delay(3000);
  LCD_FSMCConfig();
  Delay(3000);
  TIM_Config();
  LCD_BackLight(100);
  
  LCD_WriteReg(0x0007,0x0021);    Delay(50);
  LCD_WriteReg(0x0000,0x0001);    Delay(50);
  LCD_WriteReg(0x0007,0x0023);    Delay(50);
  LCD_WriteReg(0x0010,0x0000);    Delay(90);
  LCD_WriteReg(0x0007,0x0033);    Delay(50);
  LCD_WriteReg(0x0011,0x6830);    Delay(50);
  LCD_WriteReg(0x0002,0x0600);    Delay(50);
  LCD_WriteReg(0x0012,0x6CEB);    Delay(50);
  LCD_WriteReg(0x0003,0xA8A4);    Delay(50);                       
  LCD_WriteReg(0x000C,0x0000);    Delay(50);
  LCD_WriteReg(0x000D,0x080C);    Delay(50);
  LCD_WriteReg(0x000E,0x2B00);    Delay(50);
  LCD_WriteReg(0x001E,0x00B0);    Delay(50);
  LCD_WriteReg(0x0001,0x2b3F);    Delay(50);  //RGB
  LCD_WriteReg(0x0005,0x0000);    Delay(50);
  LCD_WriteReg(0x0006,0x0000);    Delay(50);
  LCD_WriteReg(0x0016,0xEF1C);    Delay(50);
  LCD_WriteReg(0x0017,0x0103);    Delay(50);
  LCD_WriteReg(0x000B,0x0000);    Delay(50);
  LCD_WriteReg(0x000F,0x0000);    Delay(50);  
  LCD_WriteReg(0x0041,0x0000);    Delay(50);
  LCD_WriteReg(0x0042,0x0000);    Delay(50);
  LCD_WriteReg(0x0048,0x0000);    Delay(50);
  LCD_WriteReg(0x0049,0x013F);    Delay(50);
  LCD_WriteReg(0x004A,0x0000);    Delay(50);
  LCD_WriteReg(0x004B,0x0000);    Delay(50);
  LCD_WriteReg(0x0044,0xEF00);    Delay(50);
  LCD_WriteReg(0x0045,0x0000);    Delay(50);
  LCD_WriteReg(0x0046,0x013F);    Delay(50);
  LCD_WriteReg(0x0030,0x0707);    Delay(50);
  LCD_WriteReg(0x0031,0x0204);    Delay(50);
  LCD_WriteReg(0x0032,0x0204);    Delay(50);
  LCD_WriteReg(0x0033,0x0502);    Delay(50);
  LCD_WriteReg(0x0034,0x0507);    Delay(50);
  LCD_WriteReg(0x0035,0x0204);    Delay(50);
  LCD_WriteReg(0x0036,0x0204);    Delay(50);
  LCD_WriteReg(0x0037,0x0502);    Delay(50);
  LCD_WriteReg(0x003A,0x0302);    Delay(50);
  LCD_WriteReg(0x002F,0x12BE);    Delay(50);           
  LCD_WriteReg(0x003B,0x0302);    Delay(50);
  LCD_WriteReg(0x0023,0x0000);    Delay(50);
  LCD_WriteReg(0x0024,0x0000);    Delay(50);
  LCD_WriteReg(0x0025,0x8000);    Delay(50);
  LCD_WriteReg(0x004f,0x0000);    Delay(50);
  LCD_WriteReg(0x004e,0x0000);    Delay(50);
}
İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

yuc0

gördüğüm kadarıyla bir farklılık yok hocam.
void LCD_Init(void)
{ 
  LCD_CtrlLinesConfig();
  Delay(3000);
  LCD_FSMCConfig();
  Delay(3000);
  TIM_Config();
  LCD_BackLight(100);
  
  LCD_WriteReg(0x0007,0x0021);    Delay(50); 
  LCD_WriteReg(0x0000,0x0001);    Delay(50);
  LCD_WriteReg(0x0007,0x0023);    Delay(50);
  LCD_WriteReg(0x0010,0x0000);    Delay(90);
  LCD_WriteReg(0x0007,0x0033);    Delay(50);
  LCD_WriteReg(0x0011,0x6830);    Delay(50);
  LCD_WriteReg(0x0002,0x0600);    Delay(50);
  LCD_WriteReg(0x0012,0x6CEB);    Delay(50);
  LCD_WriteReg(0x0003,0xA8A4);    Delay(50);                       
  LCD_WriteReg(0x000C,0x0000);    Delay(50);
  LCD_WriteReg(0x000D,0x080C);    Delay(50);
  LCD_WriteReg(0x000E,0x2B00);    Delay(50);
  LCD_WriteReg(0x001E,0x00B0);    Delay(50);
  LCD_WriteReg(0x0001,0x2b3F);    Delay(50);  //RGB
  LCD_WriteReg(0x0005,0x0000);    Delay(50);
  LCD_WriteReg(0x0006,0x0000);    Delay(50);
  LCD_WriteReg(0x0016,0xEF1C);    Delay(50);
  LCD_WriteReg(0x0017,0x0103);    Delay(50);
  LCD_WriteReg(0x000B,0x0000);    Delay(50);
  LCD_WriteReg(0x000F,0x0000);    Delay(50);  
  LCD_WriteReg(0x0041,0x0000);    Delay(50);
  LCD_WriteReg(0x0042,0x0000);    Delay(50);
  LCD_WriteReg(0x0048,0x0000);    Delay(50);
  LCD_WriteReg(0x0049,0x013F);    Delay(50);
  LCD_WriteReg(0x004A,0x0000);    Delay(50);
  LCD_WriteReg(0x004B,0x0000);    Delay(50);
  LCD_WriteReg(0x0044,0xEF00);    Delay(50);
  LCD_WriteReg(0x0045,0x0000);    Delay(50);
  LCD_WriteReg(0x0046,0x013F);    Delay(50);
  LCD_WriteReg(0x0030,0x0707);    Delay(50);
  LCD_WriteReg(0x0031,0x0204);    Delay(50);
  LCD_WriteReg(0x0032,0x0204);    Delay(50);
  LCD_WriteReg(0x0033,0x0502);    Delay(50);
  LCD_WriteReg(0x0034,0x0507);    Delay(50);
  LCD_WriteReg(0x0035,0x0204);    Delay(50);
  LCD_WriteReg(0x0036,0x0204);    Delay(50);
  LCD_WriteReg(0x0037,0x0502);    Delay(50);
  LCD_WriteReg(0x003A,0x0302);    Delay(50);
  LCD_WriteReg(0x002F,0x12BE);    Delay(50);           
  LCD_WriteReg(0x003B,0x0302);    Delay(50);
  LCD_WriteReg(0x0023,0x0000);    Delay(50);
  LCD_WriteReg(0x0024,0x0000);    Delay(50);
  LCD_WriteReg(0x0025,0x8000);    Delay(50);
  LCD_WriteReg(0x004f,0x0000);    Delay(50);
  LCD_WriteReg(0x004e,0x0000);    Delay(50);
}

M_B

 
LCD_WriteBMP();

iceriği nasıl.
Birde Resmi nasıl hexe cevirdiniz o kısımdaki ayarlarda sorun olmasın.
İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

yuc0

#6
void LCD_WriteBMP(uint8_t Xpos, uint16_t Ypos, uint8_t Height, uint16_t Width, uint8_t *bitmap)
{
  volatile uint32_t index;
  uint16_t *bitmap_ptr = (uint16_t *)bitmap;
  uint16_t i;
  uint32_t size;
  size=(Height * Width);
  LCD_SetDisplayWindow(Xpos, Ypos,Height, Width);

  LCD_WriteReg(LCD_REG_17, 0x6048);
 
  LCD_WriteRAM_Prepare();
 
  for(index = 0; index < size ; index++)
  {
	LCD_WriteRAM(*bitmap_ptr++);
		//for(i=0;i<2;i++);
  }
  LCD_WriteReg(LCD_REG_17, 0x6028);
  LCD_SetDisplayWindow(0, 0, 239, 319);
}


içerik bu hocam,resim'i image2lcd programından output file type c,horizan scan,16-bit true color,320 x 240,scan bottom to top,sağ alt tab'dan 16 bit color 5 6 5.C dosyasını cıktı olarak aldım const unsigned char olarak dosya verdi ben uint8_t olarak değiştirerek .h dosyası olarak kaydettim yanlış mı yaptım acaba. ???
not: LCD_WriteBMP fonksiyonunda bitmap 8bit olarak tanımlanmıs,fakat benim olusturdugum dosya 16bit ondan dolayı olabilir mi hocam ? bitmap 16bit için olan uygun kütüphane var mı sizde acaba?

yuc0

komutta biraz değişiklik yaptıktan sonra ortaya çıkan görüntü.Hala tam resmi elde ede
http://u1312.hizliresim.com/1j/b/vcpz6.jpg

pisayisi

Kullandığın bmp basma koduna uygun olarak 8 bitlik converter programını kullanarak denemelisin. Aşağıdaki programı kullanarak data dosyasını üret 8bpp seç ve koduna dahil et. Sorunun çözümlenmesi lazım...
Bitmap converter for Emwin...

http://rapidshare.com/share/432E17E129A6162BB2539666175B5D1A
Murat

yuc0

#9
teşekkür ediyorum inceliyorum,

mesaj birleştirme:: 10 Aralık 2013, 21:09:20

sorunum çözüldü,ilk önce bir resmi bmp formatına çevirdim daha sonra çevirdiğim resmi hex kodlarına döktüm
LCD_WriteBMP(239,139 ,100 ,100, (uint8_t *)gImage_images); kalın gösterdiğim yeri 8bitlik tanımlayarak sorunumu çözdüm,
tekrar teşekkürler M_B, ve pisayisi hocam.