Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
microcontrollertechnik:6_wuerfel_und_zufall [2024/01/22 13:45] mexleadminmicrocontrollertechnik:6_wuerfel_und_zufall [2026/03/08 13:43] (current) mexleadmin
Line 89: Line 89:
    
 // Konstanten // Konstanten
-#define PRESCALER_VAL       90      // Faktor Vorteiler (Timerticks 0,111 ms) +#define PRESCALER_VAL       90      // Faktor für softwarePrescaler (Timerticks 0,111 ms) 
-#define CYCLE10MS_MAX       10      // Faktor Hunderstel (1/100 s)+#define CYCLE10MS_MAX       10      // Faktor von cycle1ms zu cycle10ms 
    
 #define INPUT_PIN_MASK 0b00001111 #define INPUT_PIN_MASK 0b00001111
Line 97: Line 97:
 // Variable // Variable
 unsigned char softwarePrescaler = PRESCALER_VAL;   // Zaehlvariable Vorteiler unsigned char softwarePrescaler = PRESCALER_VAL;   // Zaehlvariable Vorteiler
-unsigned char cycle10msCount    CYCLE10MS_MAX; // Zaehlvariable Hunderstel+unsigned char cycle10msCount    CYCLE10MS_MAX; // Zaehlvariable 10ms Raster
    
 unsigned char castVar = 1;      // Variable für Wuerfel-Zaehler unsigned char castVar = 1;      // Variable für Wuerfel-Zaehler
Line 152: Line 152:
    (10ms, 100ms) realisiert. Die Interrupts stammen von Timer 0 (Interrupt 1)    (10ms, 100ms) realisiert. Die Interrupts stammen von Timer 0 (Interrupt 1)
    
-   Verwendete Variable: vorteiler +   Verwendete Variable: softwarePrescaler 
-                        hunderstel+                        cycle10msCount 
    
-   Ausgangsvariable:    takt10ms +   Ausgangsvariable:    cycle10msActive 
-                        takt100ms+                        cycle100msActive
 */ */
 { {
Line 178: Line 178:
 void castCounting(void) void castCounting(void)
 { {
- DDRC = DDRC &~INPUT_PIN_MASK; // Port auf Eingabe schalten+ DDRC = DDRC &~INPUT_PIN_MASK; // Port auf Eingabe schalten
  PORTC |=   INPUT_PIN_MASK; // Pullup-Rs eingeschaltet  PORTC |=   INPUT_PIN_MASK; // Pullup-Rs eingeschaltet
  _delay_us(1); // Wartezeit Umstellung Hardware-Signal  _delay_us(1); // Wartezeit Umstellung Hardware-Signal
- buttonState    = (PINC & INPUT_PIN_MASK) ; // Hole den Schalterstatus von B1..B4, 0b1 ist hier offener SChalter + buttonState    = (PINC & INPUT_PIN_MASK) ; // Hole den Schalterstatus von C0..C3, 0b1 ist hier offener Schalter 
- DDRC |= INPUT_PIN_MASK; // Port auf Ausgabe schalten+ DDRC |= INPUT_PIN_MASK; // Port auf Ausgabe schalten
  
     // Einlesen der Tastensignale        // Einlesen der Tastensignale   
Line 253: Line 253:
   - Auch hier wird über die "__T__imer __I__nterrupt __M__a__SK__" ''TIMSK0'' durch das Bit ''TOIE0'' ("__T__imer __O__verflow __I__nterrupt __E__nable") der Interrupt bei Überlauf aktiviert.   - Auch hier wird über die "__T__imer __I__nterrupt __M__a__SK__" ''TIMSK0'' durch das Bit ''TOIE0'' ("__T__imer __O__verflow __I__nterrupt __E__nable") der Interrupt bei Überlauf aktiviert.
   - Mit dem Befehl ''sei()'' wird die Bearbeitung von Interrupts aktiv \\ \\ \\    - Mit dem Befehl ''sei()'' wird die Bearbeitung von Interrupts aktiv \\ \\ \\ 
-  - In der Endlosschleife sind auf der ersten Ebene wieder nur If-Abfragen zu den Flags ''takt10ms'' und ''takt100ms'' zu finden. \\ \\+  - In der Endlosschleife sind auf der ersten Ebene wieder nur If-Abfragen zu den Flags ''cycle10msActive'' und ''cycle100msActive'' zu finden. \\ \\
     - Alle $10~\rm ms$ (bzw. wenn das entsprechende Flag gesetzt wird) wird das Flag zurückgesetzt und das Unterprogramm ''castCounting()'' aufgerufen \\ \\ \\      - Alle $10~\rm ms$ (bzw. wenn das entsprechende Flag gesetzt wird) wird das Flag zurückgesetzt und das Unterprogramm ''castCounting()'' aufgerufen \\ \\ \\ 
     - Alle $100~\rm ms$ (bzw. wenn das entsprechende Flag gesetzt wird) wird das Flag zurückgesetzt und das Unterprogramm ''castDisplay()'' aufgerufen \\ \\ \\ \\ \\      - Alle $100~\rm ms$ (bzw. wenn das entsprechende Flag gesetzt wird) wird das Flag zurückgesetzt und das Unterprogramm ''castDisplay()'' aufgerufen \\ \\ \\ \\ \\ 
Line 259: Line 259:
   - Mit dem Befehl ''ISR()'' wird eine Interrupt Service Routine für den  __OV__er__F__low Interrupt für __TIMER0__ angelegt.    - Mit dem Befehl ''ISR()'' wird eine Interrupt Service Routine für den  __OV__er__F__low Interrupt für __TIMER0__ angelegt. 
   - Der Überlauf-Interrupt durch den Timer0 wird erst bei Überlauf des 8-Bit Wert ausgeführt. Auch hier ergibt sich durch den Prescaler und Modus (''TCCR0A'' und ''TCCR0B'') eine Periode von $T_{\rm ISR}= 0,16\bar{6}~\rm ms$.   - Der Überlauf-Interrupt durch den Timer0 wird erst bei Überlauf des 8-Bit Wert ausgeführt. Auch hier ergibt sich durch den Prescaler und Modus (''TCCR0A'' und ''TCCR0B'') eine Periode von $T_{\rm ISR}= 0,16\bar{6}~\rm ms$.
-  - Die Ermittlung von ''Timertick'', ''vorteiler'', ''takt10ms'', ''hundertstel'' und ''takt100ms'' ist hier wieder gleich dem im [[4_up_down_counter|Up/Down Counter]]. +  - Die Ermittlung von ''timertick'', ''softwarePrescaler'', ''cycle10msActive'', ''cycle10msCount'' und ''cycle100msActive'' ist hier wieder gleich dem im [[4_up_down_counter|Up/Down Counter]]. 
   - Eine große Änderung ist, dass bereits im Interrupt alle 10ms die Unterfunktion ''readButton()'' aufgerufen wird.  \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\   - Eine große Änderung ist, dass bereits im Interrupt alle 10ms die Unterfunktion ''readButton()'' aufgerufen wird.  \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\
 \\ \\ \\ \\ \\ \\