STM32F10X Çalışmalarım

Başlatan Mucit23, 12 Mart 2012, 11:17:48

Mucit23

#135
yok hocam çözüm olmadı malesef

Anlam veremiyorum.

muhittin_kaplan

mucit 107 nin hangi serisini kullanıyorsun ?

Mucit23

STM32F107VCT6

Kendimi Annesi istediği oyuncağı almadığı için ağlayan çoçuklar gibi hissediyorum  :-X

muhittin_kaplan

iki image ı nasıl derliyorki

240x320=76800 pixel

sen bu her pixelin renk kodu için 2byte saklıyorsun ROM a

76800*2=153600 byte ve 150kb eder

senin makine 256kb rom a sahip

bu iki img ı 300kb ediyor zaten
Atladığım Nokta mı Var ?

bocek

startup.s dosyasında Stack_Size'ı arttırsan?

1 ya da 0. işte 'bit'ün mesele..

Mucit23

Bir farklı resim basayım dedim. Bilgisayarın bir başka yerinde yine 320x240 çözünürlüğe sahip bir resim bastım. Yine iki adet 320x240 çözünürlüğe sahip resim olmuş oluyor. İkisini bastırabiliyorum fakat şöyle bir problem var.

   GLCD_Bitmap(0,0,320,240,image_1);
    while(1)
    {
     
    }
   GLCD_Bitmap(0,0,320,240,Ana_Res);

Şöyle bir kod ekledim. Bu şekilde image_1 basılıyor. ilk olarak İmage_1 Yerine Ana_Res yazsam oda basılıyor.

Programın akışına göre program while içerisinden kurtulsa hemen Ekrana Ana_Res basacak.
öyle olmuyor malesef.

While içerisinden kurtulmak için break deyimini yazarsam program aynı hataya düşüyor.

Muhittin Hocam bende anlam veremiyorum. İki resim zaten program boyutunu aşıyor. Ama buna rağmen derlenip işlemciye yükleniyor.
Sanırım iki resim boyutu hafızayı aştığı için keil resimlere bakıp hangisi kullanılıyorsa onu derliyor diğerini derleyip işlemciye atmıyor. İkisinide kullanmak isersem hafızan yeterli değil diyor.

Başkada bir açıklama bulamıyorum ben



bocek

Demek ki derleyici while(1)'den sonrasını kaale almıyor dolayısıyla da hata vermiyor. Ama while'ı atlayacak bir komut geldiğinde hata veriyor.
Zaten hata mesajındaki
"L6407E: Sections of aggregate size 0x25800 bytes could not fit into .ANY selector(s)."
0x25800 byte Muhittin Hoca'nın hesabındaki 153600 rakamına denk geliyor ki mesajın anlamı: "senin resimler'i bir yere sığdıramıyorum" demek oluyor.
O zaman yapacağın şey resimleri 8 bpp'ye düşürmek. Yani bir piksel 8-bit olacak şekilde. Ya da jpg gibi bir formatta çalışmak.
1 ya da 0. işte 'bit'ün mesele..

Mucit23

Anladım Hocam

8bpp için hangi değişiklikleri yapmam gerekir? Resim bahsettiğiniz formata çevirmek kolay.

İşin yazılım kısmında kullandığım lcd ye resim formatını nasıl bildireceğim.

muhittin_kaplan

Mucit Debug damı yapıyorsun programı Yüklüyormusun. Yani Demek istediğim DEBUG IN RAM da çalışma durumuna dikkat et.

Mucit23

Yok hocam direk derle yükle gör şeklinde çalışıyorum.
Debug da da deniyeyim.

Akşam üzeri birde 8bpp  resim basmayı deneyeceğim. Oldu oldu olmazsa bırakırım uğraşmayı.

keilin MCBSTM32C için yazılmış örnek kodları içerisinde bitmap basmak için şöyle bir kod var.

void GLCD_Bitmap (unsigned int x, unsigned int y, unsigned int w, unsigned int h, unsigned char *bitmap) {
  int i, j;
  unsigned short *bitmap_ptr = (unsigned short *)bitmap;

  GLCD_SetWindow (x, y, w, h);

  wr_cmd(0x22);
  wr_dat_start();
  for (i = (h-1)*w; i > -1; i -= w) {
    for (j = 0; j < w; j++) {
      wr_dat_only (bitmap_ptr[i+j]);
    }
  }
  wr_dat_stop();
}


Ben bu kodlar üzerinde oynama yaparak kendi bitmap basma fonksiyomu hazırlamıştım

Bu kodlar ile 8bpp resim basılıyor.

Bu kodun çalışma mantığı nasıl kullanırken hep şöyle kullanılmış

GLCD_Bitmap (  0,   0, 320,  69, Bg_16bpp_t+70);

Neden resime 70 eklenmiş?


muhittin_kaplan

img daki başlangıcı yakalamak içindir.

Mucit23

#146
Bir Düzgün görüntü alamadım.

resim 8bpp formatına çevirdim. yine 320x240 çözünürlüğe sahip.

Elimde ki kodlar şu şekilde

