www.mikrocontroller.net

Forum: FPGA, VHDL & Co. einfaches Monoflop


Autor: Ralph H. (guru)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich beschäftige mich grade mit der Erzeugung eines Impulses mit einer 
festen Dauer, der jedesmal erzeugt werden soll, wenn am Eingang einer 
Schaltung eine L/H Flanke auftritt, also ein klassisches Monoflop.
Wie könnte ein einfaches Monoflop zum üben aussehen, welches bei einer 
L/H Flanke einen L-Impuls L von konstanter Dauer von z.b. 5mikrosec 
liefert?
Das Monoflop soll NICHT nachtriggerbar sein, dafür sehr einfach.
Vielen Dank für Eure Hilfe !

Autor: Duke Scarring (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich würde dafür einen getakteten Zähler verwenden.

Duke

Autor: Eddy Current (chrisi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Duke Scarring schrieb:
> Ich würde dafür einen getakteten Zähler verwenden.

Bravo! Dann sage ich mal: Nachdem nicht bekannt ist, wie oft das 
Monoflop ausgelöst werden soll, würde ich eine Schmelzsicherung 
verwenden. Die ist definitiv nicht nachtriggerbar.

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

Bewertung
0 lesenswert
nicht lesenswert
Ralph H. schrieb:
> Ich beschäftige mich grade mit der Erzeugung eines Impulses mit einer
> festen Dauer, der jedesmal erzeugt werden soll, wenn am Eingang einer
> Schaltung eine L/H Flanke auftritt, also ein klassisches Monoflop.
Zeiten werden (mal von bösen RC-Tricks abgesehen) in FPGAs und CPLDs 
immer mit Zählern gemacht...

> Wie könnte ein einfaches Monoflop zum üben aussehen, welches bei einer
> L/H Flanke einen L-Impuls L von konstanter Dauer von z.b. 5mikrosec
> liefert?
In welcher Beschreibungssprache?
VHDL:
 signal cnt : integer range 0 to 10 := 0;
:
:
 process (clk, eingang) begin
    if eingang='1' then
      cnt <= 0;
      ausgang <= '1';
    elsif rising_edge(clk) then
       if cnt<10 then
          cnt <= cnt+1;
          ausgang <= '1';
       else
          ausgang <= '0';
       end if;
    end if;
BTW: ich würde das so (mit dem asynchronem Laden) nicht machen, sondern 
eine synchrone Lösung anstreben. Dafür fehlt aber noch einiges an 
Information...

> Das Monoflop soll NICHT nachtriggerbar sein,
Das wäre aber das einfachste... ;-)

Autor: Ralph H. (guru)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hm.. ob mir die beiden Beiträge wirklich helfen ;-)

Also das Monoflop wird relativ regelmäßig angestoßen, ca. aller 50ms..
und der Impuls der es anstößt liegt bei ca. 2ms Dauer.. daraus soll ein
fester Impuls von 2mikrosec werden..

Autor: Ralph H. (guru)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry Lothar, da hatten sich unsere Beiträge überschnitten...

Warum ist ein nachtriggerbares Monoflop einfacher ? und was ist hier der 
Unterschied von synchron und asynchron ? Das erschließt sich mir nicht 
richtig.
Fakt ist, das Monoflog wird sehr regelmäßig angestoßen und zwar von 
einen bestimmten Zählerstand, der aber viel zu lang ist und daher 
verkürzt werden muss.

Autor: Balduin T. (balduin)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du willst also einen 2ms Impuls auf 2us verkürzen.

Dann solltest du im obigen beispiel "eingang" auch flankengetriggert 
machen.

Suchst du überhaupt eine FPGA oder CPLD Lösung ?

Autor: Ralph H. (guru)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich suche eine CPLD Lösung :-)

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

Bewertung
0 lesenswert
nicht lesenswert
Ralph H. schrieb:
> Ich suche eine CPLD Lösung :-)
Das ist schlecht, denn Zähler brauchen FFs, und CPLDs haben nur sehr 
wenige davon...  :-/

Ralph H. schrieb:
> daraus soll ein fester Impuls von 2mikrosec werden..
Waren das nicht gerade eben noch 5 us?
D.h. die Pulsdauer ist nicht soooo wichtig... ;-)
Dann gibt es auch einen Workaround (aka. Bastellösung):
das externe RC-Glied am CPLD-Pin.

Du lässt den Impulseingang einmal direkt ins CPLD (inp) und einmal über 
ein RC-Glied mit t=2us (inpdelay). Im CPLD ist dann etwa folgender Code:
   outp <= '1' when inp='1' and inpdelay='0' else '0';

> Warum ist ein nachtriggerbares Monoflop einfacher ?
Weil dann einfach solange der Eingang '1' ist, der Ausgang auch '1' sein 
darf. Es muss also keine Flanke des Eingangssignals erkannt werden...

> Fakt ist, das Monoflog wird sehr regelmäßig angestoßen und zwar von
> einen bestimmten Zählerstand, der aber viel zu lang ist und daher
> verkürzt werden muss.
Normalerweise müsstest du direkt am Zähler angreifen...

Autor: Ralph H. (guru)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK Lothar, die externe Lösung fällt leider aus... da werd ich erstmal 
zum Zähler greifen müssen..
Aber ich denke, wir rutschen erstmal mal ins neue Jahr und wünschen uns 
das wir alle Gesund bleiben, so wir es sind :-)
Nächstes Jahr gehts dann wieder los :-) und weiter mit dem Basteln :-)

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.