Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

Stm32f10xx & OV7670 & Tft

Başlatan yldzelektronik, 27 Mayıs 2013, 03:55:03

yldzelektronik

http://yadi.sk/d/zYw2edg0JtURu

Buradaki kodlarda hard i2c mi kullanılıyor.Bana mı öyle geliyor?
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

Mucit23

Hocam bende de birçok kod var. Birçoğunda hard i2c kullanılıyor.  İşte anlamadığım olayda bu. Madem SCCB ile I2C arasında farklılıklar var nasıl oluyor hard I2C kullanıyorlar. 
Gerçi aradaki farkı bilmeden bu soruyu sormak uygun olmaz. Ben yarın bunu araştıracağım.
Belkide bu fark yüzünden kameradan cevap alamıyorum.  Çünkü Philips in manual'ine bakarak yazdığım low level I2C kodları Ds1307 ile çalışıyor. Yani çalışıyor dediğim kendi device adresine ack gönderiyor. Dolayısıyla yazdığım kodların I2C ye uyduğundan eminim. Arada mutlaka fark olmalı.  Yoksa çalışması gerek

Mucit23

Buradaki adamda benim gibi dert yakınıyor.
http://thecodeartist.blogspot.com.tr/2012/04/omnivison-ov3640-i2c-sccb.html

Son kısımları okumanızı tavsiye ederim.

Mucit23

http://www.rpg.fi/desaster/blog/2012/05/07/ov7670-camera-sensor-success/
Şurada bir yazı okudum. Kameranın XCLK girişinden 10Mhz sinyal uyguluyor.

İncelediğim hiçbir uygulamada böyle birşey görmemiştim. Kamera içerisindeki DSP nin kendi osilatörü yokmu yani? Ben dışarıdan clock uygulamasam çalışmayacakmı? 

muhendisbey

O linkteki kamera jpg çıkışlı kamera. Yani doğrudan pinlerden jpg görüntü alıyorsunuz.
Kamera alırken aslında fifolu almak daha mantıklı yada kamerayla birlikte harici fifo almak.
Zulmü alkışlayamam, zalimi asla sevemem; Gelenin keyfi için geçmişe kalkıp sövemem.

Mucit23

Hocam fifonun amacı farklı. Daha öncede söyledim ben dcmi kullanacağım için fifoya ihtiyacım yok.

Elimde hem ov9655 hemde ov7670 var. İkiside yazılımla jpeg formatında çıkıi verecek şekilde ayarlanabiliyor.

OV7670 linktekinin aynısı. Zaten piyasada fazla modül çeşitliliği yok. Ama genelde ov7670 kullanıldığı için OV9655 i şimdilik kenera bıraktım. I2C ile iletişim kurana kadarda bakmam.

Yarın XCLK için kameradan discoveriye hat çekeyim. Sonra PWM ile 10Mhz sinyal uygulayacam. Bakalım ne olacak..

Saat'te ikiye geliyor.

Mnemonic

Arkadaşlar merhaba;
bende şu anda stm32f4 discovery ve ssd1963 bağlantısına ov7670 bağladım qcif olarak ekrana görüntü aktarmaya çalışıyorum.
lcd üzerine ayarladığım pencerede sadece karıncalı karışık görüntüler oluşuyor ışık tuttuğunda yada nesne hareketi yaptığımda ekrandaki görüntüde değişiyor ama hala net görüntü alamadım.
elinizde şuanda ov7670için çalışan kodunuz mevcutmu. günlerdir denemediğim kalmadı sizin kodlarınızla karşılaştırmak isterim

Mucit23

Hocam elimde birçok kütüphane var. Ama henüz kamera ile iletişime geçemediğim için çalışıp çalışmadığını bilmiyorum. Bu akşam XCLK bağlantısını yapıp I2C çalışmalarına kaldığım yerden devam edeceğim.

Karıncalıda olsa görüntü aldığınıza göre kamera ile iletişim sağlamışsınız.
XCLK konusunu sorayım. Sizin kullandığınız kameranın kendi osilatörü varmı yoksa kendiniz mi kameraya clock uyguluyorsunuz?
Birde DCMI kullandınızmı?


Mnemonic

DCMI kullanıyorum
elimde wvsahre'in genişleme kartı var discoveryi bunun üzerine takıyorum. http://www.wvshare.com/product/Open407V-D-Standard.htm
xclock için gpio üzerinden 50mhz clock veriyorum ve o şekilde kullanıyorum
lcd üzerinde frame olarak da176X144 bir pencere açıyorum ve dma ile veriyi direk ssd1963 ramie gonderiyorum
ama sadece çapraz çapraz hareketli çizgiler çıkıyor ışık yada farklı renkde nesnelerin önüne tutuğum zaman çizgilerin rengi değişiyor

Mucit23

Hocam 50mhz Çok değilmi. Bildiğim kadarıyla 24 mhz uygulanması gerekiyor. Hatta bazı ov7670 modullerinde dahili olarak 24 mhz osilator bulunuyor. 
Bence hızı biraz düşürüp deneyin. 

Umarım bende sizinki kadar ilerleme kaydedebilirim.


Mnemonic

#55
orada aslında şöyle bir kod kullanmışım
sanırm 48mhz veriyorum datasheetden inceleyip yeniden yazacağım

