Forum: Mikrocontroller und Digitale Elektronik Problem bei der Tastenentprellung


von Jan H. (heine)


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

von Johannes M. (johnny-m)


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.

von Hannes L. (hannes)


Lesenswert?

> Und dann auch nur einmal.

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

;-)

...

von Johannes M. (johnny-m)


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.

von Hannes L. (hannes)


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...

...

von Miro (Gast)


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

von Alex22 (Gast)


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.

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.