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:2_sound_und_timer [2023/09/19 23:11] – ↷ Seitename wurde von microcontrollertechnik:2._sound_und_timer auf microcontrollertechnik:2_sound_und_timer geändert mexleadminmicrocontrollertechnik:2_sound_und_timer [2024/03/10 23:53] (current) mexleadmin
Line 12: Line 12:
 Nach dieser Lektion sollten Sie: Nach dieser Lektion sollten Sie:
  
-  - wissen, wie man im Atmel Studio eine Puls-Signal ausgibt+  - wissen, wie man im Microchip Studio eine Puls-Signal ausgibt
  
  
Line 18: Line 18:
 ==== Video ==== ==== Video ====
    
-{{youtube>6PWEpY6SlSc?size=700x400}}+{{youtube>_cRsC6pk_oc?size=700x400}}
  
 </WRAP> </WRAP> </WRAP> </WRAP>
  
 +<WRAP hide>
 ===== LCD Display ansteuern - wie kommt Test auf eine Anzeige? ===== ===== LCD Display ansteuern - wie kommt Test auf eine Anzeige? =====
 <WRAP group>  <WRAP group> 
Line 39: Line 40:
  
 </WRAP> </WRAP> </WRAP> </WRAP>
 +</WRAP>
  
 ==== Übung ==== ==== Übung ====
Line 68: Line 70:
  
 <-- <--
---> III. Eingabe in Atmel Studio # +--> III. Eingabe in Microchip Studio # 
-  - öffnen Sie Atmel Studio+  - öffnen Sie Microchip Studio
   - legen Sie ein neues "GCC C Executable Project" mit dem Namen ''2_sound_und_timer'' für einen ATmega88 an   - legen Sie ein neues "GCC C Executable Project" mit dem Namen ''2_sound_und_timer'' für einen ATmega88 an
   - Bevor das eigentliche Coding beginnt sollte immer eine Beschreibung dem Code vorangestellt werden. Hierzu kann folgende Vorlage verwendet werden: <sxh c; first-line: 1>   - Bevor das eigentliche Coding beginnt sollte immer eine Beschreibung dem Code vorangestellt werden. Hierzu kann folgende Vorlage verwendet werden: <sxh c; first-line: 1>
Line 128: Line 130:
 // 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        // MiniMEXLE nutzt einen ATmega88 mit 18,432 MHz Quarz
 #endif #endif
  
Line 157: Line 159:
       - ''<avr/io.h>'': Header-Datei, welche Input/Output Bezeichner für Pins und Ports definiert. Da im Folgenden bestimmte Ports angesprochen werden sollen, ist diese Header-Datei wichtig. Die Header-Datei liegt im Unterordner ''avr'' in den Ordnern der IDE. Diese wurde bereits schon im Bespiel [[1_hello_blinking_world]] verwendet.       - ''<avr/io.h>'': Header-Datei, welche Input/Output Bezeichner für Pins und Ports definiert. Da im Folgenden bestimmte Ports angesprochen werden sollen, ist diese Header-Datei wichtig. Die Header-Datei liegt im Unterordner ''avr'' in den Ordnern der IDE. Diese wurde bereits schon im Bespiel [[1_hello_blinking_world]] verwendet.
       - ''<util/delay.h>'': Header-Datei, welche einen einfachen Umgang mit Wartezeiten ermöglicht. Diese wurde bereits schon im Bespiel [[1_hello_blinking_world]] verwendet.       - ''<util/delay.h>'': Header-Datei, welche einen einfachen Umgang mit Wartezeiten ermöglicht. Diese wurde bereits schon im Bespiel [[1_hello_blinking_world]] verwendet.