/****************************************************************/
/* FUJITSU MICROELECTRONICS EUROPE  -  BITMAP CONVERTER (V2.20) */
/* BITMAP FILE "demomap1"                                       */
/* BITMAP SIZE : X=320 Y=240 PIXEL                              */
/* CREATED 28.03.2013 15:47:17                                  */
/* OUTPUT FORMAT : CREMSON/CORAL/CARMINE/LIME 8BPP              */
/****************************************************************/
const unsigned char demomap1[76800] = { 
0xE7,0x58,0x58,0x58,0x58,0x55,0x55,0x55,0x55,0x58,
0x58,0x58,0x58,0xEC,0xE4,0xE9,0xE4,0xE7,0xE7,0xE7,
0xE4,0xE4,0xEC,0xE4,0xEC,0xE4,0xE4,0xE7,0xE7,0xE4,
0x00,0x00,0xFF,0x00,0xFF,0x00,0x00,0xCE,0xF7,0xF1,
0x84,0x00,0xCE,0xFC,0xC6,0xF9,0x00,0x10,0x00,0x10,
0x00,0x00,0x10,0xF7,0xFF,0x00,0x00,0xFF,0xFF,0xF9,
0xBD,0x8C,0x63,0x00,0x8C,0xF9,0xFF,0x00,0x00,0xFF,
0xC6,0xF9,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0xFF,
0xFF,0x00,0x00,0xFF,0xFF,0xF9,0xFF,0x00,0x00,0xFF,
0xB5,0xEF,0x00,0x00,0xFF,0xE1,0xCE,0x00,0xAF,0xE7,
0x00,0x00,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0xF9,0xFF,
0xF7,0xFF,0x00,0x00,0xFF,0xFF,0xF9,0x00,0x00,0xFF,
0xFF,0xF9,0xFF,0xF7,0xFF,0xFF,0xF9,0xFF,0xFF,0xF7,
0xFF,0xF9,0xFF,0xFC,0xF9,0xFF,0xC6,0xC0,0xFC,0xFF,
0xAA,0xAA,0xAA,0xF9,0xF9,0xFF,0xF9,0xF9,0xC5,0xC6,
0xC0,0xFF,0xF9,0xFF,0xFF,0xF7,0xFF,0xFF,0xF9,0xFF,
0xFF,0xF9,0xFF,0xF9,0xFC,0xFF,0xF9,0xFF,0xFF,0xF9,
0xFF,0xFF,0xF7,0xFF,0xFF,0xF9,0xFF,0xFF,0xF9,0xFF,
0xF9,0xFC,0xFF,0xF9,0xFF,0x58,0x58,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0xF1,0xFF,0x58,
0x58,0xC6,0xC8,0xFF,0xFF,0xF9,0xFF,0xC6,0xC0,0xC6,
0xC5,0xC6,0xC0,0xC6,0xC6,0xA4,0xAD,0xA4,0xA4,0xA4,
0xA4,0xA4,0xA4,0xA4,0xA4,0xAD,0xA4,0xAD,0xA4,0xA4,
0xAD,0xC0,0xC6,0xC6,0xFF,0xF9,0xC6,0xC6,0xA4,0xA4,
0xA4,0xAD,0xA4,0xA4,0xA4,0xA4,0xA4,0xA4,0xA4,0xA4,
};


kodların hepsini buraya eklemedim.

Ben bu kod yapısına göre nasıl bir algooritma kurayımki resim düzgün bir şekilde basılsın. Şuanda bir önceki mesajımda verdiğim Bitmap fonksiyonunu kullanıyorum fakat her seferinde yarım yamalak saçma sapan bozuk görüntü alıyorum

muhittin_kaplan

img ı çevirdin ama ekran hala 16bit beklemesin

Mucit23

#148
Hocam öyle sanırım.

Ekranda berbat bir şekilde resim çıkıyor ama tam değil. Ekranın sadece üst yarısına 2 adet resim basılıyor.

basit birde döngü kurdum..
void GLCD_Bitmap_8bpp (unsigned int x, unsigned int y, unsigned int w, unsigned int h, unsigned char *bitmap) {
  int i;//, j;
	int size= (w*h);
  unsigned short *bitmap_ptr = (unsigned short *)bitmap;
  GLCD_SetWindow (x, y, w, h);

  wr_cmd(0x22);
  wr_dat_start();
  for (i = 0;i<size;i++) {
      wr_dat_only (bitmap_ptr[i]);
  }
  wr_dat_stop();
}

Bu arada bu şekilde iki resimde derlenip çalışıtırılabiliyor.  hafıza sorunu yok artık. Resmi düzgün bir şekilde bassam mükemmel olacak

Yalnız keilin örnek programlarını aynen kullanıyorum. LCD sürücü çipi ayarlarıyla hiç oynamadım.

muhittin_kaplan

geçici bir çözüm

datayı göndermeden MSB olarak 0x00 koy

yani

int ZData;

for (i = 0;i<size;i++) {
    ZData=0x00;
    ZData=ZData<<8;
     ZData |=bitmap_ptr;
   wr_dat_only (Zdata);
  }
Olarak Devamlı 16bit gönderirsin tabi başında 0x00 olur.