Timer

Timer sind vielleicht die essentiellsten Bausteine in eingebetteten Systemen. So ziemlich jede eingebettete Lösung bildet in der einen oder anderen Form ein möglichst determiniertes Zeitverhalten ab. Die beste Art Zeitereignisse zu erzeugen ist es eine Hardware damit zu beauftragen. Timer sind dem Wesen nach Zähle. Sie zählen einfachsten Fall Systemtakte. Wenn es langsamer gehen soll werden Vorteiler verwendet. Typische Zeitereignisse werden aus dem Erreichen der Null bzw. des Überlaufs des Zählerregisters oder dem Erreichen von Vergleichswerten erzeugt. Die Signatur des einfachsten PecTimer Templates sieht wie folgt aus:

Bevor wir beginnen benötigen wir ein neues Klassendiagramm. Dazu müssen Sie zurück in die oberste Ebene gehen (rechte Maustaste / nach oben oder einfach Taste ESC). Dort legen Sie ein neues Klassendiagramm an. Zur Erinnerung:

In unserem Beispiel soll ein Timer so konfiguriert werden, dass alle 50 Miillisekunden ein Interrupt ausgelöst wird. In der Interrupt-Handler soll ein Wert inkrementiert und zur Kontrolle per UART an den PC gesendet werden.

Gehen Sie wie folgt vor:

  1. ggf. ein Projekt, und ein neues Klassendiagramm für PEC Anwendungen erstellen
  2. eine eigene Klasse Konsole anlegen
  3. die Klasse Konsole in der Klasse Controller aggriegieren
  4. das Template PecUart an die Klasse Konsole binden
  5. ein Template für die gewünschte Baudrate an die Klasse Konsole binden
  6. das Template uart0_avr an die Klasse Konsole binden
  7. legen Sie eine eigene Klasse Trigger an
  8. binden Sie das Template PecTimer an die Klasse Trigger
  9. ordnen Sie der Klasse Trigger den Timer2 zu (Template timer2 anbinden)
  10. überschreiben Sie die Operation +onTimer():void

Die so vorbereitete Systemstruktur muss jetzt nur noch mit dem gewünschten Verhalten ergänzt werden. Ergänzen Sie die Klasse Controller mit den folgenden Code:

Controller::onStart

trigger.configMs(50);

Das Timer-Event können Sie wie folgt ergänzen. Achten Sie darauf, dass in Interupt-Handlern nur kurze Codesequenzen stehen sollten.

Trigger::onTimer

counter++;
app.konsole.writeByte(counter);

Wenn wir die Zeile richtig eingegeben und das Modell korrekt erstellt haben können wir aus dem Klassendiagramm wie gehabt den Quellcode generieren, diesen übersetzen und auf den Controller übertragen. Das erfolgt über das Aktionsmenü in der Objektbibliothek. Wählen sie dort den Menüpunkt Erstellen, Brennen & Ausführen. Testen Sie die Anwendung!

Videozusammenfassung

Und hier diesen Abschnitt als kurze Videozusammenfassung.

<flashplayer width=„600“ height=„475“ position=„0“>file=http://youtu.be/Wdv74uUNAfo</flashplayer>

besser auf youTube

Nächstes Thema