Forum: Mikrocontroller und Digitale Elektronik OV7670 blockiert Bus nach senden des Registers


von Uli S. (uli_stone)


Angehängte Dateien:

Lesenswert?

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

von Michael U. (amiga)


Lesenswert?

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

von Uli S. (uli_stone)


Lesenswert?

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.

von Uli S. (uli_stone)


Angehängte Dateien:

Lesenswert?

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
von Michael U. (amiga)


Lesenswert?

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

von Andreas S. (igel1)


Angehängte Dateien:

Lesenswert?

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

von Uli S. (uli_stone)


Angehängte Dateien:

Lesenswert?

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
von Andreas S. (igel1)


Lesenswert?

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

von Uli S. (uli_stone)


Angehängte Dateien:

Lesenswert?

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ß...

von Andreas S. (igel1)


Lesenswert?

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
Noch kein Account? Hier anmelden.