Forum: Mikrocontroller und Digitale Elektronik Taster entprellen


von Lars K. (laser1990)


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ß

von Kritzekratze (Gast)


Lesenswert?

Hä?
Doppelt entprellen?
Wozu das denn?

von Josef B. (crunchix)


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

von Kritzekratze (Gast)


Lesenswert?

Deine Frage ist etwas unklar.

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

von Karl H. (kbuchegg)


Lesenswert?

Kann mir nicht helfen.

Die ganze Problembeschreibung klingt nach einem verkorkstem 
Programmdesign.

von Matthias Kölling (Gast)


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

von .||....||...|...|.... (Gast)


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.

von Hannes Lux (Gast)


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.

...

von Luca J. (funkraut)


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.

von Peter D. (peda)


Lesenswert?


von Matthias Kölling (Gast)


Lesenswert?

Edit

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

von .||....||...|...|.... (Gast)


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" :-)

von Lars K. (laser1990)


Lesenswert?

Danke für die ganzen Antworten.

Mach mich jetzt mal an die Arbeit.

Vielen Dank

Lars

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
Noch kein Account? Hier anmelden.