Nach der grundlegenden Besprechung des Mikrocontrollers Propeller 2 von Parallax samt seinen Funktionen möchte ich nun auf die Entwicklungsumgebung und die Programmierung eingehen. Nachfolgend erfahren Sie, wie man damit z.B. eine LED ansteuern kann.
Zugriff auf Onboard-LEDs
Los geht es mit Software-Umgebung und der Ansteuerung einer der LEDs auf dem Board. Die Softwareentwicklung wird unter Windows 10 mit den vom Parallax angebotenen Tools durchgeführt. Am Ende steht ein grundlegendes Software-Setup zur Verfügung, mit dem Sie Code kompilieren und das Resultat auf den Propeller 2 schieben können.
Parallax stellt momentan sein Propeller-Tool in der Version 2.3 Alpha zur Verfügung. Es enthält die Propeller-2-Unterstützung für die Programmiersprache Spin/Spin2. Wer Assembler bevorzugt, kann auch PNut als Entwicklungsumgebung oder Inline-Assembler verwenden. Falls Sie wie ich gerne in C/C++ programmieren: Geeignete Compiler und Entwicklungsumgebungen sind derzeit leider noch nicht soweit. Erste Anstrengungen in dieser Hinsicht kann man einem Video [1] über C/C++ auf Propeller◦2 beobachten.
Grundlegende Entwicklungsumgebung
Die URL zum Download des Propeller Tool 2.3 Alpha finden Sie unter [2]. Zuerst steht aber der Download des Propeller Tool 1.3.2 an, und im zweiten Schritt wird die ausführbare Datei Propeller Tool 2.3 Alpha in das Programmverzeichnis kopiert. Anschließend können Sie den Editor starten und mit der Programmierung beginnen. Bild 1 zeigt die Benutzeroberfläche.
Assembler oder Spin2?
Sollte man Spin2 oder Assembler für das erste Programm verwenden? Der Einfachheit halber geht es mit Spin2 weiter. Spin2 wird wie die meisten BASIC-Dialekte interpretiert - aber anders. Befehle und Sprachreferenzen zu Spin2 finden sich beim Propeller-Tool unter dem Menü Help (siehe Bild 2).
Für den Einstieg gibt es ein noch vorläufiges Handbuch, dass leider noch nicht ganz fertig ist. Dieses führt zur aktuellen Spin2-Dokumentation für Propeller 2.
Aufgrund der Interpretierung benötigt ein Spin2-Befehl etwa sechs Instruktionszyklen = 12 Taktzyklen. Dies ergibt nicht gerade die allerschnellste Programmausführung, aber Spin2 bietet einen einfacheren Einstieg als Assembler. Da Spin2 eine High-Level-Sprache ist, stecken hinter den meisten Spin2-Befehlen viele auszuführende Assembler-Instruktionen - sind dafür aber einfacher zu benutzen als purer Assembler-Code. Bild 3 zeigt, wie ein neues Spin2-Projekt erstellt wird.
Propeller 2 I/O Pins
Bevor man mit der Programmierung beginnt, sollte man sich zunächst mit den I/O-Pins vertraut machen. Im Folgenden werden sie als gewöhnliche I/O-Pins eingesetzt, und erst später gibt es einen detaillierten Überblick über alle ihre Fähigkeiten. Um einen Low- oder High-Pegel an einem Pin zu erzeugen, muss man diesen zuvor als Ausgang konfigurieren. Auf dem Evaluations-Board befinden sich die mit P56 bis P63 bezeichneten LEDs (siehe Bild 4).
Diese LEDs sind mit den Pins 56 bis 63 des Propeller 2 verbunden. Für das erste Beispiel soll die erste LED P56 angesteuert werden. Im Schaltplan wir klar, dass sie nicht direkt mit dem Chip, sondern mit dem Oktal-Buffer 74HCT244 verbunden ist. Die LEDs liegen mit ihrer Anode permanent an VCC. Um zu leuchten muss der Buffer ihre Kathode auf Massepotential ziehen (siehe Bild 5).
Invertierte LED
Für den Code bedeutet dies, dass die LED bei einem High-Pegel am MCU-Pin dunkel bleibt und sie erst bei einem Low-Pegel aufleuchtet. Dank dieser invertierten Logik muss der Code die LED-Pins auf „high“ setzen, damit die LEDs dunkel bleiben. Macht man nichts, fungieren diese Pins per default als Eingang, und die korrespondierenden Buffer verhalten sich so, als ob ihre Eingänge mit einem High-Pegel angesteuert würden. In der Folge bleiben daher die LEDs zunächst dunkel. Um per Spin2-Code die LED P56 aufleuchten zu lassen, muss folgendes geschehen:
Initialisierung der MCU und mindestens eines Kerns (cog).
Pin 56 als Ausgang setzen
Pin 56 auf low setzen
nichts tun
Die eigentlich notwendige Initialisierung im ersten Punkt ist schon erledigt und kann für dieses Beispiel ignoriert werden. Das Spin2-Programm benötigt nur ein paar Zeilen Code. Dieser beginnt mit dem Funktionsaufruf pub main(), gefolgt von der Methode pinwrite() (siehe Bild 6).
Die Methode pinwrite() ist in Spin2 enthalten und erlaubt es, einen oder mehrere Pins mit einem bestimmten Wert zu belegen. Da die LED P56 von Pin 56 angesteuert wird, wird dieser Pin der Pegel ‚0' übergeben, um den Pin auf low zu bringen und damit die LED einzuschalten. Die letzte Zeile repeat führt in eine Endlosschleife, da der Code unter repeat immer wieder ausgeführt wird. In diesem Fall gibt es aber keinen weiteren Code, weshalb der entsprechende „cog“ immer wieder nichts tut. Ohne dieses repeat würde das Code-Ende erreicht und die I/O-Pins nicht mehr angesteuert werden.
Code in Propeller 2 übertragen
Wenn der Code fertig ist, können Sie ihn auf das Propeller 2 Evaluation Board hochladen und ausführen lassen. Dazu wird das Board einfach per USB mit dem PC verbunden und das Menü Run->Compile Current->Load RAM ausgewählt, damit der Code direkt in das RAM der MCU geladen und ausgeführt wird. Wenn nun die LED P56 leuchtet, war die MCU-Version von „Hello world“ erfolgreich. Falls Sie sich nun fragen, wie man die LED zum Blinken bringen kann: In Spin2 gibt es den WAITMS-Befehl. Beispielsweise verzögert WAITMS(500) die Ausführung des nächsten Befehls um 500 ms. Da der Code nach repeat immer wieder ausgeführt wird, ist das die Stelle, wo man die LED zum Blinken bringen kann. Die nächste Übung besteht also darin, den Code entsprechend zu verändern. Mit den bisherigen Informationen sollte es Ihnen möglich sein, den Code so zu modifizieren, dass die LED P56 nicht nur leuchtet, sondern blinkt. Hierfür gibt es später noch eine exemplarische Lösung.
Wenn man einen I/O-Pin erfolgreich ansteuern kann, sollte man im nächsten Schritt herausfinden, wie serielle Daten gesendet werden. MCU-Programmierer sind an diese Art des Debuggens gewöhnt, gerade wenn man zum Beispiel Software für AVR-Controller geschrieben hat. Da dies mit den Smart-Pin-Funktionen gut funktioniert, wird der nächste Teil dieser Serie sich genau darum drehen.
(200479-B)
Wollen Sie weitere Elektor-Artikel lesen? Jetzt Elektor-Mitglied werden und nichts verpassen!