Forum: Mikrocontroller und Digitale Elektronik Taster Entprellen in C


von O. A. (sokrates1989)


Lesenswert?

hallo,

ich weiß es gibt hier einen ganzen Artikel dazu und der soll auch sehr 
gut sein. Es ist aber noch vieeeel zu anspruchsvoll für mich.

Ich möchte aber auf schnellem Wege eine ganz simple Tasterentprellung 
ausprobieren, und zwar mit Zeitverzögerung.

könnte man das mit delay machen?

Wie könnte so ein Code aussehen, der einen Taster entprellt, und z.b 
eine Led einschaltet.

Könnte jemand hier sein Hirn auf Werksreset schalten und so einen 
Anfängercode machen?

von Alexander L. (photoniker)


Lesenswert?

Ja.

Beitrag #5012126 wurde von einem Moderator gelöscht.
von Hardentpreller (Gast)


Lesenswert?

O. A. schrieb:
> Es ist aber noch vieeeel zu anspruchsvoll für mich.

Dann mach es mit einem Kondensator und zwei Widerständen.
Das ist einfach und spart dir C-Code.

von Peter II (Gast)


Lesenswert?

zum einschalten einer LED braucht man gar keine Entprellung.

von Einer K. (Gast)


Lesenswert?

O. A. schrieb:
> Könnte jemand hier sein Hirn auf Werksreset schalten
Nein!
(habe keine Bereitschaft)

Du hast vergessen Zielprozessor und Sprache zu erwähnen.
Halt der ganze Kontext; Sinn und Zweck, usw.
Das ist für mich ein gewichtiger Grund anzunehmen, dass du gar nicht an 
einer Lösung interessiert bist.

Und, bitte nicht so sehr um den Hirn Reset anderer Leute bemühen, 
sondern eher ums eigene lernen. Scheint mir zielführender zu sein.
Debouncing ist übrigens etwas was hunderttausende mal I-Net zu finden 
ist.

von Curby23523 N. (Gast)


Lesenswert?

Macht manzwar überhaupt nicht, aber quick und dirty (gewöhn es dir nicht 
an):

Bei jeder Wertänderung, wartet dieser Code 200mS - dann sollte das 
Prellen vorbei sein. Das ist Code für einen ATxMega.
1
static unsigned char ucTaster = 0;
2
3
if((PORTA.IN & PIN1_bm) && ucTaster == 0){
4
  _delay_ms(200);
5
  ucTaster = 1;
6
7
  //Hier dein Code
8
}
9
else if(!(PORTA.IN & PIN1_bm) && ucTaster == 1){
10
  _delay_ms(200);
11
  ucTaster = 0;
12
}

von M. K. (kichi)


Lesenswert?

O. A. schrieb:
> Es ist aber noch vieeeel zu anspruchsvoll für mich.

O. A. schrieb:
> Könnte jemand hier sein Hirn auf Werksreset schalten und so einen
> Anfängercode machen?

Ähm, du möchtest, dass dir jemand neuen Code schreibt, weil du den 
bestehenden nicht verstehst? Und was hast du dabei gelernt? Wenn du 
selbst keine Zeit und Arbeit investieren willst, musst du wohl das 
nehmen was es schon gibt.

Das schöne an Peters Code ist, dass man den erstmal einfach benutzen 
kann und wenn man tiefer einsteigen möchte, kann man dann noch versuchen 
ihn zu verstehen. Nötig ist das aber nicht unbedingt.

von fop (Gast)


Lesenswert?

Nimm einen Umschalter und 2 Portpins, das macht's bestimmt einfacher...

von fop (Gast)


Lesenswert?

Andererseits : was ist einfacher als anderer Leute Leistung stumpf zu 
kopieren ?

von Ingo L. (corrtexx)


Lesenswert?

Ich mach es zu 99% immer so:
1
/* Im Systemzeit Intterupt z.B. 1kHz */
2
/* Entprellen */
3
  if ( Debounce ) Debounce--;
4
5
/* Taster abfragen */
6
  if ( !(GPIOB->IDR & GPIO_Pin_6) && !Debounce ){
7
    Debounce = DEBOUNCETIME;
8
    Flags.State ^= 1;
9
  }

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Ingo L. schrieb:
> Ich mach es zu 99% immer so
Wie du mit DEBOUNCETIME=3 macht Peters Code das auch. Nur eben für 8 
Bits parallel in 2 Bytes...

von Amateur (Gast)


Lesenswert?

@O. A.
Viele haben hier eine ausgeprägte Allergie gegen Copy & Past.

Womöglich möchtest Du ein Beispiel, welches auf deiner CPU läuft und an 
Deinem I/O-Pin hängt.

Dumm ist nur folgendes: Bei allem anderen musst Du verstehen, was 
passiert um es nutzen zu können.

Also viel Glück bei Deinem Unterfangen.

von Peter D. (peda)


Lesenswert?

O. A. schrieb:
> Könnte jemand hier sein Hirn auf Werksreset schalten und so einen
> Anfängercode machen?

Du findest mit Google Unmengen an schlechtem Entprellcode, da muß sich 
kein anderer das Hirn resetten.

von Simpel (Gast)


Lesenswert?

Zum reinen Entprellen brauchst du nur den entsprechenden Eingang per 
Timerabfrage in solchen Intervallen abzufragen, die garantiert grösser 
sind als die max. Prellzeit des Tasters. Den Tastereingang mit einem 
Abfrageintervall von  30-50 ms abzufragen ist i.d.R. ausreichend.

Der Mehraufwand bei vielen Entprellroutinen dient einzig dazu, 
eingestreute Störimpulse bzw. Spikes zu unterdrücken, oder weitere 
Komfortfunktionen zu integrieren.

von O. A. (sokrates1989)


Lesenswert?

Simpel schrieb:
> Zum reinen Entprellen brauchst du nur den entsprechenden Eingang per
> Timerabfrage in solchen Intervallen abzufragen, die garantiert grösser
> sind als die max. Prellzeit des Tasters. Den Tastereingang mit einem
> Abfrageintervall von  30-50 ms abzufragen ist i.d.R. ausreichend.

ok danke für den Hinweis.

von O. A. (sokrates1989)


Lesenswert?

Peter II schrieb:
> zum einschalten einer LED braucht man gar keine Entprellung.

Ich glaube auch dass ich das für Aufgabe gar nicht benötige....ich habe 
mal wieder zu kompliziert gedacht.

:(((

von Arduino (Gast)


Lesenswert?

zum simplen Taster abfragen muss man keinen Timer vergeuden, Polling ist 
völlig ausreichend

von Teo D. (teoderix)


Lesenswert?

Arduino schrieb:
> zum simplen Taster abfragen muss man keinen Timer vergeuden, Polling ist
> völlig ausreichend

Klar, wenn man unbedingt Pollen will was der µC hergibt und auf's 
Endprellen verzichten kann.
So ein Timer kann mehr als nur eine Aufgabe übernehmen!

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Peter II schrieb:
> zum einschalten einer LED braucht man gar keine Entprellung.
Man braucht eine Entprellung zusammen mit einer Flankenerkennung erst 
dann, wenn die LED mit dem selben Taster wieder ausgeschaltet werden 
soll...

von Clemens W. (daxmus)


Lesenswert?

Entprellung gehört eigtl. zu den Grundlagen (oder eher -problemen) bei 
Mikrocontrollern und je eher man sich damit auseinandersetzt, desto 
besser und weniger frustrierend.
Es gibt hier auch einen guten Artikel zu dem Thema.

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.