Grüß Gott an die Experten, meine Experimente mit den Mikrocontrollern gehen weiter und ich stehe wieder mal vor einem Rätsel. Das angehängte Progrämmchen läuft auf einem attiny84@1MHz und macht das, was es soll. Aber ich stelle am Taster fest, daß der nicht immer sofort reagiert, sonde rn manchmal erst mit einer kleinen Verzögerung - gefühlt im niedrigen Zehntelsekundenbereich. Der "tasterwarten-Timer" ist da schon lange abgelaufen. Wenn ich den Taster dauernd gedrückt halte, läuft der pwm-Wechsel wie erwartet "durch" (schaltet etwa alle viertelsekunde weiter), scheint also kein Wackelkontakt oder sowas am Taster selbst zu sein. Das Verhalten ist reproduzierbar, aber es scheint kein Muster zu geben und ich weiß nicht, ob und vor allem wie ich das wegbekommen kann. Deshalb wäre ich für jeden Hinweis dankbar, der mir hier weiterhelfen könnte. PS: Ich verwende bewußt erst mal keinen Interrupt.
Hi Du brauchst auch keinen Taster-Interrupt. Ich nehme an, dein "Taster warten" ist eine Wartezeit, die durch Pollen erreichst. Pollen ist aber abhängig von deiner Programmlaufzeit. Deshalb mache ich sowas mit einem Timer, der mir mSek. zur Verfügung stellt. Davon leite ich dann alles ab, was ich für Zeitfunktioonen brauche. Ein weiterer Schritt, Flankenbildung. Ist zwar nicht immer erforderlich, dennoch finde ich es besser. Da ich mit Assembler arbeite und von "C" nur Bahnhof verstehe, kann ich auf dein Programm nicht weiter eingehen. Vielleicht hab ich dir trotzdem helfen können. Gruß oldmax
Stephan E. schrieb: > Aber ich stelle am Taster fest, daß der nicht immer sofort > reagiert Richtig. Nicht sofort, sondern "if(tasterwarten==0)".
Hi Sieh dir einfach die Tastenentprellung von PeDa an: https://www.mikrocontroller.net/articles/Entprellung#Timer-Verfahren_.28nach_Peter_Dannegger.29 MfG Spess
> Richtig. Nicht sofort, sondern "if(tasterwarten==0)".
Eben. Und das kann, wenn tasterwarten zufällig auf 255 steht, eine
Weile dauern, vermutlich 255 ms.
> Eben. Und das kann, wenn tasterwarten zufällig auf 255 steht, > eine Weile dauern, vermutlich 255 ms. Ja, das soll auch so sein. Aber die kleine Verzögerung tritt auch nach einer oder mehr Sekunden warten noch auf. Allerdings nur sporadisch, ich erkenne kein Muster. @spess53: > Sieh dir einfach die Tastenentprellung von PeDa an: Schaue ich mir mal an, danke.
> Aber die kleine Verzögerung tritt auch nach einer oder > mehr Sekunden warten noch auf. Allerdings nur sporadisch, > ich erkenne kein Muster. tasterwarten zählt ständig (abwärts) durch, springt dann, wenn mich mein bisschen C-Verständnis nicht im Stich lässt, von 0 auf 255, und so weiter und so fort. Wenn nun beim Stand von z.B. 200 der Taster gedrückt wird, dann dauert es eben 200 ms bis zur Reaktion. Schlimmer: wird vorher losgelassen, passiert gar nichts.
> tasterwarten zählt ständig (abwärts) durch, springt dann, wenn mich > mein bisschen C-Verständnis nicht im Stich lässt, von 0 auf 255, und so Perfekt! Das war's. Ich bin fälschlicherweise davon ausgegangen, daß ein unsigned int bei Null stehen bleibt, auch wenn man noch eins abzieht. Wieder was gelernt. Danke! Das
1 | tasterwarten--; |
ersetzt duch
1 | if (tasterwarten>0) tasterwarten--; |
hat das Problem gelöst.
:
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.