Picproje Elektronik Sitesi

PICPROJE PROGRAMLAMA DERSLERİ => STM32 Örnekleri => Konuyu başlatan: MC_Skywalker - 15 Temmuz 2017, 11:29:02

Başlık: HAL lib I2C OLED LCD ve Mandelbrot set
Gönderen: MC_Skywalker - 15 Temmuz 2017, 11:29:02
48MHz lik 32bit MCU'e Mendelbrot set çizdirseniz ne olur? :) :lol:



// Mandelbrot set çizidrmece
// MCU ineyen nameleri söylerken. :)
int height =64;
int width =128;
int max =1000;
for (int row = 0; row < height; row++)
{
for (int col = 0; col < width; col++)
{
double c_re = (col - width/2.0)*4.0/width;
double c_im = (row - height/2.0)*4.0/width;
double x = 0, y = 0;
int iteration = 0;
while (x*x+y*y <= 4 && iteration < max) {
            double x_new = x*x - y*y + c_re;
            y = 2*x*y + c_im;
            x = x_new;
            iteration++;
        }
        if (iteration < max)
{
ssd1306_DrawPixel(col, row, White);
//ssd1306_UpdateScreen();
}
else
{
ssd1306_DrawPixel(col, row, Black);
//ssd1306_UpdateScreen();
}
ssd1306_UpdateScreen();
    }
}


optimizasyon, DMA vb. yok.

(http://i.hizliresim.com/kW6OJq.jpg)
Başlık: Ynt: HAL lib I2C OLED LCD ve Mandelbrot set
Gönderen: kantirici - 15 Temmuz 2017, 12:50:04
16 MIPS PIC18F46K22 ile 240*128 monochorm ekrana bir kaç dakika içinde çizdirmiştim. Buradaki sorun I2C iletişim olmalı.
Başlık: Ynt: HAL lib I2C OLED LCD ve Mandelbrot set
Gönderen: MC_Skywalker - 15 Temmuz 2017, 13:20:27
Tam emindeğilim. SSD1306 için basit bir kütüpane kullandım.  Ayrıca HAL' da şikinlik veriyor olabilir.
Amacım primitives/pligon vb. cizdirmek. Eski Demo scene'lerdeki gibi.

ssd1306_DrawPixel(x, y, color);
Başlık: Ynt: HAL lib I2C OLED LCD ve Mandelbrot set
Gönderen: Elektroemre - 15 Temmuz 2017, 13:21:58
Video var mı hocam, hoşuma gitti  :)
Başlık: Ynt: HAL lib I2C OLED LCD ve Mandelbrot set
Gönderen: MC_Skywalker - 15 Temmuz 2017, 13:25:51
Ekrana çizdirmek 16Dk sürdüğü için Video çekmedim. Ekrana pixel pixel çiziyor. Telefonun hafızasını boşaltıp akşama çekerim
Başlık: Ynt: HAL lib I2C OLED LCD ve Mandelbrot set
Gönderen: E-x8 - 15 Temmuz 2017, 13:44:50
HAL lib kullandınız mı?
Başlık: Ynt: HAL lib I2C OLED LCD ve Mandelbrot set
Gönderen: MC_Skywalker - 15 Temmuz 2017, 13:57:24
evet CubeMx ile  projeyi oluşturdum. IIC ve RCC ye ayar verdim. Diğer kısımlara dokunmadım.

SSD1306 için github da rastladığım bir driver kullandım. Keil çıktı optimizasyonu 3.


Hız için önce ram'e frame buffer yapıp sonrada çizdirmek gerek te o konuda cahilim :)


Bir daire ve bir yıldız çizmek ~10sn sürüyor.
(http://i.hizliresim.com/JlD7Ej.gif)
Başlık: Ynt: HAL lib I2C OLED LCD ve Mandelbrot set
Gönderen: Elektroemre - 15 Temmuz 2017, 13:58:16
Alıntı yapılan: MC_Skywalker - 15 Temmuz 2017, 13:25:51
Ekrana çizdirmek 16Dk sürdüğü için Video çekmedim. Ekrana pixel pixel çiziyor. Telefonun hafızasını boşaltıp akşama çekerim

1 frame mi 16 dakika????
Başlık: Ynt: HAL lib I2C OLED LCD ve Mandelbrot set
Gönderen: MC_Skywalker - 15 Temmuz 2017, 14:01:25
Alıntı yapılan: Elektroemre - 15 Temmuz 2017, 13:58:16
1 frame mi 16 dakika? ???

Evet tek frame.

Bu arada PC'nizin hızını görmek için Octave ve ya Matlabda bu seti çzidirin. :)

Octave için


function mandel_img = mandel ()
  %% Parameters
  w = [-2.5 1.5]; % Domain
  h = [-1.5 1.5]; % Range
  s = 0.005;      % Step size
  it = 64;        % Iteration depth

  %% Prepare the complex plane
  [wa ha] = meshgrid (w(1):s:w(2), h(1):s:h(2));
  complex_plane = wa + ha * i;

  %% Preallocate image
  mandel_img = zeros( length(h(1):s:h(2)), length(w(1):s:w(2)));

  %% Generate mandelbrot
  for wi = 1:size(mandel_img, 2)
    for hi = 1:size(mandel_img, 1)

      z = 0;
      k = 0;
      while k < it && abs(z) < 2
        z = z^2 + complex_plane (hi, wi);
        k = k + 1;
      end
      mandel_img (hi, wi) = k - 1;

    end
    %% Display progress
    waitbar (wi/size(mandel_img, 2));
  end
end


çıkıtıyı görmek için


m=mendel();
imshow(m);
Başlık: Ynt: HAL lib I2C OLED LCD ve Mandelbrot set
Gönderen: E-x8 - 15 Temmuz 2017, 14:18:24
I2C ve RCC dışında diğer tüm kütüphaneleriniz de Standart Periph Lib mi kullandınız? :)
Başlık: Ynt: HAL lib I2C OLED LCD ve Mandelbrot set
Gönderen: MC_Skywalker - 15 Temmuz 2017, 21:58:38
HAL lib ile I2C TX pini için DMA aktif hale getirdim ve iterasyonu 64'e düşürdüm 14Dk sürdü çizim

video yükleniyor.

https://youtu.be/YHuHMY254Z4 (https://youtu.be/YHuHMY254Z4)
Başlık: Ynt: HAL lib I2C OLED LCD ve Mandelbrot set
Gönderen: MC_Skywalker - 17 Temmuz 2017, 18:26:35
Son durum kodu mbed lpc1768 işlemciye taşıdım. Adafruit in SSD1306 lib kullanarak deneme yaptım 3 dk 50sn sürdü 1 frame çizdirmek.