attiny84 und seltsame Taster-Verzögerung

OP #6505526
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.
Angehängte Dateien:
#6505569
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
OP #6506254
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.
Gast #6506319
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.
OP #6506854
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.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.