STM32 ile CMOS Kameraya 54mhz Frekans Sağlama Sorunu

Başlatan canbili, 06 Ağustos 2011, 23:48:47

canbili

STM32F103RBT kitim ile internetten getirttiğim kamera modulüm arasına bağlantı kuracaktım her pinin hangi pine denk gelmesi gerektiğine karar verdim ancak kamera modülüne 54Mhz'lik bir kaynak sinyali vermem gerekiyormuş (30 fps için en az 15 fps görüntü almak zorundayım ve frekansla direk doğru orantılı, 30 fpsten yukarısı için tasarlanmamış kart.). bunu nasıl sağlicam nereye bağlicam bulamadım.

Yardımcı olacak arkadaşa şimdiden teşekkür ediyorum :)

ErsinErce

direk MCO çıkışından alabilirsin, STM32_Init.c içinde hangi frekans kanallarını seçebileceğini görebilirsin,
data alımı için DMA yapısını araştır, diğer türlü işin zor gibi ;)

Klein

#2
Doğrudan CPU'dan almak zor. İmkansız diyeceğim ama datasheet'i incelemediğim için diyemiyorum. Diğer işlemcilerden çok farklı bir yapıya sahip olduğunu da sanmıyorum.

PWM kullanırsak , 1 bit bile yapsak 36MHz alabiliriz.  Timer frekans çıkışı kullansak , Clock frekansını 2 ye bölsek 36MHz eder ki bu değer işini görüyorsa sorun yok. İlla 54MHz olacak dersen, başka bir kaynağa bakman gerekecek.


ekleme:
Datasheet'e kısaca göz attım.  Şöyle bir çözüm olabilir.
PLL osilatör frekansını 1,2,3, veya 4 ile çarpabiliyor.  eğer 13.5MHz kristal kullanıp (tabi bulunabilirse) , PLL x4 yaparsan 54MHZ Sistem saati elde edebiliyorsun.
Timer çıkışının bölücüsünü 1 yaparsan bu frekansı alabiliyorsun.

Yukarıdaki imkansız diye yazdığım kısım 72MHz içindi. Eğer 72MHz sistem saati kullanacaksan , gördüğüm kadarıyla mümkün değil.

ErsinErce

MCO çıkışı PA8 e bağlıdır ve seçilebilecek osilatörler alt kısımda mevcuttur;


SpeedyX

Merhaba, ben 96mhz lik ARM ile kamera chipini 9mhz de sürerek anca veri alımını yetiştirebildim, onu da fiq ve asm kullanarak yaptım. DMA vs ile direkt ram e depolayamıyorsan yapmaya çalıştığın şey imkansız! 54Mhz üretmek sorun olmaz ama senin daha farklı problemlerin var.

canbili

DMA ile de alınabiliyor sanırım;
bu konuyu bayağı incelemiştim bunun mümkün olduğuna dair yazılar var datasheet'inde filan ama nasıl yapabileceğimi anlayamamıştım pes etmiştim sonunda :) en azından bir şekilde alabiliyordum ama nasıl clock sinyali göndereceğim konusunda fikrim yoktu..

Modül 8 bitlik paralel veriyolu kullanıyor her sonraki byte'ta, satırda ve karede ayrı 3 kanaldan tetikleme sinyali gönderiyor
Eğer ki DMA'nın her byte sinyalinde otomatikman seçilmiş pinlerdeki değerleri kaydetmesini sağlayabilirsem bu hem işlemcimde büyük bir hafiflik sağlayacak hem de bunu öğrenmem başka çalışmalarda da işe yarayabilir

Görüntü aktarımını YCbCr (6:5:6) formatında alıp sadece Y verisini kullanarak siyah beyaz görüntü sağlicam böylece boyut problemi çözülecek
Gerekirse veriyi seri yolla birden fazla kanal kullanarak başka bir işlemciye aktarır orda yaparım görüntü işleme kısmını tek işlemci ile yapamıyorsam, bir tane de LPC1768 vardı; onu kullanmak istemiyordum ama (üzerinde header olmadığı için problem olacaktı)

Sinyal gönderme kısmını incelicem kartımın başına geçince, fikirleriniz için teşekkür ederim :) sonuca ulaşana kadar hepsini denicem
burdan sonucu belirtirim :)

Saygılar . .

canbili

Datasheet'i biraz kurcaladım :)

Sinyal çıkışı olarak kolay bir şekilde SDIO donanımına ait clock çıkışını kullanabileceğime vardım;

Şu an SD/MMC kartlarda kullanılan haberleşme sistemini inceliyorum ve bu işlemci 8li paralel SD/MMC veri yolu destekliyormuş ayrıca;

The clock frequency can vary between 0 MHz and 20 MHz (for a MultiMediaCard V3.31), between 0 and 48 MHz for a MultiMediaCard V4.0/4.2, or between 0 and 25 MHz (for an SD/SD I/O card).

Bir MultiMediaCard V4.0/4.2 donanımını taklit ederek veya hiç etmeden, sinyalimi de sağlayabilirim (48Mhz'e kadar) anladığım kadarıyla birazcık zorlarsam veri iletimimi de bu yolla çözebilirim.

SD Kart kullanmam gerekirse de SPI ile sağlicam ara bağlantıyı

ve direk olarak başka herhangi bir şeyle uğraşmadan piksel piksel gelen görüntüyü klasik c işlemleriyle işlicem :)