Unterrichts- und Lernmaterial für Mikrocontroller
Unterrichts- und Lernmaterial fürMikrocontroller

Fundamentum Propeller SPIN Programmierung

Basiskurs 3 –  Abschnitt 2 - Parallax Serial Terminal

Mit Hilfe des Terminals lassen sich Reaktionen von Sensoren leicht überprüfen; damit hat man ein schnelles und einfach einsetzbares Instrument, um bei einer Schaltungsentwicklung Fehler zügig erkennen und eingrenzen zu können.

In Übung 6 werden die Tasterzustände von drei Tastern (verbunden mit P24, P25 und P26) binär kodiert dargestellt. Ein geschlossener (gedrückter) Taster wird mit einer 1, ein offener (nicht gedrückter) mit 0 angezeigt.

Übung 6 – I/O Pinzustände im Terminalfenster darstellen

I/O Pinzustände im Terminalfenster darstellen
Material
Aufgaben
  • Übertrage das Programm TasterDisplay.spin in den Editor und speichere es ab.
  • Starte das Programm mit F10, öffne das Terminalfenster mit F12 und aktiviere den Button Enable im Terminalfenster.
  • Drücke eine oder mehrere Tasten; im Terminalfenster sollten die Änderungszustände sofort angezeigt werden.

Schaltungsaufbau

 

 

 

 

 

 

 

 

 

 

Abb. 1

Schaltungsaufbau zu allen in diesem Abschnitt genannten Übungen.Alternativ zum Propeller Flip Board kann auch

a) das Propeller Board of Education oder

b) das Propeller Activity Board

eingesetzt werden.

Das Programm TasterDisplay.spin

Abb. 2 - Das Programm TasterDisplay.spin

Darstellung im Terminalfenster

Timing und Kommunikation der Kerne (COGS)

In Übung 6 überwacht ein Kern die Taster und überträgt Informationen an das pst-Objekt über Methodenaufrufe. Die Methode Start des Parallax Serial Terminal (PST) startet einen seriellen Treiber in einem anderen Kern. Dieser überträgt die Informationen an das PST, sobald er sie von dem Kern, der die Taster überwacht, bekommt.

 

Das PST ist auf 115.200 Bits pro Sekunde (bps) eingestellt oder anders gerechnet: es wird ein Bit in 1/115.200 s oder ungefähr 8,68 µs übertragen. Jedes übertragene Zeichen besteht aus je einem Start- und Stopbit und 8 Datenbits. 10 Bits oder ein Zeichen werden in ca. 86,8 µs übertragen. Das vorliegende Anwendungsprogramm überträgt mit jedem Durchlauf der Endlosschleife REPEAT drei Zeichen. Für die komplette Übertragung der drei Zeichen braucht es:

  • 3 x 86,8 µs = 260,4 µs = 0,2604 ms.

Der reziproke Zeitwert gibt an, wieviele Nachrichten aus drei Zeichen pro Sekunde übertragen werden können. Für diese Übung ergibt das:

  • 3840 3-Zeichen Nachrichten/ Sekunde  oder 3840 Hz.

Würde das SPIN-Objekt die Nachrichten mit einer Frequenz > 3840 Hz übertragen, könnte das zu einem Puffer-Überlauf beim PST und damit zu Datenverlusten führen.

Da es auch noch geringe Verzögerungszeiten beim Datenaustausch zwischen den Kernen gibt, sollte die maximale Frequenz etwas niedriger als die errechnete sein. 3500 Hz sollten es maximal sein.

 

In dieser Übung wird allerdings nur der Tasterzustand abgefragt. Die Frequenz der Aufeinanderfolge von Taster schließen und Taster öffnen lässt sich auch mit einer Verzögerungszeit pro Schleifendurchlauf von 0,1 s = 100 ms noch ohne erkennbare Einbußen durchführen. Deutliche Einschränkungen erkennt man bei einer Wartezeit-Einstellung von

  • waitcnt(clkfreq/5 + cnt)

von 0,2 s. Schnell hintereinander ausgeführte Änderungen des Tasterzustandes werden nicht mehr sicher erkannt.

Übung 7 – LED Ansteuerung über Terminaleingabe

Das nachfolgende Programm LEDansteuerungPST.spin zeigt einen Weg auf, wie man Ausgangszustände von I/O Pins über das Terminalfenster eingeben und die Reaktion darauf an LEDs ablesen kann.

