I<+>2<+>C-Workshop, Teil 19: MSP430F5529 als I<+>2<+>C-Master

© Aubert Serge, 123RF

Stabübergabe

Ist das Prototyping erst einmal abgeschlossen, dann darf ein günstiger Mikrocontroller wie der MSP430 das Ruder übernehmen.

Der Mikrocontroller MSP430F5529 von Texas Instruments arbeitet mit einem 16-Bit-Kern und hat eine Taktfrequenz von 25 MHz. Er verfügt über einen Programmspeicher von 128 KByte und bietet 8 KByte RAM für Daten. An I/O-Ports haben die Designer nicht gespart: Zu den üblichen Ports, die Sie etwa vom Raspberry Pi kennen, kommen zusätzlich noch 16 Analog-Eingänge mit einer Auflösung von 12 Bit hinzu.

Im Test kam ein Evaluation Kit (Launchpad) [1] zum Einsatz, das der Hersteller für rund 13 US-Dollar anbietet. Dieses Kit hat alles an Bord, um direkt starten zu können. Dazu gehören auch ein USB-Programminterface sowie zwei Taster und LEDs. Wenn Sie sich etwas intensiver mit den verschiedenen Varianten beschäftigen möchten, werfen Sie einen Blick auf die Homepage des Chips [2].

Als IDE bieten sich Energia [3] oder die Professional Software Tools [4] an. Im Test kam Energia zum Einsatz (siehe Kasten "Energia installieren"), eine der Arduino IDE nachempfundene Open-Source-Software. Die Entwicklungsumgebung lässt sich leicht bedienen, schon nach wenigen Minuten haben Sie ein erstes Programm in dem Mikrocontroller geladen.

Energia installieren

Bei Bedarf laden Sie Energia aus dem Netz herunter [5]. Wählen Sie hier die für Ihr Betriebssystem passende Version aus. Versionen für Linux und Windows sowie die Rules-Datei finden Sie auch auf dem Datenträger zum Heft. Unter Linux funktioniert die Installation der IDE wie in den ersten fünf Zeilen von Listing 1 gezeigt. Falls Sie eine andere Version der IDE herunterladen, passen Sie die Pfade dementsprechend an. Damit alle Änderungen greifen, starten Sie das System einmal neu – das ist in diesen Fall nötig, weil Sie die Berechtigungen auf den USB-Geräten verändert haben. Um nach dem Neustart die IDE zu starten, geben Sie die beiden letzten Zeilen aus Listing 1 ein.

Listing 1

 

$ cd ~
$ cp ./Downloads/energia-1.6.10E18-linux64.tar.xz .
$ tar -xvf energia-1.6.10E18-linux64.tar.xz
$ wget http://energia.nu/files/71-ti-permissions.rules
$ sudo mv ./71-ti-permissions.rules /etc/udev/rules.d/
[... Neustart ...]
$ cd ~/energia-1.6.10E18/
$ ./energia

Um zu überprüfen, ob die IDE wie gewünscht funktioniert, schließen Sie das Launchpad an eine freie USB-Schnittstelle des PCs an. Für den Test eignet sich das Blink-Programm, das Hello-World-Programm der Mikrocontroller-Gemeinde. Sie finden es in der IDE unter Datei | Beispiele | Basics  | Blink.

Nachdem Sie das Beispiel geöffnet haben, installieren Sie es mit der Schaltfläche Hochladen (zweites von links in der Icon-Leiste) im Controller. Danach startet es direkt, und die rote LED beginnt langsam zu blinken.

Hardware

Um das Lauchpad auf einem Breadboard zu verwenden, wenden Sie einen Trick an. Dazu modifizieren Sie einige lange Stiftleisten [5] und verwenden sie als Verbindung zwischen Breadboard und Launchpad (Abbildung 1). Nun verbinden Sie die Bauteile dem Schaltplan aus Abbildung 2 entsprechend.

Abbildung 1: Mit etwas Geschick verschieben Sie den Verbindungssteg der Stiftleisten, um das Launchpad mit dem Breadboard zu verbinden.
Abbildung 2: Der Schaltplan für den Testaufbau zeigt, wie Sie die einzelnen Teile miteinander verbinden.

Genau genommen haben Sie nur den I2C-Bus des MSP430 mit dem LM75 eins zu eins verbunden. Eine Kleinigkeit ist allerdings beim Aufbau sehr wichtig: Bei den Widerständen R1 und R2 handelt es sich um sogenannte Pullup-Widerstände; ohne diese kann der MSP430 kein Signal auf dem I2C-Bus erzeugen.

Nun drängt sich sofort die Frage auf, warum wir bei den bisher erschienenen 18 Teilen dieser Workshop-Reihe so gut wie nie Pullup-Widerstände gebraucht haben. Die schlichte Antwort: Beim Raspberry Pi sind sie bereits mit auf der Platine verbaut. Warum aber verbaut ein Profi-Hersteller wie TI keine Pullup-Widerstände auf der Platine? Zum einen hängt der notwendige Wert der Widerstände von der Bus-Last ab (Anzahl der angeschlossenen I2C-Slaves und Länge des Busses), zum anderen verändern diese Widerstände die Charakteristik der GPIOs, wenn diese nicht für I2C zum Einsatz kommen.

Beides sind sehr gute Gründe, die Widerstände nicht standardmäßig zu bestücken. Für die Entwickler des Raspberry Pi war es allerdings wichtiger, dem Hardware-Anfänger ein auf Anhieb funktionierendes System zu bieten, auch wenn es so etwas weniger Flexibilität bietet.