static ErrorStatus OV7670_XCLK_Conf(void)
{
	__IO uint32_t startupcounter = 0;
	ErrorStatus status = ERROR;
	FlagStatus HSI_Status = RESET;


	GPIO_InitTypeDef  GPIO_InitStructure;

	// Enable high speed internal 16MHz oscillator *******************************
	RCC_HSICmd(ENABLE);

	// Wait till HSI is ready and if Time out is reached exit
	do
	{
		HSI_Status = RCC_GetFlagStatus(RCC_FLAG_HSIRDY);
	    startupcounter++;
	}while((startupcounter != HSI_STARTUP_TIMEOUT) && (HSI_Status == RESET));

	if (RCC_GetFlagStatus(RCC_FLAG_HSIRDY) != RESET)
	{
		status = SUCCESS;
	}
	else
	{
	    status = ERROR;
	}

	// Output HSI clock on MCO1 pin(PA8) ****************************************
	// Enable the GPIOA peripheral
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);

	// Connect MCO1 pin to AF0
	// Connect to AF0 is default after reset
	// GPIO_PinAFConfig(GPIOA, GPIO_PinSource8, GPIO_AF_MCO);

	// Configure MCO1 pin(PA8) in alternate function
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
	GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
	GPIO_Init(GPIOA, &GPIO_InitStructure);

	// HSI clock selected to output on MCO1 pin(PA8)
	RCC_MCO1Config(RCC_MCO1Source_HSI, RCC_MCO1Div_1);

	return(status);
}



void XCLK_ON(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;

	// Output HSI clock on MCO1 pin(PA8) ****************************************/
	// Enable the GPIOA peripheral
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);

	// Connect MCO1 pin to AF0
	// Connect to AF0 is default after reset
	// GPIO_PinAFConfig(GPIOA, GPIO_PinSource8, GPIO_AF_MCO);

	// Configure MCO1 pin(PA8) in alternate function
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
	GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
	GPIO_Init(GPIOA, &GPIO_InitStructure);

	// HSI clock selected to output on MCO1 pin(PA8)
	RCC_MCO1Config(RCC_MCO1Source_HSI, RCC_MCO1Div_1);





mesaj birleştirme:: 07 Mart 2014, 13:52:36

dahasheetden incelediğim kadarı ile
HSI clocku div 1 ile gönderiyorum yani 16MHZ gidiyor
aksam osiloskop ile ölçer yeniden bakarım
ama bu durumda acaba benim sorunum nerede :(
sanırım registerleri hatalı ayarladım hepsinin üzerinden bir kere daha geçmem gerekli

Mucit23

Bu kamera ile başım dertte.

XCLK uygulamaya başladım. Şimdilikte Frekansı düşük tutum. 8Mhz deniyorum. Kameradan yine I2C cevabı gelmiyor. Ama PXCLK sinyalinden 4Mhz lik bir sinyal çıkıyor. Ayrıca HSYNC ucundanda bir yaklaşık1,5Khz bir sinyal çıkıyor.

Hattaki durum bu şekilde

resim yükle
Resim üzerinde I2C hattınında oluşan olayları yazdım. Mavi Kısımda ACK bekleniyor. ACK geleceği sırada Clock Uygulandığında Hata low konumuna inse tamam ilerleyebileceğim.

Şuanda en düşük seviyede I2C kodu yazıyorum. Donanımsal I2C kullansamda değişen birşey olmayacak. ACK gelmediği için Program donacak.

Gerçekten yardıma ihtiyacım var.  Başka ne yapabilirim fikri olan varmı?

mistek

Clock sinyalini neden durduruyorsun?

Sürekli clock sinyali gönderilsin sürekli device adresi yazılsın. İletişimi durdurma clock yoksa ACK'da gelmez.

boş işlerin adamı ---- OHM Kanunu: I = V/R ---- Güç Formülü: P = V*I = I^2*R = V^2/R

yldzelektronik

#58
@Mucit i2c kodların soft i2c ise yanlış ypıyorsun.Değilse sebebine odaklanmalısın.!

Çünkü i2c de data değişimi clokc lowda iken izin verilir.!Senin sinyalinde gözüktüğü kadarıyla sen clock ile birlikte data değiştirmeye kalkıyorsun.Bu da hatalı data alımına sebep oluyor olabilir.

Ayrıca halen anlamış değilim.Sana gönderdiğim kodlar bizzat denediğim çalıştırdığım kodlardı.Hatta o kodlar ile sd karta resimi de bmp olarak yazıyordu.Sende neden çalışmadı?
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

Mucit23

Hocam dediğim gibi o kodları denedim I2C de problem yaşıyorum. I2C Hattında ACK sinyali gelmediği için Program donup kalıyordu. Gerçi XCLK uygulandıktan sonra hardware I2C kütüphanesini hiç denemedim. Bu akşam bir deneyelim bakalım.

@Mistek

Hocam Benim yaptığım işlem sırası şöyle

Start gönder
Device Adres yaz
ACK bekle, Eğer ACK geldiyse Data gönder yoksa Stop gönder hattan çık.


ACK gelmediği için hattan çıkıyorum. Normalde böyle olması gerekiyor ama