Forum: FPGA, VHDL & Co. Dauerbrenner: Taster entprellen.


von berndl (Gast)


Lesenswert?


von Yalu X. (yalu) (Moderator)


Lesenswert?

Bei dem Aufwand an ICs (2 bis 3 Stück pro entprellte Taste) ist es wohl
in den meisten Fällen einfacher, Umschalttaster mit nachgeschaltem
RS-Flipflop zu verwenden. Und wenn ein Mikrocontroller mit im Spiel ist,
macht man die Entprellung sowieso besser per Software.

Edit:

Ich sehe jetzt erst, dass das im FPGA-Forum gepostet wurde. Da liegt der
Fall natürlich ganz anders.

: Bearbeitet durch Moderator
von Sigi (Gast)


Lesenswert?

Mag vlt sein, dass die Schaltung für einige
Taster funktioniert, meiner Erfahrung nach
gibt's viele Taster, bei denen Fehlsignale
erzeugt werden (auch auf DebBoards bekannter
Hersteller).
Such einfach mal im Netz nach Taster und
Timing für den Schaltvorgang. Du wirst
überrascht sein.

von Sigi (Gast)


Lesenswert?

Ops, das mit dem Zahler habe ich falsch
gelesen, hab's für ein Shiftreg gehalten.
Ist aber trotzdem umständlich. Einfach
ein Zähler und damit ein Sample-Event
erzeugen. Die Zählerlänge muss naatürlich
vorher gemessen werden, ist von Board zu
Board unterschiedlich.

von Harald W. (wilhelms)


Lesenswert?

berndl schrieb:

> http://www.elektroniknet.de/distribution/design-in/artikel/133350/
> (kommt ja hier auch immer wieder mal)

Man könnte ja auch mal einfach im Tutorial des µC.net nachsehen.
https://www.mikrocontroller.net/articles/Entprellung

von berndl (Gast)


Lesenswert?

war ja nur mal als Denkanstoss gemeint...
Und funktioniert ja fast genauso wie PEDAs SW-Implementierung im 
Controller...

von Weltbester FPGA-Pongo (Gast)


Lesenswert?

Verwunderlich, daß Digi das jetzt publiziert. Was soll das? Werbung?

Die Schaltung ist ja Standard zur Erkennung von Flanken und zeitlicher 
Unterdrückung - wie will man es sonst machen?

So ist es aber nur intern benutzbar! Wenn sie es richtig machen würden, 
müssten sie das erste Signal noch einsynchen, also noch ein FF setzen, 
weil es im Kontext einen FPGA-Designs gfs aufgelöst wird.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Weltbester FPGA-Pongo schrieb im Beitrag #4702232:
> Wenn sie es richtig machen würden, müssten sie das erste Signal noch
> einsynchen
Nicht nötig. Denn das Signal geht ja garantiert nur auf 1 Flipflop. 
Deshalb können keine inkonsistenen Zustände im FPGA auftreten. Und 
Metastabilität ist jier sowieso kein Problem...

von Sigi (Gast)


Lesenswert?

Das Hauptproblem bei dieser und vergleichbaren
Ansätzen ist der Resourcenverbrauch. Bei einem
Taster noch kein Problem, wenn man aber mehrere
Taster oder ein Tastenfeld (per MUX angesteuert)
hat, dann ist nunmal wie bei uCs der
Timerinterrupt-Ansatz der beste Weg. Da wird
einfach nur gesampelt (bzw. parallel dazu für
ein Tastenfeld geMUXt) und man erhält alle
5-10 ms einen "perfekten" Zustand.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

berndl schrieb:
> Und funktioniert ja fast genauso wie PEDAs SW-Implementierung im
> Controller...
Naja, der Trick an dieser Implementierung sind die "seitlichen" Zähler, 
wo das erste Zählerbit in einem Byte und das zweite Bit im anderen Byte 
ist. Und somit pro Rechenoperation gleich 8 Zähler auf einmal zählen. 
Das lässt sich so nicht auf FPGAs übertragen, weil es dort ja keine 
Byte-Orientierung gibt...

Ein etwas anderer Ansatz ist es, eine Pegeländerung des Eingangssignals 
nicht ganz vorn zu detektieren, sondern den internen entprellten Pegel 
mit dem Eingang zu vergleichen. Dann kommt sowas wie beim MAX6816 
heraus:
http://www.lothar-miller.de/s9y/archives/4-Tasterentprellung-wie-MAX6816.html

Sigi schrieb:
> Das Hauptproblem bei dieser und vergleichbaren Ansätzen ist der
> Resourcenverbrauch.
Ein Rechenbeisüiel dazu: es sollen 20 Taster mit 20ms entprellt werden, 
der FPGA-Takt ist 50MHz, also 20ns pro Takt.

Pro Taster, der mit 20ms entprellt werden soll, dann ist dafür ein 20 
Bit (20ms/20ns = 1000000 = 20Bit) breiter Zähler nötig. Bei 20 Tastern 
wären das dann 400 Bits/Flipflops.

Deshalb ist es dort dann sinnvoll, einen einzigen Clock-Enable mit z.B. 
2ms zu erzeugen (2ms/20ns = 100000 = 17 Bits), denn dann reichen jeweils 
noch 3 Bit pro Taster für den Entprellzähler (7*3ms=21ms). In der Summe 
sind das dann bei gleicher Funktionalität nur noch 17+(20*3) = 77 
Flipflops. Der Ressourcenverbrauch wurde so auf 20% reduziert.

Peters Lösung für den Mikrocontroller hat sogar nur 2 Zählerbits pro 
Eingang (weil ja 2 Bytes zum Zählen für 8 Eingänge werdendet werden). 
Damit müsste der Vorteiler für den Clock-Enable also für 5ms auf 19 Bits 
aufgebohrt werden, dafür fallen dann pro Zähler nur noch 2 Bits an. Das 
Resultat sind damit 19+(2*20) = 59 Flipflops, und damit nur 15% der 
ursprünglich benötigten Anzahl.

: Bearbeitet durch Moderator
von Weltbaster FPGA-Pongo (Gast)


Lesenswert?

Lothar M. schrieb:
> Weltbester FPGA-Pongo schrieb im Beitrag #4702232:
>> Wenn sie es richtig machen würden, müssten sie das erste Signal noch
>> einsynchen
> Nicht nötig. Denn das Signal geht ja garantiert nur auf 1 Flipflop.
> Deshalb können keine inkonsistenen Zustände im FPGA auftreten. Und
> Metastabilität ist jier sowieso kein Problem...

Das sehe ich anders. In einer echten Schaltung hättest Du Recht, aber 
bei einem FPGA kann alles mit allem zusammengerechnet und gekürzt werden 
und je nachdem, wie die Schaltung dahinter aussieht, werden Register, 
die das Synchronisieren tätigen auch gerne mal absorbiert oder 
dupliziert.

Man muss unbedingt mit einem Constraint sicherstellen, dass das nicht 
passiert.

Und das dopppelte Eintakten ist zumindest bei schnellen Schaltungen ein 
immer noch existierendes Problem- weenn auch theoretisch.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.