Stm32f10xx & OV7670 & Tft

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

SpeedyX

Konuyu okudum, ben şahsen kameranın yuv modunda kalmış olabileceğini düşünüyorum.

Kamera -> Ekran arasında işlem yapabiliyorsanız YUV 422 yi önce RGB 888 e sonra onu da RGB 565 e dönüştürüp ekranda göstermeyi deneyebilirsiniz, sorunsuz görünürse YUV modundan çıkamadığı kesinleşecektir.
Belki de kamerayı init ettikten sonra reset alıp tekrar eski ayarlarına geri dönüyordur?

Sırayla aşağıdaki registerlara doğru değerleri yazdığınızı da kontrol etmelisiniz.
static struct regval_list ov7670_fmt_rgb565[] = {
        { REG_COM7, COM7_RGB }, /* Selects RGB mode */
        { REG_RGB444, 0 },      /* No RGB444 please */
        { REG_COM1, 0x0 },      /* CCIR601 */
        { REG_COM15, COM15_RGB565 },
        { REG_COM9, 0x38 },     /* 16x gain ceiling; 0x8 is reserved bit */
        { 0x4f, 0xb3 },         /* "matrix coefficient 1" */
        { 0x50, 0xb3 },         /* "matrix coefficient 2" */
        { 0x51, 0    },         /* vb */
        { 0x52, 0x3d },         /* "matrix coefficient 4" */
        { 0x53, 0xa7 },         /* "matrix coefficient 5" */
        { 0x54, 0xe4 },         /* "matrix coefficient 6" */
        { REG_COM13, COM13_GAMMA|COM13_UVSAT },
        { 0xff, 0xff },
};

http://www.cs.fsu.edu/~baker/devices/lxr/http/source/linux/drivers/media/video/ov7670.c

Mucit23

Hocam Cevabınız için Teşekkürler.

Ben şu okuma I2C okuma işini halledeyim. Sonrasında dediğiniz testleri teker teker yapıp sonuçlandıracağım. İlk önce ilgili Registere yazma yapıp sonradan ilgili registerden yazdığım değer yazılmışmı yazılmamışmı onu anlamak için okuma yapacağım...

Mnemonic

Mucit23 hocam
yazmadanda direk okuma yapabilirsin. sonuç olarak registerlerin default değerleri var
bu arada bir sitede mutlaka yazma yapmadan önce okuma yapın şeklinde bir uyarı vermiş bence bunuda değerlendirebiliriz.
site adresi : http://embeddedprogrammer.blogspot.com.tr/2012/07/hacking-ov7670-camera-module-sccb-cheat.html

sayfanın sonuda verdiği uyarılar

Alıntı YapTROUBLESHOOTING

SCCB:
Make sure the SCCB is working properly, the OV7670 will answer with an ACK, after it has been address properly.
The 7 bit SCCB/I2C address is 0x21, this translates to 0x42 for write address and 0x43 for read address.
For debugging purposes, try reading some registers and check that they contain their default values. e.g. reading the 0x01 register should return 0x80.
Always read a register first, modify the desired bits and then write it back to the OV7670.

Image sensor
Check wiring, pin configuration and clock configuration.
Start only grabbing a snapshot (only one frame), this is from VSYNC falling edge to VSYNC rising edge. Repeat this procedure multiple times, and make sure the number of bytes per snapshot, is constant.
Cover the camera lens, and verify that the snapshot have the following information (in bytes): 128 0 128 0 128 0 128 0 ... i.e. every even byte should be 128 and every odd byte should be 0. This correspond to a pitch black image.
If the two previous experiments fail, your uC might be too slow to grab the OV7670 stream, either increase its clock speed or get a faster uC. If you are using a DMA controller, then give it high priority, clock it as fast as possible and/or dedicate it to this task.
If you are visualizing the grabbed snapshot in a PC, for starters only use the luminance (Y) channel, i.e. only use the even bytes of the snapshot. On the PC, assign R = G = B = Y for each pixel.
At this point, all the electrical/software part should be working. The only remaining issue is the camera focus (distance from the camera lens to the image sensor), you will have to vary the camera focus by trial and error until you get a clear image.

Mucit23

Hocam oradaki yazıları okudum. Yazılımla ilgili olan bütün kısımları ben halletmişim.

Okuma işinide yaptım. 0x01 nolu adresi okuyorum 0x80 cevabını alıyorum.
0x0A yani PID registerini okuyorum 0x96 değerini alıyorum.
0x0B yani Rev Registerini okuyorum 0x57 değerini alıyorum. Benim kamera en son çıkan versiyonmuş. OV9655(Rev5). OV9657 de denilebilir.

