www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Problem bei der Tastenentprellung


Autor: Jan Heynlein (heine)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie oben im Betreff bereits geschrieben, habe ich ein Problem mit meiner 
Tastenentprellung bei dem PIC 16F876.

Ich habe eine kleine Funktion in C geschrieben, die meine Taste alle 
60Micros. abfragt und dies 60x wiederholt (60Micros*60 = 3,6ms, meine 
Entprellzeit). Dabei wird ein Zähler hochgezählt, wenn die Taste während 
des Tests noch gedrückt ist. Liegt der Zähler nach dem Test über 50, so 
ist die Taste definitiv gedrückt.

Nun zu meinem Problem. Nach dem programmieren des PICS läuft die 
Funktion sehr unzuverlässig. Mal geht sie und mal nicht. Das führt 
soweit, dass der Watchdog   leer läuft und den PIC neustartet.

Eigentlich wollte ich die Funktion ja nur 10x ausführen oder so in den 
4ms, aber das geht nicht, da der Vorteiler des Timers bereits vom 
Watchdog belegt ist. Einen anderen Timer als den Timer0 kann ich nicht 
nehmen, da die leider von anderen Funktionen des Programms belegt sind.

Also woran kann es noch liegen.

MfG
Heine

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jan Heynlein wrote:
> Wie oben im Betreff bereits geschrieben, habe ich ein Problem mit meiner
> Tastenentprellung bei dem PIC 16F876.
Dass es ein PIC ist, hättest Du im Betreff ruhig auch erwähnen können...

> Ich habe eine kleine Funktion in C geschrieben, die meine Taste alle
> 60Micros. abfragt und dies 60x wiederholt (60Micros*60 = 3,6ms, meine
> Entprellzeit). Dabei wird ein Zähler hochgezählt, wenn die Taste während
> des Tests noch gedrückt ist. Liegt der Zähler nach dem Test über 50, so
> ist die Taste definitiv gedrückt.
Alle 60 µs? Und dann 60 mal? Unsinnig. Alle 10-20 ms abfragen reicht 
völlig. Und dann auch nur einmal. Funktioniert definitiv (und 
zuverlässig). Kein Mensch kann einen Taster kürzer als ein paar zig ms 
drücken.

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Und dann auch nur einmal.

Nunja, ich ziehe inzwischen viermalige Abfrage vor 
(PeDa-Bulletproof-Entprellung)...

;-)

...

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hannes Lux wrote:
>> Und dann auch nur einmal.
>
> Nunja, ich ziehe inzwischen viermalige Abfrage vor
> (PeDa-Bulletproof-Entprellung)...
>
> ;-)
>
> ...
OK, aber nicht sechzig mal...;-) Bei mir hat bisher allerdings 
ausnahmslos die Methode mit "ca. alle 20 ms vorbeischauen" tadellos 
funktioniert.

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Johannes M. wrote:
> OK, aber nicht sechzig mal...;-)

Stimmt, und auch nicht in diesem kurzen Zeitraster.

> Bei mir hat bisher allerdings
> ausnahmslos die Methode mit "ca. alle 20 ms vorbeischauen" tadellos
> funktioniert.

Bei mir auch. So hatte ich es gemacht, bevor ich die 
Bulletproof-Entprellung gefunden und analysiert hatte. Dabei gab es 
keinerlei Probleme.

Trotzdem hat mich PeDas Algorithmus überzeugt, besonders praktisch finde 
ich das Bereitstellen des entprellten Tastenzustands (key_state) und der 
Flankenflags (key_press) für erneuten Tastendruck für bis zu 8 Tasten, 
die in einem Rutsch abgefragt und entprellt werden.

Durch geringfügige Erweiterungen erhält man auch die "Loslass-Flags", 
man kann auch mit geringem Aufwand eine (maskierbare) Repeat-Funktion 
einbinden. Und dabei bleibt der Code verdammt schlank...

Also ich möchte diesen Algorithmus (in seinen Varianten) nicht mehr 
missen...

...

Autor: Miro (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Jan,
aus reinem Interesse: was für einen C Compiler verwendest du denn? Ich 
will meine PICs in Zukunft auch mit C programmieren.
viel Glück bei deinem Projekt noch.

Ciao Miro

Autor: Alex22 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Bei mir auch. So hatte ich es gemacht, bevor ich die
>Bulletproof-Entprellung gefunden und analysiert hatte. Dabei gab es
>keinerlei Probleme.

Dem kann ich mich nur anschließen. Ich bin auch einer der wenigen hier 
die PIC's verwenden. Der Code von Peter Danegger läuft da (natürlich) 
auch und ist absolut spitze.

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]
  • [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.