mikrocontroller.net

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


Autor: Uli S. (uli_stone)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Uli S. (uli_stone)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Uli S. (uli_stone)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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
Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Andreas S. (igel1)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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:
  I2C_Config();          // Initialize I2C
  OV7670_Reset();
  Delay(200);
  OV7670_QVGAConfig();
  Delay(200);


Pinout:
=================================================================================================

Board:      STM32F4 Discovery kit for STM32F429 MCU   (STM32F429ZI processor),  Discovery, Dico1-Board
Camera:     OV7670 with FiFo AL422B

================================================================================================



Pin    Pin        Pin          OV7670  Pin     STM32F429ZI           Cable         
No.    Name       Name         +FIFO           Configuration         color         
       OV7670     Schema       Inp/Out Disco                                       
       +FIFO      OV+FIFO              Board                                       
------------------------------------------------------------------------------------------------

 1/L   3.3V       VCC                  3V                            brown            
 2/R   GND        GND                  GND                           black
 3/L   SIOC       SIO_C                PB8     AF4/I2C1_SCL          red
 4/R   SIOD       SIO_D                PB9     AF4/I2C1_SDA          brown

Viele Glück damit

Igel1

Autor: Uli S. (uli_stone)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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
Autor: Andreas S. (igel1)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.