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 | ||
extrene_interrupts_mit_dem_mystm32_light [2019/12/19 13:13] – [Vorbereitung] huwi | extrene_interrupts_mit_dem_mystm32_light [2020/06/04 16:53] – huwi | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
====== Externe Interrupts auswerten ====== | ====== Externe Interrupts auswerten ====== | ||
- | ... | + | {{tag> |
+ | In der vorausgegangenen Übung haben wir einen Timer als internen Trigger genutzt. Bei eingebetteten Systemen ist kommt externen Auslösern jedoch mindest die selbe Bedeutung zu wie die Nutzung von Timern. Beispiele lassen sich endlos aufzählen, in einem Auto finden wir Schalter als Auslöser für Systemaktionen an allen Türen, der Heck- oder Kofferaumklappe, | ||
===== Die Aufgabe ===== | ===== Die Aufgabe ===== | ||
- | {{ : | + | {{ : |
- | **Die Aufgabe lautet:**\\ //Der Anwender soll sehen, dass der Mikrocontroller funktioniert. Entwickeln Sie dafür eine Lösung die den Status des Mikrocontrollers | + | **Die Lösung soll folgende Anforderungen erfüllen:** |
+ | * Externes Signal, fallende Flanke, durch Taster an A0 | ||
+ | * LED-Anzeige | ||
+ | * Kein ständiges Abfragen des Tasters (polling) | ||
+ | * Behandlung des Ereignisses direkt im Interrupt | ||
Zeile 22: | Zeile 27: | ||
===== Lösungsansatz ===== | ===== Lösungsansatz ===== | ||
- | Die Aufgabe besteht darin ... | + | Die Aufgabe besteht darin das Betätigen der Funktionstaste per Interrupt auszuwerten. Als Reaktion auf den Interrupt soll die AnzeigeLED umschalten. Die PEC-Bibliothek bietet für die Aufgabe externe Interrupts zu behandeln den Bibliotheksbaustein **PecPinInterrupt**. |
- | ... | + | {{: |
- | **__MERKE: | + | Schaut man sich diesen Baustein näher an ist Festzustellen, |
+ | |||
+ | {{uml: | ||
+ | {{: | ||
+ | {{:: | ||
+ | |||
+ | Für die Anzeige-LED können wir **PecPinOutput** oder **PecLed** nutzen. Die Handhabung dieser Bausteine ist uns inzwischen vertraut. Aus diesen Betrachtungen lässt sich der folgender Grobentwurf ableiten. | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Dieses Klassenmodell lässt sich wie folgt textuell beschreiben: | ||
+ | //Der Controller hat eine Funktionstaste. Die Funktionstaste ist ein PecPinInterrupt. Die Funktionstaste hat eine IndicatorLED. Die IndicatorLED ist eine PecLed.// | ||
+ | |||
+ | Neu an diesem Entwurf ist, dass die Klasse **IndicatorLED** nicht in den **Controller** sondern an die Klasse **FunctionKey** aggregiert wurde. Damit wurde eine Struktur aufgebaut bei der die Klasse **FunktionKey** die Klasse **IndicatorLED** sozusagen in sich versteckt. Sonst hatten wir Systembausteine immer an den Controller gehängt. Die neue Lösung hat den Vorteil, dass beim ansprechen der LED nicht der Pfad über die Instanz des Controllers gegangen werden muss. Da die Klasse **FunctionKey** jetzt der Eigentümer der **IndicatorLED** ist kann diese ohne Einschränkungen direkt benutzt werden. Das Macht auch Sinn. Kein anderer Baustein in dieser Anwendung benutzt die **IndicatorLED**. **FunctionKey** und **IndicatorLED** bilden jetzt eine zusammengesetzte Einheit die vom **Controller** als ein Baustein benutzt wird. Zusammengesetzte Systembausteine nennt man Systemkomponente. | ||
+ | \\ | ||
+ | \\ | ||
+ | **__MERKE: | ||
===== Realisierung ===== | ===== Realisierung ===== | ||
- | Die Realisierung sollte die im obigen Entwurf beschriebenen Elemente beinhalten. Zusätzlich | + | Die Realisierung sollte die im obigen Entwurf beschriebenen Elemente beinhalten. Zusätzlich |
+ | * die konkreten Pins A0 und B0 für den Taster und die LED | ||
+ | * pinLowActive und piPullUp für den Taster | ||
+ | * virtuelle Operation // | ||
{{: | {{: | ||
+ | |||
+ | orientieren Sie sich bei der Realisierung der nötigen Arbeitsschritte an der obigen Darstellung. | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Die geforderte Reaktion auf das Betätigen der Taste (Signaländerung: | ||
{{ : | {{ : | ||
Zeile 39: | Zeile 69: | ||
</ | </ | ||
- | ... | + | Die Operationen **onStart()** und **onWork** der Klasse Controller bleiben leer. Alles Aktionen erfolgen |
- | + | ||
- | ... | + | |
===== 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. | ||
Zeile 54: | Zeile 82: | ||
====== 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, | ||
+ | - **Komponenten aus Systembausteinen zusammensetzen** | ||
+ | - 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 die Anwendung um eine Zweite Taste mit einem UART-Terminal. Bei jedem Tastendruck soll ein Zähler hochgezählt werden und mit 19200 Baud an das SiSy-Controlcenter gesendet werden. | ||
====== Weiter mit: ====== | ====== Weiter mit: ====== | ||
* [[mystm32_board_light_tutorial|zurück zur Übersicht]] | * [[mystm32_board_light_tutorial|zurück zur Übersicht]] | ||
- | * [[light all in one|alles in einem Beispiel zusammengefasst]] oder | ||
* [[light LCD|ein Text-LCD am mySTM32 light anschließen]] oder | * [[light LCD|ein Text-LCD am mySTM32 light anschließen]] oder | ||
* [[light I2C|I2C Bausteine mit dem mySTM32 light verwenden]] oder | * [[light I2C|I2C Bausteine mit dem mySTM32 light verwenden]] oder | ||
+ | * [[light CAN|Den CAN Bus auf dem mySTM32 light nutzen]] oder | ||
+ | * [[light all in one|alles bisherige in einem Beispiel zusammengefasst]] oder | ||
* [[ein kleines Projekt mit dem mySTM32 light]] < | * [[ein kleines Projekt mit dem mySTM32 light]] < |