Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
einen_timer_mit_dem_mystm32_light_benutzen [2019/12/19 13:02] – [Vorbereitung] huwi | einen_timer_mit_dem_mystm32_light_benutzen [2021/01/15 11:22] (aktuell) – huwi | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
====== Einen eigenen Timer programmieren ====== | ====== Einen eigenen Timer programmieren ====== | ||
- | ... | + | {{tag> |
+ | Wenn man die Aufgabe eines Mikrocontrollers auf innerste Wesen, auf des Pudels Kern, zu reduzieren versucht merkt man das es faktisch immer um ein bestimmtes Verhalten in einer bestimmten Zeit geht. Im Fach-Slang Timing genannt. Timing und Timer sind für Embedded-Entwickler untrennbar verbunden. Die Anzahl und Möglichkeiten der Timer eines Mikrocontrollers stellen ein wesentliches Leistungsmerkmal dar. Mit den SysTick-Experimenten und dem Erzeugen eines PWM-Signals haben wir eigentlich schon Timer angewendet. In diesem Beispiel wollen wir einen Timer nutzen um ein eigenes Timing per Timer-Interrupt zu generieren. Der Timer soll das Hochzählen eines 8-Bit-Zählers und das senden des Zählers an das SiSy-ControlCenter triggern. | ||
===== Die Aufgabe ===== | ===== Die Aufgabe ===== | ||
- | {{ :anwendersichttasteled.jpg?400|}}Es ist eine Mikrocontrolleranwendung zu entwickeln, bei der ... | + | {{ :stm32light: |
- | + | ||
- | **Die Aufgabe lautet:**\\ //Der Anwender soll sehen, dass der Mikrocontroller funktioniert. Entwickeln Sie dafür eine Lösung die den Status des Mikrocontrollers durch blinken einer LED anzeigt. Diese StausLED soll an Port B0 angeschlossen werden.// | + | |
+ | **Die Anforderungen an die Lösung sind: | ||
+ | * Der Timer-Interrupt soll alle 50 Millisekunden ausgelöst werden | ||
+ | * Der Zähler soll eine vorzeichnlose 8-Bit Zahl sein | ||
+ | * Die Datenübertragung soll mit 19200 Baud erfolgen | ||
+ | * Die übertragenen Werte sollen pure Binärdaten sein | ||
===== Vorbereitung ===== | ===== Vorbereitung ===== | ||
Zeile 22: | Zeile 25: | ||
===== Lösungsansatz ===== | ===== Lösungsansatz ===== | ||
- | Die Aufgabe besteht darin ... | + | Die Aufgabe besteht darin einen eigenen Timer für das Auslösen (Triggern) einer Aktion des Controllers zu bauen. Die auszulösende Aktion wird durch das hochzählen eines Wertes und das Senden des Wertes per UART an den PC repräsentiert. Das Auslösen dieser Aktion soll regelmäßig in 50 Millisekunden Abständen erfolgen. Diesmal haben wir die Besonderheit, |
- | ... | + | {{: |
- | **__MERKE:__ Systembaustein = xxx**\\ | + | In der PEC-Bibliothek finden wir die Basisbaustein |
+ | {{: | ||
- | ===== Realisierung ===== | + | Aus dem bisher dargelegtem ergibt sich folgender Grobentwurf der Anwendungslösung. |
- | Die Realisierung sollte die im obigen Entwurf beschriebenen Elemente beinhalten. Zusätzlich muss ... | + | |
+ | {{: | ||
+ | |||
+ | Dieser Grobentwurf lässt sich wie folgt lesen:\\ //Die Klasse Controller hat einen Trigger und ein Terminal. Der Trigger ist ein PecTimer. Das Terminal ist eine PecUart mit baudrate19200.// | ||
+ | \\ | ||
+ | \\ | ||
+ | **__MERKE: | ||
+ | |||
+ | |||
+ | ===== Realisierung ===== | ||
+ | Die Realisierung sollte die im obigen Entwurf beschriebenen Elemente beinhalten. Zusätzlich müssen folgende Modellelemente ergänzt werden: | ||
+ | * der konkrete Timer zum Beispiel Timer2 | ||
+ | * die genutzte UART Uart 1 an Port A9 | ||
+ | * ein 8 Bit Zähler als Attribut der Klasse Trigger | ||
+ | * das Überschreiben der Operation **onTimer** der Klasse Trigger | ||
+ | Orientieren Sie sich bei diesen Arbeitsschritten an dem folgenden Klassendiagramm. | ||
{{: | {{: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Die Initialisierung des Timers auf die geforderten 50 Millisekunden erfolgt in der Startsequenz des Controllers. Notieren sie folgenden Code in der Operation **onStart()** der Klasse **Controller**. | ||
{{ : | {{ : | ||
Zeile 42: | Zeile 64: | ||
</ | </ | ||
- | ... | + | Die auszulösende Aktion Wert hochzählen und an das PC-Terminal senden notieren wir in der Operation **onTimer()** der Klasse **Trigger** wie folgt: |
{{ : | {{ : | ||
Zeile 50: | Zeile 72: | ||
</ | </ | ||
- | ... | + | Jetzt kann diese Anwendungslösung getestet werden. Variieren Sie die Initialisierung |
- | + | ||
- | ... | + | |
===== Test ===== | ===== Test ===== | ||
Übersetzen Sie das Programm. Korrigieren Sie ggf. Schreibfehler. Übertragen Sie das lauffähige Programm in den Programmspeicher des Controllers. | Übersetzen Sie das Programm. Korrigieren Sie ggf. Schreibfehler. Übertragen Sie das lauffähige Programm in den Programmspeicher des Controllers. | ||
- | - Erstellen (Kompilieren und Linken) | + | - Systemboard mit dem PC verbinden |
- | - Brennen | + | - Anwendungslösung |
- | - verbinden Sie ... | + | - Anwendungslösung Übertragen (Brennen) |
+ | - SiSy-Controlcenter öffnen und konfigurieren (COMx, 19200 Baud) | ||
+ | - Verbinden und in Oszi-Ansicht wechseln | ||
{{: | {{: | ||
+ | {{: | ||
====== Videozusammenfassung ====== | ====== Videozusammenfassung ====== | ||
+ | {{tag> | ||
Erlernte und gefestigte Arbeitsschritte: | Erlernte und gefestigte Arbeitsschritte: | ||
- | - ... | + | - // |
+ | - Diagrammvorlage für //PEC Applikation// | ||
+ | - im Explorer // | ||
+ | - gewünschte Bibliotheksbausteine und ins Diagramm ziehen | ||
+ | - Klassen verbinden (Aggregation, | ||
+ | - den nötigen // | ||
+ | - //Erstellen und Brennen// einer STM32 Applikation im Klassendiagramm | ||
+ | |||
+ | Und weil es so schön war hier das Ganze noch mal als Video. | ||
- | ====== Übung ====== | + | < |
- | Erweitern Sie zur Übung die Anwendung um ... | + | |
+ | [[https:// | ||
+ | |||
+ | ====== Übung | ||
+ | Erweitern Sie zur Übung die Anwendung um eine LED die bei jedem Trigger-Event umschaltet (toggle). | ||
====== Weiter mit: ====== | ====== Weiter mit: ====== | ||
* [[mystm32_board_light_tutorial|zurück zur Übersicht]] | * [[mystm32_board_light_tutorial|zurück zur Übersicht]] | ||
* [[extrene Interrupts mit dem mySTM32 light]] | * [[extrene Interrupts mit dem mySTM32 light]] | ||
+ | |||
+ | ====== Suchbegriffe ====== | ||
+ |