Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
microcontrollertechnik:6_wuerfel_und_zufall [2022/10/22 03:56]
tfischer
microcontrollertechnik:6_wuerfel_und_zufall [2024/01/22 13:45] (aktuell)
mexleadmin
Zeile 1: Zeile 1:
-====== 6Würfel und Zufall ======+====== 6 Würfel und Zufall ======
  
 ==== Ziele ==== ==== Ziele ====
Zeile 26: Zeile 26:
 <-- <--
  
---> III. Eingabe in Atmel Studio #+--> III. Eingabe in Microchip Studio #
 <WRAP group><WRAP column 40%><sxh c; first-line: 1> <WRAP group><WRAP column 40%><sxh c; first-line: 1>
  
Zeile 74: Zeile 74:
 // Festlegung der Quarzfrequenz // Festlegung der Quarzfrequenz
 #ifndef F_CPU                   // optional definieren #ifndef F_CPU                   // optional definieren
-#define F_CPU 18432000UL        // ATmega 328 mit 18,432 MHz Quarz+#define F_CPU 18432000UL        // ATmega 88 mit 18,432 MHz Quarz
 #endif                           #endif                          
    
Zeile 244: Zeile 244:
   - Die Konstanten entsprechen denen der letzten Programme. \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\    - Die Konstanten entsprechen denen der letzten Programme. \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ 
   - Alle Variablen außer ''castBit'' entsprechen denen der letzten Programme. ''castBit'' ist ein "Merker", bzw. Flipflop welches das Würfeln aktiviert oder deaktiviert \\ \\    - Alle Variablen außer ''castBit'' entsprechen denen der letzten Programme. ''castBit'' ist ein "Merker", bzw. Flipflop welches das Würfeln aktiviert oder deaktiviert \\ \\ 
-  - Bei den Funktionsprototypen sind einige bekannte Unterprogramme vorhanden. Details werden weiter unten erklärt. \\ \\ \\ +  - Bei den Funktionsprototypen sind einige bekannte Unterprogramme vorhanden. Details werden weiter unten erklärt. \\ \\ \\ \\ \\  
  
 ''Hauptprogramm ========================='' ''Hauptprogramm =========================''
  
-  - Das Hauptprogramm ähnelt sehr stark dem [[4._up_down_counter|Up/Down Counter]].+  - Das Hauptprogramm ähnelt sehr stark dem [[4_up_down_counter|Up/Down Counter]].
   - Zunächst werden zwei Initialisierungsroutinen aufgerufen (siehe weiter unten)   - Zunächst werden zwei Initialisierungsroutinen aufgerufen (siehe weiter unten)
   - Dann werden wieder die "__T__imer/__C__ounter __C__ontrol __R__egister" des Timers __0__ ''TCCR0A'' und ''TCCR0B'' gesetzt. Der 8-Bit Timer und auch hier im "Normal Mode" zum hochzählen genutzt. Auch hier gibt das Register ''TCCR0B'' den Prescaler an.   - Dann werden wieder die "__T__imer/__C__ounter __C__ontrol __R__egister" des Timers __0__ ''TCCR0A'' und ''TCCR0B'' gesetzt. Der 8-Bit Timer und auch hier im "Normal Mode" zum hochzählen genutzt. Auch hier gibt das Register ''TCCR0B'' den Prescaler an.
Zeile 254: Zeile 254:
   - 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 ''takt10ms'' und ''takt100ms'' zu finden. \\ \\
-    - Alle $10ms$ (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 $100ms$ (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 \\ \\ \\ \\ \\ 
 ''Interrupt Routine ========================='' ''Interrupt Routine =========================''
   - 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_{ISR}= 0,16\bar{6}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'', ''vorteiler'', ''takt10ms'', ''hundertstel'' und ''takt100ms'' 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.  \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ 
-\\ \\ \\ \\ +\\ \\ \\
 '' Funktion Tasten einlesen =============='' '' Funktion Tasten einlesen ==============''
-\\ \\ \\ \\ +\\ \\ \\ \\ \\  
-  - In dieser Funktion werden zunächst die Stellungen aller Taster eingelesen (vgl. ''counterCounting(void)'' bei [[4._up_down_counter|Up/down Counter]]). \\ \\ \\+  - In dieser Funktion werden zunächst die Stellungen aller Taster eingelesen (vgl. ''counterCounting(void)'' bei [[4_up_down_counter|Up/down Counter]]). \\ \\ \\
   - Neu hier ist, dass die Bedienung der Schalter nur das Flag ''castBit'' setzen. Falls dieses gesetzt ist, wird die Variable ''castVar'' hochgezählt. Falls diese 6 überschreitet wird sie auf 1 zurückgesetzt.  \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\   - Neu hier ist, dass die Bedienung der Schalter nur das Flag ''castBit'' setzen. Falls dieses gesetzt ist, wird die Variable ''castVar'' hochgezählt. Falls diese 6 überschreitet wird sie auf 1 zurückgesetzt.  \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\