OV7670-Frames sind 640 x 308, nicht 640 x 480

Es gibt viele hilfreiche Informationen im Internet darüber, wie man die OV7670-Kamera zum Laufen bringt, aber das folgende Problem hat mich etwas ratlos gemacht.

Ich verwende ein Maple r5 Board (STM32F103RBT6), um ein Bild von diesem Modell von OV7670 mit AL422- Puffer auf einer Leiterplatte aufzunehmen.

Ich habe den Schaltplan für dieses Gerät von ebay und meinen Code hier hochgeladen .

Mein Code schnappt sich einen Frame vom OV7670, speichert ihn in AL422 und leitet ihn dann mit UART über eine USB-Verbindung zurück an den PC (sehr langsam!). Wie Sie unten sehen können, ist das Bild zunächst nicht ausgerichtet, dann bekomme ich nur 640 mal etwa 300 Pixel, dann wiederholt sich das Bild. Ich lese nur den Graustufen-Y-Kanal. Aus dem Blickwinkel der Kamera sieht es so aus, als würde sich die rechte Seite des Bildes nach links wiederholen.

Graustufenbild von ov7670Ich habe die Kamera auf mein Oszilloskop fokussiert, da sich dieses Bild schnell ändert, um zu testen, ob die Wiederholungen aufeinander folgende Frames oder dasselbe Bild sind. Die Pixel sind identisch, was meiner Meinung nach bedeutet, dass der Lesezeiger den Puffer umschließt und dieselben Daten ausgibt. Ich habe versucht, weitere Zeilen aus dem Puffer auszulesen, und ich bekomme immer wieder denselben verkürzten Frame.

UPDATE: Ich habe das Produktblatt für den AL422B überprüft. Dieser Puffer kann 393.216 Bytes aufnehmen. Bei zwei Bytes für ein Pixel (eines für Farbe, eines für Graustufen) bedeutet dies, dass nur 393.216/2 = 640x307 Pixel gespeichert werden können! Ich denke, das erklärt, was hier passiert! Jetzt ist meine Frage, gibt es irgendwelche Einstellungen für den OV7670, um nur den Graustufenkanal auszugeben, damit ich ein ganzes Bild speichern kann!

PS: Ich bin neu hier, also lassen Sie mich bitte wissen, wie ich Fragen effektiver stellen kann.

das ist ein klassisches Sync-Alignment-Problem. Betrachten Sie Kombinationen der Steuersignale Hsync und Vsync, die vom Sensor ausgegeben werden, und denen, die vom Puffer akzeptiert werden.
@placeholder Ich glaube nicht. Ich habe auf meinem DSO validiert, dass ich alles richtig mache. Außerdem würden wir in diesem Fall oben im nächsten Bild sehen, nicht unten wieder oben. Wie ich oben sagte, glaube ich, dass das Problem darin besteht, dass der Puffer das YUV-Format nicht mit 640 x 480 speichern kann. Wenn ich nur die ersten 300 Hsync-Impulse (Zeilen) auf dem AL422 speichere und dann WE nach unten ziehe, kann ich die obere Hälfte des Bildes sehen.

Antworten (1)

Als Referenz, wenn andere dies finden: Das COM7-Register wurde auf Bayer RAW gesetzt (Bits [2: 0] = 001). Dadurch gibt die Kamera 640 x 480 Bytes aus, die auf den AL422B passen. Die Bayer-Interpolation muss jedoch extern durchgeführt werden, um ein vollständiges RGB-Farbbild zu erhalten. Alternativ können die Verstärkungen auf den r-, g-, b-Kanälen gefummelt werden, um einem Graustufenbild nahe zu kommen, was ich wollte.