www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Scart RGB Synchronisation


Autor: Andre Z. (slamy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute.
Ich verzweifele gerade, bei dem Versuch mit meine Spartan3 ein PAL 
Signal zu erzeugen, welches dann über Scart RGB zum Fernseher soll

Die monochrome Ausgabe über Composite funktioniert richtig gut und 
erfolgt über das gleiche Kabel.
Als "Fernseher" nutze ich momentan den Commodore 1084, der normalerweise 
von einem Amiga gefüttert wird und definitiv funktionstüchtig ist.
Er bietet außerdem einen Schalter, mit dem Ich einstellen kann, ob er 
Composite oder RGB des Scart-Kabels darstellen soll.

Mein Problem ist nun, dass das Bild im RGB Modus am Anfang nach rechts 
ausschwenkt und dabei auch stark flimmert. Erst nach ein paar Zeilen 
fängt sich die Synchronisation, wobei das Flimmern immer noch präsent 
ist. Dazu kommen starke Unschärfen.

Woran kann das liegen ?
Das Composite Signal, welches ja offensichtlich vernünftig dargestellt 
wird, sollte doch eigentlich auch den Sync für den RGB Modus liefern.

Ich informiere mich unter anderem über
http://de.wikipedia.org/wiki/Fernsehsignal

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie sieht das Sync Signal während des VSync aus? Lässt du dabei VSync 
weiterlaufen, oder ist das Sync Signal in dieser Zeit dauerhaft aktiv?

Autor: Andre Z. (slamy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Wie sieht das Sync Signal während des VSync aus? Lässt du dabei VSync
>weiterlaufen, oder ist das Sync Signal in dieser Zeit dauerhaft aktiv?
Ich verstehe die Fragestellung nicht ganz.
Das beste währe es wohl, wenn Ich meinen Code poste.

Das ist ein Untermodul, welches das eigentliche Grafikmodul mit 
Timingdaten versorgt.
Wenn sync in diesem Modul 1 ist, wird Composite im Scart auf 0 V 
gezogen.
Ist es 0, liegt der Pegel bei 0,3V und manchmal eben höher, da ein 
Monochromes Signal mit übertragen wird.

Wenn Sync auf 1 ist, also 0 V, werden auch automatich die RGB Lines auf 
0 V gezogen.

Ich weiß, dass der Stil extrem grausig ist. Wenn es funktioniert, werde 
Ich eine State-Machine schreiben.

clk80 ist eine 80MHz Clock.

reg [13:0] pal_y;
reg [13:0] pal_x;

reg sync;
reg visiblewindow;
reg backporch;

assign syncout=sync;
assign visiblewindowout=visiblewindow;

assign backporchout=backporch;



assign newline=(pal_x>=0 && pal_x<200);
assign newframe=(pal_y==0);

reg pixelclock;
reg [5:0] pixelclockcounter;

assign pixelclockout=pixelclock;

initial
begin
  pal_x=0;
  pal_y=0;
  pixelclockcounter=0;
  backporch=0;
  sync=0;
end

parameter linelength=5120;
parameter halflinelength=linelength/2;
  
parameter Normalsync=376;
parameter backporchsync=800;
parameter frontporchsync=132;
  
parameter shortsync=Normalsync/2;
parameter longsync=halflinelength-Normalsync;

always @ (posedge clk80)
begin
  //Ausgangssituation für jeden Durchlauf
  
  //Nach jedem Clock zählen wir die X Position hoch
  pal_x=pal_x+1;
  
  
  if (pal_x==linelength)  //5120 clk80 posedges pro Zeile ala 64 Mikrosekunden
  begin
    pal_x=0;
    pal_y=pal_y+1;
    pixelclockcounter=0;
    
    if (pal_y==312) //Nach jedem Frame
    begin
      pal_y=0;

    end
  end
  
  
  //Nun kommen wichtige Signale für ein korrektes PAL Signal.
  
  if (pal_y >= 5 && pal_y <=309) //In diesen Zeilen ist das sichtbare Bild
  begin
      
    if (pal_x >= 0 && pal_x < frontporchsync) //Frontporch
    begin
      sync=0;
      backporch=1;
      visiblewindow=0;
      
    end
      
    else if (pal_x >= frontporchsync && pal_x < frontporchsync+Normalsync) //1 Normal Sync
    begin
      sync=1;
      backporch=0;
      visiblewindow=0;
      
    end
    else if (pal_x>=frontporchsync+Normalsync && pal_x< frontporchsync+Normalsync+backporchsync) //Back Porch
    begin
      backporch=1;
      visiblewindow=0;
      sync=0;
    end
    else //Die sichtbaren Daten
    begin
        backporch=0;
        sync=0;
        visiblewindow=1;
        
        if (pixelclockcounter==0)
          pixelclock=1;
        else
          pixelclock=0;
        
        pixelclockcounter=pixelclockcounter+1;
        if (pixelclockcounter==11)
          pixelclockcounter=0;
      
    end
  end
  else
  begin
    visiblewindow=0;
    backporch=0;
    
    if (pal_y==0 || pal_y==1) //2 Long Syncs
    begin
      if ((pal_x>=0 && pal_x<longsync) || (pal_x>=2560 && pal_x<2560+longsync))
        sync=1;
      else
        sync=0;
        
    end
    else if (pal_y==2) //Ein Long und ein Short Sync
    begin
  
      if ((pal_x>=0 && pal_x<longsync) || (pal_x>=2560 && pal_x<2560+shortsync))
        sync=1;
      else
        sync=0;
    end
    else if (pal_y==3 || pal_y==4 || pal_y==309 || pal_y==310 || pal_y==311)//2 Short Syncs
    begin
      
      if ((pal_x>=0 && pal_x<shortsync) || (pal_x>=2560 && pal_x<2560+shortsync))
        sync=1;
      else
        sync=0;
    end
  end
end  


Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Andre Z. schrieb:
>>Wie sieht das Sync Signal während des VSync aus? Lässt du dabei VSync
>>weiterlaufen, oder ist das Sync Signal in dieser Zeit dauerhaft aktiv?
> Ich verstehe die Fragestellung nicht ganz.

Sorry, ich meinte HSync im 2. Satz.
Aber das scheint der Fall zu sein wenn ich den Code richtig 
interpretiere.
Hast du das Timing rund um den VSync mal simuliert bzw. nachgemessen?
Ein verzerrtes Bild deutet immer darauf hin, dass das Timing falsch ist, 
daher die Frequenz im Monitor wegdriftet und die PLL erst wieder 
einrasten muss.

Autor: Christian Berger (casandro) Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Andre Z. schrieb:

> Mein Problem ist nun, dass das Bild im RGB Modus am Anfang nach rechts
> ausschwenkt und dabei auch stark flimmert. Erst nach ein paar Zeilen
> fängt sich die Synchronisation, wobei das Flimmern immer noch präsent
> ist. Dazu kommen starke Unschärfen.

Hmm, also die Commodore Monitore hatten manchmal etwas Probleme. Hast Du 
schonmal die VCR-Taste gedrückt? Ist vielleicht der Pegel des 
Synchronsignales falsch? Es müsste genau die selben Pegel wie beim 
normalen Videosignal sein. Wie schon gesagt, die alten Commodore 
Monitore sind da vom Pegel her etwas zickig.

Autor: Andre Z. (slamy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Hmm, also die Commodore Monitore hatten manchmal etwas Probleme.
Das glaube ich. Den Atari ST mag er leider auch nicht.

>Hast Du schonmal die VCR-Taste gedrückt?
Das macht es nur noch schlimmer.

>Ist vielleicht der Pegel des
>Synchronsignales falsch? Es müsste genau die selben Pegel wie beim
>normalen Videosignal sein.
Ich könnte dich küssen! Danke!
Es lag tatsächlich am Pegel.
Meine D/A Wandler für die Farbanteile sind nicht ganz akkurat.
100 % liegt bei 0,9 V. Erlaubt sind aber eigentlich nur 0,7.

Aber eigentlich sollte das doch nicht so den Unterschied machen, oder ?

Auf jeden Fall scheint der 1084 von Commodore sich nicht an die 
Spezifikationen zu halten.
Ich hatte vorher 750 Ohm zwischen 3,3V Ausgang und dem Composite Eingang 
am Scart Kabel. Der Eingangswiderstand bei Composite sollte bei 75 Ohm 
liegen.

3,3*75/(750+75)=0,3 V

Laut Spezifikation müsste das reichen. Tat es aber nicht.


3,3*75/(300+75)=0,66 V
Selbst das reicht nicht...

3,3*75/(200+75)=0,9 V
Erst jetzt habe ich keine Synchroprobleme mehr.

Aber warum muss der Schwarzlevel vom Composite dem hellsten Level des 
RGB Signals entsprechen ?
Das macht doch keinen Sinn!

Das Problem ist jetzt zwar gelöst und Ich bin relativ zufrieden.
Jedoch habe ich nun nicht mehr die Möglichkeit parallel noch ein 
Composite Signal mitzuschicken.

EDIT:
Mit 100 Ohm wirkt es gefühlsmäßiger noch klarer.
3,3*75/(100+75)=1,4 V

Aber ist das noch erlaubt ?
Und vielleicht ist es auch nur Einbildung.

Autor: Christian Berger (casandro) Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Andre Z. schrieb:

> Aber warum muss der Schwarzlevel vom Composite dem hellsten Level des
> RGB Signals entsprechen ?
> Das macht doch keinen Sinn!

Eigentlich sollte es das nicht. Wie schon gesagt die alten Monitore 
haben da oft schwierigkeiten. Übrigens manchmal auch, wenn Du die an 
eine normgerechte Quelle anschließt. Was ich noch mal machen würde, wäre 
einfach einen Elko in Reihe schalten um den Gleichspannungsanteil zu 
eliminieren. Vielleicht ändert das was bei den Monitoren.

> EDIT:
> Mit 100 Ohm wirkt es gefühlsmäßiger noch klarer.
> 3,3*75/(100+75)=1,4 V
>
> Aber ist das noch erlaubt ?
> Und vielleicht ist es auch nur Einbildung.

Also kaputt geht bei 1,4 Volts noch nichts.

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.