STM32F4 DCMI & OV9655 Kamera Uygulaması -
Pazartesi, 17 Mar 2014	Ferhat YOL	yorum ekle yorumlara git
Kamera modülünün üzerinde Reset ve PowerDown pinleri bulunmakta. Bu pinler defaul olarak modülün üzerindeki jumper’lar ile default konumlarına ayarlanmışlar. Örneğin Kamera modülünün resetlenmesi için Reset pinin Lojik 0’a çekilmesi, Kameranın uyku moduna girmesi içinse PowerDown pininin lojik 1’e çekilmesi gerekiyor. Kameranın normal olarak çalışması için bu işlemlerin tam tersi yapılması gerekir. İşte kameranın bulunduğu PCB’nin üzerinde bu işi jumper’lar ile halletmişler.
Resimde gördüğünüz JP1, JP2, JP3 ve JP4 bu işe yarıyor. Eğer JP1 yerine JP2, JP3 Yerinede JP4 aktif olsaydı kamera modülündeki PowerDown ve Reset pini dışarıya kullanıcıya aktarılmış olur. Ben ilk başlarda kamerayı çalıştırmak için bu pinleri STM32F407’ye bağlayıp kameranın resetlenme işlemlerini kontrol etmiştim. Şuanda bu pinlerle oynamaya gerek yok.
OV9655’in datasheetinden XCLK için min 10Mhz, Max 48Mhz yazıyor. İdeal frekans 24Mhz diyor. Bu yüzden bende 24Mhz clock uyguladım.
Açıkçası STM32F4’ün Clock ayarlarından biraz bahsetmek istiyorum. Biraz kafa karıştırıcı olabiliyor.
İşlemci içerisinde bulunan PLL’lerin girişine 1-2 Mhz arası clock uygulanması gerekiyor. Discovery üzerinde STM32F407’ye 8Mhz kristal bağlı. İşlemcinin Saat kaynağını HSE olarak ayarlayınca sistem 8Mhz kristal üzerinden beslenir. PLL lere max 2Mhz girebiliyorduk. Bu yüzden bu sinyali PLL_M Bölücüsüyle bölmek gerekiyor. Biz PLL_M bölücüsünü 8 yaparak HSE frekansının 8 bölünmesini sağladık. Dolayısıyla PLL’lere 1Mhz clock uygulamış olduk. Artık PLL’ler çalışabilir.
İşlemcimizi biz 168Mhz de çalıştırıyoruz. Fakat PLL ile direk bu sinyali elde edemiyoruz çünkü PLL çarpan değeri 192 ile 432Mhz arası bir değer alıyor. 1Mhz giriş frekansından 168Mhz elde etmenin tek bir yolu var. Biz 1Mhz sinyali 336Mhz’e çıkartıp 2’ye bölersek 168Mhz elde etmiş oluruz. Bu yüzden PLL çarpan değerini yani PLL_N değerini 336 yapıyoruz. PLL artık 1Mhz clock sinyalini 336Mhz çıkardı. Şimdi Bu sinyali 2’ye bölerek yain PLL_P değerini 2 yaparak 168Mhz SysClk frekansını elde ederiz. İşlemcideki Bütün donanımlar(USB hariç) bu SysClk üzerinden beslenir. Ayrıca USB donanımının çalışması için gerekli olan 48Mhz sinyali PLL_Q bölücüsünü 7 yaparak sağlıyoruz. 336Mhz 7’ye bölünüp 48Mhz olarak USB birimine aktarılır.
DCMI_DR_ADDRESS = 0x50050028
FSMC_LCD_ADDRESS = 0x60020000
Ben bu uygulamada SSD1289 çipsetli bir LCD kullandım. Normalde sistemin çalışması şöyledir. Kameraya start vermeden önce LCD ye 320 ye 240 pixel boyutunda bir pencere açarız. Sonra kameraya start veririz ve DCMI DMA ve FSMC görüntü datalarını alıp ekrana taşır. Bizde kameradaki görüntüyü LCD’de görürüz. Fakat bu SSD1289’a beyaz pixel geldiği zaman bazende olsa ekranı karışabiliyor. Yeni bir görüntü geldiğinde ekranın toparlanması için bende DCMI_Frame kesmesini aktif ettim. Dolayısıyla ekran tümüyle doldurulduğunda kesme oluşuyor. Bende gidip kesmede tekrar 320 ye 240 pixel boyutunda pencere açıyorum. Bu durumda Ekran counter’i sıfırlandığı için yeni görüntü geldiğinde ekran toparlanmış oluyor. İşlemci birtek bu işle uğraşıyor. LCD de donma veya beyaz pixel problemleri yoksa kesmeyede gerek yoktur. Zaten kesme olmasa 0 iş gücüyle görüntüyü LCD ye aktarmış oluruz
Proje Dosyalarını indirmek için Bu linki kullanabilirsiniz.
Pazar, 30 Mar 2014 zamanında 12:24	| #1
Benim de benzer bir çalışmam var ov7670 ile.
Kaynak kodları paylaşmanız mümkün mü?
Pazar, 30 Mar 2014 zamanında 23:26	| #2
Yazıyı baştan sona okudunmu? Proje dosyaları vermişimya!
Perşembe, 03 Nis 2014 zamanında 10:52	| #3
hocam eline sağlık çok güzel bir uygulama olmuş en kısa zamanda deniyeceğim
about your STM32 application
Perşembe, 02 Eki 2014 zamanında 22:33	| #4
Cuma, 03 Eki 2014 zamanında 23:11	| #5
peki kameradan görüntüyü aldıktan sonra görüntüyü işleme olayları nasıl oluyor
Pazartesi, 06 Eki 2014 zamanında 21:13	| #6
Bu uygulamada görüntü işleme yapılmıyor. Kameradan gelen Görüntü dataları doğrudan LCD’ye gönderiliyor. Bu donanım lada yapmak zor zaten. Görüntü işleme için ekstra rame ihtiyaç var.
Pazartesi, 06 Eki 2014 zamanında 21:18	| #7
about your STM32 application :
Cuma, 27 Mar 2015 zamanında 16:05	| #8
Hocam dıjıtal çıkışlar her clock ta pikcel degerinimi döndürüyor.Örnek vermem gerekirse 100 clock darbesinde 100 pixcel degeri gibimi calısıyor.
Cumartesi, 28 Mar 2015 zamanında 00:19	| #9
Tam olarak öyle değil. 565 formatını kullandığımız için 16 bitlik pixel renk değerini 2 clock’da gönderiyor.
Cumartesi, 13 Haz 2015 zamanında 09:42	| #10
Hi, I really enjoy your project. Did you show the image captured from OV9665 on PC. I tried to do this. Can you help me?
Pazartesi, 15 Haz 2015 zamanında 14:39	| #11
I’m sorry, I didn’t work on this issue.
Perşembe, 15 Eki 2015 zamanında 14:08	| #12
What kind of compiler u used for this?
I will pay you to make me something similar
Çarşamba, 09 Ara 2015 zamanında 16:26	| #13
thank you for every things , i want to open the project , so , what is the name of program that you use for developpement .
Perşembe, 10 Ara 2015 zamanında 19:58	| #14
You have to use “Keil MDK”
Pazar, 16 Nis 2017 zamanında 16:12	| #15
sizin uygulamanızı çok beğendim şayet bunu sadece görüntü alması için nasıl konfigüre edebiliriz. video çekimi değil sadece image çekimi için nasıl tekrar düzenleyebiliriz acaba.
ilginize teşekkür ederim, iyi çalışmalar…
Pic16F628 & ADXL345 Accelerometer Uygulaması Pic16F628 ile Açı ölçer