Hallo, ich habe ein Problem und weiß jetzt wirklich nicht mehr weiter. Ich benutze ein STM32F429 Disco Board und die ov7670 Kamera. Ich habe jetzt die I2C Schnittstelle eingerichtet und beim senden der Addresse bekomme ich ein ACK. Sende ich die Registeraddresse an die OV7670 wird der Bus blockiert... Im anhang habe ich bilder von der Kommunikation angehängt. Einmal wenn kein Slave (OV7670) verbunden ist und dann wenn der OV7670 angeschlossen ist. Wie kann ich dieses Problem beheben? Danke
Hallo, SCCB ist nicht I2C, man kann es zwar mit der I2C-Hardware durchaus bedienen (zumindest hier am AVR geht es). Das Bit an Position 9 nach den Daten ist kein ACK/NACK im I2C-Sinn. https://github.com/rggber/rggber-documentations/blob/master/OV5640/Omnivision%20serial%20camera%20control%20bus(SCCB)%20functional%20specification.pdf Gruß aus Berlin Michael
Hallo Michael, Danke für deine Antwort. Mir ist bewusst dass SCCB nicht I2C ist. Wenn ich kein Ack bekomme wird mit dem nächsten Schritt weiter gemacht. Deswegen wundert es mich, das nach der SlaveAddresse und der RegisterAddresse das Camera Modul den Bus blockiert.
Hi, ich bin jetzt ein wenig weiter gekommen, leider ist jetzt ein neues Problem aufgetreten. Mitlerweile kann ich ohne Porbleme Addressen und Registeraddressen senden. Leider wenn ich die Slave-Addresse(write) gefolgt von der Registeraddresse und dann Slave-Addresse(read) sende, bekomme ich nichts zurück. (Beim dem Ack Bild bitte beachten, dass der Logik Analyser irgendwie die Busdaten falsch interpretiert! Gesendet wird: 0x42+0x01 danach 0x43). Wie bekomme ich jetzt die Registerdaten aus dem ov7670/ das >SCL Signal dass das Kamera Modul die Daten senden kann?
:
Bearbeitet durch User
Hallo, Uli S. schrieb: > Wie bekomme ich jetzt die Registerdaten aus dem ov7670/ das >SCL Signal > dass das Kamera Modul die Daten senden kann? ich habe jetzt ein Problem: ich bin über einen anderen Thread zu den Basteleien mit der OV7670 und einem Mega328 gekommen... Beitrag "Brauche Unterstützung beim OV7670 (bzw. SCCB)" Schicke doch mal dem Andreas S. (igel1) eine PM, der hat sie an einem STM, und machen ihn auf Deinen Thread hier aufmerksam. Ich habe das SCCB-Zeug aus einer Internetsource für die TWI-Hardware des Mega328 nur übernommen und kann nur sagen, daß das hier stabil läuft. Das dürfte Dir aber nur bedingt helfen. Gruß aus Berlin Michael
Hi Uli, ich hatte seinerzeit einige Tage benötigt, um SCCB auf dem STM32 ans Laufen zu bringen. Bist ein Glückspilz, dass Michael U. uns zueinander gebracht hat ... Code läuft auf STM32F429i Discovery-Board - sowohl auf dem alten Board, als auch auf der neueren Board-Version mit Namen "Disc1". Anbei die wesentlichen Code-Passagen - ist sicherlich noch ein klein wenig einzufeilen, weil's Code-Auszüge sind. Board: STM32F429i-Disc1 Discovery # = 2. Generation des Boards Libs: Standard Peripheral Library 1.8.0 Aufruf mit:
1 | I2C_Config(); // Initialize I2C |
2 | OV7670_Reset(); |
3 | Delay(200); |
4 | OV7670_QVGAConfig(); |
5 | Delay(200); |
Pinout:
1 | ================================================================================================= |
2 | |
3 | Board: STM32F4 Discovery kit for STM32F429 MCU (STM32F429ZI processor), Discovery, Dico1-Board |
4 | Camera: OV7670 with FiFo AL422B |
5 | |
6 | ================================================================================================ |
7 | |
8 | |
9 | |
10 | Pin Pin Pin OV7670 Pin STM32F429ZI Cable |
11 | No. Name Name +FIFO Configuration color |
12 | OV7670 Schema Inp/Out Disco |
13 | +FIFO OV+FIFO Board |
14 | ------------------------------------------------------------------------------------------------ |
15 | |
16 | 1/L 3.3V VCC 3V brown |
17 | 2/R GND GND GND black |
18 | 3/L SIOC SIO_C PB8 AF4/I2C1_SCL red |
19 | 4/R SIOD SIO_D PB9 AF4/I2C1_SDA brown |
Viele Glück damit Igel1
Hi Andreas, danke für deine Antwort. Da ich alles über direkten Register-Zugriff mache hilft mir dein Code nicht weiter... Ich habe jetzt hinbekommen, dass der OV7670 den Bus nicht mehr blockiert. Nur habe ich jetzt ein Problem mit dem STM32F4! Ich kann 0x42/ACK+Registeraddresse/ACK senden (und bekomme für beide ein ACK), aber danach wird das Clock Signal eingestellt! Wie kann ich den STM32F4 dazu "zwingen" mein Clocksignal aufrecht zu erhalten für die zweite Adresse und empfangen der Daten? Danke Edit: Wenn ich bis vor der zweiten Start Kondition stopppe (breakpoint) und dann weiter gehe bis zum Anfang, bekomme ich noch sieben Clockzyclen aus der SCL Leitung raus aber dann wird abgebrochen...
:
Bearbeitet durch User
Hallo Uli, Uli S. schrieb: > Da ich alles über direkten Register-Zugriff > mache hilft mir dein Code nicht weiter... Die Standard Peripheral Library ist noch relativ hardwarenahe. Mit etwas Maikäferarbeit kannst Du die Funktionsaufrufe in Deine Register-Direktprogrammierung zurückverwandeln. Alternativ kannst Du mit scharfem Hinsehen auch direkt ableiten, welche Register bei welchem Funktionsaufruf gesetzt werden. Ich selber habe die SCCB-Geschichte vor 1,5 Jahren in Gang gebracht und seitdem leider vieles vergessen (zum Glück - es war ziemlich gruselig). Leider habe ich aktuell nicht die Zeit, mich nochmals so tief einzudenken, um Dir auf Registerebene zu helfen - dies nur, damit Du Dir keine zu großen Hoffnungen auf meine Unterstützung machst. Viele Grüße Igel1
Hallo @igel1, danke für deine Antwort. Mitlerweile habe ich die SCCB Kommunikation zum laufen bekommen. Das Datasheet sagt vor dem Lesen muss ein Write Erfolgen, das ist völlig falsch, genau deswegen blockiert das Camera Modul. Read: Sende zweimal Read Adresse! Jetzt mit laufender SCCB Kommunikation habe ich das nächste Problem, ich bekomme kein Bild. Wäre es möglich das du mir den Code für die Bilddarstellung auf dem Display sendest, main und display lib, ich will dies nur zum ausprobieren verwendent, Ich habe die Vermutung irgendwie bekomme ich nicht die richtigen Daten...? Mein Bild erkennt zumindest eine Taschenlampe, da ändert sich das Bild in weiß...
Hallo Uli, hatte auf Deine PN geantwortet, bekam aber eine Fehlermeldung zurück. Leider wirst Du mit meinem Code nichts anfangen können, weil ich damals jäh durch einen familiären Trauerfall im Projekt unterbrochen wurde: Der Code blieb damals völlig chaotisch und mehr oder weniger undokumentiert liegen. Sogar ich selbst traue mich kaum noch an den Code heran - es wäre reine Zeitverschwendung. Wenn Du den Code trotzdem unbedingt haben möchtest, so kann ich versuchen, die Teile zusammenzusammeln. Allerdings kann (oder ehrlicher: möchte) ich Dir leider keinen Support dabei geben, den Code ans Laufen zu bringen, weil ich meine Zeit lieber in den sauberen Neuaufbau von OV7670-Software stecken möchte und aktuell in einem Nachbarthread zum Thema OV7670 engagiert bin: Beitrag "Brauche Unterstützung beim OV7670 (bzw. SCCB)" Vielleicht wäre es ja interessant für Dich, wenn Du in diesem anderen Thread mitmachst? Viele Grüße Igel1
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.