Okumaya devam.

Mnemonic

hocam bravo;
bazı farklı işlerim olduğu için ben henüz üzerine düşemedim. bu aralar bakamıyorum. senin gönderdiğin kodları deniycem.
bu arada dün bende farklı verisyonlar olduğunu farkettim. bendeki OV7670 lerin versiyonları nedir bilmiyorum onu bulup uygun datasheetle devam edeceğim
sanırım bu önemli bir kriter farklı versiyonların registerlerinde farklılık var.

ayrıca ben şöyle bir şeye takıldım biz RGB565 datayı 8 bitlik 2 blok halinde okuyoruz sonra bunu 16bit olarak lcdye gönderiyoruz acaba lcdye gönderirken ilk 8biti gönderip sonraki 8biti boş gönderiyor olabilirmi yada kameradan okurken 8 bitlik veriyi word olarak atıp worun son 8 bitini boş bırakıyor olabilirmi belkıde datayı pars etmemiz gerekiyordur
bu düşüncem için ne diyorsun ?

Mucit23

Okudum  Renkle ilgili olan her yeri okudum. Yazılan değerlerde sıkıntı yok.

Ben ilk başta aynen sizin dediğiniz gibi Yüksek veya düşük 8 bitin gelmediğini düşünüyordum bence öyle değil.(Daha onun testini yapmadım) Niye derseniz 16 bit RGB565 formatı aşağıdaki gibi

RRRRRGGGGGGBBBBB

Biz ekranda Kırmızı ve Mor ağırlıklı renkler görüyoruz. Demekki Kırmızı rengin gelmesinde sıkıntı yok. Mor'un oluşması içinde Mavininde geliyor olması gerekir. (Mavi+Kırmızı=Mor) Ekrana bakara neyin gelip gelmediğini tahmin edebiliriz. LCD ye yüksek 8 Bit gelmese Kırmızı renkler görünmez. Düşük 8 bit gelmese mavi renkler görünmez. Yani Bence 16 bit data geliyor.

Ben galiba sorunu tespit ettim. Bizim kameralarda(Özellikle benimkinde) yeşil körlüğü var. Yeşil Renkler çok az görünüyor. Görüntüde sıkıntı yok net çıkıyor ama görüntü çok karanlık ve mavi ağırlıklı.

Yaptığım testlerin sonucu şöyle;

Kameraya Mavi bir nesne gösterdğimde Nesnenin rengi mavi görünüyor. Problem yok.
Kırmızı bir nesne tutarsam kırmızı görüyorum ama mavi kadar canlı değil
Yeşil Renk tuttuğumda ise genellikle mavi bazen azıcıkta olsa yeşil görünüyor.
Gün ışığında veya kameraya beyaz ışık tuttuğumda ise mavi ağırlıklı renkler görüyorum.

Kameranın registerlerinde kesinlikle problem yok. Eğer datasheet doğru ise Kesinlikle RGB565 Formatına ayarlı. Çünkü yazdığım değerleri okuyabiliyorum. Farklı bir değer yazsam yazdığım farklı değeride okuyarak görüyorum. Zaten farklı bir formata ayarlasam(YUV gibi) Görüntü çok berbatlaşıyor. Şuanda görüntü net ama son derece karanlık ve mavi ağırlıklı.

Sanki böyle kontrast ayarı olurda sonuna kadar kısarsınya aynen öyle.

Hocam sizde durum nasıl hiç fotoğraf göndermediniz


Mnemonic

Selam hocam;
tespit etmiş olduğun sonuca göre şöyle bir kanıya varıyorum. senin kameranda sorun yok ama LCD de sorun var yanlış hatırlamıyorsam sen IL serisi LCD kullanıyorsn ben SSD1963 kulanıyorum SSD'de ya driverdan kaynaklı yada benim DCMI ayarlarımdan kaynaklı  full ekran FFFF gönderdiğimde ucuk mavi bir ekran ekran geliyo ve bazı renklerde de sorun yaşıyorum senin sorununda bu tarz birşey olabilir.

Ben hiç resim göndermedim çekmeye ihtiyaç duymadım benim elde ettiğim görüntü soldan sağa doğru kayan hafif çapraz çizgiler kamera önünden nesne geçirdiğim zamanda renklerde değişiklik oluyor. kameraya beyaz ışık tutarsam komple beyaz elimle kapatırsam görüntü komple siyah oluyor ama çapraz çizgiler durmaya devam ediyor

birde bu aralar başıma iş geldi evde ciddi bir tadilat var o yüzden 2 gündür ilgilenemiyorum. sanırım bir kaç gün daha bakamayacağım konuştuğumuz testlerin hepsini sıradan yapıp sonucu bildiricem

