Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende ÜberarbeitungLetzte ÜberarbeitungBeide Seiten der Revision | ||
light_systemtickuml [2020/01/06 14:40] – [Videozusammenfassung] huwi | light_systemtickuml [2020/07/23 11:50] – [Erweiterung] huwi | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
====== Der SystemTick ====== | ====== Der SystemTick ====== | ||
+ | {{tag> | ||
ARM Controller sind mit ihrer Leistungsfähigkeit prädestiniert für den Einsatz entsprechender Laufzeitumgebungen oder geeigneter Echtzeitbetriebssysteme. Solche basieren meist auf einer Timer-getriggerten Verteilung von Ressourcen, vor allem der Ressource Rechenzeit. Dafür steht beim ARM ein spezieller Timer zur Verfügung, der ausschließlich die Aufgabe hat, ein System-Trigger-Ereignis zu generieren. | ARM Controller sind mit ihrer Leistungsfähigkeit prädestiniert für den Einsatz entsprechender Laufzeitumgebungen oder geeigneter Echtzeitbetriebssysteme. Solche basieren meist auf einer Timer-getriggerten Verteilung von Ressourcen, vor allem der Ressource Rechenzeit. Dafür steht beim ARM ein spezieller Timer zur Verfügung, der ausschließlich die Aufgabe hat, ein System-Trigger-Ereignis zu generieren. | ||
Zeile 23: | Zeile 24: | ||
* Diagrammvorlage // | * Diagrammvorlage // | ||
* Treiberpaket für //STM32F0// zuweisen | * Treiberpaket für //STM32F0// zuweisen | ||
- | * optional Template // | + | * optional Template // |
{{: | {{: | ||
Zeile 31: | Zeile 32: | ||
Die Aufgabe besteht darin in geeigneter Form das Konzept des System-Timers mit den daraus folgenden Systemereignissen zu demonstrieren. Als Rückmeldung für den Anwender benutzen wir optische Signale, das sind blinkende LEDs und ein akustisches Signal, das ist der Speaker. | Die Aufgabe besteht darin in geeigneter Form das Konzept des System-Timers mit den daraus folgenden Systemereignissen zu demonstrieren. Als Rückmeldung für den Anwender benutzen wir optische Signale, das sind blinkende LEDs und ein akustisches Signal, das ist der Speaker. | ||
- | Zunächst zum **10 Millisekunden** Ereignis. Dieses Ereignis wird direkt aus der Interruptfunktion (Interrupt | + | Zunächst zum **10 Millisekunden** Ereignis. Dieses Ereignis wird direkt aus der Interruptfunktion (Interrupt |
{{:: | {{:: | ||
- | Das Ereignis für die **100 Millisekunden** wird nicht direkt aus der Interupptfunktion | + | Das Ereignis für die **100 Millisekunden** wird nicht direkt aus der Interruptfunktion |
{{: | {{: | ||
Zeile 53: | Zeile 54: | ||
{{: | {{: | ||
- | Diese müssen wieder in Beziehung gesetzt werden. Für die gestellten Anforderungen (toggle) reicht als Bibliotheksbaustein | + | Diese müssen wieder in Beziehung gesetzt werden. Für die gestellten Anforderungen (toggle) reicht als Bibliothek Baustein |
{{: | {{: | ||
Zeile 74: | Zeile 75: | ||
{{: | {{: | ||
- | Im nächsten Schritt hängen wir uns an die Systemereignisse für 10, 100 und 1000 Millisekunden indem wir jeweils **Operationen** auf die Klasse **Controller** ziehen und Schritt für Schritt folgende | + | Im nächsten Schritt hängen wir uns an die Systemereignisse für 10, 100 und 1000 Millisekunden indem wir jeweils **Operationen** auf die Klasse **Controller** ziehen und Schritt für Schritt folgende |
* onTimer10ms() | * onTimer10ms() | ||
* onEvent100ms() | * onEvent100ms() | ||
Zeile 85: | Zeile 86: | ||
{{: | {{: | ||
- | für die realisierung | + | für die Realisierung |
- | + | ||
- | {{ : | + | |
- | > | + | |
- | static uint16_t dim=0; | + | |
- | + | ||
- | if (dim < 1000) | + | |
- | { | + | |
- | yellowLED.on(); | + | |
- | waitUs(dim); | + | |
- | yellowLED.off(); | + | |
- | waitUs(1000-dim); | + | |
- | dim++; | + | |
- | } | + | |
- | else if (dim <2000) | + | |
- | { | + | |
- | yellowLED.on(); | + | |
- | waitUs(2000-dim); | + | |
- | yellowLED.off(); | + | |
- | waitUs(dim-1000); | + | |
- | dim++; | + | |
- | } | + | |
- | else | + | |
- | { | + | |
- | dim=0; | + | |
- | } | + | |
- | </ | + | |
- | + | ||
- | Im 100 Milisekunden | + | |
{{ : | {{ : | ||
Zeile 143: | Zeile 116: | ||
{{: | {{: | ||
+ | |||
+ | ===== Erweiterung ===== | ||
+ | Als nächstes erweitern wir die Anwendung so, dass wir das Ereignis **onWork()** welches fortlaufend aus der // | ||
+ | |||
+ | {{ : | ||
+ | > | ||
+ | // continuous event from the Mainloop | ||
+ | uint8_t brightness=1; | ||
+ | yellowLED.on(); | ||
+ | for (int i=brightness; | ||
+ | yellowLED.off(); | ||
+ | for (int i=255-brightness; | ||
+ | </ | ||
+ | |||
+ | Erstellen, Übertragen und testen Sie diese Erweiterung. Experimentieren Sie mit verschiedenen Werten der Variablen **brightness** (1-255); | ||
+ | |||
+ | ===== Variante ===== | ||
+ | Das Dimmen der gelben LED können wir noch erweitern indem die LED selbständig auf und abblendet. Probieren Sie die folgende Variante. Sie werden Feststellen, | ||
+ | |||
+ | {{ : | ||
+ | > | ||
+ | static uint16_t dim=0; | ||
+ | |||
+ | if (dim < 1000) | ||
+ | { | ||
+ | yellowLED.on(); | ||
+ | waitUs(dim); | ||
+ | yellowLED.off(); | ||
+ | waitUs(1000-dim); | ||
+ | dim++; | ||
+ | } | ||
+ | else if (dim <2000) | ||
+ | { | ||
+ | yellowLED.on(); | ||
+ | waitUs(2000-dim); | ||
+ | yellowLED.off(); | ||
+ | waitUs(dim-1000); | ||
+ | dim++; | ||
+ | } | ||
+ | else | ||
+ | { | ||
+ | dim=0; | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Vertiefen sie die Bedeutung des Schlüsselwortes **static** in C/C++ und warum dieses Schlüsselwort bei der obigen Lösung verwendet wurde. | ||
====== Videozusammenfassung ====== | ====== Videozusammenfassung ====== | ||
Erlernte und gefestigte Arbeitsschritte: | Erlernte und gefestigte Arbeitsschritte: | ||
+ | {{tag> | ||
- Klassendiagramm anlegen und öffnen | - Klassendiagramm anlegen und öffnen | ||
- Diagrammvorlage für PEC Applikation auswählen, laden und Treiberpaket für STM32F4 einfügen | - Diagrammvorlage für PEC Applikation auswählen, laden und Treiberpaket für STM32F4 einfügen | ||
- Navigator auf UML Pakete umschalten | - Navigator auf UML Pakete umschalten | ||
- | - gewünschte Klasse | + | - gewünschte Klasse |
- Klasse aggregieren | - Klasse aggregieren | ||
- **Operationen anlegen und in eine Klasse einfügen** | - **Operationen anlegen und in eine Klasse einfügen** | ||
Zeile 159: | Zeile 178: | ||
Und hier diesen Abschnitt wiederum als Videozusammenfassung. | Und hier diesen Abschnitt wiederum als Videozusammenfassung. | ||
- | <<< | + | <html> |
- | < | + | [[https://youtu.be/aDVGJbOlALY|oder die schnelle Version ohne Sprachkommentare]] |
- | ====== Übung ====== | + | ====== Übung |
Ändern Sie zur Übung die Anwendung wie folgt: | Ändern Sie zur Übung die Anwendung wie folgt: | ||
- | - Änderung: Kommentieren Sie den Code in **onTimer10ms** aus und lassen den Speaker in **onWork** toggeln.\\ Bilden und Testen Sie diese geänderte | + | - Änderung: Kommentieren Sie den Code in **onTimer10ms** aus und lassen den Speaker in **onWork** toggeln.\\ Bilden und Testen Sie diese geänderte |
- Der Ton ist viel höher. Was bedeutet das? | - Der Ton ist viel höher. Was bedeutet das? | ||
- Der Ton hat ist nicht durchgehend sondern hat Störungen. Warum? | - Der Ton hat ist nicht durchgehend sondern hat Störungen. Warum? | ||
- | - Änderung: Fügen Sie in **onWork** mit **waitMs** eine Wartetzeit | + | - Änderung: Fügen Sie in **onWork** mit **waitMs** eine Wartezeit |
- Der Ton ist nur noch ein Knacksen. | - Der Ton ist nur noch ein Knacksen. | ||
- Das Timing der Blinkenden LEDs hat sich verändert. | - Das Timing der Blinkenden LEDs hat sich verändert. | ||
Zeile 176: | Zeile 195: | ||
* [[mystm32_board_light_tutorial|zurück zur Übersicht]] | * [[mystm32_board_light_tutorial|zurück zur Übersicht]] | ||
* [[light UASRT|Kommunikation des mySTM32 light mit dem PC]] | * [[light UASRT|Kommunikation des mySTM32 light mit dem PC]] | ||
+ | |||
+ | ====== Suchbegriffe ====== |