Hallo zur Webseite von
DL1DMW





Programmieren wie mit dem Arduino:
Textas Instruments MSP430 Launch Pad und Energia


<- Bild 1: Experimentier- und Entwicklungsplatine: Ziel-Prozessor und Programmer/Debugger auf einer Platine.


Es muss nicht immer Atmel / Microchip sein. Texas Instruments bietet seit vielen Jahren mit der MSP430-Familie eine Reihe von 16-Bit-Prozessoren an, die auf geringen Stromverbrauch optimiert sind. Mit dem Arduino-IDE-Derivat Energia programmiert man den MSP430F5529LP ebenso einfach wie einen Arduino. Damit erfüllt sich der Wunsch nach einem leistungsstarken Prozessor, zahlreicher integrierter Perpherie mit der Einfachheit der Arduino-Programmierung.

Die Experimentier-Platinen von Texas Instruments (TI) nennen sich Launch Pad. Davon gibt es eine gute Anzahl, doch das Launch-Pad MSP-EXP430F5529LP ist schon etwas Besonderes: Es verbindet auf einer Platine den Ziel-Mikrocontroller, einen USB-Hub und den USB-Programmer, der sich bei Texas Instruments eZ FET Lite nennt. Dieser Programmer wird per USB an den PC angeschlossen und liefert zwei USB-Verbindungen: Eine dient zur Programmierung des Ziel-Prozessors, die andere dient als Debug-Interface oder für eine User-Anwendung mit USB, beispielsweise eine HID-Applikation (Keyboard, Maus) oder eine CDC-Anwendung, welche einen virtuellen Com-Port implementiert. Damit bietet TI einen USB-Programmer und den Ziel-Controller auf einer Platine zu etwa dem halben Kurs eines originalen Arduino UNO Rev3.

Aus privater Initiative und sicher aus der Überlegung heraus, dass es sich bei den MSP430-Controllern um sehr leistungsfähige und mit Periherie gut bestückte Exemplare handelt, wurde die Open Source Arduino-IDE (Entwicklungsumgebung) quasi geklont und auf den MSP430 adaptiert. Heraus kommt eine Entwicklungsumgebung mit der Bezeichnung Energia, die ausssieht und sich bedienen lässt wie ein Arduino (Bild 2). Energia verwendet den mspgcc-Compiler von Peter Bigot und basiert auf dem Wiring- und Arduino-Framework. Damit typische Arduino-Kommandos wie digitalWrite(), pinMode() oder millis() auch mit dem MSP430 funktionieren, mussten die Befehle für den TI-Prozessor umgeschrieben werden. Das ist eine tolle Leistung der Programmierer und funktioniert gut. Ähnliches gilt für die Schnittstellen I2C und SPI. Auf diese Weise profitiert der Anwender beispielsweise von dem 12-Bit-Analog-Digital-Wandler des MSP430F5529-Prozessors, während die Arduinos mit 10-Bit zufrieden sein müssen. Einen Überblick über die im MSP430F5529 enthaltene Peripherie bietet Bild 3.

Bild 2: Energia nennt sich die Arduino-Programmierumgebung für den MSP430. Hier wurde das Beispielprogramm zu SoftwareSerial geladen.



Bild 3: Blockschaltbild des MSP430FF29-Mikrocontrollers mit Power-Management, DMA und zahlreichen Schnittstellen und Zeitgebern. Quelle: TI Datasheet.


Der Prozessor wird auf dem Launch Pad mit 25 MHz Takt betrieben. Ein Resonator mit 32 kHz dient als Taktgeber in den Low-Power-Modi. Der F5529 verfügt über 128 kByte Flash-RAM als Arbeitsspeicher und 8 kByte RAM zum Speichern von Variablen. Zum Repertoire gehören jede Menge digitale IO-Ports und zwei UARTs. UART0 ist zuständig für RS232, IrDA (Infrarot) und SPI. Der zweite im Bunde lässt sich in die Modi I2C (TWI) und SPI betreiben. Unter Energia ist UART0 fest für SPI und UART1 für I2C definiert. Vier 16-Bit-Timer, eine Real Timer Clock und der Watchdog sowie das Full-Speed-USB-Interface zeigen, dass der Controller für vielerlei Anwendungen gut ausgestattet ist. Ein CRC-Block und der Multiplizierer sind in Hardware realisiert. Damit der Prozessor möglichst wenig Strom verbraucht – wichtig bei Batteriebetrieb – ist sogar die Spannung des Prozessorkerns programmierbar.

Das Launch Pad ist in drei Teile geteilt, welche durch gestrichelte Linien auf der roten Platine gekennzeichnet sind: Am USB-Anschluß der USB-Hub, rechts daneben der Programmer zum Flashen des Zielcontrollers und für das Debugging. Darunter, über mehrere Jumper verbunden ist der Zielprozessor mit je zwei LEDs und Tastern. Zieht man die Jumper, trennt man den Programmer vom Target-Controller und ist in der Lage, ihn, den Programmer, zum Flashen beliebiger MSP430-Controller (zum Beispiel auf einer externen Platine) zu verwenden.

