MezData-Logo Lösungen Button :ISP: Lottozahlengenerator © Bubbers

Beschreibung:

MODULE Lotto
 "Lottozahlengenerator: Beim Tastendruck (T1) wird von 01 bis 49 gez‰hlt

DECLARATIONS "******** Ein- und Ausg‰nge *****************************************
  taktein , start          PIN 11,16;               "Takteingang Y0, Starttaster T1
  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   -> [0 ,0 ,0 ,0 ,0 ,0 ,0 ];           "f¸hrende Null dunkel
              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 "***********************************************************************
          "2-stelliger Z‰hler: Einerstelle E = ctrE,  Zehnerstelle Z = ctrZ 

  when start then {                                 "z‰hlen wenn Start gedr¸ckt
                when (ctrE.q == 9)                  "wenn      -> dann
                  then { when (ctrZ.q ==4)
                           then {ctrZ.d = 0;         "Z=4, E=9  -> Z=0, E=1
                                 ctrE.d = 1;
                                } 
                           else {ctrZ.d = ctrZ.q +1; "E=9, Z<4  -> Z weiterz‰hlen
                                 ctrE.d = 0;         "          -> E=0
                                }
                        } 
                  else { ctrE.d = ctrE.q + 1;       "E<>9      -> E weiterz‰hlen
                         ctrZ.d = ctrZ.q;           "          -> Z unver‰ndert
                       }
                   }
              else { ctrE.d = ctrE.q;               "stehenbleiben weil
                     ctrZ.d = ctrZ.q;               "nicht Start gedr¸ckt
                   }

  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 ( [start,taktein] -> a1);    "Segmente interessieren eigentlich nicht,

  @repeat 20 { [1    ,.c.    ] -> .x.;}   "Start: 20 Takte
  @repeat 2  { [0    ,.c.    ] -> .x.;}   "Stop				
  @repeat 30 { [1    ,.c.    ] -> .x.;}   "Start: 30 Takte

  "bei der Simulation: Edit-> Show ->Instances -> D -> einzelne Z‰hlerbits anzeigen 
END