LED Ansteuerung über Terminaleingabe
Material
  • siehe Abb. 1
Aufgaben
  • Übertrage das Programm LEDterminalsteuerung.spin in den Editor und speichere es ab.
  • Starte das Programm mit F10, öffne das Terminalfenster mit F12 und aktiviere den Button Enable im Terminalfenster.
  • Gib im oberen Terminalfenster (Eingabebereich) eine 6-stellige binäre Zahl ein und schließe die Eingabe mit der Rücklauftaste ab.
  • Anschließend sollten die entsprechenden LEDs, an deren I/O Pin eine 1 in der binären Zahl steht, aufleuchten.
  • Überprüfe das Programm auf korrekten Lauf.

Das Programm LEDterminalsteuerung.spin

Abb. 3 - Programm LEDterminalsteuerung.spin

Ausgabe im PST

 

 

 

 

 

Abb. 4

Nach Eingabe einer 6-stelligen Binärzahl und Betätigung der Rückstelltaste werden die entsprechenden LEDs ein- bzw. ausgeschaltet.

Übung 8 – Der DAT-Block

DAT-Blöcke werden in SPIN zur Ablage umfangreicher Daten und Zeichen sowie Texten und Nachrichten eingesetzt. Er kann aber auch Assembler-Code enthalten, der an einen Kern (COG) übergeben werden soll.

Übung 8 - Der DAT-Block
Material
  • Siehe Abb. 1
Aufgaben
  • Übertrage das Programm Testnachrichten.spin in den Propeller Tool Editor und speichere es ab.
  • Starte das Programm und vollziehe anhand des Programmlistings nach, was das Programm in jedem einzelnen Schritt macht.
  • Was passiert, wenn die 0 am Ende eines Texteintrages im DAT-Block fehlt? Probiere es aus.

Das Programm Testnachrichten.spin

Abb. 5 - Das Programm Testnachrichten.spin.

Die Darstellung im Terminalfenster

 

 

 

 

 

 

 

 

 

Abb. 6

Darstellung im Parallax Serial Terminal Fenster. Die Listenwerte (ValueList) und ihre Position in der Liste werden ausgegeben. Das erste Element der Liste ist das Element 0.

Wie arbeitet das Programm Testnachrichten.spin?

 

 

 

 

 

 

Abb. 6a - Die Speicheradresse des Texteintrages "Dies ist Testnachricht Nummer: " ist 001C.

Ergänzt man das vorliegende Programm mit zwei zusätzlichen Programmzeilen (Zeilen 26 und 27), wird im Terminalfenster die Speicherstelle angezeigt.

 

Abb. 5b

Die Speicherstelle von @MyString wird unten links im Terminalfenster angezeigt und ist mit 001C angegeben.

  • Zeilen 22 - 25

Die Methode TestDatMessages startet im Objekt Parallax Serial Terminal die Methode Start mit dem Wert 115_200, wartet zwei Sekunden und löscht dann das Terminalfenster.

In der äußeren Wiederhol-Schleife REPEAT wird der Inhalt der Speicheradresse @MyString und von counter im Terminalfenster angezeigt. Counter wird um 1 erhöht. Es folgen die Darstellungen der Speicherinhalte an den Stellen @MyOtherString und @BlankLine.

Wo der Text des DAT-Blocks im Speicher abgelegt ist, lässt sich über das Objekt-Info-Fenster (F8) schnell herausfinden.

  • Zeilen 27 - 34

In der inneren indexierten Wiederhol-Schleife REPEAT wird der Inhalt der Werteliste ValueList im Terminalfenster angezeigt. Auf die kommagetrennten Werte der Liste wird über einen Array-Aufruf zugegriffen. Zuerst wird der Speicherinhalt von @ValTxt im Terminalfenster angezeigt, gefolgt vom Wert in der Speicheradresse [@ValueList][index]. Die Zählung startet mit dem Indexwert 0.

Übung 9 – Die Objekte FloatString und FloatMath

In dieser Übung werden einige Objekte aus der Propeller Bibliothek vorgestellt, mit der sich reelle Zahlen verarbeiten lassen. RechnenMitReellenZahlen demonstriert den Umgang mit reellen Zahlen am Beispiel einiger Grundrechenoperationen. Das Objekt FloatMath enthält einige Methoden, von denen ein paar vorgestellt werden. Zur Darstellung der Ergebnisse im Terminalfenster wird das Objekt FloatString eingesetzt.  

