Forum: Mikrocontroller und Digitale Elektronik prellfrei tasten ohne viel Schnickschnack


von André (Gast)


Lesenswert?

Hallo :-)

ich habe mal einen Code für den Arduino geschrieben der ganz einfach 
gehalten ist und ohne Probleme funktioniert.

Man kann mit einem Taster eine LED einschalten und wenn der Taster 
erneut gedrückt wird wieder ausschalten und das ohne die Befehle millis 
oder long oder delay und natürlich auch ohne goto.

Es gibt zahlreiche Beispiele u.a. auch von Arduino selbst wie z.B. der 
Code Debounce. Dieser Programmcode ist aber größer als meiner und 
zusätzlich muss man auch noch ein Widerstand an den Taster mit 
anschließen was ich persönlich als unnütz empfinde, da prellfreies 
Tasten auch ohne zusätzliche Bauteile funktioniert.

Hier mein Code:
1
const int Taster=2;
2
const int Led=8;
3
4
int Status=0;
5
6
void setup()
7
{
8
 pinMode(Taster,INPUT);
9
 pinMode(Led,OUTPUT);
10
}
11
12
void loop()
13
{
14
 if(digitalRead(Taster)!=LOW)
15
 {
16
  Status=0;
17
 }
18
19
 if((digitalRead(Taster)==LOW)&&(Status==0))
20
 {
21
  if(digitalRead(Led)!=HIGH)
22
  {
23
   digitalWrite(Led,HIGH);
24
  }
25
   else
26
  {
27
   digitalWrite(Led,LOW);
28
  }
29
  
30
  Status=1;
31
 }
32
}

Der Taster muss mit GND verbunden werden. Man kann den Taster auch an 
Vcc anschließen. Dazu müssen aber die Befehle für den Taster LOW durch 
HIGH ersetzt werden.

Viel Spaß :)

: Bearbeitet durch User
von Teo D. (teoderix)


Lesenswert?

Tasten per Soft zu entpellen ist doch -> nur nicht den Pin in der 
Prellzeit nochmals abzufragen!

von Karl H. (kbuchegg)


Lesenswert?

André schrieb:
> Hallo :-)
>
> ich habe mal einen Code für den Arduino geschrieben der ganz einfach
> gehalten ist und ohne Probleme funktioniert.

Und nur deswegen funktioniert, weil da noch ein Arduino Überbau 
existiert bzw. digitalRead so langsam ist.
Entprellen tut der Code gar nichts. Wenn das Programm schneller ablaufen 
würde dann würde deine LED nach wie vor jeden Preller mitmachen, weil 
status munter mit jedem Preller munter vor sich hingetoggelt wird.

Was du da hast ist eine Flankenerkennung. Aber keine Entprellung.

: Bearbeitet durch User
von André (Gast)


Lesenswert?

OK aber es funktioniert, da der Befehl des Tastens oder nicht Tastens 
nur einmal ausgeführt wird, egal wie oft der Arduino die loop-Schleife 
durchläuft.

von B. S. (bestucki)


Lesenswert?

Hier gibt es einige gute Ansätze und Lösungen:
http://www.mikrocontroller.net/articles/Entprellung#Softwareentprellung

von 231 (Gast)


Lesenswert?

Hier sind sinnvolle Entprellroutinen: 
http://www.mikrocontroller.net/articles/Entprellung

Das was du da gepostet hast stellt eines ganz klar dar: Du hast nicht 
verstanden was Entprellung ist.

von Harald W. (wilhelms)


Lesenswert?

Teo Derix schrieb:

> Soft zu entpellen

...ist für mich eine Tätigkeit, die mit Elektronik wenig zu tun hat.
:-)

von 4112 (Gast)


Lesenswert?

André schrieb:
> OK aber es funktioniert, da der Befehl des Tastens oder nicht Tastens
> nur einmal ausgeführt wird, egal wie oft der Arduino die loop-Schleife
> durchläuft.

Nein tut es auch nicht weil der Taster prellt und damit deine Bedingung 
teilweise durchweg erfüllt sind.

André schrieb:
> Dieser Programmcode ist aber größer als meiner und
> zusätzlich muss man auch noch ein Widerstand an den Taster mit
> anschließen was ich persönlich als unnütz empfinde, da prellfreies
> Tasten auch ohne zusätzliche Bauteile funktioniert.

Auch das hat mit dem Programm nichts zu tun. Das hat nur damit zu tun, 
dass wohl irgendwie die Pullups beim Arudino automatisch an sind ??! 
Oder du hast den Taster halt in der Schwebe während des Schaltvorgangs.

