Forum: Mikrocontroller und Digitale Elektronik Entprellung von Schalter/Pin (nicht Taster) also Low & High


von Hans Maier (Gast)


Lesenswert?

Hallo,

habe in der Codesammlung die "Bulletproof" Entprellung für Tasten 
gefunden. Die ist soweit wunderbar, allerdings nicht für Schalter. Habe 
jedoch einen mechanischen Schalter, bei dem auf Low und High reagiert 
werden soll. Wie entprellt man so etwas? In der ISR (Timer Overflow) 
einfach eine Variable hochzählen wenn der letzte Zustand dem aktuellen 
entspricht, andernfalls die Variable wieder auf Null zurücksetzen? Ab 
einem bestimmten Zählerwert ist halt ein Zustand eingetreten. Bessere 
Vorschläge?

Gruß,

Hans

von hubert (Gast)


Lesenswert?

nicht nur letzte==jetzigem Zustand,

sondern evtl. 5-10 Werte auf Gleichheit prüfen....

von Peter D. (peda)


Lesenswert?

Wennn Du mal den Code genauer ansiehst, dann wirst Du bemerken, daß 
nicht nur die H-L Flanke, sondern auch der entprellte Zustand zur 
Verfügung steht.

Damit wird z.B. in der erweiterten Version die Lang/Kurz Erkennung 
gemacht.


Peter

von Hans Maier (Gast)


Lesenswert?

Hallo,

habe probiert die Entprellung zu verstehen und bin dazu auch mal den 
Code per Zettel + Stift durchgegangen um zu sehen was da überhaupt 
passiert. Muss gestehen: das Teil funktioniert perfekt, aber wäre ich 
nie drauf gekommen und werde ich auch nicht ändern/anfassen. Habe nur 
die Tastenabfrage erweitert, so dass man Pins aus unterschiedlichen 
Ports verwenden kann und arbeite da noch dran Pins die nicht von 0...7 
gehen zu verwenden (z.B. PortA Pin0, Pin1 & PortB Pin1).
Zurück zum Thema: habe das jetzt so im Timer Overflow gelöst (actState 
und switchcount sind globale Variablen die mit 0 initialisiert werden):

  unsigned char tempSwitch;

  tempSwitch = (PortSwitch & (1 << PinSwitch));
  if (tempSwitch == actState)
  {
    switchcount++;
  }
  else
  {
    switchcount = 0;
  }
  actState = tempSwitch;

Außerhalb der ISR prüfe ich dann einfach switchcount auf größer/gleich 4 
und den Zustand von actState. Scheint zu laufen ;=)

Gruß,

Hans

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.