Forum: Mikrocontroller und Digitale Elektronik Simulation - Prellen/Entpellen von Tastern


von Jörg O. (joerchi)


Lesenswert?

Hallo,

ich bin gerade mit einer Studienarbeit beschäftigt und wollte mehrere 
Entprellmethoden aufzeigen. Um das Prellen für jedermann sichtbar zu 
machen,
wollte ich dies einmal simulieren, um ein anschauliches Diagramm zu 
bekommen. Ebenso wollte ich dann ein Diagramm mit Entprelltem Taster 
erstellen, sozusagen als Gegenüberstellung.

Wie mache ich das am Besten? Hat das schon jemand gemacht?


Vielen Dank für eure Hilfe.

Viele Grüße Jörg

von Johannes L. (joejoe)


Lesenswert?

Taster + Widerstand + Speicheroszi
damit kannste das Prellen gut sichtbar machen

von Jörg O. (joerchi)


Lesenswert?

Ich meinte eher jetzt die Simulation am Rechner.

Denn ein Speicheroszi steht mir nicht zu Verfügung.

von Hmm (Gast)


Lesenswert?

Nun, in erster Näherung ist das Prellen ja auf den elastischen Stoß zwei 
Körper (nämlich der Kontakte) zurückzuführen. Mal nach "elastischem 
Stoß" gurgeln.
Dann kommt noch die Feder hinzu, welche die beiden Kontakte 
gegeneinander drückt.
Ich sage in erster Näherung, weil ich nicht der Meinung bin das Problem 
gründlich durchdacht zu haben. Also ohne Gewähr für Vollständigkeit. :-}

Kurz und gut. Ein mechanisches Modell ist gefragt.

Ich meine allerdings hier schon einmal ein Oszillogramm eines 
Kontaktprellens gesehen zu haben. Weiss aber leider nicht mehr wo.

von dummy (Gast)


Lesenswert?

>Denn ein Speicheroszi steht mir nicht zu Verfügung.

Nimm es mit deiner Soundkarte auf.
Prellen von Tastern ist nicht sonderlich hochfrequent ;)

von Gast (Gast)


Lesenswert?

Was verstehst Du unter "simulieren"?

von Jörg O. (joerchi)


Lesenswert?

Dass ich z.B. in LTSPice oder ähnlichem ein Model erstelle, womit ich 
den Kurvenverlauf eines prellenden Tasters erzeugen kann.

von Gast (Gast)


Lesenswert?

Vielleicht mit nem Zähler? Bei Taste Up -> Down läuft er mit einer 
bestimmten Taktfrequenz (z. B. T = 5 µs) los: 0, 1, 2, ..., 1000. Bei 
Taste Down -> Up wird er umgekehrt auf 1000 gesetzt und zählt auf 0 
runter.

Regeln: (1) Begrenzung auf 0 und 1000. (2) Bei 0 ist der Ausgang immer 
L. (3) Bei 1000 immer H. (4) Für dazwischenliegende Werte lässt Du den 
Ausgangspegel ein paar mal wechseln (je nach Geschmack nach festem oder 
zufalls-mitbestimmtem Muster).

von Ganymed (Gast)


Angehängte Dateien:

Lesenswert?

Es gibt Leute, die haben Probleme,
die gibt's gar nicht.

Wie will man etwas simulieren, dass
rein stochstisch ist und wie Hmm richtig
schreibt, nur von den mechanischen Eigenschften
abhängig ist?

Ich habe vor langer Zeit mal das Prellen
aufgenommen. Verwendet habe ich Digitasten
die als besonders prellarm gelten!!!

Die Bilder sahen natürlich bei jedem Druck
auf die Taste anders aus. Ein Schließer-
kontakt prellt aber deutlich stärker
als ein Öffner.

von bitte löschen (Gast)


Angehängte Dateien:

Lesenswert?

