Arduino + OV7670 - Ohne FIFO - Snapshot Lesen
Ich weiß, dass es eine Menge im internet (http://forum.arduino.cc/index.php?topic=159557.0 zum Beispiel) über OV7670 und ich lese viel darüber, aber es scheint etwas fehlt.
Zuerst habe ich einen Blick in die Art und Weise, wie können wir Lesen, pixel für pixel von der Kamera zu bauen, der rechteckig 600 X 480 Bild, und dies war ganz einfach zu verstehen, angesichts HREF, VSYNCH und PCLOCK beschrieben auf die Dokumentation hier: http://www.voti.nl/docs/OV7670.pdf. Ich verstehe XCLOCK als input ich geben müssen OV7670 als eine Art von Zyklus-controller und RESET wäre etwas, um es zurückzusetzen.
Also an diesem Punkt dachte ich, dass die Funktionalität einer solchen Kamera wäre abgedeckt durch die Verdrahtung der folgenden pins:
- D0..D7 - für die Daten (pixel) in Verbindung mit arduino digital pins 0 bis 7 als EINGANG auf dem arduino-board
- XCLK - für Kamera-Uhr angeschlossen an arduino digital-pin 8 als AUSGANG vom arduino-board
- PCLK - für-pixel-clock angeschlossen an arduino digital pin 9 als EINGABE auf dem arduino-board
- HREF - zu definieren, Wann eine Linie startet /endet, angeschlossen an arduino digital pin 10 als EINGABE auf dem arduino-board
- VSYCH - zu definieren, Wann ein Rahmen beginnt /endet, angeschlossen an arduino digital pin 11 als INPUT an arduino-board
- GRD - groud verbunden arduino GRD
- 3V3 - 3,3-EINGANG angeschlossenen arduino 3,3 v
- RESET - verbunden mit arduino RESET -
- PWDN - verbunden mit arduino GRD
Die Umsetzung für einen solchen Ansatz aus meiner Sicht wäre so etwas wie:
Code:
for each loop function do
write high to XCLK
if VSYNCH is HIGH
return;
if HREF is LOW
return;
if lastPCLOCK was HIGH and currentPCLOCK is LOW
readPixelFromDataPins();
end for
Meine readPixelFromDataPins()
im Grunde lese gerade das erste byte (da bin ich einfach nur testen ob ich auch etwas gelesen von der Kamera), und es ist wie folgt geschrieben:
Code:
byte readPixelFromDataPins() {
byte result = 0;
for (int i = 0; i < 8; i++) {
result = result << 1 | digitalRead(data_p[i]);
}
return result;
}
Um zu überprüfen, ob etwas gelesen wird, von der Kamera, die ich nur drucken Sie es an die Serielle 9600, die byte-Lesen von Daten-pins als eine Nummer. Aber derzeit bin ich empfangen nur null-Werte. Der code, den ich verwende, um ein Bild abzurufen wird hier gespeichert: https://gist.github.com/franciscospaeth/8503747.
Hat jemand das macht OV7670 Arbeit mit Arduino schon herausfinden, was mache ich falsch? Ich nehme an, ich bin mit dem XCLOCK Unrecht Recht? Was soll ich tun, um es zu arbeiten?
Ich suchte eine Menge und ich habe keine gefunden SSCCE (http://sscce.org/) für diese Kamera mit arduino, wenn jemand es haben, lassen Sie es mich bitte wissen.
Diese Frage ist auf arduino-forum (http://forum.arduino.cc/index.php?topic=211741.0) zu.
Du musst angemeldet sein, um einen Kommentar abzugeben.
deine Idee ist nicht schlecht, aber ...
die xclock brauchen, um ein Uhr (im Programm ist nur ein übergang von 0 zu 1 und friert dort)
Sie müssen auch I2C mit SIOC und SIOD zum konfigurieren der Kamera (oder Sie können die Standardeinstellungen verwenden, aber ich bin nicht sicher, wenn die richtige Ausgabe-format für Sie, 30F/s,VGA -, YUV-format ....)
Ihre code-Ausführung ist langsamer mit der seriellen Ausgabe in der Schleife mit, die Daten zu Lesen
Ich empfehle Ihnen den Wechsel der xclock-pin und verschieben der pixel-print in eine if(). Auch Sie werden in der Lage sein, Daten zu Lesen, nur in einer sehr genauen Zeit, wenn Sie wollen nur Lesen, byte für byte, als nach einem übergang von 0 zu 1 von HREF-Sie müssen warten, für einen neuen übergang von 0 zu 1 von PCLK (Sie werden in der Lage, um zu sehen, nur ein 0-1-übergang des HREF-nach 784x2 übergänge von PCLK, (640 aktive Pixel + 144 tote Zeit für jede Linie) x 2 (für YUV oder RGB sind 2 bytes für die einzelnen pixel) )
Hallo, ich bin Mr_Arduino aus der arduino-Foren. Ihr Problem ist, dass Sie das Lesen von Pixeln zu langsam, verwenden Sie bitte nicht digital Lesen, so etwas zu tun. Auch wenn Sie darauf bestehen, mit einer separaten Funktion zum Lesen eines byte-stellen Sie sicher, dass die Funktion inlined. Sie können dies tun, durch die Erklärung Ihrer Funktion als static inline. Auch wie oben schon erwähnt, wie sind Sie generieren die Uhr. Sie können die Generierung der XCLK über PWM am arduino.
Erstellt habe ich ein funktionierendes Beispiel hier:
https://github.com/ComputerNerd/arduino-camera-tft/blob/master/captureimage.c
Edit: ein 3rd-party-kopiert hat Teil aber nicht alle den code aus dem oben genannten link in die Antwort hier. Jedoch, der link muss bleiben, wie Sie den code unten geschrieben benötigt zusätzliche Dateien aus dieser Quelle tatsächlich funktioniert.
Edit 2: Entfernt irrelevant-code. Müssen Sie ändern, was Sie mit den Daten machen.
Können Sie finden es auch auf github.
Können Sie verwenden Sie meine Anleitung: gewusst wie: abrufen Bild vom ov7670 Es enthält alle Schritte, die Sie brauchen. Es ist auch instuction setup FrameGrabber: wie laufen framegrabber