Wahrscheinlich zum 100ten mal. Ich suche jedoch eine gute Moeglichkeit, Tasten per HW zu entprellen. Hierzu habe ich eigentlich nur die Schaltung in diesem Artikel gefunden: http://www.mikrocontroller.net/articles/Entprellung So. Da steht der Taster darf nicht kurzschliessend sein. Heisst das ich kann keine normalen Taster damit verwenden? Gibt es eine bessere oder eine etablierte Loesung, die ich uebersehen habe, eventuell unter Einsatz eines Schmitt-Triggers oder sonst was? War da nicht noch irgendwo ein zweiter Beitrag mit etwas mehr Varianten? Danke fuer die Beantwortung. Gruss, Michael
Wenn ich mir das recht überlege, sollte ein Monoflop, dessen Ausgangsimpuls länger ist als die Prellzeit des Tasters, das auch bewerkstelligen. Man braucht dann auch keinen Umschalter mehr. Mit einem 4528 oder 4538 (aus der CMOS Logik Serie) sollte das recht einfach realisierbar sein. (Oder 555, oder was auch immer.)
Whitespace wrote: > Wenn ich mir das recht überlege, sollte ein Monoflop, dessen > Ausgangsimpuls länger ist als die Prellzeit des Tasters, das auch > bewerkstelligen. Nein, das tut er nicht. Tasten prellen auch beim Loslassen, d.h. Du würdest dann einen 2. Implus kriegen. HW-Entprellung hab ich schon ewig nicht mehr benutzt, schon aufm U880 (Z80) war das in SW viel einfacher. HW-Entprellung würde ich mitm RC-Glied (100k/100n) und 1/6 74HC14 dahinter machen (Pullup am Taster nicht vergessen). Peter
>Tasten prellen auch beim Loslassen, d.h. Du würdest dann einen 2. Implus >kriegen. Ja und? Die Prellzeit des Tasters ergibt sich aus Summe der Prellzeit beim Drücken und beim Loslassen. Daher funktioniert ein Monoflop schon sehr gut...das Problem ist nur, dass Taster mit zunehmendem Alter stärker Prellen und wenn man Pech hat, greift das Monoflop dann nicht mehr. Man bräuchte halt ein adaptives Monoflop bzw. ganz einfach eine Softwareentprellung :)
>dass Taster mit zunehmendem Alter stärker Prellen
Ja, und der Mensch, der die Taste drückt, mit zunehmendem Alter immer
länger drückt. Und wieder ist das Monoflop schon abgelaufen ...
Wenn es unbedingt eine HW-Entprellung sein muss:
Tastenwert in ein Shiftregister eintakten und wenn alle Ausgänge HIGH
sind, dann ein - wenn alle LOW sind dann aus. Also NOR und NAND -
Verknüpfen und das Ergebnis auf dieses NAND-RS-FF geben.
Mit zunehmendem Alter des Tasters das Shiftregister adaptiv verlängern
...
Diese Lösung ist vom Alter des Benutzers unabhängig. ;-)
Ich nehme an, der Artikel will damit ausdrücken, dass der Schalter nicht in einen Zustand kommen darf, in dem beide Alternativwege des Umschalters miteinander Kontakt haben. Sowas ist bei Kippschaltern auch eher unüblich, kann aber bei Schiebeschaltern u.U. vorkommen.
Der Witz an der heutigen Zeit ist, dass viele klassischen Wege zur Hardwareentprellung mehr Platz wegnehmen als ein 6/8-Pin Microcontroller, der nix anderes tut als nur dies.
Hi, > Wie isses mit Schaltungen? The good, the bad and the ugly (aber alle von J. Ganssle, dem "Prell-Guru"); mit Vorschlägen zur Dimensionierung: http://www.embedded.com/columns/breakpoint/18902552?_requestid=799066
hm... dachte mir ich spar mir halt nen bissel Stress mit der Software. Anderseits sollte ich vielleicht einfach per Software entprellen. Wenn man den HW-Weg will is vielleicht ein kleiner Mikrocontroller, der die entprelleten Signale liefert auch ein guter Weg... hab ich noch garnicht daran gedacht ;)
@Karin Peter hat schon recht, da muss man aufpassen. Das funktioniert nämlich nur richtig, wenn das Monoflop nachtriggerbar ist (oder die MF-Zeit recht lang). Mit dem 4538 z.B. geht das wirklich nicht gut, weil das zwar nachtriggerbar ist, aber nur auf Flanken triggert. Mit einem nachtriggerbarem Monoflop mit 555er sollte es aber gehen (so eins wie das http://www.themt.de/el-0230-time-49.htm), weil wenn der Taster gedrück wird, dann geht beim ersten Impuls das Monoflop sofort H und bleibt auch dort, wenn man den Taster hält. Beim Loslassen wird das MF durch das Prellen dann immer wieder nachgetriggert, sodass der Ausgang erst eine MF-Zeit nach dem Letzten Preller L wird. Ich würde das aber nicht so machen, weil zu aufwendig. Ich wollte bloß mal was anderes als das übliche bringen. Konkret würde ich es machen, wie Peter vorgeschlagen hat (oder einfach per SW).
Die Schaltung aus dem verlinkten Artikel hat den Vorteil, dass sie völlig unabhängig von der Prelldauer arbeitet. Sie ist damit auch immun gegen die von HildeK genannten langsamen Menschen, die die Kontakte beim Drücken noch eine halbe Stunde schaben lassen. Umgekehrt funktioniert sie aber auch bei ganz schnellen Menschen, die den Taster nur für einen winzigen Bruchteil einer Sekunde antippen. Einzige Voraussetzung: Die Kontaktzunge des Tasters darf beim Umschalten nicht zwischen den beiden äußeren Kontakten hin- und herspringen (passiert bei den üblichen Tastern eigentlich nie). Außerdem dürfen zu keinem Zeitpunkt alle drei Kontakte miteinander verbunden sein. Das ist wahrscheinlich das, was mit "nicht kurzschließend" gemeint ist. Hardware- und Softwarelösungen mit einem einfachen (nicht umschaltenden) Taster sind zwar weniger aufwendig, dafür muss immer eine Zeitkonstante festgelegt werden, die zwischen der längsten Prelldauer und der kürzesten Betätigung durch den Benutzer liegen muss. Das ist dann nicht leicht, wenn man weder die potenziellen Benutzer noch das Langzeitverhalten des Tasters kennt. In der Praxis — insbesondere bei Billiggeräten — trifft man aber nur noch diese einfachen Lösungen an. Was zählt, ist der Preis.
Wenn ich 10 Taster mit dem NE555 entprellen will wird das aber zu gross und zu energieaufwaendig. Ich hab mich jetzt entschieden das mit einem MC zu machen, soll ja auch moeglichst klein werden.
yalu wrote: > In der Praxis — insbesondere bei Billiggeräten — trifft man aber nur > noch diese einfachen Lösungen an. Was zählt, ist der Preis. Nö. Mit billig hat das nichts zu tun, sondern mit der Sorgfalt und Erfahrung des Programmierers. Prellende Tasten habe ich schon in Fahrstuhlsteuerungen gesehen und die sind bestimmt nicht billig. Die Ursache des Problems ist allein das mangelnde Verständnis des Programmierers. Da werden einfach irgendwelche for-Schleifen als Delayloop zusammengebastelt, ohne deren Laufzeit zu berechnen, bis es zu klappen scheint (Trial & Error). Oder schlimmer noch, es wird die ständig schwankende Laufzeit der Mainloop genommen. Einfache Algorithmen mit Mehrfachabtastung kosten kaum Code und CPU-Zeit und sind sehr zuverlässig. Da man sie nach der Entwicklung vergessen kann, sparen sie auch massig Entwicklungszeit bei zukünftigen Projekten. Ich habe gute Erfahrungen mit 4-fach Abtastung und 10ms Abtastinterval gemacht. Da die typische Reaktionszeit eines Menschen etwa 300ms beträgt, kann man für sehr hohe Anforderungen das Abtastintervall bis auf 75ms erhöhen. Dagegen kann selbst der schlabrigste Prelltaster nicht an. Peter
Jetzt wäre halt interessant, welche Punkte für Hardware-Entprellung und welche für Software-Entprellung sprechen. Ich fange mal an: Vorteil Hardware-Entprellung: - keinerlei Ressourcen vom µC benötigt Vorteile Software-Entprellung: - Einmalige Entwicklungskosten/zeit für die Entprellroutine (unabhängig von der Stückzahl) - Einfacher Aufbau der Hardware -> Weniger Fehlerquellen hier Wäre gut, wenn hier ein erfahrener Entwickler noch ein paar Punkte ergänzen/korrigieren könnte. Von der Stabilität her gesehen, würde ich beide Methoden in der gleichen Größenordung sehen. Hardware ist zwar störunanfälliger als Hardware+Software, aber wenn die Software-Entprellung ausfällt, ist ja meist das ganze µC-Programmbetroffen. Einen eigenen µC nur für die Entprellung zu benutzen ist eine eher schlechte Idee. RC-TP + Schmitt-Trigger-IC sollte störungsunanfälliger und günstiger sein. Zudem muss man hier für die BG keine lange Software-doku und Sicherheitfeatures in der Software erstellen ;-) @ Peter Dannegger: In der Codesammlung habe ich verschiedenen Software-Entprellmethoden gesehen, allerdings nur in Assembler. Hast du so eine Routine auch schon in C geschrieben? Ich bin des AVR-Assembler leider nicht mächtig, sonst hätte ich mir eine solche Routine von dir umgeschrieben.
@ Michael G. Mach das doch mit einem RC-Glied. Bei mir kommt an jedem Ein/Ausgang generell ein Widerstand, ob da nun ein Taster(10k-1M), eine LED(1-10k) oder ein anderer I/O (0-10R) dran ist. Bei den Tastern(große PullUp's) ist der Widerstand größer (10k-1M) und zusätzlich ist da noch ein kleiner Kondensator(100n) dran.
Peter Dannegger schrieb: > yalu wrote: > >> In der Praxis — insbesondere bei Billiggeräten — trifft man aber >> nur noch diese einfachen Lösungen an. Was zählt, ist der Preis. > > Nö. Was heißt hier Nö? Hast du in einem Billiggerät schon einmal Umschalttaster mit nachgeschaltetem RS-Flipflop zur Entprellung gesehen? Wahrscheinlich nicht. Und warum nicht? Weil ein Umschalter teurer ist als ein Schließer und ein RS-Flipflop bzw. zwei µC-Eingänge (wenn man das Flipflop in Software realisiert) teurer sind als ein Kondensator bzw. ein einzelner µC-Eingang. Das wollte ich damit nur aussagen. > Da die typische Reaktionszeit eines Menschen etwa 300ms beträgt, > kann man für sehr hohe Anforderungen das Abtastintervall bis auf > 75ms erhöhen. Ich weiß, du bist hier der Entprellexperte. Aber mit den 300ms wäre ich etwas vorsichtig. Das mag zwar die typische Reaktionszeit sein, auf die kommt es hier aber gar nicht an. Was zählt, ist die Zeitdauer zwischen dem Drücken und dem Loslassen des Tasters, und die ist meist deutlich kürzer. Miss bspw. mal die Zeit, die du für einen Doppelklick (Drücken — Loslassen — Drücken — Loslassen) auf der Computermaus benötigst. Die meisten Mausschubser brauchen dafür weniger als 300ms. Bei mir sind es 200ms (hektisch) bis 250ms (entspannt), d.h. die Taste bleibt gerade mal 67 bis 83ms gedrückt. Und ich bin kein Gamer ;-). Mit Vierfachabtastung und 10ms Abtastintervall werden Tastendrücke von 40ms+Prellzeit sicher erkannt. Damit liegst du noch gut im grünen Bereich. Aber vergößern würde ich die Abtastzeit auf keinen Fall. Diese Gedanken muss man sich bei der Entprellung mittels RS-Flipflop nicht machen, weswegen dies die sauberere, aber eben auch teurere Lösung ist. @Igor Metwet: Hier gibt es Peters Routine in Assembler und C: http://www.mikrocontroller.net/articles/Entprellung#Interrupt-Verfahren_.28nach_Peter_Dannegger.29
yalu wrote: > Was heißt hier Nö? Ja, das ist wohl etwas mißverständlich gewesen. Ich meinte eigentlich, daß teure Geräte nicht immer eine bessere Entprellung als billige haben. Und daß SW-Entprellung nicht unbedingt schlechter als RS-FF Entprellung sein muß (aber leider viel zu oft deutlich schlechter ist). > Miss bspw. mal die Zeit, die du für einen Doppelklick (Drücken — > Loslassen — Drücken — Loslassen) auf der Computermaus benötigst. Die > meisten Mausschubser brauchen dafür weniger als 300ms. Bei mir sind es > 200ms (hektisch) bis 250ms (entspannt), d.h. die Taste bleibt gerade > mal 67 bis 83ms gedrückt. Ich müßte mal ne Maus aufmachen und messen. Ich bin ja schon etwas älter, 67ms werde ich da wohl nicht mehr schaffen. Ich vermute aber stark, daß auch ein Gamer die Tasten bei ner Kaffemaschine, Fahrstuhl, Fernbedienung usw. wesentlich länger drückt. Diese Tasten sind in der Regel nicht ergonomisch und liegen nicht fest auf dem Tisch, da drückt man dann automatisch länger. Mit ner normalen Gerätetaste auf dem Tisch ans Oszi geklemmt, mußte ich mir schon richtig Mühe geben, um unter 300ms zu kommen. Peter
Peter Dannegger schrieb: > Ich meinte eigentlich, daß teure Geräte nicht immer eine bessere > Entprellung als billige haben. Da sind wir einer Meinung. Ich muss da nämlich gerade an den Aufzug an meinem Arbeitsplatz denken :( > Ich müßte mal ne Maus aufmachen und messen. Brauchst du nicht unbedingt. Ich habe die Zeiten mit Hilfe eines Klickibuntiprogramms (Gimp) gemessen. Da gibt es in der RGB-Farbauswahl diese Regler mit zwei Pfeilen, mit denen der jeweilige Farbwert durch Anklicken inkrementiert bzw. dekrementiert wird. Ich habe einfach 10s lang auf den Aufwärtspfeil geklickt, was einen Zählerstand von 60 bis 75 ergab. Daraus ergibt sich eine Klickfrequenz von 6 bis 7,5Hz und eine Tastendrückdauer von 67 bis 83ms, wenn man davon ausgeht, dass die Drück- und die Loslassphase gleich sind. > Ich vermute aber stark, daß auch ein Gamer die Tasten bei ner > Kaffemaschine, Fahrstuhl, Fernbedienung usw. wesentlich länger > drückt. Klar, das hängt natürlich vom Tastenhub und der Betätigungskraft ab. Eine länger andauernde Betätigungsfrequenz von 6Hz bei ordentlichen Industrietastern (wie sie in Schaltschränken verbaut werden) ist höchstens unter Inkaufnahme einer Sehnenscheidenentzündung machbar.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.