Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung Nächste ÜberarbeitungBeide Seiten der Revision | ||
light_i2c [2020/01/14 10:59] – [Realisierung] huwi | light_i2c [2020/06/19 10:06] – huwi | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ====== Einen I2C Feldbus verwenden ====== | + | ====== Einen I²C Feldbus verwenden ====== |
- | ... | + | {{tag> |
+ | Für diese Übung benötigen Sie ein [[http:// | ||
===== Die Aufgabe ===== | ===== Die Aufgabe ===== | ||
- | ... | + | {{ : |
- | **Anforderungen: | + | **Anforderungen |
- | //...// | + | * Temperatursensor [[http://sisy.name/mymcu_download/produkte/ |
+ | * Datenübertragung 8 Bit, 19200 Baud | ||
+ | * Temperaturwerte in vollen Grad Celsius | ||
===== Vorbereitung ===== | ===== Vorbereitung ===== | ||
Zeile 20: | Zeile 24: | ||
===== Lösungsansatz ===== | ===== Lösungsansatz ===== | ||
- | ... | + | Die Aufgabe besteht darin einen digitalen Temperatursensor über einen I²C Bus auszulesen und die Daten per UART an ein PC Terminal zusenden. Daraus lassen sich die fachlich motivierten Systembausteine für den Entwurf der Systemarchitektur ableiten. |
- | [[http://shop.myavr.de/index.php?sp=article.sp.php&artID=71|AddOn Temperatursensor LM75]] | + | {{:stm32light: |
+ | {{: | ||
- | ... | + | Für den [[http:// |
- | **__MERKE: | + | {{: |
+ | |||
+ | Für die Anwendung dieser Bausteine sind zwei Operationen für uns wichtig. Zum einen soll die Temperatur in ganzen Grad ausgelesen werden. Dafür dient die Operation **getTemp()**. Diese wandelt die Temperaturdaten vom Sensor bereits in ganze Grad um. Der Sensor selbst liefert die Temperatur in 0,125°C | ||
+ | (8tel Grad) Schritten. Desweiteren können moderne Mikrocontroller mehrere I²C Bus-Schnittstellen besitzen. Es ist daher notwendig das Gerät mit seiner Adresse dem konkreten Bus zuzuweisen. Das erfolgt über die Operation **connect(...)**. Es gibt für diese Operation zwei Alternativen. Die Operation **connect(...)** im Device oder im Bus. | ||
+ | |||
+ | Aus dem bisherigen Erkenntnissen lässt sich folgender Grobentwurf für die geforderte Mikrocontrollerlösung ableiten: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | In einfacher natürlicher Sprache lässt sich dieser Entwurf wie folgt lesen: | ||
+ | * der **Controller** ist ein **stm32F042_48MHz** | ||
+ | * der **Controller** hat einen **SensorBus** | ||
+ | * der **SensorBus** ist eine **PecI2CBus** | ||
+ | * der **Controller** hat ein **Terminal** | ||
+ | * das **Terminal** ist eine **PecUart** | ||
+ | |||
+ | Die Zuweisung der konkreten Ressourcen muss in der Realisierung erfolgen. | ||
+ | |||
+ | **__MERKE: | ||
===== Realisierung ===== | ===== Realisierung ===== | ||
- | ... | + | Die Realisierung sollte die im obigen Entwurf beschriebenen Elemente beinhalten. Zusätzlich müssen wir noch die konkret verwendeten Ressourcen unseres Controllers zuweisen. Vervollständigen Sie ihr Klassenmodell soweit, dass es mit der folgenden Darstellung übereinstimmt. Ordnen sie die Elemente übersichtlich an. |
{{: | {{: | ||
- | ... | + | Zuerst muss die Verbindung zum Bus hergestellt und die Geräteadresse zugewiesen werden. In einem Bus können bis zu acht LM75 Adressiert werden. Dafür gibt es auf dem Add-On Jumper zum Konfigurieren der Geräteadresse. Achten Sie darauf, dass auf dem Add-On die Adress-Jumper wie folgt stehen (alle auf 0 = 0x90): |
- | > | + | {{:stm32light:addonlm75vonoben.png? |
- | // continuous event from the Mainloop | + | |
- | // WENN ... DANN | + | |
- | // ... | + | |
- | // SONST | + | |
- | // ... | + | |
- | </ | + | |
- | {{ : | + | Notieren Sie in der Operation **onStart()** der Klasse **Controller** folgenden Code: |
+ | |||
+ | {{ : | ||
> | > | ||
sensorBus.connect(sensorBus.temperaturSensor, | sensorBus.connect(sensorBus.temperaturSensor, | ||
</ | </ | ||
+ | |||
+ | Das Auslesen der aktuellen Temperatur der Digitalsensors erfolgt auf [[https:// | ||
+ | Notieren Sie in der Operation **onWork()** der Klasse **Controller** folgenden Code: | ||
{{ : | {{ : | ||
Zeile 55: | Zeile 77: | ||
</ | </ | ||
- | ... | + | Jetzt können Sie die Anwendung erstellen und Testen. |
===== Test ===== | ===== Test ===== | ||
- | Übersetzen Sie das Programm. Korrigieren Sie ggf. Schreibfehler. Übertragen Sie das lauffähige Programm in den Programmspeicher des Controllers. | + | {{ : |
- Erstellen (Kompilieren und Linken) | - Erstellen (Kompilieren und Linken) | ||
- Brennen | - Brennen | ||
- | - verbinden Sie ... | + | - verbinden Sie das // |
+ | - Achten Sie auf die richtige Position der Adress-Jumper | ||
+ | - Aktivieren Sie mit den entsprechenden Jumpern die Pull-Up-Widerstände | ||
+ | - Beachten Sie die Einstellungen im SiSy-ControlCenter | ||
+ | |||
+ | {{: | ||
+ | ===== Variante ===== | ||
+ | Ändern Sie die Anwendung so, dass die rohen Sensordaten (raw value) an den PC gesendet werden. Um die Lesbarkeit zu erhöhen wandeln sie die 10 Bit Rohdaten in Text um. Ändern sie den Code der Operation **onWork()** der Klasse Controller wie folgt: | ||
+ | |||
+ | {{ : | ||
+ | > | ||
+ | uint16_t temp; | ||
+ | temp=sensorBus.temperaturSensor.getRawValue(); | ||
+ | String txt; | ||
+ | txt.format(" | ||
+ | terminal.writeString(txt); | ||
+ | waitMs(100); | ||
+ | </ | ||
+ | |||
+ | Bilden, übertragen und testen Sie die Anwendung. Vergleichen Sie die Ergebnisse beider Varianten miteinander. | ||
- | {{: | ||
====== Videozusammenfassung ====== | ====== Videozusammenfassung ====== | ||
+ | {{tag> | ||
Erlernte und gefestigte Arbeitsschritte: | Erlernte und gefestigte Arbeitsschritte: | ||
- | - ... | + | - Klassendiagramm anlegen und öffnen |
- | + | - Diagrammvorlage für PEC Applikation auswählen | |
+ | - laden des richtigen Treiber-Pakets | ||
+ | - gewünschte Bausteine im Explorer suchen und ins Diagramm ziehen | ||
+ | - Klassen aggregieren, | ||
+ | - den nötigen Quellcode in den Operationen erstellen | ||
+ | - Erstellen und Brennen eine ARM Applikation im Klassendiagramm | ||
Und weil es so schön war hier das Ganze noch mal als Video. | Und weil es so schön war hier das Ganze noch mal als Video. | ||
- | <<<< | + | < |
- | + | ||
- | >< | + | |
+ | [[https:// | ||
====== Übung ====== | ====== Übung ====== | ||
- | ... | + | Nutzen Sie das Text-LCD um die Sensordaten anzuzeigen! |
====== Weiter mit: ====== | ====== Weiter mit: ====== | ||
- | * [[light | + | * [[light |
* [[mystm32_board_light_tutorial|zurück zur Übersicht]] | * [[mystm32_board_light_tutorial|zurück zur Übersicht]] | ||
+ | |||
+ | ====== Suchbegriffe ====== | ||