MezData-Logo Lösungen Button :ISP: 2-stufiger Zähler 0 bis 99 mit 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

"************* 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 "************* Gleichungen *********************************************

  "2-stelliger Zähler: Einerstelle E = ctrE,  Zehnerstelle Z = ctrZ  
   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
          }    
             
  ctrZ.clk = taktein;    "gleicher Takt für beide Stellen -> synchroner Zähler
  ctrE.clk = taktein;    "Übertrag Einer -> Zehner entsteht durch Bedingungen oben

TEST_VECTORS "*********** Simulation *********************************************

             ( [taktein] -> a1);                             "Eingang -> Ausgang
  @repeat 101 {[.c.    ] -> .x.;}                            "101 Takte