-      - ''"lcd_lib_de.h"'': Diese Header-Datei sollte im Projektordner eingefügt sein. Bei einem neuen Projekt ist sie dies noch nicht. <WRAP right>{{microcontrollertechnik:atmelstudio_addexistingitem.jpg?400}}</WRAP> <panel type="info" title="To Do: notwendige header-Dateien">**Bitte fügen Sie die Datei lcd_lib_de.h in den Projektordner ein** \\ Dazu sollten Sie im Solution Explorer auf das Projekt rechts-klicken (hier ''2. Sound und Timer'') >> Add >> Existing Item... (siehe Bild rechts). \\ Die gewünschte Datei (hier: die heruntergeladene ''lcd_lib_de.h'') auswählen und mit Add hinzufügen. Die Datei sollte nun im Solution Explorer angezeigt werden.</panel>+      - ''%%"lcd_lib_de.h"%%'': Diese Header-Datei sollte im Projektordner eingefügt sein. Bei einem neuen Projekt ist sie dies noch nicht. <WRAP right>{{microcontrollertechnik:atmelstudio_addexistingitem.jpg?400}}</WRAP> <panel type="info" title="To Do: notwendige header-Dateien">**Bitte fügen Sie die Datei lcd_lib_de.h in den Projektordner ein** \\ Dazu sollten Sie im Solution Explorer auf das Projekt rechts-klicken (hier ''2. Sound und Timer'') >> Add >> Existing Item... (siehe Bild rechts). \\ Die gewünschte Datei (hier: die heruntergeladene ''lcd_lib_de.h'') auswählen und mit Add hinzufügen. Die Datei sollte nun im Solution Explorer angezeigt werden.</panel>
     - ''#defines'': Über ''#defines'' kann vorgegeben werden, welcher Text durch den Präprozessor im Code ersetzt werden soll. Damit können Konstanten oder kurze Codeersetzungen (Makros) vorgegeben werden. In diesem Programm soll ein maximale und minimale Periodendauer, sowie eine Haltedauer für den höchsten und niedrigsten Ton vorgegeben werden. Zusätzlich sind drei Standardmakros vorgegeben, um      - ''#defines'': Über ''#defines'' kann vorgegeben werden, welcher Text durch den Präprozessor im Code ersetzt werden soll. Damit können Konstanten oder kurze Codeersetzungen (Makros) vorgegeben werden. In diesem Programm soll ein maximale und minimale Periodendauer, sowie eine Haltedauer für den höchsten und niedrigsten Ton vorgegeben werden. Zusätzlich sind drei Standardmakros vorgegeben, um 
       - ein Bit in einem Byte zu setzen (''SET_BIT(BYTE, BIT)''),        - ein Bit in einem Byte zu setzen (''SET_BIT(BYTE, BIT)''), 
Line 192: Line 194:
     - **Endlosschleife**: damit ein Programm vom Microcontroller dauerhaft ausgeführt wird, muss dies in einer Schleife eingebunden sein. Diese wird durch das Konstrukt ''while(1){''...''}'' vorgegeben.     - **Endlosschleife**: damit ein Programm vom Microcontroller dauerhaft ausgeführt wird, muss dies in einer Schleife eingebunden sein. Diese wird durch das Konstrukt ''while(1){''...''}'' vorgegeben.
     - In der Endlosschleife sind scheinen die Zeilen 77..82 und 84..89 ganz ähnlich auszusehen.      - In der Endlosschleife sind scheinen die Zeilen 77..82 und 84..89 ganz ähnlich auszusehen. 
