Projekt 62: I2C-Netzwerk von MSP430-Launchpads
Autor: Theresa Wunsch | Anna Neuhaus
Betreuer: Prof. Göbel | Prof. Schneider
Aufgabe
- Erstellung eines Konzepts
- Verschaltung der MSP430-Launchpads >> Schaltplan, Pin-Belegungs-Tabelle (wie werden die Platinen verbunden?)
- Programmierung mit C mit energia
- Ansteuern/Auslesen der Aktoren/Sensoren
- Test und wiss. Dokumentation
- Machen Sie ein spektakuläres Video, welches die Funktion visualisiert.
- Dokumentation der technischen Funktion der verwendeten Bauteile
- Vorführung während der Abschlusspräsentation
Lösungskonzept - automatische Ampelschaltung
Unser Lösungskonzept stellt eine automatische Ampelschaltung für Fußgänger dar. Wir möchten ein Netzwerk aus drei Mikrocontrollern erstellen, von denen einer der „Master“ und die anderen beiden „Slaves“ sind. Nähere Erläuterungen zu den beiden Rollen finden sich in den Grundlagen. Es soll eine Ampelschaltung realisiert werden, bei der der Master den Slaves den Befehl zum „Grün-Schalten“ erteilt. Ein Fußgänger soll an einer Kreuzung, mit drei aufeinander folgenden Ampeln, lediglich an der ersten Säule das Grünsignal anfordern. Die anderen Ampeln werden, mit einer Zeitverzögerung, automatisch auf Grün schalten.
Projektplan
Um das Projekt zu planen und zeitlich einzuteilen wurde ein Projektplan erstellt. Dieser ist in der folgenden Abbildung dargestellt:
Grundlagen
Im folgenden Abschnitt werden einige Grundlagen vermittelt, die für die Durchführung und das Verständnisses dieses Projektes wichtig sind.
I²C-Bus
Der I²C-Bus (Inter-Integrated-Circut-Bus) wurde im Jahr 1982, von dem Unternehmen Philips entwickelt. Er ist ausgelegt für eine einfache und kostengünstige Vernetzung, von integrierten Schaltkreisen. Der I²C-Bus wird vor allem bei Mikrocontrollern, aber auch bei A/D und D/A-Wandlern, Echtzeituhren, Display-Treibern und einigen weiteren elektrotechnischen Bestandteilen verwendet.
Der I²C-Bus ist ein getakteter synchroner Zweidraht-Bus. Das bedeutet er besitzt eine Daten- und eine Taktleitung. Der Bus enthält mindestens einen Master und eine beliebige Anzahl von Slaves. Der I²C ist jedoch auch fähig ein Multi-Master-System abzubilden, dass bedeutet mehrere Master und mehrere Slaves. Die Master sprechen die Slaves an, so dass ein Slave niemals eigenständig Daten senden kann. Der oder die Master koordinieren den Zugriff auf den Bus. Sie bestimmen, welcher Slave Daten senden oder empfangen darf. Die Datenübertragung auf dem I²C-Bus wird in zwei Phasen aufgeteilt. Die Adressierung und die Datenübertragung.
In der Adressierungs-Phase wird zunächst eine Adresse zur Selektion des gewünschten Slaves übertragen. Diese Adresse kann wahlweise 7 oder 10 Bits lang sein. Die Unterscheidung zwischen beiden Adresslangen wird durch eine besondere Belegung der höherwertigen Adressbits vorgenommen (s.u.). Das letzte Datenbit (R/W) legt fest, ob der Master Daten senden (R/W=0) oder empfangen (R/W=1) will. In der zweiten Phase werden nun die Daten byteweise solange übertragen, bis die Übertragung des gesamten Blockes durch den Sender „planmäßig“ oder durch den Empfänger vorzeitig beendet wird. Dazu wird ein Quittierungstakt verwendet.
Quellen: [1], [3], [5]
Pull-up/ -down Widerstände
Ein Pullup- oder Pulldown-Widerstand wird dazu verwendet, einen Eingang auf einen definierten Wert zu "ziehen". Normalerweise befindet sich der Eingang im Zustand "schwebend/hochohmig", welcher sich irgendwo zwischen High und Low befindet. Nun sind Schaltungen nicht komplett ohne Störsignale, und durch Einstrahlungen von Signalen kann es passieren, dass kurzzeitig ein Wert über- oder unterschritten wird und der Eingang plötzlich ein High- oder Lowsignal bekommt. Dies führt dann zu unerklärlichen und unregelmäßig auftretenden Fehlern. Um dies zu vermeiden wird, während nichts am Eingang passiert, dieser auf High gezogen (pullup). Will man also einen Taster haben, der Low schaltet, so will man für den Rest der Zeit High am Eingang liegen haben. Dies kann man erreichen, indem man den Eingang fest mit VCC verbindet. Vom Eingang geht nun eine Leitung nach VCC und eine über den Taster nach GND. Leider würde dies zu einem Kurzschluss führen sobald man den Taster drückt und die Schaltung könnte (und würde höchstwahrscheinlich) Schaden nehmen. Deshalb wird nun zwischen VCC und dem Eingang ein hochohmiger Widerstand eingesetzt, der Pullup-Widerstand. Bei geschlossenem Taster wird nun der Strom über den Pullup-Widerstand nach GND fließen und der Input liegt auf GND (0V). [4]
Der Pulldown-Widerstand funktioniert analog zum Pullup-Widerstand, nur dass nun VCC geschaltet werden soll und somit der Eingang auf GND gezogen werden muss. Dies geschieht in gleicher Weise wie beim Pullup, nur dass der Pulldown-Widerstand nun zwischen GND und dem Eingang platziert wird. Schließt man nun wieder den Taster, liegt am Eingang Vcc an --> High. [4]
Energia
Energia ist eine freiverfügbare Software, zur Programmierung und Verdrahtung von Mikrocontrollern. Speziell für den MSP430 von Texas Instruments. Die Software ist nahezu voll identisch, mit der Plattform zur Programmierung von Arduino, lediglich die Oberflächenfarbe ist anders. Mit Hilfe von Energia kann der Mikrocontroller MSP430 vom PC aus programmiert werden. Das Programm bietet schon vorerstellte Befehle, bei denen der Programcode vollständig automatisch eingefügt wird. Dies ermöglicht eine leichte Verwendung und führt zu schnellen Ergebnissen. [2]
Aufbauplan
Schaltplan
Verkabelung / Pin-Belegung
Programmierung
Um die Programmierung möglichst einfach zu realisieren, haben wir uns zuerst ein einfachen „Master-to-Slave“-Beispiel aus dem Internet gesucht. Bei diesem sollte der Mastercontroller, dem Slavecontroller, über einen I²C-Bus, den Befehl erteilen, die LED auf grün zu schalten. Über die Eingabemaske am Computer kann der Benutzer, mit zwei Befehlen („H“= LED an, „L“= LED aus), die Lampe am Slave an- bzw. ausschalten. Das Internetbeispiel für diese einfache I²C-Übermittlung war für einen Arduino Uno, einen speziellen Mikrocontroller für Lehrzwecke. Wir haben versucht den Code, mit energia auf die Mikrocontroller MSP430 zu übertragen. Dieses Vorhaben ist jedoch gescheitert. Daraufhin haben wir das Beispiel auf dem Arduino Uno angewendet und es funktionierte sofort einwandfrei. Nach einigen Verionswechseln des Energia-Programmes, stellte sich heraus, dass Version 17 und 18 nicht in der Lage sind, mit einem I²C-Bus zu arbeiten. Wir konnten unser Programm nur in Energia 16 umsetzen und zum Laufen bringen.
Ergebnis
Ausblick
Video
Quellen
[1] Bähring, H. (2010). Anwendungsorientierte Mikroprozessoren. Hagen: Springer Verlag.
[2] Energia. (12. 10 2016). Energia Software. Von About Energia: http://energia.nu/ abgerufen am 10.10.16
[3] Kügele, R., & Wegenast, J. (12. 10 2016). Einführung in Mokrocontroller. Von ELMICRO: https://elmicro.com/files/nwt/mikrocontroller_schuelerheft_v31d.pdf abgerufen am 18.10.16
[4] rn-wissen. (05. 10 2016). Von http://rn-wissen.de/wiki/index.php/Pullup_Pulldown_Widerstand abgerufen am 25.10.16
[5] Sathiyamoorthy, R. (10. 10 2016). I2C-Bus. Von HTI Burgdorf: https://prof.ti.bfh.ch/uploads/media/I2C_bus.pdf abgerufen am 15.11.16