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
light_systemtickuml [2020/01/28 10:19]
huwi
light_systemtickuml [2020/07/23 11:50] (aktuell)
huwi [Erweiterung]
Zeile 1: Zeile 1:
 ====== Der SystemTick ====== ====== Der SystemTick ======
 +{{tag>SysTick LED BLINKY}}
 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 85: Zeile 86:
 {{:stm32light:stml005.png?direct&800|}} {{:stm32light:stml005.png?direct&800|}}
  
-für die Realisierung der geforderten Funktionalität ergänzen wir die folgenden Codes in den jeweiligen Ereignisfunktionen. Zuerst lassen wir in **onWork** die gelbe LED dimmen. +für die Realisierung der geforderten Funktionalität ergänzen wir die folgenden Codes in den jeweiligen Ereignisfunktionen. Zuerst lassen wir die rote LED blinkenDazu stuern wir im 100 Millisekunden Ereignis die rote LED wie folgt an.
- +
-{{ :stm32light:stml005a.png?direct&300|}} +
->Controller::onWork():void <code c> +
-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; +
-+
-</code> +
- +
-Im 100 Millisekunden Ereignis steuern wir die rote LED an.+
  
 {{ :stm32light:stml005c.png?direct&200|}} {{ :stm32light:stml005c.png?direct&200|}}
Zeile 143: Zeile 116:
  
 {{:erstellenbrennen.png?direct&350|}}{{:stm32light:flashlight.png?direct&300|}}{{:stm32light:stm32bl3.png?direct&300|}} {{:erstellenbrennen.png?direct&350|}}{{:stm32light:flashlight.png?direct&300|}}{{:stm32light:stm32bl3.png?direct&300|}}
 +
 +===== Erweiterung =====
 +Als nächstes erweitern wir die Anwendung so, dass wir das Ereignis **onWork()** welches fortlaufend aus der //Mainloop// der Laufzeitumgebung des Frameworks getriggert wird, benutzen um die gelbe LED ganz schwach glimmen zu lassen (dimmen). Dabei soll das sicht- und hörbare Laufzeitverhalten der anderen Ausgabegeräte nicht beeinflusst werden. Deshalb verwenden wir **keine** langen Wartefunktionen wie **waitMs()**.
 +
 +{{ :stm32light:simpledim.png?200|}}
 +>Controller::onWork():void <code c>
 +// continuous event from the Mainloop
 +uint8_t brightness=1; // use here 1 to 255 for fix brightness of the yellow LED
 +yellowLED.on();
 +for (int i=brightness; i>0; i--);
 +yellowLED.off();
 +for (int i=255-brightness; i>0; i--);
 +</code> 
 +
 +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, dass auch diese recht komplexe Lösung das Laufzeitverhalten der anderen LEDs und des Speakers nicht spürbar beeinflussen.
 +
 +{{ :stm32light:stml005a.png?direct&300|}}
 +>Controller::onWork():void <code c>
 +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;
 +}
 +</code>
 +
 +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>Video}}
   - 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
Zeile 159: Zeile 178:
 Und hier diesen Abschnitt wiederum als Videozusammenfassung. Und hier diesen Abschnitt wiederum als Videozusammenfassung.
  
-<<<< ACHTUNG VERALTETES VIDEO >>>>+<html> <iframe width="1030" height="580" src="https://www.youtube.com/embed/W9Ge36El-pE" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe</html>
  
-<html><iframe width="640" height="400" src="https://www.youtube.com/embed/QHxU48vDHCI" frameborder="0" allowfullscreen></iframe></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 Anwendung.\\ Vergleichen und bewerten Sie das akustische Ergebnis.    - Änderung: Kommentieren Sie den Code in **onTimer10ms** aus und lassen den Speaker in **onWork** toggeln.\\ Bilden und Testen Sie diese geänderte Anwendung.\\ Vergleichen und bewerten Sie das akustische Ergebnis. 
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 ======