Ich stand vor dem ähnlichen Problem, einen 40193-Zähler als 
Bereichsschalter für einen Messverstärker mit Tasten anzusteuern, was 
eigentlich kein Problem sein sollte, da der 40193 über zwei separate 
Eingänge (count up & count down) verfügt, und nicht über einen up/down- 
und einen Clock-Eingang, was aber dadurch erschwert wird, dass bei der 
steigenden Flanke gezählt wird, wenn der jeweils andere Eingang auf high 
liegt, was bedeutet, dass man zum Zählen einen negativen Impuls braucht, 
wenn sich die Eingabe nicht ähnlich unintuitiv "anfühlen" soll, wie ein 
GUI-Button, der erst beim Loslassen auslöst. Es braucht also einen 
Tiefpass für das Entprellen und einen Hochpass für die Impulsformung. 
Bei der Berechnung desselbigen bin ich dann an meine Dilletanten-Grenzen 
gestoßen: Die Spannung an einem RC-Tiefpass zu einem bestimmten 
Zeitpunkt zu berechnen hätte ich noch hin bekommen, aber wenn (ohne 
Impedanzwandler dazwischen) ein RC-Hochpass dazu kommt, der den Tiefpass 
beeinflusst, bin ich erst mal hilflos. Also hatte ich das ganze in 
LTSpice simuliert und stieß dabei bald auf das Problem der Simulation 
eines prellenden Tasters.
Dadurch bin ich dann auf diesen Thread gestoßen. Ich habe sogar 
versucht, aus den Grafiken von Ganymed händisch pwl-Dateien zu 
erstellen, aber das Ergebnis war nicht dem Aufwand entsprechend, also 
unbefriedigend.
Konsequenterweise musste eine Schaltung her, mit der man die 
Ein/Aus-Sequenzen eines Tastendrucks aufzeichnen und über RS-232 als 
Zeit/Spannung-Paare ausgeben kann, und hier bietet sich ein µC an, in 
diesem Fall ein ATmega8, da der schon in meinem Eval-Borad steckt.

Ich habe 3 Strategien implementiert und getestet:

1.: Taster an ICP1 (PB0) anschließen
Bei jedem TIM1_CAPT-Ereignis den Timestamp in ICR1H:ICR1L in der Tabelle 
ablegen und die Flankenrichtung wechseln, wie im Handbuch ATmega8 auf 
Seite 84 beschrieben.
Nachteil: Wenn einem Einschaltvorgang ein Auschaltvorgang folgt, bevor 
die Interrupt-Routine die Flankenrichtung gewechselt hat, wird dieser 
Ausschaltvorgang und der darauf folgende Einschaltvorgang verschluckt, 
und erst der wiederum darauf folgende Ausschaltvorgang registriert.
Bei Tests war es in einem Fall so, dass der verschluckte Schaltvorgang 
der letzte beim Einschalten war, und so der Zeitraum, den die Taste 
gedrückt war, als ausgeschaltet protokolliert wurde.

2.: Taster an INT0 (PD2) anschließen
Hier wird durch jeden Ein- und Auschaltvorgang ein Interrupt ausgelöst, 
ohne dass die Flankenrichtung gewechselt werden muss. Wenn hier einem 
Einschaltvorgang ein Auschaltvorgang folgt, bevor die Interrupt-Routine 
die Flankenrichtung gewechselt hat, wird zwar dieser Ausschaltvorgang 
nicht bemerkt, aber der darauf folgende Einschaltvorgang.
Nachteile:
- Der letzte Wert muss gemerkt werden, da z.B. zwei Einschaltvorgänge
hintereinander folgen können.
- Die Timestamps sind um ein paar Takte verschoben, da die Routine nicht 
auf ICR1H:ICR1L zurückgreifen kann, sondern den aktuellen Wert aus dem 
TCNT1H:TCNT1L lesen muss.

3. Keine Interrupts bei Flankenwechsel, sondern eine Schleife, die über 
den Messzeitraum wiederholt einen Eingang abfragt, und Änderungen 
protokolliert. Da der µC sonst nichts zu tun hat,diese Option (trotz der 
tollen Interrupt-Möglichkeiten) plausibel.

Die 3. Strategie hat den Output mit den meisten Ein- und 
Ausschaltvorgängen produziert. Die anderen Strategien können auch 
getestet werden, indem die Zeile ".equ TASTENAUFNAHME_ALG = 3" 
entsprechend geändert wird.

Das Programm ist etwas umständlich (z.B. dass nach der Messung, für die 
etwas 1 Sekunde zur Verfügung steht, noch ein "a" eingegeben werden 
muss, um die Ausgabe zu generieren) und lässt sich bestimmt noch 
verschönern, z.B. indem in die Ausgabe noch ein paar CR/LFs gepackt 
werden, aber es soll ja erst mal nur funktionieren.
Die Datei serial.inc.asm ist noch nicht fertig entwickelt, aber ich bin 
ja auch noch Anfänger und mein Werkzeugkasten ist noch rudumentär.

Ich habe als Beispiel auch meine Spice-Datei und ein paar 
Probe-Tastenklicks dazu gepackt.
Ich hoffe, dass es vielleicht mal jemandem weiter hilft, der ein 
ähnliches Problem hat. :-)

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.