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

08/2018
Projekte & Hacks

Diese Ausgabe als PDF kaufen

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

Stellenmarkt

Neuigkeiten

  • Fernverkehr

    Zwar wurde I2C eigentlich für die interne Gerätekommunikation konzipiert, doch mithilfe geeigneter Extender-Bausteine überbrückt der Bus Distanzen bis zu 100 Metern.

  • Neues auf der Heft-DVD

    Nur mit dem optimalen System und der richtigen Software nutzen Sie das volle Potenzial eines Mini-PC. Mit der Heft-DVD erhalten Sie nicht nur die neusten Distributionen für den RasPi und Co., sondern gleichzeitig auch die passenden Programme zu den Artikeln.

  • Farbenspiele

    Der winzige Sensorbaustein APDS-9960 vereint vier unterschiedliche Anwendungsfälle in einem Chip.

  • Finger weg!

    Mit einem Read-only-Dateisystem schützen Sie die SD-Karte vor dem Altern durch Schreibvorgänge. Beim Aufsetzen gilt es, einige wichtige Punkte zu beachten.

  • Auf Zuruf

    Mit dem bereits Anfang 2017 angekündigten und jetzt endlich verfügbaren Voice offeriert Matrix Labs eine neue Erweiterung, die den Raspberry Pi fit für Sprachsteuerung machen soll.

  • Experimentell

    Wer elektronische Schaltungen entwirft, experimentiert oft erst einmal mit einem Breadboard. Genau für diese Bastler bietet sich der NanoPi-Duo als Steuerrechner an.

  • Aufgemöbelt

    Mit dem Desktop-Kit von Farnell gibt der RasPi auch auf dem Schreibtisch technisch und optisch eine gute Figur ab.

  • PiBot

    Aus einem Fischertechnik-Baukasten lässt sich schon mit wenigen Teilen ein Roboter aufbauen. Fehlt nur noch ein Gehirn: Das stellt der Raspberry Pi.

  • Heißkalt serviert

    Wie verwandelt sich ein Linux-System auf einem RasPi in einen Datenlogger? Indem es mit einem Bluetooth-fähigen Multimeter spricht.

  • Türwächter

    Der RasPi beteiligt sich am Internet der Dinge und wacht als smartes Schließsystem autonom über den Zugang zum Eigentum.