von Karl H. (kbuchegg)


Lesenswert?

André schrieb:
> OK aber es funktioniert, da der Befehl des Tastens oder nicht Tastens
> nur einmal ausgeführt wird, egal wie oft der Arduino die loop-Schleife
> durchläuft.

Sag ich ja.
Du hast eine Flankenerkennung.
Die Entprellung ist nur Zugabe, bedingt durch die 
Ausführungsgeschwindigkeit eines (deines) Ardino. Nimm einen der neuen 
ARM Arduinos und einen Taster der schon reichlich prellt und deine 
Entprellung ist für den Hugo. Die Flankenerkennung funktioniert weiter, 
aber das Nicht-Entprellen macht dir trotzdem als Anwender das Leben 
schwer.

: Bearbeitet durch User
von André (Gast)


Lesenswert?

Mein Problem war immer, dass das Tasten nicht richtig erkannt wurde 
(eben durch das prellen) und die LED mal eingeschaltet blieb und mal 
nicht.

Mit meinem jetzigen Code habe ich keinerlei probleme mehr. Auch wenn es 
nur eine Flankenerkennung ist funktioniert der Code einwandfrei und ich 
spare zusätzlich noch Speicherplatz.

von Teo D. (teoderix)


Lesenswert?

Harald Wilhelms schrieb:
> Teo Derix schrieb:
>
>> Soft zu entpellen
>
> ...ist für mich eine Tätigkeit, die mit Elektronik wenig zu tun hat.
> :-)

Aber immer noch besser als mit Saft :D

von Karl H. (kbuchegg)


Lesenswert?

So leid mir das auch tut. Aber das Prellen eines Tasters unterscheidet 
sich vom (gewollten) wiederholten Drücken und Loslassen eines Tasters 
nur durch die Zeitkomponente. Wenn also jemand behauptet, er könne 
Tasten entprellen, ohne dafür eine Zeitsteuerung zu benötigen (wie auch 
immer die dann aussieht), dann kann man ihm auf den Kopf zusagen, dass 
er irgendwas nicht wirklich verstanden hat.

von Karl H. (kbuchegg)


Lesenswert?

André schrieb:
> Mein Problem war immer, dass das Tasten nicht richtig erkannt wurde
> (eben durch das prellen) und die LED mal eingeschaltet blieb und mal
> nicht.
>
> Mit meinem jetzigen Code habe ich keinerlei probleme mehr.

Ja.
Weil er langsam genug ist, damit das momentan vorhandene Prellen sich 
noch schneller abspielt. Aber warte noch ein paar Jahre, bis deine 
Taster älter werden und das Prellen schlimmer wird ....

von André (Gast)


Lesenswert?

Vielen Dank für eure Hinweise :)

von André (Gast)


Lesenswert?

Gibt es denn auch prellfreie Taster? Dann könnte man sich ja den Code 
ersparen.

von Karl H. (kbuchegg)


Lesenswert?

André schrieb:
> Gibt es denn auch prellfreie Taster?

Ja gibt es. Aber wozu?

> Dann könnte man sich ja den Code
> ersparen.

Nimm einfach die erprobten Lösungen. Die paar Bytes, die dir dafür im 
Programmspeicher drauf gehen (der Code ist ja sowieso nur ein einziges 
mal im Speicher und nicht für jede Taste extra), die tun dir nicht weh. 
Und wenn doch, dann hast du ganz andere Probleme mit der Programmgröße, 
die du sicher nicht dadurch gelöst kriegst, dass deine Entprellung ein 
um 5 Bytes kürzeres Programm ergibt. Das ist am falschen Ende gespart.

: Bearbeitet durch User
von André (Gast)


Lesenswert?

OK, danke für eure Tipps

von Thomas E. (thomase)


Lesenswert?

André schrieb:
> Gibt es denn auch prellfreie Taster? Dann könnte man sich ja den Code
> ersparen.

Eine vernünftige Entprellung macht man mit Schrotttastern.
Kauf dir einen 1,95-€-Wohnungstürklingeltaster aus einem Baumarkt deines 
Vetrauens. Dann setzt du dich hin und entprellst das Ding mit einer der 
vorgestellten Softwarelösungen. Wenn der Taster nicht mehr prellt, ist 
das Problem ein für alle Mal und für alle anderen Taster gelöst.

mfg.

: Bearbeitet durch User
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.