STM32F429 Discovery STM32F429 Discovery ile Dijital Kamera By Konuk Yazar Posted on 13 Mart 2015 8 min read 4 0 4,958 Paylaş ! Facebook Paylaş ! Twitter Paylaş ! Google+ Paylaş ! Reddit Paylaş ! Pinterest Paylaş ! Linkedin Paylaş ! Tumblr Merhaba arkadaşlar, Bu yazımda size vc0706 prokokolü ile jpeg kamera kullanımından bahsedeceğim. vc0706 protokolü kamera registerlarını okumak ve kamerayı uygun ayarlarda çalıştırmak için geliştirilmiş bir protokol. kullandığımız kamera: Kamerayı aldığımızda,arka tarafında max232 olduğunu gördük. Bu bizim için büyük bir problemdir. Bu şekilde işlemciyle haberleştiremeyiz. Havalı havya ile sökmeniz yada sötkürmeniz lazım. Kalem havya ile denemeyin.Başka yerlere zarar verebilirsiniz.Ayrıca aşırı ısınması kamera sensörüne zarar verebilir. Dikkatli olun. Söküm işlemi bittikten sonra R15 ve R16 direç yerlerini kısa devre ediyoruz. Artık kullanıma hazır.Resmi kaydetmek için sd card bağlantılarını yapmamız lazım. 1 bit olarak programlayacağız şimdilik. Baglantılarıda yaptıktan sonra birazda kameradan bahsedelim.Kameramızın üzerinde dijital sinyal işleme birimi mevcuttur. Aynı zamanda eepromu da vardır. Biz reset kodunu gönderdigimizde dsp akışı başlatır. Durdurma kodunu gönderdigimizde akış durur ve o anki resim datasını jpeg olarak paket paket eeproma kayıt eder. jpeg olmasının avantajı resmin boyutu 200 kb lerden 12 kb lere kadar düşer. Çünkü jpeg bir sıkıştırma formatıdır. Bu bize işlemlerde hız kazandırır.Dezavantajı ise bu resim ile görüntü işleme veya lcd ekranda görüntüleme yapacaksak, zigzag jpeg decoder tarzı algoritmalarla bitmapa çevirmemiz lazım.Jpeg kodlar satır satır gelir ve her satırda 32 data vardır. FF D8 ile başlar , FF D9 ile biter.İlk 20 satır hatasız gelmesi lazım.Burada yapacagınız herhengibir yazılımsal çakışma veye interrup hatası görüntünün hasarlı olarak açılmamasına sebeb olcaktır.İlk 20 satırı düzdün olarak okuyup jpeg olarak kaydederseniz alacagınız görüntü şu şekildedir: Kameranın dış dünyaya açılan penceresi usartır.Kamera üzerinde 6 pin Bulunur. 2 si beleme,2 si usart(Rx,TX) ve son ikisi de analog video çıkışıdır.Burada dikkat etmemiz gereken verileri ardı ardına gönderirken aradaki gecikmeyi iyi ayarlamalıyız.Ayrıca usart kesmese kontrolleri yerinde olmalıdır. [php] if(UB_Fatfs_CheckMedia(MMC_0)==FATFS_OK) { if(UB_Fatfs_Mount(MMC_0)==FATFS_OK) { if(UB_Fatfs_OpenFile(&myFile, "0:/r.jpg", F_WR_NEW)==FATFS_OK) { UB_Fatfs_CloseFile(&myFile); } UB_Fatfs_UnMount(MMC_0); } }[/php] yukarıdaki kod parçasında ilk olarak sd carda boş bir jpeg dosyası açıyoruz. [php] USART_ITConfig(USART1, USART_IT_RXNE, DISABLE); USART_SendData(USART1,(uint16_t)0x56); Delay(500); USART_SendData(USART1,(uint16_t)0x00); Delay(500); USART_SendData(USART1,(uint16_t)0x26); Delay(500); USART_SendData(USART1,(uint16_t)0x00); Delay(900000); [/php] daha sonra kameraya reset kodlarını hexadecimal olarak gönderiyoruz. sondaki gecikme süresi biraz uzun. çünkü resetten sonra kamera info su geliyorusart kesmesini kapattık.Resetten sonra gelen veriler kesmeye girmesin diye. [php] USART_SendData(USART1,(uint16_t)0x56); Delay(500); USART_SendData(USART1,(uint16_t)0x00); Delay(500); USART_SendData(USART1,(uint16_t)0x36); Delay(500); USART_SendData(USART1,(uint16_t)0x01); Delay(500); USART_SendData(USART1,(uint16_t)0x00); Delay(900000); USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); [/php] akışı durduruyoruz. kesme aktif. [php] while(EndFlag==0){ if((image_buf[count-1]==0xFF)&&(image_buf[count]==0xD9)){EndFlag=1;flag=3;} if(flag==0){ MH=a/0x100; ML=a%0x100; USART_SendData(USART1,(uint16_t)0x56); Delay(500); USART_SendData(USART1,(uint16_t)0x00); Delay(500); USART_SendData(USART1,(uint16_t)0x32); Delay(500); USART_SendData(USART1,(uint16_t)0x0c); Delay(500); USART_SendData(USART1,(uint16_t)0x00); Delay(500); USART_SendData(USART1,(uint16_t)0x0a); Delay(500); USART_SendData(USART1,(uint16_t)0x00); Delay(500); USART_SendData(USART1,(uint16_t)0x00); Delay(500); USART_SendData(USART1,(uint16_t)MH); Delay(500); USART_SendData(USART1,(uint16_t)ML); Delay(500); USART_SendData(USART1,(uint16_t)0x00); Delay(500); USART_SendData(USART1,(uint16_t)0x00); Delay(500); USART_SendData(USART1,(uint16_t)0x00); Delay(500); USART_SendData(USART1,(uint16_t)0x20); Delay(500); USART_SendData(USART1,(uint16_t)0x00); Delay(500); USART_SendData(USART1,(uint16_t)0x0a); a+=0x20; flag=1;count=0;say++;Delay(70000); if(say==50){Delay(130000);say=0;} } [/php] bu parçada ise eepromdan dataları okuyoruz. biz bu kodları her gönderişimizde bize bir 32 data gönderiyor. [php] if(UB_Fatfs_CheckMedia(MMC_0)==FATFS_OK) { if(UB_Fatfs_Mount(MMC_0)==FATFS_OK) { if(UB_Fatfs_OpenFile(&myFile, "0:/r.jpg", F_WR)==FATFS_OK) { UB_Fatfs_WriteBlock(&myFile,image_save,32,save_cnt); UB_Fatfs_CloseFile(&myFile); } UB_Fatfs_UnMount(MMC_0); } } [/php] Son olarakda her 32 lik veri geldiginde hemen sd carda yazıyoruz. sonuç: Kaynak dosyalara buradan ulaşabilirsiniz.