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?
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.
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.
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.
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?
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.)
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.
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.
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.
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.
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??
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?
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.
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.
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.