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?
Beitrag #5012126 wurde von einem Moderator gelöscht.
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.
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.
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 | }
|
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.
Andererseits : was ist einfacher als anderer Leute Leistung stumpf zu kopieren ?
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 | }
|
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...
@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.
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.
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.
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.
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. :(((
zum simplen Taster abfragen muss man keinen Timer vergeuden, Polling ist völlig ausreichend
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!
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...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.