Forum: Mikrocontroller und Digitale Elektronik Kamera OV7670 an Arduino (3,3V auf D[0..7]-Leitungen)


von e-techniklaie (Gast)


Lesenswert?

Hallo,

braucht man einen Pegelwandler für diese 8 Leitungen (Bilddaten, nur 
lesen von der Cam zum MC) wenn ja welchen, reichen da einfache 
Spannungsteiler? Die 8 Datenleitungen sollen so schnell wie möglich 
ausgelesen werden. In dem Artikel zum Pegelwandler hier auf 
microcontroller.net steht, dass Spannungsteiler bei hohen Frequnzen 
nicht zu empfehlen sind. Ich will da so hoch wie möglich mit dem Arduino 
gehen, also 16Mhz oder weniger je nachdem was ich das für einen Scaler 
an der Cam einstellen muss.

Die I2C Leitungen funktionieren jedenfalls mit abgeschaltetem internem 
Pullup (der liegt auf 5V) und einem externen Pullup am 3,3V + vom 
Arduino. Kann man das nicht auch so für die Datenleitungen machen oder 
hat man dann wieder das Problem wie beim allgemeine Spannungsteiler mit 
Widerständen der bei grossen Mhz Probleme macht?

von Max H. (hartl192)


Lesenswert?

3.3V-->5V: 74HCT245. Wichtig: 74HCT nicht 74HC
5V-->3.3V: 74HC4050

: Bearbeitet durch User
von Grundschüler (Gast)


Lesenswert?

e-techniklaie schrieb:
> Pegelwandler

tu dir das nicht an. Betreib den atmega mit 3,3V. Das Projekt ist auch 
ohne Pegelwandler schwierig genug.

von Dirk K. (dekoepi)


Lesenswert?

Wenn du sicherstellst, dass D0-7 INPUT sind, erkennt der ATmega die 
Signale des OV7670 und frittiert nichts - das ist nicht sauber und jeder 
wird die Hände über den Kopf zusammenschlagen, aber es geht. 
Pegelwandler brauchst du für das I2C-Interface. Alles, was auf dem 
Arduino rein Eingang ist, geht notfalls (es ist wirklich unsauber) ohne 
Wandler. (Hatte mir dafür extra paar 74HC... für hoch- und runterwandeln 
geholt, das dann aber mit Arduino als Basis verworfen.)

Allerdings gehen dir die Pins schnell aus, außer du nimmst einen 
ATmega2560-Arduino. Die nächste Schwierigkeit ist dann die niedrige 
Geschwindigkeit und der geringe Speicher.

: Bearbeitet durch User
von e-techniklaie (Gast)


Lesenswert?

Dirk K. schrieb:
> enn du sicherstellst, dass D0-7 INPUT sind, erkennt der ATmega die
> Signale des OV7670 und frittiert nichts - das ist nicht sauber und jeder
> wird die Hände über den Kopf zusammenschlagen, aber es geht.
Und der Kamera macht das nichts? Was passiert denn da e-technisch wenn 
ich von einer 3,3V Quelle an einen 5V Einfang "sende"?

> Pegelwandler brauchst du für das I2C-Interface. Alles, was auf dem
> Arduino rein Eingang ist, geht notfalls (es ist wirklich unsauber) ohne
> Wandler. (Hatte mir dafür extra paar 74HC... für hoch- und runterwandeln
> geholt, das dann aber mit Arduino als Basis verworfen.)
Nein für I2C brauche ich keine weil ich die internen Pullups abschalte 
und externe gegen die 3,3V des Arduino schalte, der hat eine extra 3,3V 
Quelle, daran betreibe ich auch die Kamera. Funktioniert problemlos mit 
100khz, kann Register lesen und setzen. Takt kommt vom Arduino über 
XCLK, entspr. gefused damit der Takt am XCLK Pin rauskommt, funktioniert 
einwandfrei mit 16Mhz. Wenn ich den Pin trozdem noch brauche kommt halt 
eine externe Taktquelle ran.

> Allerdings gehen dir die Pins schnell aus, außer du nimmst einen
> ATmega2560-Arduino. Die nächste Schwierigkeit ist dann die niedrige
> Geschwindigkeit und der geringe Speicher.
Nutze die Cam in der niedrigsten Auflösung und davon erst mal den 
Grauanteil des Bildes und auch nur ein Standbild. Ausserdem gibts da den 
Trick ein Bild in mehreren Teilen auszulesen, haben andere auch schon so 
gemacht oder ich überspringe jede zweite Zeile,... bis es halt passt, 
reicht das alles nicht kann ich immer noch was Schnelleres einsetzen, 
ich brauche keine volle Pixel- und Farbauflösung und keinen Videostream.
Gespeichert wird auf sdkarte oder per seriellem Port zum PC, muss ich 
beides erst mal testen. Manche haben als Puffer SRAM rangeflanscht aber 
dann reichen die Pins vermutlich wirklich nicht mehr.

von Max H. (hartl192)


Lesenswert?

e-techniklaie schrieb:
> Und der Kamera macht das nichts? Was passiert denn da e-technisch wenn
> ich von einer 3,3V Quelle an einen 5V Einfang "sende"?
Und beim I²C fragst du dich das nicht? Bei CMOS Eingängen wird 3.3V 
nicht garantiert als High erkannt (5V*2/3=3.33V) und es führt zu einer 
erhöhten Stromaufnahme der Eingangsstufe. Es kann aber auch sein, dass 
der ATmega auf dem Arduino-Board TTL kompatible Eingangsbuffer hat.

e-techniklaie schrieb:
> Nein für I2C brauche ich keine weil ich die internen Pullups abschalte
> und externe gegen die 3,3V des Arduino schalte
Was haben externe Pullups mit einem Pegelwandler zu tun?

BTW: Ich würde das gesamte Projekt mit 3.3V betreiben, 5V ist beim 
Aussterben.

: Bearbeitet durch User
von e-techniklaie (Gast)


Lesenswert?

Max H. schrieb:
> e-techniklaie schrieb:
>> Und der Kamera macht das nichts? Was passiert denn da e-technisch wenn
>> ich von einer 3,3V Quelle an einen 5V Einfang "sende"?
> Und beim I²C fragst du dich das nicht? Bei CMOS Eingängen wird 3.3V
> nicht garantiert als High erkannt (5V*2/3=3.33V) und es führt zu einer
> erhöhten Stromaufnahme der Eingangsstufe. Es kann aber auch sein, dass
> der ATmega auf dem Arduino-Board TTL kompatible Eingangsbuffer hat.
Hmm stimmt:
http://playground.arduino.cc/Main/I2CBi-directionalLevelShifter

Da habe ich bisher immer was falsch verstanden, das war reiner Zufall 
dass es funktionierte. Ich habe auch andere Module mit 3,3V so schon 
betrieben, da hat es mich immer gewundert dass manche schon "kaputt" 
sind bzw. teilweise Schrott rauskommt,
jetzt weiss ich warum.

> BTW: Ich würde das gesamte Projekt mit 3.3V betreiben, 5V ist beim
> Aussterben.
Welcher MC wäre für so eine Kamera am brauchbarsten? Sprich ausreichend 
Speicher, 3,3V und viele Mhz das ganze für wenig Geld und schon auf 
einem arduinoartigen board wo ich keinen separaten Programmer brauche?

von Max H. (hartl192)


Lesenswert?

e-techniklaie schrieb:
> Sprich ausreichend
> Speicher, 3,3V und viele Mhz das ganze für wenig Geld und schon auf
> einem arduinoartigen board wo ich keinen separaten Programmer brauche?

So schnell fällt mir PIC24/dsPIC33/PIC32 auf dem Microstick [1] und 
STM32F4DISCOVERY [2] ein. Ich glaube auch mich hier im Forum mal was von 
einem 3.3V Arduino gelesen zu haben.

[1] 
http://www.microchip.com/DevelopmentTools/ProductDetails.aspx?PartNO=DM330013-2
[2] http://www.st.com/web/catalog/tools/FM116/SC959/SS1532/PF252419

von photon (Gast)


Lesenswert?

Ich hab hier grad eine 5MP Arduino-Kamera an nem STM32F4Discovery-Board 
am Laufen.
Der STM32F407 hat ein Kamera-Interface !!

von Dirk K. (dekoepi)


Lesenswert?

