mikrocontroller.net

Forum: FPGA, VHDL & Co. Zähler inkrementieren


Autor: Hans Hirsch (hanshirsch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, ich habe folgendes Problem:
Ein Zähler soll bei jedem Tastendruck um 1 inkrementiert werden. (nicht 
gestartet werden!!!)

Es muss sozusagen ein Puls erzeugt werden, der z.B. eine Taktperiode 
lang ist.
Wie realisiere ich das? Es muss wohl ein Signal oder Variabel 
gespeichert werden?

H.H

Autor: Joachim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Versuch es doch mal damit:

http://www.handzaehler24.de/epages/61863302.sf

Oder gehe mal mehr ins Detail, was du eigentlich willst.

Gruß
Joachim

Autor: Der Besucher (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich würde es wie folgt machen:

* vollsynchrones Design
* Einsynchronisierung des Taster-Signals mit 2 Flipflops
* dann einen Debouncer
* am Ausgang des Debouncers die Steigende Flanke detektieren (kann man 
auch in den Debouncer einbauen)
* bei steigender Flanke den Zähler incrementieren.

Kann man in ein paar Zeilen VHDL/Verilog realisieren.

Hier mal der Code eines Debouncers, den ich vor ein paar Wochen gebaut 
habe und genau dein Problem löst:

signal taster_pulse   : std_logic;
signal taster_s0      : std_logic;
signal taster_s       : std_logic;
signal taster_count   : natural range 0 to 255;

-- debouncer for taster
process(resb,clk)
begin
  if resb = '0' then
    taster_s0 <= '0';
    taster_s <= '0';
    taster_count <= 0;
  elsif rising_edge(clk) then
    taster_s0 <= taster;
    taster_s <= taster_s0;
    if taster_s = '0' then
      taster_count <= 0;
    elsif taster_count /= 255 then
      taster_count <= taster_count + 1;
    end if;
  end if;
end process;
taster_pulse <= '1' when taster_count = 254 else '0';


Anzumerken ist, das taster_pulse in einem synchronen Prozess verwendet 
werden sollte (also dein Zähler). Ansonsten kann man taster_pulse auch 
noch ein Flipflop spendieren. War aber bei mir nicht notwendig. Sehe 
gerade, die Einsynchronisierung ist auch schon drin.

Der Besucher

Autor: Hans Hirsch (hanshirsch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> if resb = '0' then

Welche Abfrage ist diese Zeile?

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

Bewertung
0 lesenswert
nicht lesenswert
> Welche Abfrage ist diese Zeile?
Deine Frage sollte wohl lauten: Welche Funktion hat diese Zeile?
Antwort: das ist der asynchrone low-aktive Reseteingang...

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.