MezData-Logo Lösungen Button :ISP: Reaktionstester mit Anzeige

© Bubbers

Schaltung

MODULE reakt
"Reaktionstester mit 2-stelliger Anzeige und synchronen BCD-Z‰hlern'

DECLARATIONS "******** Ein- und Ausg‰nge *****************************************
  taktein                   PIN 11;                  "Takteingang Y0
  ctrZbit3..ctrZbit0        NODE ISTYPE'BUFFER,REG'; "Z‰hler Zehner Ausg‰nge
  ctrEbit3..ctrEbit0        NODE ISTYPE'BUFFER,REG'; "Z‰hler Einer  Ausg‰nge
  ctrZ  =  [ctrZbit3..ctrZbit0];                     "Zusammenfassung der 
  ctrE  =  [ctrEbit3..ctrEbit0];                     "Z‰hlerausg‰nge 

  a2,b2,c2,d2,e2,f2,g2      PIN 38,37,40,41,42,43,44 ISTYPE'BUFFER,COM'; "Anzeige 2
  a1,b1,c1,d1,e1,f1,g1      PIN 4,3,6,7,8,9,10       ISTYPE'BUFFER,COM'; "Anzeige 1
  start,stop                NODE ISTYPE'BUFFER,COM'; "Start-Stop-Flipflop-Ausg‰nge
  starttaster,stoptaster    PIN 16,18;               "Taster f¸r Start und Stop
  reset                     PIN 21;                  "R¸cksetz-Schalter 

"************* Funktionstabelle Anzeige 2 (Einer) ********************************
TRUTH_TABLE (ctrE -> [a2,b2,c2,d2,e2,f2,g2]) "Ausg‰nge Z‰hler = Eing. Codeumsetzer
 	0 -> [1,1,1,1,1,1,0];   "     LEDs high-aktiv!
		1 -> [0,1,1,0,0,0,0];	" 		 a
		2 -> [1,1,0,1,1,0,1];	"	        ---
		3 -> [1,1,1,1,0,0,1];	"	     f | g | b
		4 -> [0,1,1,0,0,1,1];	"	        ---
		5 -> [1,0,1,1,0,1,1];	"	     e | d | c
		6 -> [1,0,1,1,1,1,1];	"	        ---
		7 -> [1,1,1,0,0,0,0];
		8 -> [1,1,1,1,1,1,1];
		9 -> [1,1,1,1,0,1,1];

"************* Funktionstabelle Anzeige 1 (Zehner) *******************************
TRUTH_TABLE (ctrZ -> [a1,b1,c1,d1,e1,f1,g1]) 
 	0 -> [1,1,1,1,1,1,0];
		1 -> [0,1,1,0,0,0,0];
		2 -> [1,1,0,1,1,0,1];
		3 -> [1,1,1,1,0,0,1];
		4 -> [0,1,1,0,0,1,1];
		5 -> [1,0,1,1,0,1,1];
		6 -> [1,0,1,1,1,1,1];
		7 -> [1,1,1,0,0,0,0];
		8 -> [1,1,1,1,1,1,1];
		9 -> [1,1,1,1,0,1,1];

EQUATIONS
  start  = !(stoptaster # stop);                    "Flipflop f¸r Start und Stop
  stop   = !(start # starttaster);
  "2-stelliger Z‰hler: Einerstelle E = ctrE,  Zehnerstelle Z = ctrZ              
  when reset 
    then {ctrZ.d = 0; ctrE.d = 0;}                  "Beide Stellen r¸cksetzen
    else when start                                 "Z‰hle bei Start-Flipflop=1
           then {when (ctrE.q == 9)                  "wenn      -> dann
                  then { ctrE.d = 0;                "E=9       -> E=0
                         when (ctrZ.q == 9) 
                           then ctrZ.d = 0;         "E=9, Z=9  -> Z=0
                           else ctrZ.d = ctrZ.q +1; "E=9, Z<>9 -> Z weiterz‰hlen
                       }
                  else { ctrE.d = ctrE.q + 1;       "E<>9      -> E weiterz‰hlen
                         ctrZ.d = ctrZ.q;           "E<>9      -> Z unver‰ndert
                       }
                }
           else {ctrE.d = ctrE.q;                   "Stehenbleiben!! Start=0.
                 ctrZ.d = ctrZ.q
                }
  ctrZ.clk = taktein;    "gleicher Takt f¸r beide Stellen -> synchroner Z‰hler
  ctrE.clk = taktein;    "&Mac220;bertrag Einer -> Zehner entsteht durch Bedingungen oben

TEST_VECTORS ([starttaster,stoptaster,reset,taktein] -> ctrZ);
              [0          ,1         ,0    ,0      ] -> .x.;    "Start-FF r¸cksetzen
              [0          ,0         ,0    ,.c.    ] -> .x.;    "Grundzustand
              [1          ,0         ,0    ,.c.    ] -> .x.;    "Start-Taster dr¸cken
  @repeat 10 {[0          ,0         ,0    ,.c.    ] -> .x.;}   "Start-Taster loslassen
  @repeat 2  {[0          ,1         ,0    ,.c.    ] -> .x.;}   "Stop-Taster dr¸cken
  @repeat 2  {[0          ,0         ,1    ,.c.    ] -> .x.;}   "R¸cksetzen
END