Benutzer-Werkzeuge

Webseiten-Werkzeuge


pfw:topicofbouncing

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
pfw:topicofbouncing [2025-06-18 00:25] – [Beispiele in Forth] mkapfw:topicofbouncing [2025-06-22 02:33] (aktuell) – [Flanken-Interrupt] mka
Zeile 1: Zeile 1:
-====== Prellen ======+====== Prellen - Studie mittels Forth ======
  
 Im Internet findest du viele Abhandlungen darüber. Als Einstieg dienten mir die folgenden Webseiten. Im Internet findest du viele Abhandlungen darüber. Als Einstieg dienten mir die folgenden Webseiten.
Zeile 31: Zeile 31:
 Schaltung für den Test am Logicanalyser (L) Schaltung für den Test am Logicanalyser (L)
  
-+vcc ---R---+---S_S---GND++VCC ---R---+---S_S---GND
             |             |
             L             L
Zeile 60: Zeile 60:
   outP16  10 pulse <ret>   outP16  10 pulse <ret>
      
-Kann man so das Prellen "sehen"? Ja, man kann.+Kann man so das Prellen "sehen"? Ja, man kann. noForth kann in der Prellzeit den Pin mehrfach abfragen
  
 {{:pfw:pulsinnoforthhighlevel.png?400|Der Puls dauert nur 7 µs.}} {{:pfw:pulsinnoforthhighlevel.png?400|Der Puls dauert nur 7 µs.}}
Zeile 66: Zeile 66:
 === Portpin beobachten === === Portpin beobachten ===
  
-''tt ( --- )'' fragt den Schalter kontinuierlich ab. Abbruch durch irgendeinen Tastendruck auf der Tastatur. In der Endlosschleife  mittelt ''t? ( -- x )'' aus 8 Abfragen den Pegel am Input-Pin. ''x=0'' wäre ein stetiges ''Low'', ''x=$400'' ein stetiges ''High''. Werte im Breich ''0<x<$400'' bedeuten prellen wurde erfasst, die Abfrage war schnell genug dafür.+''tt ( --- )'' fragt den Schalter kontinuierlich ab. Abbruch durch irgendeinen Tastendruck auf der Tastatur. In der Endlosschleife  mittelt ''t? ( -- x )'' aus 8 Abfragen den Pegel am Input-Pin. ''x=0'' wäre ein stetiges ''Low'', ''x=$400'' ein stetiges ''High''. Werte im Breich ''0<x<$400'' bedeuten: Prellen wurde erfasst. Die Abfrage ist schnell genug dafür.
      
 Die Beobachtung zeigte, dass //jeder// Tastendruck ein Prellen verursacht. Die Beobachtung zeigte, dass //jeder// Tastendruck ein Prellen verursacht.
 Es lag immer ein Wert ''<$400'' vor, wenn die Taste gedrückt wurde, Es lag immer ein Wert ''<$400'' vor, wenn die Taste gedrückt wurde,
-und in der Regel auch beim Loslassen+und in der Regel auch beim Loslassen. Probiere selbst ...
-Die Abfrage des Port-Pins im High-Level-Code ist schnell genug, +
-um das Prellen des angeschlossenen Schalters zu erkennen. Probiere selbst...+
  
 === Versuch, nur die Wechsel zu zeigen === === Versuch, nur die Wechsel zu zeigen ===
Zeile 85: Zeile 83:
 </code> </code>
  
-Man sieht, dass die Pegel nun immer schön von L nach H und zurück wechseln. +Man sieht, dass die Pegelwechel auch hierbei immer noch nicht ganz ohne Prellen sttfinden. Insbesondere bei den Wechseln von H -> L 
-Aber selbst jetzt immer noch nicht ganz ohne Prellen. Insbesondere bei den Wechseln von H -> L +wird beim Tastendruck immer noch ein zusätzlicher Wechsel erkannt. Die Routine ist also immer noch zu schnell und "erkennt" das Ende des Prellens nicht wirklich
-wird beim Tastendruck immer noch ein zusätzlicher Wechsel erkannt. Die Routine ist also immer noch zu schnell und "erkennt" das Ende des Prellens nicht. +Ein Tastendruckzähler H->L würde daher meist falsch, d.h. doppelt zählen.
-Ein Tastendruckzähler H->L würde daher meist fals, d.h. doppelt zählen.+
 Von L -> H scheint es schon ohne Prellen zu funktionieren. Von L -> H scheint es schon ohne Prellen zu funktionieren.
  
 +Das menschliche Auge kann einem Pegel auch nicht ansehen, ob der schon jenseits vom Prellen liegt. Dazu brauchen wir auch den Vergleich mit der zuvor verstrichenen Prellzeit. Erst wenn wir eine Phase sehen die 2x oder 3x so lang ganz ohne Pegelwechsel ist, wie das, was wir als "prellen" abschätzen, sind wir bereit anzunehmen, dass das Prellen nun wirklich vorbei ist.
  
-===== Entprellen (folgt) =====+Das gilt es in Software nachzubilden. 
 + 
 +====== Entprellen ======
  
  
 Entprellen mittels Hardware, wie RC-Glieder oder ein RS-Flip-Flop will ich hier nicht behandeln. Darüber findest du viel im Internet. Entprellen per Software kennt einige gängigen Methoden.  Entprellen mittels Hardware, wie RC-Glieder oder ein RS-Flip-Flop will ich hier nicht behandeln. Darüber findest du viel im Internet. Entprellen per Software kennt einige gängigen Methoden. 
  
-====Flanken-Interrupt====+===== Flanken-Interrupt ====
 + 
 +Schmitt-Trigger sind in den I/O-Ports einer MCU schon integriert, zumindest beim MSP430 war es so. [[en:pfw:clavis|CLAVIS?]] nutzt das ja bereits. Aber auch nach solch einer Abfrage braucht es noch Zeit bis eine erneute Pin-Abfrage erfolgen darf, will man nicht ins prellen hinein abfragen, wie im vorherigen Abschnitt klar geworden ist.
  
-Schmitt-Trigger sind in den I/O-Ports einer MCU schon integriert, zumindest beim MSP430 war es so. CLARIS? nutzt das ja bereits. Aber auch das braucht immer auch die anschließende Verzögerung der erneuten Pin-Abfrage, wie im vorherigen Abschnitt klar geworden ist.+===== Getaktete Abfrage mit Zeitstempel am Zustand =====
  
-==== getaktete Abfrage mit Zeitstempel am Zustand ==== 
  
  
 (folgt) (folgt)
  
-==== Pegelwechsel mitzählen bis ein stabiler Zustand ereicht ist. ====+===== Pegelwechsel mitzählen bis ein stabiler Zustand ereicht ist. =====
  
  
 (folgt) (folgt)
  
-==== Methode "Schieberegister" ====+===== Methode "Schieberegister" =====
  
 Beim ablesen des digitalen Inputs am Port wird der Bit-Wert in ein Register geschoben. Macht man 16x die Abfrage, gibt es entweder eine 0000 oder eine FFFF im Register, beides "gültige" Rückgabewerte. Oder es resultiert was dazwischen und ist dann die Ausnahme. Beim ablesen des digitalen Inputs am Port wird der Bit-Wert in ein Register geschoben. Macht man 16x die Abfrage, gibt es entweder eine 0000 oder eine FFFF im Register, beides "gültige" Rückgabewerte. Oder es resultiert was dazwischen und ist dann die Ausnahme.
pfw/topicofbouncing.1750199104.txt.gz · Zuletzt geändert: 2025-06-18 00:25 von mka