Ich aste mich noch mit 'nem kleinen und billigen 
6-Euro-STM32F103-Minimum-Board ab. Damit geht das Auslesen zumindest 
problemlos (schaffe es, 640x480 in SPI-Ram zu wuppen, ohne das Bild 
segmentieren oder andere Kunstgriffe machen zu müssen), aber das ist 
eher aus akademischen Spaß an der Sache.
Werde wohl auch, wenn das mit der 5MP-OV5462-Cam nicht sofort flutscht, 
mit dem STM32F4-Disco lösen, liegt hier noch im Blister rum. (Eigentlich 
für 17€ inkl. Versand recht günstig in der Bucht.)

von e-techniklaie (Gast)


Lesenswert?

photon schrieb:
> Ich hab hier grad eine 5MP Arduino-Kamera an nem
> STM32F4Discovery-Board
> am Laufen.
> Der STM32F407 hat ein Kamera-Interface !!

Sag mal sehe ich das richtig dass es die Dinger für 30€ MIT Display 
gibt? Ohne Display für ca. 10€ je nach Modell.

Wo ist der Haken? Eine brauchbare IDE unter Linux scheint es nicht zu 
geben.

von photon (Gast)


Lesenswert?

Ja.
Es muss aber ein STM32F4 sein.
Ich hab es auf dem 13-Euro Board.
Das 30Euro Board liegt auch hier. Jedoch hat sich die Pinbelegung des 
TFTs mit der der Kamera etwas gebissen.
Ich hab deshalb ein extra TFT für 20€ gekauft und spreche das mit nem 
STM32F407 (also der ohne TFT Controller) an.
Ich mach's per Software. Trotzdem hab ich bei 320x240Pixel noch eine 
Bildwiederholfrequenz von 200 pro Sekunde.

von photon (Gast)


Lesenswert?

Linux:

Doch. Ich arbeite hier auch unter Linux (Ubuntu 14.04). Eclipse, GCC und 
eben die STM32 Bibliothek STM32CUBE.

von Grundschüler (Gast)


Lesenswert?

photon schrieb:
> Ja.
> Es muss aber ein STM32F4 sein....
Trotzdem hab ich bei 320x240Pixel noch eine
> Bildwiederholfrequenz von 200 pro Sekunde.

Der Atmega32 schafft 30frames/sec, wenn man ein 8bit-lcd als 
zwischenspeicher benutzt. z.B. 
http://www.ebay.de/itm/190440692143?ssPageName=STRK:MEWNX:IT&_trksid=p3984.m1439.l2649

320x240Pixel kann praktisch jeder uc vom m32 aufwärts. Da der m32 
veraltet ist, sollte man ihn generell durch den pingleichen m1284 
ersetzen.   Problem sind höhere Auflößungen. Hier ist die Engstelle 
weniger der uc, sondern die software. Für meinen lpc1768 mit 100 mhz 
fehlt es zum beispiel an einem Programm, dass mittels DMA auf eine 
sd_karte schreiben kann. Vielleicht gibt es für den F4 brauchbare 
Programme um größere Datenmengen zu verarbeiten. Von der Fähigkeit, 
240x320 pixel verarbeiten zu können, würde ich eine HW-Entscheidung 
nicht abhängig machen. Vielmehr von der verfügbaren software um die 
eigenen Anforderungen zu erfüllen. Den raspi gibt es bei pollin zur Zeit 
für 30€. Dafür soll es fertige Cam-Programme im Megapixel-Bereich geben. 
Wäre sicher auch eine Überlegung wert.

von photon (Gast)


Lesenswert?

Der STm32F419 hat sogar direkt ein TFT Interface und kann ein 
Speicherabbild direkt per DMA auf ein externes TFT Modul bringen.
Das bedeutet:

Das Einlesen der Kameradaten und das Ausgeben auf TFT benötigt keine CPU 
Last.

Allerdings muss die Kodierung der Farbe passen, wenn man das Bild 1:1 
durchreichen will.

von Grundschüler (Gast)


Lesenswert?

photon schrieb:
> per DMA auf ein externes TFT Modul

DMA auf TFT kann sowohl der Atmega wie auch der LPC. Wie bringst du denn 
mit deinem F4 vollständige Bilder mit 640x480px auf eine sd-Karte??

von photon (Gast)


Lesenswert?