karar verdiğim yapılacak test sıralaması şu şekilde

Registerden okuma yap default değeri gör
aldığın datayı 176X144 matris bir değişkene at ve üzerinde 16bit datalardanmı oluşuyor kontrol yap
buraya kadar sorun yoksa tek sorun kalıyor registerler
tğm registerleri tek tek gözden geçir

Mucit23

#97
Hocam ben hiç QQVGA yı denemedim Şimdiye kadar hep 320x240 ile deneme yaptım. Birde 160x120'yi deneyim.

Sizdeki LCD büyük. Siz neden 320x240 ile çalışmıyorsunuz?

Edit; QQVGA da aynı.

Mnemonic

benim kamerada 160X120 diye bir değer zaten yok
ben qcif deniyorum 172X144 değerde
ama qvga deneyebilirim 320X240 alan kullanmış olurum
haklısın testlerimi bu şekilde devam edeceğim

Ramiz

Renk paletinde bir bit bile kayık olursa, renkler allak bullak olur.

RRRRRGGGGGGBBBBB Bu örneği vermişsin.

RRRRRGGGGGGBBBBB     :kamera
RRRRGGGGGGBBBBBR     :TFT


Eğer renk paletini yukarıdaki gibi bir bit sola kaydırın, tüm renkler bir birine girecektir. İşin en zor kısmını halletmişsiniz bence. Kameradan görüntüyü alabilmek en zor kısmı olmalı.

Size tavsiyem,

Kameranın önüne mucit inde yaptığı gibi kırmızı bir cisim yerleştirin ve gelen 0,0 pixelini ya debug ile yada uart vs aracılığı ile okuyup, yorumlayın. Göreceksiniz ki, kırmızı cisimde, mavi cisimde veya yeşil cisimde, istenmeyen bitler (özellikle R,G,yada B nin high bitleri) lojik 1 olacak. Yorumunuza göre gelen cam verilerini işleyip, LCD ye basın.
Electrical & Electronics Engineering -> Step one

Mucit23

Az kaldı kafayı yedirtecek bana.

Ramiz muhtemelen dediğin gibi bir durum var ama neden böyle birşey yaşansın onu anlamıyorum. Gelen datalar üzerinde ben herhangi bir işlem yapmıyorumki. Gelen olduğu gibi işlemciye bile uğramadan LCD ye gidiyor.

En iyisi senin dediğin gibi ramde dizi oluşturup anlık olarak 1 kare alıp diziye yerleştireyim. Sonra dizi üzerinde çalışırız. 

Ramiz

Hatta sana daha iyi bir tavsiyede şu ki,

Cam in test sinyali varmış. Data sheetinde hangi renklerin kullanıldığı yazıyordur. Renklerin içlerinde büyük ihtimalle Max değerde olarak R, G ve B vardır. (Sütun halinde)

Direk bunları yorumla. Daha kesin ve doğru sonuç elde edersin.

Çünkü diğer türlü cam önüne tutuğun renk atıyorum açık yeşilse,

Yeşil renklerinin bitleri aktif olacak ama, parklaklık(açıklık) sağlanabilmesi için, diğer renk bitleride aktif olacak(ama en yüksek değeri yeşilin alması gerekir) ve bu kafanı karıştıracak. Test yayını üzerinden max R,G,B üzerine çalışmak daha mantıklıdır.
Electrical & Electronics Engineering -> Step one

Mucit23

Çözdüm. :) :) Herkese benden çay :) :D :D

Tamam olacak... İnternette farklı bir datasheet buldum ov9655 için Bir arkadaş Datasheeti editlemiş. Datasheetin en sonunda doğru init kodlarını vermiş. Şuan sırayla registerleri düzeltiyorum orada verilenlere göre yeni değerleri giriyorum. 0x00 ile 0x0F arasını girdim. Görüntü düzeldi. Şimdi diğer adreslerdeki init kodlarınıda gireyim.




Mnemonic

Mucit23 helal olsun
çok çabuk senden farklı olarak ne yaptın bekliyoruz.
bu arada bendeki kamera OV7670 onun içinde bu tarz bir datasheet varmı acaba ?

Mucit23

Bahsettiğim datasheetin linki budur.
http://yadi.sk/d/bywuJlcAKTkF9
Hocam datasheetin en sonunda init kodları verilmiş. Bu OV9655 için. Şuan renklerde problem yok ama aydınlık seviyesi biraz az gibi. Çokda önemli değil.

Kodları sizde bir deneyin. %80 sizdede çalışır.

Devamına akşam bakacağım.