Forum: Mikrocontroller und Digitale Elektronik attiny84 und seltsame Taster-Verzögerung


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 Stephan E. (loetzinn02)


Angehängte Dateien:

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

von Martin V. (oldmax)


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

von Georg M. (g_m)


Bewertung
0 lesenswert
nicht lesenswert
Stephan E. schrieb:
> Aber ich stelle am Taster fest, daß der nicht immer sofort
> reagiert

Richtig. Nicht sofort, sondern "if(tasterwarten==0)".

von Spess53 (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hi

Sieh dir einfach die Tastenentprellung von PeDa an:

https://www.mikrocontroller.net/articles/Entprellung#Timer-Verfahren_.28nach_Peter_Dannegger.29

MfG Spess

von S. Landolt (Gast)


Bewertung
0 lesenswert
nicht lesenswert
> Richtig. Nicht sofort, sondern "if(tasterwarten==0)".
Eben. Und das kann, wenn tasterwarten zufällig auf 255 steht, eine 
Weile dauern, vermutlich 255 ms.

von Stephan E. (loetzinn02)


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

von S. Landolt (Gast)


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

von Stephan E. (loetzinn02)


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

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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.