>Wie bringst du denn mit deinem F4 vollständige Bilder mit 640x480px auf
>eine sd-Karte??

Verstehe ich jetzt nicht.
Ich hab doch gar keine SD-Karte.

von Grundschüler (Gast)


Lesenswert?

photon schrieb:
> Verstehe ich jetzt nicht.

Ich hatte dich so verstanden, dass der F4 für die Auswertung eines 
OV7670 besser geeignet sein soll als ein AVR oder ein M3. Sowohl der AVR 
wie auch der normale M3 können Daten per DMA auf ein TFT schreiben, weil 
der Datenfluss auf das TFT praktisch ungesteuert verläuft. Man schreibt 
nur viele Bytes hintereinander. Schwierig wird es erst beim Speichern 
der Bilder auf sd-karte, weil das Speichermedium sd-karte verwaltet 
werden muss.

Wo ist denn dann der Vorteil von deinem F4 gegenüber einem AVR oder 
einem Cortex-M3?

von e-techniklaie (Gast)


Lesenswert?

Ich glaube ich bleibe trotzdem erst mal beim Arduino, den kenne ich und 
brauche erst mal nur ein paar Pegelwandler, die kosten nur ein paar 
Cent.

von Stefan H. (stefan_h16)


Lesenswert?

Man kann das OV7670 Kameramodul auch mit einem FIFO Baustein AL422 
verbandeln, welcher das Bild zwischenspeichert und hat dann alle Zeit 
der Welt auszulesen und weiterzuverarbeiten. Das ganze gibt es sogar 
schon fertig in der Bucht:
http://www.ebay.de/itm/640x480-CMOS-OV7670-Kamera-AL422-3M-Bits-FIFO-Interface-Arduino-SE02007-A14-/281280213630?pt=DE_Haus_Garten_Heimwerker_Sicherheitstechnik&hash=item417d9b727e

Edit: Das geht dann sogar mit einem lahmen MSP430 Launchpad
http://www.rpg.fi/desaster/blog/2012/10/20/ov7670-fifo-msp430-launchpad/

: Bearbeitet durch User
von e-techniklaie (Gast)


Lesenswert?

Stefan H. schrieb:
> Man kann das OV7670 Kameramodul auch mit einem FIFO Baustein AL422
> verbandeln, welcher das Bild zwischenspeichert und hat dann alle Zeit
> der Welt auszulesen und weiterzuverarbeiten. Das ganze gibt es sogar
> schon fertig in der Bucht:
> Ebay-Artikel Nr. 281280213630
Ja ich weiss, ich habe die ohne FIFO. Mittlerweile kostet die Version 
mit FIFO genausoviel wie ich damals für meine ohne bezahlt habe. Vor ca. 
einem Jahr war die noch kaum zu bekommen dreimal so teuer. Wegen 
Zeitmangel lag meine fast ein Jahr herum. Zu früh gekauft, zu viel 
bezahlt.

von Stefan H. (stefan_h16)


Lesenswert?

Darf man fragen was es für eine sinnvolle Anwendung gibt für einen 
Bildsensor am Atmega/Arduino? Für jede Bearbeitung / Analyse des Bildes 
hat der kleine doch zu wenig Speicher.

von e-techniklaie (Gast)


Lesenswert?

Stefan H. schrieb:
> Darf man fragen was es für eine sinnvolle Anwendung gibt für einen
> Bildsensor am Atmega/Arduino? Für jede Bearbeitung / Analyse des Bildes
> hat der kleine doch zu wenig Speicher.
Der dient nur dazu das Bild (und nur eines) von der Cam auszulesen und 
weiterzureichen bzw. zwischenzuspeichern (SRAM oder SD-Karte). 
Analysiert wird auf dem Ding gar nichts. "Verarbeiten" sieht so aus, 
dass alles weggeworfen wird ausser dem Grauanteil des Bildes und das in 
der kleinsten Auflösung, mehr brauche ich nicht. Dafür sollte das Ding 
reichen, ausserdem habe ich nix anderes hier, andere haben das auch 
schon hinbekommen, notfalls muss man in Segmenten lesen, für Bilder wo 
sich nix bewegt geht das, wenn da mal ein Streifen oder Versatz drinn 
ist stört das nicht.

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.