Servus Leute, hab momentan ein kleines Verständnisproblem und wohl auch ein Ausführungsproblem mit meine I2C Bus. Controller ist ein Mega 16 und Endgerät ist ne Kamera Typ C3088. Die SCL und SDA sind beide mit 10k auf VCC. Laut Datenblatt ist die Slave-Adresse der Kamera C1 in Hex. Mein Quellcode ist so...(Bascom) ---------------------------------------------------- Config Sda = Portc.1 Config Scl = Portc.0 I2cinit Dim X As Byte X = 0 I2cstart I2cwbyte &HC1 I2cwbyte &H00 I2crbyte X , Ack I2cstop Print #1 , X ---------------------------------------------------- Aber ich krieg nur FF zurück egal ob ich bei i2crbyte mit Ack oder Nack anspreche. Habt ihr ne Idee worans liegen könnte, denn normalerweise sollte bei der Adresse C1:00 als Rückgabe auch 00 kommen da der Gain defaultmässig auf 00 steht. MfG Matthias
Als 4. von 81 Treffern findet Google mit den Suchworten C3088 camera datasheet: http://www.robozes.com/inaki/dproject/ http://www.robozes.com/inaki/dproject/report.pdf Kurze Zusammenfassung: In den Datenblättern der C3088 steht nach zwar, dass das I2C Protokoll benutzt wird, aber es fehlt die Beschreibung der Ansteuerung. Sie haben daher nachgesehen, wie der eigentliche Controller OV6620 auf dem Kameramodul angesteuert wird. Durch dessen Datenblatt kommt raus, dass das sog. SCCB Protokoll benutzt wird. Das ist ähnlich wie I2C aber nicht genau so. Sie haben das Protokoll mit Hilfe einer fremden Library per Software über die TWI Schnittstelle eines Atmega16 (@ 16 MHz!!!) implementiert. Langwieriges Debuggen war notwendig, bis die Fehler beim Lesen durch Korrektur des Timings behoben werden konnten. Der Sourcecode ist auch erhältlich, allerdings ist es C-Quellcode. Mit Bascom-Code sieht es mit der Kamera relativ dünn aus. http://www.google.de/search?hl=de&q=%28c3088+OR+ov6620%29+bascom&btnG=Suche&meta= Über Google findet man die SCCB Beschreibung Serial Cameral Control Bus Functional Specification http://www4.cs.umanitoba.ca/~jacky/Robotics/DataSheets/ov-sccb.pdf Darin sieht es mir beim schnellen Durchblättern so aus, als ob für ein ordentliches Lesen VIER Bytes übertragen werden (drei vom Master, eins vom Slave), nicht DREI wie in deinem Beispiel. ID-Adresse-W, Subadresse ID-Adresse-R, Read Data <- 2-phase write transm. -><- 2-phase read transm. -> <--------------- Master -----------------><- Slave -> Über Google findet man die ID-Adressen im Datenblatt des OV6620: http://www.ovt.com/pdfs/ov6620DSLF.PDF http://www.cs.cmu.edu/~cmucam/Downloads/ov6620DSLF.PDF Die ID-Adresse-W können sein (je nach Hardware-Beschaltung von 3 Adressleitungen am OV6620): C0, C4, C8, ... und die ID-Adresse-R sind jeweils +1 (C1, C5, ...). Die Subadressen sind ebenfalls aufgeführt. Nun gibt es hier auch einen über 1 Jahr alte, unbeantwortete Frage (Beitrag "Kamera C3088, OV6620"), bei der selbst das nicht hilft. IMHO ist dort möglicherweise ein 1 Byte zu viel Fehler im Teil (<- 2-phase read transm. ->).
Servus, ich hab mit dem einen Link auf robozes eine Verbindung herstellen können. Bin mittlerweilen auch auf C umgestiegen deshalb...da kann ich sachen umstellen. Bilder krieg ich aber trotzdem nicht. Eins kam mal einem Bild nahe (siehe anhang)...aber seitdem zufall wo ich selber noch was im Bitmap per Hexeditor änder musst krieg ich nur noch Salat. Ich weis jedenfalls nicht mehr weiter...das Modul kann ich wohl aus Fehlversuch abhaken. Doku beschissen...keiner Macht was damit deshalb auch Internetsuche erfolglos ausser deinem Link und noch einen auf jrobots... Einfach blos zum Kotzen...ein Ami Chip in einer Chinesencam...das konnte ja nicht gut gehn... Dabei will ich einfach einen Snapshot an den Rechner schicken nicht mehr und nicht weniger... Danke dir trotzdem. MfG Matthias
Hallo Matthias, schau' Dir am Besten erstmal die I2C-Spec von Philips an... Zumindest der Bascom-Code ist - auch wenn ich keine Ahnung von Bascom habe - grob falsch. Du musst zwischen Schreiben der Subadresse und Lesen des Bytes einen Restart oder Stop/Start machen, dann neu adressieren. Bei der Adressierung muss für das Schreiben (auch der Registeradresse!) das unterste Bit der Slave-Adresse '0' sein, für das Lesen '1'. Die Angabe der Adresse C1 für die Kamera irritiert mich daher etwas, denn normalerweise wird die Adresse dann ohne ein gesetztes Bit 0 angegeben... Dann sollte beim Lesen des letzten Bytes das Acknowledge vom Master nicht gesetzt werden, damit der Chip weiß, dass jetzt Schluss ist. Also so als "Pseudo-Code": I2cstart I2cwbyte &HC0 I2cwbyte &H00 I2cstop I2cstart I2cwbyte &HC1 I2crbyte X , Nack I2cstop Gruß, Wolfgang
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.