Will eines Ihrer I2C-Projekte überhaupt nicht funktionieren, dann schauen Sie doch einmal nach, ob die I2C-Pullup-Widerstände vorhanden sind, und falls ja, welchen Wert sie haben. Fallen sie zu hochohmig aus, gelingt es unter Umständen nicht, ein sauberes Signal auf dem Bus zu erzeugen.

Testprogramm

Das Testprogramm (Listing 2) liest die aktuellen Werte für die Temperatur aus einem LM75 aus und sendet sie an eine serielle Schnittstelle. Die Ausgaben der seriellen Schnittstelle sehen Sie sich bei Bedarf auf dem Seriellen Monitor der Energia IDE an (Lupen-Icon ganz rechts in der Icon-Leiste).

Listing 2

 

#include <Wire.h>
void setup() {
  Wire.begin();
  Serial.begin(9600);
  Serial.println("start");
}
void loop() {
  Wire.beginTransmission(0x48);
  Wire.write((byte)0x00);
  Wire.requestFrom(0x48, 1);
  int temperatur;
  temperatur = Wire.read();
  Wire.endTransmission();
  Serial.print("Temperatur: ");
  Serial.println(temperatur);
  delay(1000);
}

Zum Hochladen von Programmen verwendet die IDE das Device /dev/ttyACM0. Um die Ausgaben des Mikrocontrollers zu sehen, wählen Sie /dev/ttyACM1 als Port aus. Möchten Sie beim Entwickeln nicht ständig umschalten (wobei nicht nur der Programmierer durcheinanderkommt, sondern gelegentlich auch die IDE), empfiehlt es sich, zwei Fenster zu öffnen: eines zum Programmieren und Hochladen und ein zweites zur Anzeige der Ausgabe des seriellen Monitors (Abbildung 3).

Abbildung 3: Über die Ausgabe des Seriellen Monitors sehen Sie, welche Daten das Programm liefert.

Das Testprogramm selbst ist schnell erklärt: Die Bibliothek Wire stellt alle Funktionen bereit, um auf den I2C-Bus zuzugreifen. Die Funktion setup() initialisiert mit Wire.begin() die I2C-Schnittstelle. Geben Sie Wire.begin() einen Wert mit, dann startet das I2C-Interface im Slave-Modus. Der mitgegebene Wert definiert dabei die Adresse am I2C-Bus.

Die Funktion Serial.begin(9600) initialisiert die serielle Schnittstelle des Mikrocontrollers mit 9600 Baud. Über dieses Interface fragen Sie bei Bedarf Debug-Informationen des laufenden Programms ab. Die Funktion loop() baut eine Verbindung zum I2C-Gerät an der Adresse 0x48 auf. Dort fordert sie den Inhalt des Registers 0x00 an. Darin befindet sich der aktuelle Wert für die Temperatur, den die Funktion auf die serielle Schnittstelle herausschreibt. Dann wartet sie eine Sekunde und liest das Register erneut aus.

Als wichtiges Hilfsmittel sollten Sie beim Test auf jeden Fall Kältespray [7] zur Hand haben: Damit kühlen Sie den LM75 schnell herunter, um zu sehen, ob der Aufbau richtig funktioniert. Das Programm ist nur für positive Temperaturen ausgelegt. Wenn Sie zusätzlich negative Temperaturen messen möchten, müssen Sie die Werte im Register 0x00 des LM75 entsprechend interpretieren.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 4 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Raspberry Pi Geek kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Aktuelle Ausgabe

12/2018
Coole Projekte

Diese Ausgabe als PDF kaufen

Preis € 7,99
(inkl. 19% MwSt.)

Stellenmarkt

Neuigkeiten

  • Bytes und Beats

    In Sonic Pi können Sie mit wenigen Codezeilen Klänge manipulieren, Beats zusammenstellen und ganze Songs komponieren.

  • Klein, aber fein

  • Trick or treat

    Das traditionelle RPG-Gruselkabinett glänzt dieses Jahr mit einer innovativen Umsetzung mittels Pneumatik und Elektropneumatik sowie ST-Programmierung.

  • Unter Kontrolle

    Traditionell stellen wir alljährlich ein selbst gebautes Halloween-Gespenst vor. Die pneumatischen und elektronischen Grundlagen erklärt dieser Artikel.

  • Go Pi Go!

    Der Bausatz GoPiGo3 liefert Bauteile und Software für ein kleines Roboterauto. Zusammen mit einem RasPi als Gehirn programmieren Sie den Roboter per Mausklick.

  • Handlicher Helfer

    Während die Folien der Präsentation durchlaufen, liefert ein kleiner Dokumentenserver auf Basis des GL-AR300M-ext zusätzliche Informationen aus.

  • Wiederverwertet

    Mithilfe eines einfachen Python-Programms recyceln Sie ein ausgedientes Smartphone als drahtlos angebundenes RasPi-Display.

  • Herzenssache

    Steigt beim Krimi der Herzschlag bedrohlich an? Mit einem Pulsmesser in Eigenbau ermitteln Sie einfach und kostengünstig, ob der Herzschlag noch in verträglichen Bereichen liegt.

  • Fernbedient

    Mit der Fernbedienung den RasPi steuern. In der Theorie möglich, in der Praxis oft beschwerlich. Die Libcec liefert praktische Tools zur Fehlersuche.

  • Musikwürfel

    Mit Musikcube machen Sie Ihre eigene Sammlung fit fürs Streamen. Der terminalbasierte Audioplayer lässt sich Fernsteuern und bietet eine App für Android-Smartphones.