Das Programm RechnenMitReellenZahlen.spin

<< Abb. 6a - Das Programm RechnenMitReellenZahlen.spin

Darstellung der Ergebnisse im Terminalfenster

 

 

 

 

 

 

Abb. 6b

Die Ergebnisse der vier Rechenoperationen werden untereinander im Terminalfenster ausgegeben.

Sämtliche Methoden des Objektes FloatMath lassen sich über das Fenster des Object Inspectors oben links in der Terminaloberfläche aufrufen.

Ein Doppelklick auf den Ordner FloatMath lädt das Objekt in den Editor. Aktiviert man anschließend den Button Documentation, erscheinen alle Methoden des Objektes im Terminalfenster zusammen mit den notwendigen Parameterangaben und Informationen zu den Rückgabewerten.

Abb. 6c - Wechselt man auf die Registerkarte FloatMath und aktiviert den Button Documentation, werden alle Methoden des Objektes FloatMath angezeigt.

Übung 10 – Objekte und Adressen von Variablen

Variable haben im RAM eine Adresse. Das in dieser Übung genutzte Objekt

  • AddressBlinker

ist ein Beispielobjekt, das sich Werte von Variablen des Elternobjektes

  • AddressBlinkerControl

holt (siehe Abb. 9 und 10). Beachte, dass der Methodenaufruf AddrBlnk.Start Parameter für zwei Adress-Werte enthält:

  • pinAddress und
  • rateAddress (Zeile 30).

Der Methode Start werden die Werte, die an der Speicheradresse

  • @pin bzw.
  • @rateDelay

abgelegt sind, übergeben.

Das sind zum Programmstart: 17 und 10_000_000 (Zeile 27 und 28). Die Adressen dieser beiden Speicher müssen hinter dem vom Programm belegten Speicher liegen. Mit F8 lässt sich das Object Info-Fenster öffnen und der Programmspeicher einsehen. Er ist bis zur Speicherstelle 059716 belegt.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Abb. 7 - Der Programmspeicher endet an der Speicherstelle 0597 (roter Bereich). Es schließt sich der Bereich für die Variablen an.

 

Abb. 8

Ausgabe der Speicherinhalte und der Speicheradressen von pin und rateDelay. Die Zahl 17 liegt im Speicher ab 0598 und die Zahl 10000000 im Speicher ab 059C. Beide Variable sind vom Typ long (32-Bit).

Abb. 9 - Das Programm AddressBlinkerControl.spin mit der Terminalanzeige für die Eingabewerte.

Abb. 10 - Programm AddressBlinker.spin mit den drei Methoden: Start, Stop, Blink

Die Speicheradresse @pin der Variablen pin ist mit 059816, die von @rateDelay mit 059C16 angegeben. Leider lassen sich die aktuellen Einstellungen während der Laufzeit des Programms nicht über das Object Info Fenster darstellen, sonst hätten dort folgende Eintragungen gestanden:

  • 00 00 00 11 00 98 96 80

... die ersten vier Byte für den Wert 17 und die sich rechts anschließenden vier Byte für den Wert 10.000.000 (beide in hexadezimaler Schreibweise).

Wie arbeiten die Programme?

Das Elternobjekt hat der Methode Start des Objektes AddressBlinker die Speicher-Adresse @pin (0598) , die eine I/O Pinzahl (17) und @rateDelay (059C), die eine Blinkrate (10000000) enthält, übergeben. Die Methode Start startet einen neuen Kern und übergibt diese Parameter der Methode Blink

  • success := (cog := cognew(Blink(pinAddress, rateAddress), @stack)+1)

Zum Programmstart blinkt die LED an P17.

 

Mit jedem Durchlauf der REPEAT-Schleife in AddressBlinkerControl.spin (Eltern-Objekt) werden die Pinzahl und die Clockticks abgefragt. Erfolgt keine Eingabe, ändert sich am aktuellen Zustand nichts. Erfolgt die Eingabe

  • einer neuen Pinzahl,  wird sie in der Variablen pin,
  • einer neuen Clocktick-Zahl, wird sie in rateDelay

abgelegt.

 

Damit ändert sich der Inhalt der beiden Speicherstellen pinAddress und rateAddress, die von der Methode Blink ständig abgefragt werden. Die Folge: die Blinkfrequenz und die angesprochene LED ändern sich je nach Eingabewert sofort.

Druckversion | Sitemap
© Reinhard Rahner - Gettorf