Forum: Mikrocontroller und Digitale Elektronik Schalter abfragen (nicht Taster)


von Felix (Gast)


Lesenswert?

Hallo,

ich möchte einen Schalter mit einem Atmega8 abfragen (kein Taster).
Der Schalter schaltet GND durch an einen Portpin der über die internen 
Pullups hochgezogen wird.

Genügt es einfach, um zu erkennen, Schalter geschlossen oder offen den 
Portpin abzufragen (ob high oder low) oder muss man hier auch 
entprellen?
Ob der "Druck" des Schalter 100ms später erkannt wird, stört mich nicht. 
So schnell merkt der Benutzer die Änderung sowieso nicht.

Wie ist vorzugehen?
Ziel ist es einfach, Schalter geschlossen mache dies, Schalter offen, 
mache etwas anderes.

Danke.

Felix

von René B. (reneb)


Lesenswert?

Entprellen musst du schon.
Entweder stupide über ein Delay, oder z.B. einen Counter, der bei 
Änderung losläuft und eine erneute Reaktion auf die Schalteränderung für 
eine gewisse Zeit sperrt.

von Felix (Gast)


Lesenswert?

Ok, ich verwende derzeit bei Taster die Entprellroutine von Peter 
Danegger. Ich denke, die Funktion get_key_state dürfte dann für das 
Einlesen eines Schalters die Richtige sein oder?

von Karl H. (kbuchegg)


Lesenswert?

Felix schrieb:

> Genügt es einfach, um zu erkennen, Schalter geschlossen oder offen den
> Portpin abzufragen (ob high oder low) oder muss man hier auch
> entprellen?

Die Frage ist ganz einfach, ob es etwas ausmacht, wenn dieselbe 'Aktion' 
in den ersten paar Millisekunden nach dem Umschalten ein paar mal 
abläuft oder nicht.

Wenn der Schalter eine LED einschaltet und beim erneuten Umlegen des 
Schalters wieder ausschaltet, dann ist es herzlich egal, ob die LED in 
den ersten paar Millisekunden nach dem Schalten 2 oder 3 mal flackert.

D.h. das was der Schalter auslöst, entscheidet ob man entprellen 'muss' 
oder nicht.

von ♪Geist (Gast)


Lesenswert?

>Genügt es einfach, um zu erkennen, Schalter geschlossen oder offen den
>Portpin abzufragen (ob high oder low) oder muss man hier auch
>entprellen?
Ich würde eine RC Entprellung rein machen und sich dann keine Sorgen 
machen, ob der Prellt oder nicht. BOM Kosten 2 Cent...

von Karl H. (kbuchegg)


Lesenswert?

Felix schrieb:
> Ok, ich verwende derzeit bei Taster die Entprellroutine von Peter
> Danegger.

Wenn du die sowieso schon drinn hast, wo liegt dann das Problem?

>  Ich denke, die Funktion get_key_state

Dafür ist sie gedacht.

von Martin (Gast)


Lesenswert?

Hallo Felix,

Schalter prellen genauso wie Taster (teilw. sogar noch mehr, bzw. 
länger).
Ob Du aber entprellen musst, kannst nur Du wissen. Falls es egal ist 
wenn Dein Programm ein wenig hin- und herzappelt kannst Du Dir die 
Entprellung sparen

Gruß
 Martin

von Reinhard Kern (Gast)


Lesenswert?

Felix schrieb:
> Ob der "Druck" des Schalter 100ms später erkannt wird, stört mich nicht.

Dann musst du definitiv auch nicht entprellen - solange prellt kein 
Schalter. Und selbst wenn du zufällig gerade zum Zeitpunkt des Schaltens 
abfragst, dann erhältst du eben entweder den alten oder den neuen 
Zustand. Das gilt aber nur, wenn du tatsächlich nur alle 100 ms 
abfragst. Das IST praktisch die Entprellung.

Gruss Reinhard

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.