Forum: Mikrocontroller und Digitale Elektronik prellfrei tasten ohne viel Schnickschnack


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 André (Gast)


Bewertung
0 lesenswert
nicht 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 Moderator
von Teo D. (teoderix)


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

von Karl H. (kbuchegg) (Moderator)


Bewertung
0 lesenswert
nicht 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 Moderator
von André (Gast)


Bewertung
0 lesenswert
nicht 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)


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

von 231 (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
1 lesenswert
nicht lesenswert
Teo Derix schrieb:

> Soft zu entpellen

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

von 4112 (Gast)


Bewertung
0 lesenswert
nicht 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) (Moderator)


Bewertung
0 lesenswert
nicht 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 Moderator
von André (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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) (Moderator)


Bewertung
1 lesenswert
nicht 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) (Moderator)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank für eure Hinweise :)

von André (Gast)


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

von Karl H. (kbuchegg) (Moderator)


Bewertung
0 lesenswert
nicht 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 Moderator
von André (Gast)


Bewertung
0 lesenswert
nicht lesenswert
OK, danke für eure Tipps

von Thomas E. (Firma: Thomas Eckmann Informationst.) (thomase)


Bewertung
0 lesenswert
nicht 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

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