Forum: Projekte & Code Entprellung von Tastern


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Michael (Gast)


Angehängte Dateien:

Lesenswert?

Das Programm avr_tast.c zeigt, wie einzelne Taster/Schalter entprellt 
und dekodiert werden können. Beispielhaft wird hier ein AT90S8515 
verwendet. Die Taster werden an PortA gegen 0V geschaltet. Zur Kontrolle 
werden LEDs an PortC ein/ausgeschaltet, ebenfalls aktiv-low. Die 
Entprellzeit der Taster sowie wiederholte Dekodierung (repeat-Funktion) 
können weitgehend verändert werden. Viel Spaß !

Michael

von Michael (Gast)


Angehängte Dateien:

Lesenswert?

Für die Hexen/Hexer, die nicht warten können, die passende Datei.

von Michel (Gast)


Lesenswert?

DANKE!

von Flo333 (Gast)


Lesenswert?

Sorry, aber gibts das Programm auch in ASM?

von Michael (Gast)


Angehängte Dateien:

Lesenswert?

Nun gut, anbei die vom Compiler erzeugte .s90-Quelle. Abweichend zur 
.c-Quelle sind die static-Variablen global deklariert und nicht explizit 
initialisiert; das ist etwas übersichtlicher. Die C-Anweisungen sind als 
Kommentar eingefügt.
Bei timer0_int werden die Register über -Y bzw. Y+ auf einem separaten 
Stack abgewickelt. Hier kann alternativ push/pop verwendet werden.

von Peter D. (peda)


Angehängte Dateien:

Lesenswert?

Anbei nun eine ähnliche Lösung für den 8051.

Der Hauptunterschied ist, daß die Tasten parallel und voneinander 
unabhängig ausgewertet werden. Somit ist z.B. die Realisierung einer 
Shift-Taste möglich.
Werden nun 2 Tasten mit Repeat-Funktion gedrückt, dann werden auch beide 
wiederholt.

Ein Unterschied ist noch, daß die Größe nur 13% beträgt (123 statt 914 
Byte).


Es hat mich doch einige Mühe gekostet, durch Dein Programm 
durchzusteigen.
Ich finde es einfacher zu überblicken, wenn Routinen möglichst linear 
sind, d.h. nur einmal am Ende verlassen werden. In Deiner Routine sind 
aber doch etliche "return;" zwischendrin versteckt.


Peter

von Michael (Gast)


Angehängte Dateien:

Lesenswert?

Für Leute, die noch eine schöne .A51-Routine brauchen, die entsprechende 
Quelle 'taster.a51'.

Per T0-Interrupt wird die Routine GET_TASTER aufgerufen. Hier werden 16 
Taster (beispielhaft an Port1+Port2) mit TAST_IN eingelesen, entprellt 
und ggf. mit Routine DECODE ausgewertet; dies zeigt, daß Entprellung und 
Dekodierung verschiedene Schritte sind. Für Matrixtastaturen muß TAST_IN 
angepaßt werden - für eine andere Dekodierung DECODE.
Die hier verwendete Dekodierung bietet 'n-key rollover', wie man es von 
alphanum. Tastaturen erwartet. Werden statische Taster benötigt, dürfte 
es nicht schwerfallen, diese entsprechend auszumaskieren.

Die vorliegende Routine ist eine abgemagerte Version einer älteren 
Anwendung; ggf. sind Anpassungen/Änderungen erforderlich.

von Marko (Gast)


Angehängte Dateien:

Lesenswert?

Der vollständigkeit halber hier noch eine Schaltung zur 
Hardwareentprellung, am Beispiel eines Digitalpotis.

von gigaak (Gast)


Angehängte Dateien:

Lesenswert?

Ich habe mir mal vor einiger Zeit Gedanken über entprellen von Tastern
gemacht. Diese Schaltung funktioniert auf jeden Fall, mit jedem
Schalter, auch mit den ganz schlimmen. man müsste gegebenenfalls die
Werte von Widerstand und Kondensator ändern.

von Peter D. (peda)


Lesenswert?

"Diese Schaltung funktioniert auf jeden Fall"

Nein, 10k * 100n sind ja nur 1ms, das kann zu wenig sein.


Aber wie schon gesagt, warum Hardware nehmen, die mich jedesmal was
kostet, anstatt ein paar Codezeilen, die mich nichts kosten.


Peter

von gigaak (Gast)


Lesenswert?

wie gesagt, man müsste die Werte abändern, wenn man schlechte Schalter
hat, aber mit normalen Tastern funktionierts.
1ms reicht übrigens auch für relativ schlechte Schalter, denn 1ms ist
nicht die Zeit vom 1. bis zum letzten Prellimpuls (was durchaus mehrere
hundert sein können). Dann würde es auf keinen Fall funktionieren. Da
ich aber ein Schmitt Trigger genommen habe reicht es, denn man muss
hier nur die Zeit zwischen 2 Impulsen abdecken.

Es gibt auch andere Lösungen mit FlipFlops usw., die Haben dann eine
Zeitkonstante im Bereich von ca. 100ms, doch das war mir zu langsam.
Leute mit ultranervösen Fingern könnten diesen Grenze erreichen, was
nicht so got währe.

Diese Schaltung war übrigens auch nict dafür gedacht mit nem MC
zusammenzuarbeiten, sondern mit PLD's und Logik IC's. Und da wirds
mit dem Softwareseitigen entprellen etwas komplex.

von Christian Buntrock (Gast)


Lesenswert?

Vielen Dank!! Das hat mir sehr weiter geholfen.

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.