mikrocontroller.net

Forum: FPGA, VHDL & Co. Schwierigkeiten mit dem Video Decoder auf dem Altera DE2 Board


Autor: Prediko (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Bevor ich mein Problem schildere schicke ich voraus, dass ich mit 
Quartus II v8.1 Web Edition, dem the Altera DE2 Board (besonders mit dem 
ADV7181B Video Decoder) und dem PAL-Ausgang einer Panasonic Digital 
Camera arbeite.

Um mich in das Thema einzuarbeiten, wollte ich einfach die Clock Zyklen 
zählen, die PAL-Zeile dauert. Das habe ich mit einem sehr einfachen 
Counter, welcher mit HSYNC zurückgesetzt wird und seinen Endwert auf den 
roten LED’s anzeigt, auch hinbekommen. Die Simulation funktionierte auch 
einwandfrei. Aber wenn ich versuche meine Hardware auf den FPGA zu laden 
passiert Folgendes: Es gibt LEDs die durchgängig leuchten und welche die 
sehr schnell blinken. Wenn ich nur die betrachte die durchgängig 
leuchten, dann zeigt mein Counter die richtige Länge einer Zeile an.

Aber ich kann ja die blinkenden nicht außer acht lassen. Sollte nicht 
jede Zeile eines PAL-Signals die gleiche länge haben? An was könnte das 
liegen – an meiner Programmierten Hardware (im Anhang), dem Decoder 
Schaltkreis oder gar meiner Camera?

Ich bin etwas verzweifelt, weil das Problem mir eigentlich so einfach 
erschien, aber mich schon eine ganze Weile gefangen hält. Ich freue mich 
wirklich sehr über jede Hilfe.

MfG Alex

Autor: René D. (Firma: www.dossmatik.de) (dose)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich sehe den Fehler auch nicht auf Anhieb,
Es ist mehr eine Denksportaufgabe.

versuche es mit dem Prinzip "Teile und herrsche."

Ein Prozess für den horizontalen Counter und einen zweiten Prozess für 
den vertikalen Counter.

Da wird es gleich übersichtlicher.

René

Autor: Prediko (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die schnelle Antwort. Ich hab das vorher schon einfach 
probiert und hätte wirklich besser gleich die andere Datei hochladen 
sollen.
Leider kommt es da bei mir auf das selbe Problem heraus.

Ich hab hab wirklich keine Idee mehr woran das liegen könnte. Laut 
Datenblatt vergehen 1728 Takte bis zum nächsten HSYNC Impuls. Da ich 
während des HSYNC Impulses keine Takte zähle, bleiben bei mir demzufolge 
1726 Takte. Wie gesagt, ich komme auch auf die Anzahl, aber eben nur 
wenn ich nur die dauerhaft leuchtenden LEDs betrachte alle anderen 
blinken ganz schnell. Das würde ja bedeuten, dass zwischendrin Zeilen 
mit anderen Längen auftreten und das macht aber ja keinen Sinn.

Vielleicht hat ja jemand schon ähnliche Probleme mit dem Decoder 
gemacht. Oder es ist wirklich der PAL Ausgang der Camera, der den 
Decoder dazu bringt, dass er so komisch reagiert. Aber andererseits kann 
ich mir das auch nicht vorstellen.
Der Decoder läuft auch mit den Grundeinstellungen.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
     if(hsync = '0') then
      pstate <= '1';
      pixel_count <= pcount;
    elsif(rising_edge(video_clk)) then
Ein Klassiker: Ein asynchroner Reset ist schlecht.
Wenn das zudem noch ein funktionales Signal ist, entspricht das einer 
Statemachine mit einem asynchronen Eingang. Sieh dir mal die Erklärung 
dazu an: 
http://www.lothar-miller.de/s9y/archives/64-State-...

Fazit: Es ist Zufall, was passiert, wenn hsync = '1' wird...

Warum machst du es nicht so:
  if(rising_edge(video_clk)) then
           if(hsync = '0') then
         pstate <= '1';
         pixel_count <= pcount;
           else
               if vsync = '0' then
                  :

Autor: Alexander Praedicow (prediko)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank für die Antwort. Ich habe es auf jeden Fall jetzt einmal so 
gemacht, wie du mir vorgeschlagen hast. Leider komme ich erst morgen 
wieder an das Board ran. Ich werde dann Bescheid geben, ob es so 
funktioniert hat.

Autor: Alexander Praedicow (prediko)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab es jetzt auf das DE2 Board gespielt und es funktioniert zwar 
wesentlich besser, aber immer noch nicht einwandfrei.
Das heißt im Prinzip, dass der Kontrast zwischen den LEDs größer 
geworden ist. Allerdings blitzen die "falschen" LEDs immer noch auf.

Hat vielleicht irgendwer noch eine andere Fehlerstelle gesehen? Oder hab 
ich gar einen neuen Fehler rein gemacht?

Vielen Dank für eure Zeit.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Hat vielleicht irgendwer noch eine andere Fehlerstelle gesehen?
Ich würde mal eine Flankenerkennung auf den Hsync setzen, und dann von 
Flanke zu Flanke zählen: 
http://www.lothar-miller.de/s9y/categories/18-Flan...

> Allerdings blitzen die "falschen" LEDs immer noch auf.
Bist du sicher, dass nicht doch mal zwischendurch unterschiedlich lange 
Sync-Impulse kommen? Z.B. durch den vsync, denn der kann dir das Zählen 
unterbrechen:
      if vsync = '0' then
        if hsync = '0' then

Autor: Alexander Praedicow (prediko)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Danke Lothar, dass sieht wirklich schon viel besser aus.
Ich hab einfach das edge_detect Design von dir genommen und den 
Rise-Ausgang im Schematic an mein Design (l_counter_micro_2.vhd) 
angekoppelt. Und jetzt halten die LEDs verhältnismäßig ruhig.
Verhältnismäßig bedeutet hier, dass er offensichtlich zwischen den 
Werten 1725 und 1726 hin und her springt. Ich bin mir nicht ganz sicher 
woran das liegen könnte.
Ich verstehe ehrlich gesagt auch noch nicht so richtig, wieso es nicht 
schon vorher funktioniert hat. Die Systematik ist doch die Gleiche 
geblieben. Es liegt quasi ausschließlich an der Synthese?

Autor: matzunami (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi... ich mache momentan auch eine Bildverarbeitung mit einem FPGA 
(Virtex5). Am Anfang wollte ich mir auch meine Pixel und Linien 
mitzählen, da ich kein schönes stehendes Bild hatte. Und siehe da, ich 
hatte den selben Effekt wie du, meine Pixelwerte schwankten leicht. Dies 
lag aber nicht an der Synthese, sondern an meinem Aufbau (Leitung vom 
Sensor zum FPGA Board). Habe diesen geändert und schon funktionierte 
alles. eventuell hast du ja ein ähnliches Problem? Wie überträgst du 
deine Sensordaten?

mfg
matzunami

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ich bin mir nicht ganz sicher woran das liegen könnte.
Wie steil sind die Flanken des HSYNC? Zu welchem Zeitpunkt kommt die 
Flanke des HSYNC? Evt. zusammen mit der Taktflanke?
Nimm mal testweise die  falling_edge(video_clk)...

Autor: Alexander Praedicow (prediko)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
An Lothar:
Ich hab nach Simulation schon vermutet, dass die Zeit, die der 
RISE-Impuls stehen bleibt, vielleicht etwas knapp werden könnte und habe 
in deinem edge detector auf falling_edge umgesattelt. Das Ergebnis war 
identisch - keine Besserung.
Die Rise/Fall Time der Ausgänge beträgt laut Datenblatt 1 ns. Die Flanke 
des HSYNC kommt mit der fallenden Flanke des Taktes.


An Matzunami:
Ich kann an dem Routing nichts machen. Ich nutze das vorgefertigte DE2 
Board von Altera. Und falls du den Weg von meiner Kamera zum Board 
meinst - da kann ich auch nicht viel machen. Ich hab leider nur diese 
Eine und dazu nur dieses eine Kabel.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Die Flanke des HSYNC kommt mit der fallenden Flanke des Taktes.
Wie steil und sauber ist die HSYNC-Flanke (gemessen)?

Autor: Alexander Praedicow (prediko)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Leider komm ich so ohne Weiteres nicht da ran. Ich versuche das mal 
herauszubekommen.

Danke noch mal, und wenn jemandem noch etwas auffällt, dann würde ich 
mich freuen, wenn er es sagt.

MfG Alex

Autor: Alexander Praedicow (prediko)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
So, dann will ich die Sache hier mal etwas abrunden. Ich hab mir heute 
mal den Takt und HSYNC mit einem Oszi angeguckt und sehr erstaunliche 
Erkenntnisse erlangt.
Altera hat das DE2 Board in zwei Revisionen herausgebracht. Die 
unterscheiden sich äußerlich nur durch einen anderen Typ von 
Kondensatoren. Ist ja auch egal.
Auf jeden Fall sieht es wohl so aus, dass bei der älteren Revision (mit 
der habe ich gearbeitet) der Takt absolut asynchron zum HSYNC läuft. 
Wenn ich auf eins der beiden Signale getriggert habe ist das andere 
immer davon gelaufen.
Glücklicherweise waren im Labor auch Boards der zweiten Revision 
vorhanden und bei denen kommt der HSYNC genau mit der fallenden 
Taktflanke. Ich hab das bei mehreren Boards ausgetestet.
Quintessenz also, bei den Boards der ersten Revision haut da irgendwas 
nicht hin. Ich kann mir auch gar nicht vorstellen wie das gehen soll, da 
ja das HSYNC Signal im Decoder mit dem selben Takt erzeugt wird.
Das passt auch alles genau zu meinem Ergebnis. Da mein Counter ja 
offensichtlich 1726 +- 1 angezeigt hat.
Auf jeden Fall bin ich sehr dankbar für den Hinweis, die Signale zu 
messen und hab mir jetzt ein Board der zweiten Revision mitgenommen :)

MfG
Alex

PS: ich hab mal trotzdem schnell die zwei Bilder angehängt. Die 
Bezeichnungen sprechen für sich.

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]
  • [vhdl]VHDL-Code[/vhdl]
  • [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.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

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