MezData-Logo Lösungen Button :ISP: Taste entprellen mit RS-Flip-Flop

Problem:

Schliesst man einen Taster direkt an einen Zähler an, kann erkannt werden das ein Taster nicht einfach nur schließst, sondern mehrfach hin und her prellt.
D.h. statt eines Impulses mehrere Impulse erzeugt:

Lösung:

Das RS-FF aus NANDS ist der Taktgeber für einen Zähler 0..15 lowaktive Denkweise:

In der Ruhestellung liegt an TaktR Pin16 low, FF ist 0

Beim Tastendruck wird das FF durch Low an TaktR gesetzt.

DECLARATIONS "********** Ein- und Ausgänge *******************************
 
  TaktS,TaktR      PIN 15,16;  "Takt-FF-Setzen und Takt-FF-Rücksetzen sind
                               "die beiden Tasterkontakte von T1
  TaktQ,TaktQN     PIN 3,4;    "Takt-FF-Ausgang Q, Takt-FF-Ausgang QN
  
  ctrbit3..ctrbit0 PIN 7,8,9,10 ISTYPE'BUFFER,REG'; "4 Zählerausgänge

  ctr = [ctrbit3..ctrbit0];    "Zusammenfassung zum Zähler 0 bis 15

EQUATIONS "************ Logikgleichungen *********************************

  TaktQ  = !(TaktS & TaktQN);  "RS-Flipflop zur Tasterentprellung
  TaktQN = !(TaktR & TaktQ );

  ctr.d   = ctr.q + 1;         "Zähler 0 bis 15
  ctr.clk = TaktQ;             "Zähler erhält Takt vom RS-Flipflop

TEST_VECTORS "********** Simulation **************************************
         ( [TaktS,TaktR] -> TaktQ);  "Eingänge -> Ausgänge
@repeat 9 {[1    ,0    ] -> .x.;     "Taster losgelassen, Grundstellung
           [0    ,1    ] -> .x.;     "Simulation des Prellens:
           [1    ,1    ] -> .x.;     "Taster federt (prellt) 3 mal 
           [0    ,1    ] -> .x.;     "beim Drücken
           [1    ,1    ] -> .x.;
           [0    ,1    ] -> .x.;
           [1    ,0    ] -> .x.;     "Taster loslassen
           [1    ,1    ] -> .x.; }   "Taster federt (prellt)
END