[VHDL] Linie auf dem Monitor wandern lassen

OP #417774
Lesenswert?

Hallo ...

also ich habe über den VGA-Port einen Monitor angeschlossen und möchte
jetzt eine Linie zeichnen (was ich schon geschafft habe) und diese hoch
und runter wandern lassen (was ich nicht schaffe) ... schaut euch doch
mal bitte meinen bisherigen Quellcode an ...

wo liegt der Fehler? Was mache ich falsch?

Vielen Dank schon mal im Voraus ...
Angehängte Dateien:
#417775
Lesenswert?

Ohne den Code genauer angeschaut zu haben:
Mach es nicht so umständlich...(besonders das mit dem clk25...)
Um die Linie wandern zu lassen musst Du nur einen extra Zähler
inkrementieren, mit dem vert.Zähler vergleichen. Bei Gleichheit alls
Pixel in der Zeile nach Wunsch färben.
#417777
Lesenswert?

process (clk50_in)
begin
  if clk50_in'event and clk50_in='1' then
    if (clk25 = '0') then
      clk25 <= '1';
    else
      clk25 <= '0';
    end if;
  end if;
end process;

Oh ja, das ist umständlich.

So gehts richtig:

process (clk50_in)
begin
if rising_edge(clk50_in) then
clk25 <= not clk25;
end if;
end process;
Gast #417778
Lesenswert?

Aber den abgeleiteten Clock clk25 sollte man nur als Clock-Enable
weiterbenutzen, nicht als neuen Takt für andere Schaltungsteile. Sonst
ist die Synchronität dahin. Also in etwa so:
1
IF rising_edge(clk_50_in) THEN
2
  IF clk25 = '1' THEN
3
    .....
4
    .....
5
  END IF;
6
END IF;


T.M.
OP #417779
Lesenswert?

Vielen Dank für eure Antworten ... werde das für meine zukünftigen
Programme beherzigen ... gesehen hatte ich das so in einem
VHDL-Tutorium ... daher war ich davon ausgegangen, das ist gut so ...
naja so kann man sich irren ... jetzt weiß ich ja, wie es einfacher
geht ...

hoffe ich komme heute Nachmittag dazu, mein Programm mal umzubauen ...
melde mich dann wieder ...
Gast #417780
Lesenswert?

Obwohl Daniel ein wenig Recht hat, würde ich es dennoch so schreiben:

process (clk50_in)
begin
  if clk50_in'event and clk50_in='1' then
    if (clk25enable = '0') then
      clk25enable <= '1';
    else
      clk25enable <= '0';
    end if;
  end if;
end process;

... da die Schaltung so in jedem Falle definiert anläuft, während die
Negation von einer Initialisierung abhäng ist, die auch erstmal getan
werden muss. Im Übrigen gilt das Gesagte hinsichtlich enable!
OP #417781
Lesenswert?

also ich mein Programm hinsichtlch enable geändert, wie ihr es mir
geraten habt ... ansonsten habe ich es so gelasen, wie es war und wie
auch Jürgen es geschrieben hat ...

nur  weiß ich gerade echt nich weiter, wie Daniel das mit neuen Zähler
meint ... stehe da irgendwie auf dem Schlauch ... also einen Zähler
kann ich schreiben ... das ist kein Prob ... aber womit vergleichen und
wie dann die Linie weitersetzen?

   if (vertical_unten < "0101111111") then
     vertical_unten <= vertical_unten+"0000000001";
    vertical_oben <= vertical_oben+"0000000001";
   end if;

ich dachte immer hiermit müsste das gehen ... bei jedem Tackt
vergleicht er ob vertical unten schon die angegebene Position hat, wenn
nicht setzt er die Position ein runter ...

wo ist der Denkfehler?
#417782
Lesenswert?

Erst einmal musst Du wissen, mit was Du sie laufen lassen wilst. Mit dem
Druck auf einen Taster oder intern oder sonstwas...

Wenn Du das weißt zählst Du bei demjenigen Ereignis einfach einen
Zähler um eins hoch(er muss so breit sein wie dein Vertikalcounter).


Der Vertikalcounter wird pro Sekunde "Wiederholfrequenz" *
"vertikale Pixelanzahl" mal inkrementiert.

Deinen anderen Zähler inkrementierst Du nun(z.B. mit Tastendruck ja
viel langsamer).

Jetzt vergleichst Du bei jedem Takt beide Zähler miteinander. Sind sie
gleich, setzt Du rgb <= "111". Dann hast Du eine weiße Linie. Sind
sie ungleich setzt Du rgb <= irgendwas(je nach Wunsch der Farbe).

Wenn der Zähler jetzt inkrementiert wird wandert Deine Zeile um ein
Pixel nach unten.

Daniel
OP #417783
Lesenswert?

vielen Dank ... also eigentlich wollte ich jetzt erstmal nur, dass die
Linie einfach von oben nach unten wandert ... ohne Ereignis also ...
wenn das geschafft ist, soll da ganze nattürlich per Tastendruck
realisiert werden ... aber hier habe ich auch noch keinen Plan und
leider auch noch keinen schönen Link gefunden, wo das mit der
Tastenabfrage erklärt ist ...

morgen versuche ich mal deine Beschreibung umzusetzen ... melde ich
dann wieder ...
OP #417784
Lesenswert?

ES KLAPPT!!!! ... super die Linie wandert jetzt von oben nach unten und
fängt dann wieder oben an ... jetzt weiß ich auch, wo mein Fehler war
... super ... vielen Dank ...

jetzt brauch ich nur noch die Tastaturabfrage ... aber dafür mach ich
nen neuen Beitrag auf ...
OP #417786
Lesenswert?

hm jetzt habe ich schon einen neuen Beitrag geschrieben gehebt  dachte
nur ist besser für die zukünftige Suche ...

also das mit dem Taster ist kein Problem ... wie du schon sagetst,
Eingangsport definiern und den abfragen ..

aber ich mein eine richtige Tastatur ... angschlossen über den PS2
Port

bin dir echt dankbar für deine Hilfe ...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren