Forum: FPGA, VHDL & Co. Mein FPGA-Projekt (CCD-KAMERA=>FPGA=>VGA-DISPLAY ) braucht Eure Hilfe


von GS (chromosoma)


Angehängte Dateien:

Lesenswert?

Guten Tag.
Vor etwa 3 Monaten habe ich meine FPGA DE1 Board gekauft und nach der 
VHDL-Einführung direkt  mit dem ersten Projekt angefangen.
An sich nichts besonderes:
Eine CCD-Kamera wird angeschlossen und  ausgelesen.Anschließend wird das 
Bild auf dem Monitor ausgegeben (Via VGA schnittschtelle).

Danach werde ich an der Mustererkennung arbeiten, aber das kommt erst 
später.

Im moment stecke ich fest, deswegen schreibe ich diesen Beitrag.

Stand der Sache:

Die S/W CCD-Kamera (500x582,420 TV Linien, CCIR) wird an den AD-Wandler 
(THS1031 30MSPS)  Angeschlossen. AD-Wandler liefert 4 Bit (DE1 hat  nur 
4 BIT pro Farbe) an die DE1.

An sich nichts besonderes.
Es hat mir aber viele schlaflose Nächte gekostet, bis ich rausgefunden 
habe, wie ich das Vidosignal richtig aufnehme( erst nach dem ich den 
Voltcraft 1062D gekauft habe).
Außerdem liefert die  Kamera PAL-Video, d.h zuerst werden die geraden 
Zeilen gesendet, und danach die ungeraden. Das Bild besteht also aus 
zwei Aufnahmen.
 Und hier steckt mein Problem, ich kriege die beiden Aufhnahmen nicht 
perfekt übereinander.Diese sind immer um 2-3  Pixel verschoben, deswegen 
sieht das Bild  sch.... aus (s. Bild).

Um das Videosignal an der richtiger Stelle zu triggern  habe ich eine 
Mustererkennung realisiert. Dabei wird die Dauer des 
High-Zustandes(Pulsdauer) gemessen. So erkenne ich die vertikale 
Synchronistation (für geraden und ungeraden Linien)

Wie man auf dem Bild sieht  gibt es ein art Jitter, d.h. die Triggerung 
erfolgt nicht immer gleich schnell. Dies könnte  die Ursache für die 
falsche Überlagerung sein, obwohl das sind nur 90 ns, bei Samplerate von 
9 MHz  soll diese Zeit keine Rolle spielen.
ich habe wirklich versucht diesen Jitter zu beheben, leider ohne Erfolg.
Ich denke, das Problem liegt ehe an synchronisation zwischen 
verschiedenen Komponenten in VHDL-Code.

Kann mir da jemand bitte  Helfen. Ich weiss, das ist eine umfangreiche 
Frage, aber ich habe extra  mein Code für sie kommentiert :D



Jetzt kurze Kommentage zu den Bildern:

Bild1:Blau-Videosignal, Gelb- Triggerung für die Aufnahme
Bild2:Wie man sieht, wird nicht immer gleich getriggert, dt=90 ns
Bild3:hier sieht man sehr gut, dass die zeilen immer im 1-2 Pixel 
verschoben werden.Liegt das an diesen 90 ns?
Bild4: Bild gesamt...Paulander=)
Bild5 und 6: Versuchsaufbau

Anbei das Projekt.

PS
Da ich ein Anfänger bin, bin ich auch für alle sinnvolle Kommentare 
bezüglich  meinem Programmierstil sehr dankbar.
Vielen dank fürs lesen:)

von Strubi (Gast)


Lesenswert?

Hi Anton,

deinen Code habe ich mir nicht genauer angesehen (Tip: Mit 
Tab-Einrückungen arbeiten). Weitere Tips geben dir bestimmt noch einige 
Syntax-Gurus hier.

Aber: Klingt so, als ob Du Dir die Antwort schon selbst gegeben hast -- 
für mich sehen die zerfransten Ränder sehr nach Aliasing von zwei 
Frequenzen aus.
Die Einsynchronisation sollte auf jeden Fall mit dem Pixelclock 
erfolgen, nicht mit dem Systemclock.
Dann die Geschichte mit dem PAL-Format: Die ungeraden/geraden Linien 
sind vertikal immer etwas versetzt, dein Bild wird in der 
VGA-Übersetzung also immer etwas wackeln, ausser du baust einen 
"deinterlacer" ein. Da kommst Du ohne ganzen Frame-Buffer nicht aus (ins 
Block-RAM wird der wohl grade nicht reinpassen). Aber Du meintest wohl 
vor allem das horizontale Problem.
Also mein Tip wäre -- wenn das eine Option ist: Einen 
Progressiv-Scan-sensor besorgen (es gibt da günstige Modülchen mit 
Omnivision-Sensoren), da ist das Interlacing-Problem weg, und der Umweg 
über analog auch. Auf ibäh kriegt man auch Aptina-Kameramodule ab 13€.

Gruss,

- Strubi

von Sigi (Gast)


Lesenswert?

Kann mich Strubi nur anschliessen, kauf dir aber besser
ein OV-basiertes Kameramodul (MicronOmnivision's Module
wollen VCC<=3.1V, OV dagegen 3.3V), 1.3MPixel kosten
gerade mal 8Euro.

Falls doch analog: Schau mal nach LM1881, dass ist ein
VideoSyncSeparator, der erledigt für dich das Auffinden
von Bild/Zeilenanfang und Halbbilderkennung.

von GS (chromosoma)


Lesenswert?

Danke für die Antworten.
Ich denke, wenn mir hier keiner mit diesem Alising  hilft, werde ich 
doch ein  progressive-scan Modul besorgen. Leider habe ich nichts 
billigeres im Netz gefunden (<50 Euro).
Für inen Link wäre ich dankbar;)

Ah ja, es gibt ein Grund wieso ich eine analoge Kamera bevorzugte, für 
ADC brauhe ich nur noch 10 Pins auf dem FPGA Board. Alle 
fortgeschrittene  Kameramodule verlangen Ü30 Ein/ausgängen. Ich wollte 
aber die GPIO auf dem Board einwenig sparen, da ich die später 
gebrauchen kann.

Anton

von Jojo S. (Gast)


Lesenswert?

Die Aptina Module kann man über serielles LVDS auslesen, die sind sehr 
FPGA freundlich.
Analog findet man auch komplette Kameras von JAI oder Sony als 
gebrauchte Teile aus Industrie oder Überwachungskamera Einsätzen:
http://www.ebay.de/itm/JAI-CV-M77-Camera-/130868235338?pt=DE_Haus_Garten_Heimwerker_Sicherheitstechnik&hash=item1e785acc4a
Da muss man ein bischen suchen, für viele Teile wollen die Händler noch 
Traumpreise (such nach Jai oder Sony in 'Business & Industrie'). Vorteil 
an diesen Kameras ist das du da einfach ordentliche C-Mount Optiken 
drauf bekommst.
Progressive scan wird übrigends erst recht nötig wenn du bewegte Objekte 
hast, dann hauen die Kammeffekte richtig rein.

von GS (chromosoma)


Lesenswert?

Cool! Danke für den Tipp, die Kamera werde ich verfolgen:)
Interesant sind die  vielseitige Einstelungen und richtige optik:D
Progressive scan will ich wegen einfachere Auslesung. Somit wird der 
oben genannter Alising effekt verschwinden.
Außerdem ist die Auflösung um einiges höher...hm dafür werde ich vll. 
einen  schnelleren ADC brauchen, oder geben solche Kameras das Signal 
digital aus?

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.