-      - Dort wird zunächst in einer for-Schleife das Register ''OCR0A'' von der maximalen Periodendauer ''MAX_PER'' zur minimalen ''MIN_PER'' heruntergezählt und beim Zählschritt jeweils 10 Millisekunden gewartet (''_delay_ms(10)''). Wie im Video dargestellt, bietet es sich an für die Details zum Output Compare Register (''OCR0A'') den entsprechenden Teil des [[http://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-9365-Automotive-Microcontrollers-ATmega88-ATmega168_Datasheet.pdf|ATmega88]]-Datenblatts durchzulesen. Als leichten Einstieg kann auch die [[https://www-user.tu-chemnitz.de/~heha/viewchm.php/hs/ATmegaX8.chm/|deutsche Übersetzung des ATmega88-Datenblatts]] per Index nach ''OCR0A'' durchsucht werden.+      - Dort wird zunächst in einer for-Schleife das Register ''OCR0A'' von der maximalen Periodendauer ''MAX_PER'' zur minimalen ''MIN_PER'' heruntergezählt und beim Zählschritt jeweils 10 Millisekunden gewartet (''_delay_ms(10)''). Wie im Video dargestellt, bietet es sich an für die Details zum Output Compare Register (''OCR0A'') den entsprechenden Teil des [[https://ww1.microchip.com/downloads/en/DeviceDoc/ATmega48_88_168_megaAVR-Data-Sheet-40002074.pdf|ATmega88]]-Datenblatts durchzulesen. Als leichten Einstieg kann auch die [[https://www-user.tu-chemnitz.de/~heha/viewchm.php/hs/ATmegaX8.chm/|deutsche Übersetzung des ATmega88-Datenblatts]] per Index nach ''OCR0A'' durchsucht werden.
       - Nachdem bis zur kürzesten Periode gezählt wurde, soll der höchste Ton die Dauer von ''WAIT_TIME'' Millisekunden gehalten werden.        - Nachdem bis zur kürzesten Periode gezählt wurde, soll der höchste Ton die Dauer von ''WAIT_TIME'' Millisekunden gehalten werden. 
       - Der Zustand der LED soll dann gewechselt werden.       - Der Zustand der LED soll dann gewechselt werden.
Line 224: Line 226:
     - ''void init()'': Bei längeren Programmen bietet es sich an eine übergeordnete init-Funktion anzulegen, aus welcher die einzelnen Initialisierungen von Sensoren und ähnlichem aus aufgerufen werden.      - ''void init()'': Bei längeren Programmen bietet es sich an eine übergeordnete init-Funktion anzulegen, aus welcher die einzelnen Initialisierungen von Sensoren und ähnlichem aus aufgerufen werden. 
     - ''void initPorts()'': In dieser Funktion werden die Data Direction Register der Ports B und D korrekt zugewiesen.      - ''void initPorts()'': In dieser Funktion werden die Data Direction Register der Ports B und D korrekt zugewiesen. 
-    - ''void initTimer()'': für das Timer Modul muss der gewünschte "Clear Timer on Compare" Modus und Hardware-Vorteiler gewählt werden. Mit dem Teiler $r_{\rm prescaler}=64$ ergibt sich für die Timer-Schritte pro Sekunde: $f_{\rm Timer}= f_{\rm Quarz} / r_{\rm prescaler} = 18'432'000 ~\rm Hz / 64 =288'000 ~\rm Hz$. Da mit ''COM0B0=0'' ein Invertieren des Ausgangs eingestellt wurde, wäre die höchste ausgegebene Frequenz $f_{\rm out, max}= f_{\rm Timer}/2 = 144'000 ~\rm Hz$. Diese würde sich ergeben, wenn der Timer angewiesen würde nur einen Schritt zu zählen. Für eine Frequenz von $f_{\rm out}= 1'000~\rm Hz$ muss ''OCR0A''=$f_{\rm out, max}/f_{\rm out}-1=144'000 ~\rm Hz / 1'000~\rm Hz - 1= 143$ gesetzt werden. Dies entspricht gerade ''MIN_PER = 143''. \\+    - ''void initTimer()'': für das Timer Modul muss der gewünschte "Clear Timer on Compare" Modus und Hardware-Vorteiler gewählt werden. \\ Mit dem Teiler $r_{\rm prescaler}=64$ ergibt sich für die Timer-Schritte pro Sekunde: \\ \begin{align*} f_{\rm Timer}= f_{\rm Quarz} / r_{\rm prescaler} = 18'432'000 ~\rm Hz / 64 =288'000 ~\rm Hz \end{align*} Da mit ''COM0B0 = 0'' ein Invertieren des Ausgangs eingestellt wurde, wäre die höchste ausgegebene Frequenz $f_{\rm out, max}= f_{\rm Timer}/2 = 144'000 ~\rm Hz$. \\ Diese würde sich ergeben, wenn der Timer angewiesen würde nur einen Schritt zu zählen. Für eine Frequenz von $f_{\rm out}= 1'000~\rm Hz$ muss ''OCR0A'' wiefolgt gesetzt werden: \begin{align*} {\rm OCR0A}=f_{\rm out, max}/f_{\rm out}-1=144'000 ~\rm Hz / 1'000~\rm Hz - 1= 143 \end{align*}  Dies entspricht gerade ''MIN_PER = 143''\\ \\ 
   - Ansprechen des Displays: <sxh c; first-line: 118>   - Ansprechen des Displays: <sxh c; first-line: 118>
  
Line 264: Line 266:
  
 <-- <--
 +
 +
 +
 +
 +  * Diese [[https://www.falstad.com/circuit/circuitjs.html?ctz=CQAgzCCsB0AsBMkywOz3egDNgjAUwFoBOEHaFbeTMIo2bOzeKTKEWCSQnHAKACUQrWAA4QBHGABs7MThDMcIjlWwLokdZtaYNvKilJUFI1jkywTYywGEAyvF4AZI63inX4CwqEgAZgCGADYAznhsmM6kkMzuZjFelsysgaHh2vqYhjgJcaTSVuwg9nwGpMomZlJi7tbFdpEuSkkezYk+8qlhEbwA7uUtZhVUYpEAsiBSUoOT0+2xei4iYLEey8xg3sn+wd0ZZeuVICI4MrVFADohKLwAHscc4KggRIjgkMIKlgDyNvyYAEFMoZlDU1itCpYrlIoqCjnDNklfF10kJYR48iIPIiOjs0j0Dhi1nNzlCQrBgccSWtRJCQFdILDqawRHMcdsUT0XK8wawefNkbtUZEyvy8kQcKs6ldSlkXrAZmKsZcQo15YqFQLOkKuS9JUcJRstqQ8Xs0aL9ZiiGdlWTHAdrfCidKQmBYY6rTJ2YL8RkJtU3B4AwL4HoJihLR4I0akaHGf6PUHHd647xw1JA6wUBmQ2GQChs0cC17janw5q8ihNSm82hefn3LnGS5pFVWGACqc3CbORl7lJIJoOyQUBDkMwkpYACo2AByU7VOUUOckMi7PhSOoyTQSc1XkyRm99aP6NGYBFp8AhF9GfQU18vELmkXutHANFIRCHCCK8GnNj+TAACE72jWQXhzWlIn6ChLEgGQv2YeCT0mR05joSxnzvaoxDQF4CjwyJBFZSwCExDwyI8HR2FYbRfF0Rk2iXA9P2YPdwF4U5JxYp8kgsEhzAiNg6Lo2i2E5aDokUQtmPXSTmMdPDHXkhIeGYVp9UkvCcE1VpNUkvTLA05I71kxtlUlW9+gs8y5ELAy7JkbT7NM1TNUdHTLEkjz3LOTArIghR-IbIKAuYtYWR0O8IuOYQAr-ULfBGFC3GCuKUvAjwoNc1Z4liU4UOY+ACtUBQCsk0rir81L4pK4KqoUBKKpKhLJTcJrTOMdBLDao5vLcyxEKgGRvMgsRrTMRtRsm8aKkslDrTEAhZtIgLFtIBDqnENbCxW44FsLBKiF2haKghIhhi80DjHoF4KlurTG3Os6TJggojsOq6YM1Ar1vKzipmOArKJZBKQaC2ASBEXgAEJigAewAWwABwCAAnAIABd4bR3wAElMAAGiuPGcGJkI8fgcm8bAcmACkiauOmyaZqmmYgABFBGUfRrGcaEbBBewC4AEccAuAA7QXzFwUXxalzAZcVzA5cl3AZZ4VWpaVmWteV8wDb1nh1ZVsW1Z4A3NbNiWdcFrWNY1+39eVp2LcV8XreN93hc9y3Dd9v3Tfli2Q49+WAH5I6jyPRZViXMj2gglNecRtO51GMex3GRWCi7MMGlP2JsJGM753HGX6Q0vj5fUbwWxtxQbrDK+8C8+S2bLK8jGvYmQgyPWQkRHQICEHKWhKsRqZuXgb2kiA7gKsUzY41kXpSZBEPD4GnzfYjmEiFB3kl9+ZFC4UxS8++iy+N5JK-rLv2+eu8AyIUxN-O+OD+xBEZC-0Xv+tJf5rk0pxD4pALCjAgYRE02wK4QOvHISB21CrIKQRCMK1B1IILYl9SYyp-74Nwq9WYk4xA4S+AFKYMxqGUJQlIAeMgGFMLwcGRATDGH0KJKwNh99UJnDmMwvqoEtiCI9NPWCw18yiLwWBSs+pP51kPpYJReRHpuDmKoiRN0sxdW0TUZCSjR7XQMU5CsfCqwzEsQoCx70VF2ICtmZeTi6FaQrLdax-0yiqKjJGOobpvEVijA3W0ChKTFiLDmUk5o5QuMrEEuospDBCLyGw0JjJvHd34XSCkZQ0k8OpHUGEeTT7TDBHUG4lctroQqNPdayp1p1N2nyCoVE7zHU2i8Zpp1n6DQqMpaKyE1J3R6qAh+vSRkQLwbvQKHTAoORZONLaypRpLSUhUJOJD1p122YRdphYCDITzuIPhcy25dJkIcka7SNnPVIg9aKyoyJ9NIh1ayw87niGMS3e5fIDkPJgjoqAhYAXAq9MwIxJDIAbIKpAA5-1+jQu4ki8QCKoApzrnCy5n8UUJVHGcPBkAMW0iJcuFCpKNr5h+tcxF91cIKICiiklrSoqIpToY7wfCUUeCxbFclKdhkUr4RmHhmE0KsOVHhDMxDCpXnPK0eAw82n9B4O9IZ+41GdTfnuOV4g3muA0T1XV28rplDasvHgwxQk2G+GMQEi4NUaQKN6I8Zoc7ZEdWYXq0SbV2oBHwJolUFVqG9NqY88kg2TTUCatE9wLYkGQJNHITwIDcRnIBIEExJCajImoSQGzKpaE6sDHVw8sI5DXIqy5rQwC11aFASkB8JDLKeacOoM55wqxCAAN2CAAVzwJSBUNRbrDoUHhSwABjIIeB0aUl1XXZKdcp1BAANYLiHbSZt7AwYFUsAAEwAJZo14NAEAABVZGAAReGvQJbFz7RLTGeA0YiCAoezGvgICCUkCAAARvDTG2NEbsEGuAYoTgADSG4fAc3bF+kAHN5DJvkJzRQJANiIYgFecDnMWhFE5kOTg4GOZeiYSRwwsB5CGAgPwAAonYNgGGQDY2RuwCAYgIDnoAAqTFgSAOmkGABiQRD3IxE-DZGdGgiIxlFceAcnXRXFgAyC4aM8YS27S+59aNpOyZCFIK4KA1MAglvugA4ljPAemjPKauCINT3w0aWefTZkIDmQiShlOLNGpmLNWbc2AaEMoFNoycPDAA5oeydGnkZ9sxm5nzfmXPWZkzKSAIWZQqbRk5lLiWgueZU55lWvmzN5bS+5mUhnPNBdK-51zFWcBECyzKBzOXnMBca8ZzzHnmt1fK-pyQ8mu04GM2FyL0XvjxbiwlirtXwtRcnVNzGM3EsZbRoJkTYmJNSca+LEICnPP7ZyFV1TG3hOifE0ESTiWu2HfMDKZrB2u3rc25dnbbmnuHa+wVv8Z3kudcG91v7B2fO5cB-J-b6B5PrYBw1-TV5WvydC297b13dsI4ywdmH8mPOKv+2ViHoP5NfcM+1gb8nqvwG65sEzhP4e4+R-JsbqOrs3bm3dq4tPXQFeQAT+rqWEfVb566MHHWGei654dsAsP6eC6579mnKOLto-Z-pmX8mudY+kFz7rsuBeBf22AGnbXwcS7AB5mgymStw-l66YX0u+us4+xV+gmvyRdqo8pw762FuTem-FtziPxuLeW6txrfW-dLYD7N9XZOo9h8D67nzCeY+BfmxN6PK2k8I7a7btzXv7cK8ZwdgrTX0tc+U7V2cOMKfkiN8L37eOy9PZO0p8kmELhXC7SrbvGgu8hCx+LTXqnVOeYHwp0fg+5Mj9VAPrHk-x9XBRPPgfI2J9r9X0v7HU+h8b93zPnfc+x-D6Pxlk-+-p9j8X3GWft+DOb4f934Lz-t+L-P9Pt-q+L+z975-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-eSWye-SBLJYVRaVJfkFIK9VII9RFeAAKgkPQNZdBZJAqHlKBggyhGOsxGOjUShHsTCXsXXJJPg7SGOgQ3eBSoKjJGMmCm3ZhLkXgscp5C8ANAtHkYNNSnuRhBtC0nLRwwRMwBpWuC5JXJ2IWAw0I5MMFFKkXeI+MeidQ3I1pA4vmFEoou4lmJ9HuREtg1o8qnqOePOUtJ-EPDaCyOItMmYyvFPOY0xQhJaKck3INLPGtJaLdJw9g95Go+qMIpcSgEPApUOIrO8I9bJVkJKeYBvDwIfCZPDKQAWDBvQG+LoFIG8LoELB0vBCkx0HE26DE6NoeDRBdBENAMhqQLwEAA|Falstad Schaltung]] skizziert die Struktur des Timer/Counters im CTC Mode