mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Tastenprellen


Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich hab an einem at90s1200 Taster angeschlossen,der µC ist als Zähler
programmiert.Durch das prellen der Taster stimmt der angezeigte 
Zählerstand nicht.
Wie kann ich das Problem Softwaremäßig lösen?

Danke im Voraus.

Autor: AndiS. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

habe dasselbe Problem, ist aber eigentlich ganz einfach zu lösen mit 
einer
kurzen Warteschleife von z.B. 50 oder 100ms nach dem Taster- bzw. 
Port-Abfragen bevor es im Programm weitergeht.

Bei mir ists a bissl komplizierter, scheint mir, da ich einen 
Dreh-Encoder verwende um einen Zählerstand zu erhöhen oder zu 
erniedrigen.
Wenn ich zu schnell drehe, dann werden nicht alle Impulse registriert.
Wenn ich den Drehknopf nicht sauber einraste, dann hört er natürlich 
nicht mehr auf zu zählen, und manchmal springt mein Zählerstand einfach 
irgendwohin.
Bestimmt Softwaremäßig irgendwie optimierbar...

Hat mit Dreh-Encodern und sauberer Impulsverarbeitung irgendwer 
Erfahrung?

Grüße,
Andi.

Autor: Phagsae (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eigentlich kein problem
zwischen Encoder und AVR ein pos flankengesteuertes nicht 
nachtriggerbares mono flop
sowas ist ein pfenning artikel

Phagsae

Autor: Axel(ojojo) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wie könnte so ein Bauteil heissen ?

jo
Axel

Autor: Rene (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Martin

Ich hätte da ´ne Hardwaremässige Lösung mit 2 Teilen (R,C) anzubieten. 
Also bei mir läuft es mit 8535 einwandwrei....

Schaltung auf Bild im Anhang.

Ciao René

Autor: Andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Andi,

schau dir mal das hier an:
http://dse-faq.e-online.de/dse-faq.htm#F.29.

MfG
Andreas

Autor: Phagsae (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die schaltung von Rene ist ein Tiefpass und sollte wohl für die üblichen 
prellprobleme ausreichen

Für das Endcoder Problem jedoch nicht
Hier ist ja auch ein Problem das bei falscher Rastung ein Dauerpegel HI 
oder Low zum Dauerzählen führt

Da hilft dann zuverlässig ein n i c h t ! nachtriggerbares Monoflop.
Fällt mir zb ein 74XX221 oder 74xx121

Autor: Andi S. (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
hab mein Problem ganz gut und einfach lösen können.
Bei jedem Rastvorgang von A und B werden ja die Impulse um
ca. sag ich jetzt mal 180 Grad versetzt getätigt.
(siehe Bild aus Conrad Datenblatt; Habe ALPS-DrehEncounter v. Schuricht)
Z.B. in dem Moment, wenn A auf Low geht und somit PINB,3 gecleard wird, 
springe ich in die ECP-Schleife und dann, erst wenn B (PINB,4) gecleard 
wird, dann springts weiter zu meinem gewünschten Effekt (plus).
Damit löse ich diesen wirklich erst aus, wenn ich eine Komplette Rastung 
des Dreh-Encoders getätigt habe. Keine Probleme mehr mit unerwünschten 
Mehrfach-Impuls-Verarbeitungen bei ungünstiger Drehung des 
Drehencounters! Funzt einwandfrei.


Eingabecheck:
sbis   PINB,3                       ;Encoder-PinA
rcall   ECP
sbis   PINB,4                       ;Encoder-PinB
rcall   ECM
sbis   PINB,2                       ;Encoder-PinD
rjmp   start
rjmp   Eingabecheck

ECP:
rcall  wait2ms
sbis   PINB,3
rjmp  ECP
sbis  PINB,4
rjmp  plus
rjmp  Eingabecheck

ECM:
rcall  wait2ms
sbis   PINB,4
rjmp  ECM
sbis  PINB,3
rjmp  minus
rjmp  Eingabecheck



Habe aber jetzt noch ein kleines anderes Problem!
Immer wenn ich genau diesen Code zu 32. mal ausführe,
d.h. wenn ich den drehencounter zum 32. mal gedreht habe,
dann wird scheinbar ein Reset ausgelöst!???
So als wäre da irgendein überlauf der bei 32 halt resetet.
??
(Wird übrigens ein Countdown-Timer mit über den Encoder einstellbarer 
und auf LCD ausgegebener Zeit in Sekunden, Minuten und Stunden),

Weiß da wer Rat?

Grüße,
Andi.

Autor: Andi S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habs schon!



Eingabecheck:
sbis PINB,3 ;Encoder-PinA
rcall ECP          <-----Hier gehört ein rjmp hin!
sbis PINB,4 ;Encoder-PinB
rcall ECM          <-------Hier auch!
sbis PINB,2 ;Encoder-PinD
rjmp start
rjmp Eingabecheck





Andi

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aus welchen Grunde sollte das mit einem rc- TP nicht für den encoder
reichen?? Dieser verhindert das prellen (wenn richtig diminsioniert
ausreichend)

Tau=R*C

jetz pomts noch drauf an wie schnell das ding sein muss...
sonst gibts noch eine möglichkeit...

und das prob. mit dem dauerpegel... nicht auf den log zustand sondern
auf die flanken (steigend, fallend oder beides)reagieren.
(kann man entweder selbst schreiben, bzw. stellen manche herstellen von
µC eingene interrupts für flanken zu verfügung (z.B PIC)
übrigens sind in manchen (weis nicht ob alle) pics hardwaremeßig
komperatoren oder schmitt-trigger drin.

Autor: peter dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

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]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [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.
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.

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