www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Taster entprellen


Autor: Lars Kraus (laser1990)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

Ich hab da ein Problem mit meinem Taster. MIt dem Taster starte ich 
einen Vorgang bei dem ich einen Motor anschalte und der dann über einen 
Umdrehungszähler zurückzählt (z.B. ab 15 Umdrehungen rückwärts). Die 
Umdrehungen die der Motor zählen soll werden über andere Taster 
eingestellt.
Mein Problem jetzt ist das ich mit dem Start Taster das ganze auch 
auslösen (anschalten) kann. Ich möchte aber auch gern wenn der Motor und 
alles läuft den Vorgang auch anhalten können, also Pause einlegen. Bei 
der Pause soll der Motor stoppen und die Umdrehungen sollen auch 
angehalten werden. Wenn der Motor läuft und ich den Taster betätige 
haltet er den Motor auch an aber nur wenn ich den Taster gedrückt halte 
und ich möchte es so das er beim einmaligen drucken stehen bleibt und 
ich nicht ihn gedrückt halten muss.
Mit debounce geht das ja aber ich hab den Port an dem der Taster 
angeschlossen ist schon belegt und ihn auch schon mit debounce entprellt 
aber das Anhalten/Pausieren muss ja bei mir im Programm nochmal 
entprellt werden.
Gibt es da auch eine andere Lösung den Taster zu entprellen?

Danke

Gruß

Autor: Kritzekratze (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hä?
Doppelt entprellen?
Wozu das denn?

Autor: Josef Balom (crunchix)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Lars,

ja, gibt es, es gibt nämlich entprellte Taster, bei denen brauchst du in 
der Software nichts machen.
Am sonsten kannst du ja mit FlipFlops arbeiten, die werten dann halt 
eben nur die erste Flanke aus, danach sind sie fest gesetzt bis du sie 
zurücksetzt.
Eine weitere Möglichkeit besteht darin eine Einschaltverzögerung sowie 
Ausschaltverzögerung hintereinander zu schalten, damit kannst du dann 
beliebig entprellen.

Gruß
Josef

Autor: Kritzekratze (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Deine Frage ist etwas unklar.

Poste doch mal die Software, die Du schon geschrieben hast. Vielleicht 
wird's dann klarer.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann mir nicht helfen.

Die ganze Problembeschreibung klingt nach einem verkorkstem 
Programmdesign.

Autor: Matthias Kölling (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dein Problem scheint mir weniger die Entprellung, als mehr die 
Flankenerkennung. Dadurch muß der Taster nicht ständig gedrückt werden, 
um ein Ereignis auszulösen. Ob Du mit der Flanke den Motor anhältst oder 
startest, ist dann zweitrangig.

if((Taster_Alt == gedrueckt) && (Taster == gedrueckt))
{
   Motor ^= 1; // Motor toggeln
   // wenn gelaufen -> stop
   // wenn gestoppt -> laufen
}
Taster_Alt = Taster;

Gruß Matthias

Autor: .||....||...|...|.... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Forenteilnehmer prellen selbst auch irgendwie.

Das Thema wurde ja schon 1000* bis zum Erbrechen, Genervtsein und 
Wutanfall wiedergekaut.

Dies wird immer mehr zum Forum von 1001 Hausaufgabe, LED und 
programmiertem Flipflop.

Autor: Hannes Lux (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Die Forenteilnehmer prellen selbst auch irgendwie.

Solange sie die Zeche nicht prellen geht's doch noch. ;-)

Zum Thema:
BASCOM ist kinderleicht, wird einem zumindest an jeder Ecke gesagt...
Trotzdem bekommen viele BASCOM-Nutzer die einfachsten Dinge nicht 
gebacken. ;-(

Dein Problem:
Du müsstest einen Start/Stopp-Taster programmieren. Dazu brauchst Du 
neben der eigentlichen Entprellung noch eine Flankenerkennung, die 
wiederum Dein RUN-Flag toggelt, das dann den Motor (PWM) steuert 
(Startrampe, Bremsrampe).

Die 8-Tasten-Bulletproof-Entprellung von Peter Dannegger hat neben der 
eigentlichen (4-fach-)Entprellung auch die Flankenerkennung und (wenn es 
sein muss) auch noch eine Repeat-Funktion für längeren Tastendruck. 
Diese Routine ist in C und ASM in sehr effizienter Form verfügbar, in 
BASCOM sollte sie auch möglich sein, da aber vermutlich nicht so 
effizient.

...

Autor: Luca Jessen (funkraut)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Würde das nicht eventuell gehen ,wenn du ein delay von ca 200 ms mit 
einbaust ,nachdem du den Taster betätigst? Ich bin selber noch Anfänger 
,aber bei mir hat das bei diversen Sachen so funktioniert.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Matthias Kölling (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Edit

if((Taster_Alt == nichtgedrueckt) && (Taster == gedrueckt))
{
   Motor ^= 1; // Motor toggeln
   // wenn gelaufen -> stop
   // wenn gestoppt -> laufen
}
Taster_Alt = Taster;

Autor: .||....||...|...|.... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lustig, wie sich hier wieder alle überbieten mit Tipps und 
Spekulationen. Und man weiß noch nicht mal, ob der OP überhaupt schon 
irgendeine Antwort gelesen hat. 
Beitrag "Das Forum als Schwingkreis" :-)

Autor: Lars Kraus (laser1990)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die ganzen Antworten.

Mach mich jetzt mal an die Arbeit.

Vielen Dank

Lars

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.