Die IDE Energia ist für Windows, Linux und Mac OS X auf [1] vorhanden – und für Windows natürlich auf der Heft-DVD. Nach der Installation von Energia – hier unter Windows - findet man die von Arduino bekannten Beispielprogramme in unveränderter Form im Menü Datei – Beispiele. Weiter unten in der Liste findet man zahlreiche Beispielprogramme speziell für das hier genannte Launch Pad. Ein Codeschnipsel soll kurz vorgestellt werden:

#include <driverlib.h>

void setup()
{
GPIO_setAsOutputPin(GPIO_PORT_P1, GPIO_PIN0);
GPIO_setOutputLowOnPin(GPIO_PORT_P1, GPIO_PIN0);
}

void loop()
{
// Wait for a second
delay(1000);
GPIO_toggleOutputOnPin(GPIO_PORT_P1, GPIO_PIN0);
}

Das Beispiel bringt die auf dem Launch Pad an Port1.1 vorhandene LED zum Blinken. Normalerweise würde man das mit den Kommandos pinMode() und digitalWrite() erledigen. Die Driverlib ist eine von TI stammende Programmbibliothek, welche die Programmierung von der Port- und Registerebene auf eine höhere abstrakte Ebene hebt. Natürlich kann man die von Ardiuno bekannten Befehle nutzen – doch dieses Beispiel soll zeigen, dass man mit Energia ebenso die TI-Driverlib verwenden darf.


Bild 4: Pinmapping der MSP430-Ports zu den Energie/Arduino-Pinnummern, wie sie im Programm benutzt werden. Grafik: Energia.


Alternative CCS8?

So praktisch Energia beim Schreiben und Testen von Programmen für Einsteiger auch ist: Professionelle Entwickler werden Energia eher beschränkt nutzen. Die von TI zur Programmierung der 16-Bit-Prozessoren vorgesehene Entwicklungsumgebung nennt sich Code Composer Studio (CCS), der zurzeit in der Version 9 frei zur Verfügung gestellt wird und auf Eclipse basiert. Es sei hier erwähnt, dass CCS V9 es ermöglicht, Energia-Sketche (Programme) zu importieren, zu übersetzen und auf dem Zielcontroller auszuführen. Dabei werden alle Energia-Routinen mit eingebunden. Wer allerdings komplett von Energia auf CCS umsteigt, muss sich um alles kümmern und implementieren, was Energia aks Arduino bereits von Haus aus mitbringt: Den Millisekundentimer millis, Ausgaben via Serial.print(), delay() und die Bibliotheken.

Doch zurück zu Energia: Arduino und Energia “denken” in Arduino-Pinnummern. So auch bei diesem Launch Pad. Auf der Pin-Map des Launch Pads (Bild 4) sind die Energia/Arduino-Pinnummern verzeichnet. Diese müssen auch benutzt werden. Nimmt man ein Arduino-Beispielprogramm, das für die ATmel-Prozessoren geschrieben wurde, muss man in der Regel die Pin-Nummern anpassen, damit es auf dem Launch Pad funktionieren kann.


Fazit

Energia verinfacht die Programmentwicklung des MSP430-Controllers wesentlich, wenn man die Eigenarten bzw. Merkmale der Hardware im Hinterkopf behält. Der hier betrachtete Prozessor MSP430F5529 ist leistungsstark und bietet sich mit der DMA und dem Multiplizierer für Anwendungen an, bei dem ein Atmel 8-Bit-Contoller nicht miuthalten kann. Jedoch kann Energia zwar auf einige Bibliotheken zurückgreifen, deren Anzahl ist mit denen aus der Arduino-Community nicht vergleichbar. Der Programmieranfänger wird allerlei tolle Anwendungen realisieren können, solange keine umfangreichen Bibliotheken fremde Hardware wie für ein TFT-LCD benötigt werden. Dem geübten Programmierer wird es leicht gelingen, Arduino-Bibliotheken an die Hardware des MSP430 anzupassen. Bleiben wir bei dem Beispiel einer Bibliothek für ein TFT-Display, so betreffen die Änderungen meist die SPI-Schnittstelle auf Registerebene.
Auf der Heft-DVD im Verzeichnis Artikel\MSP430 finden Sie weitere Abbildungen, das Programm Energia für Windows in der Rubrik Programmieren.

Literatur / Verweise:
[1] Energie-Download:
http://energia.nu/download/
[2] MSP430-Forum: zurzeit nicht online (2023)
[3] Videos, Pin-Map:
http://energia.nu/pinmaps/msp-exp430f5529/




Mehr Zeugs
  • Schaun mer mal
  • Moin
  • Bast scho

Hier gibt es was zu lesen

Adresse etc.

  • Op: Michael, DL1DMW
  • ITU Region 1, Zone 14, DL, JO41CO
  • Bad Sassendorf
  • NRW / Germany