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)
16 MIPS PIC18F46K22 ile 240*128 monochorm ekrana bir kaç dakika içinde çizdirmiştim. Buradaki sorun I2C iletişim olmalı.
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);
Video var mı hocam, hoşuma gitti :)
Ekrana çizdirmek 16Dk sürdüğü için Video çekmedim. Ekrana pixel pixel çiziyor. Telefonun hafızasını boşaltıp akşama çekerim
HAL lib kullandınız mı?
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)
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????
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);
I2C ve RCC dışında diğer tüm kütüphaneleriniz de Standart Periph Lib mi kullandınız? :)
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)
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.