Nachdem ich viel mit Atmel AVR Controllern gearbeitet habe, habe ich
mich jetzt einmal mit dem Launchpad und den 14 bzw 20 poligen MSP430
Controllern von TI beschäftigt.
Beide Controllerfamilien decken meiner Meinung nach etwas
unterschiedliche Einsatzbereiche ab. Die Atmel 8 Bit AVR Familie ist
relativ einfach zu verstehen und damit gut für den Einstieg in die
Mikrocontrollerprogrammierung geeignet. Geeignete Entwicklungstools,
Programmer, Debugger, Entwicklungsumgebungen für Assembler und C etc.
sind in grosser Anzahl verfügbar.
Die TI MSP430 Familie ist zunächst mit ihren vielen Derivaten und
kryptischen Bezeichnung der einzelnen Controller insbesondere für
Anfänger unübersichtlich. Die Leistungsfähigkeit des CPU Kerns ist aber
hoch, da es sich um eine 16 Bit Registerarchitektur handelt.
Im Gegensatz zu den Atmel Controllern, bei denen mit den Fuse Bits beim
Programmieren viele grundlegenden Eigenschaften eingestellt werden
können, wird bei den TI Controllern vieles durch die Software beim
Startup festgelegt. Die TI Controller haben einen einheitlichen
Adressbereich, in dem Register, RAM, IO und Flash Programmspeicher
abgelegt sind (v.Neumann Architektur). Beim Atmel ist der 16 Bit Flash
Programmspeicher separat vom RAM definiert, es handelt sich hier um eine
Harvard Architektur.
Selbst modifizierender Code ist daher beim TI Controller möglich, nicht
aber beim AVR.
Die TI Architektur ist insbesondere auf möglichst geringen
Stromverbrauch ausgelegt.
So lässt sich der interne Takt durch verschiedene interne
Taktgeneratoren in weiten Massen während des Programmablaufs
beeinflussen, verschiedene Komponenten können, wenn sie zB. innerhalb
einer Schlafphase nicht benutzt werden abgeschaltet werden bzw. mit
einem niederfrequenten internen Clockoszillator betaktet werden.
Eine komplexe Interruptarchitektur erlaubt es durch vielfältige externe
Ereignisse aus den Schlafmodi aufzuwachen.
Durch vielfältige Konfigurationsregister sind die internen Komponenten
sehr komplex einzustellen, allerdings sind die Beschreibungen der
Konfigurationsbits in dem Controllerdatenblatt nicht immer ganz einfach
zu verstehen, da sind die AVR Einstellungen zumindest etwas einfacher zu
verstehen. Einsteiger haben hier mit Sicherheit größere Probleme wie mit
den 8 Bit AVR Controllern.
Mit dem Launchpad (<5Eur!) hat TI allerdings eine Hardware und
zugehörige Entwicklungssoftware (die aus dem Internet geladen werden
muss) auf den Markt gebracht, die den Programmieradapter (per USB an
jedem Notebook zu betreiben) enthält und zusätzlich noch die Möglichkeit
der in Circuit Emulation über die "Spy-by-wire" Schnittstelle
ermöglicht.
Dies macht natürlich die schrittweise Abarbeitung des Programms und die
Detektion von Programmierfehlern sehr einfach. Dies entspricht in etwa
dem Dragon Programmieradapter von Atmel, der aber um ein Vielfaches
teurer ist.
Zusammenfassen kann man also folgendes feststellen:
MSP430 TI
Vorteile:
super billige Entwicklungshardware Launchpad mit Spy by Wire
Speziell für langzeit Batteriebetrieb optimiert
vielfältige low power Betriebsmodi
mehrere interne high frequency (-16MHz) und low frequency (<12kHz) Clock
Oszillatoren
vielfältige IO Komponenten und Konfigurationsmöglichkeiten
vielfältige Interrupt Möglichkeiten
eingebautes Spy by wire Interface auch bei den einfachen Controllern
Nachteile:
Unübersichtliche Bausteinbezeichnungen
keine einfach zu handhabende freie Entwicklungsumgebung mit Debugger
für Anfänger komplexe Konfigurationseinstellungen
wenig Informationen im Netz
AVR Atmel
Vorteile:
Umfangreiches Angebot an Programmieradaptern und Entwicklungstools
AVR Studio und gcc Compiler
relativ einfache Konfigurationsstruktur
hohe Leistungsfähigkeit
viel Informationen im Netz, zB. auf mikrocontroller.net
Nachteile:
in Circuit Emulation nur mit relativ teurer Hardware (Dragon)
Anbei ein Codebeispiel für das Launchpad. Allerdings wurde hier ein
Mikrocontroller MSP430G2452 mit 20 Pin Gehäuse verwendet, sodas 6
zusätzliche IO Pins verfügbar sind. (Die habe ich mir als Muster von TI
schicken lassen ;-) Die Besonderheit bei der Verwendung vom Low Power
Mode ist, das alle Rechenaktivität, die mit zB. 1 oder 16MHz
durchgeführt werden soll, innerhalb einer Interruproutine erfolgt.
Das eigentliche Hauptprogramm besteht also nach den notwendigen
Initialisierungsschritten aus einer leeren while(1); Schleife. Für diese
Schleife wird der CPU Takt abgeschaltet, während die Peripherie des
Kontrollers auf Ereignisse wie vom Timer oder dem ADC Wandler wartet.
DAnn wird die jeweilige Interruptroutine mit wieder eingeschalteten CPU
Takt abgearbeitet, am Ende der Interruptroutine schaltet die CPU wieder
in den taktfreien low power modus!
Das verwendete lcd ist ein lcd von Pollin. Es kann mit den 3.3V Pegeln
des MSP430 Controllers angesteuert werden, benötigt aber 5V
Betriebsspannung. Die kann vom TP1 des Launchpads abgegriffen werden.
Es wird ca. alle 5s mit dem ADC die interne Temperatur gemessen und auf
dem lcd ausgegeben. Die grüne LED blinkt alle 2.5s, die rote solange der
ADC mit der Wandlung beschäftigt ist.
Viel Spass beim Nachbau und erweitern der Funktionalität.
Hallo Axel,
ich habe mir ebenfals für 4,30 US$ (3,05 Euro) das LaunchPad gekauft,
nachdem ich noch nie mit dem MSP430 gearbeitet habe. Gestern Mittag
ist er mit Fedex angekommen...
Auf den MSP430 bin ich durch die Application Note zum BQ76PL536A-Q1
3 to 6 Series Cell Lithium Ion Battery Monitor and SecondaryProtection IC for EV HEV Applications gekommen.
Du hast ein gutes Review und einen guten Vergleich geschrieben.
Ich kann das nur bestätigen, aber ich ich bin mit den AVRs (und auch
PICs) nicht zufrieden. Bleibe entweder bei meinen 8051er oder gehe
zu den Cortex M3 und M0. Nunja, mein Büro hat noch keinen Tisch aber
ich werde den MSP430 schnellstmöglich ausprobieren, denn die TIs sind
durch ihren Stromsparmodus und Funktionsumfang SEHR interessant.
Grüße und viel Spaß mit dem LaunchPad
Michelle
Hallo,
sorry für mein Deutsch (ist nicht meine Muttersprache), möchte aber dich
nur kurz darauf hingewiesen dass due direckt für Launchpad eine freie
IDE/Entwicklungsumgebung (Editor + Compiler + Debugger) bekommen
kannst. Die freie Version von CCSTUDIO
(http://processors.wiki.ti.com/index.php/Download_CCS) kann bis 16 KB
Code generieren, und die MSP430 Value Line auf Launchpad hat ja nicht
mehr als 16 KB Flash.
Hast du auch GRACE
(http://focus.ti.com/docs/toolsw/folders/print/grace.html?DCMP=Grace&HQS=Other+BA+grace_b3_sw)
schon ausprobiert? Das ist eine schnelle Lösung für Anfänger die MSP430
zu programmieren und die Peripherie zu konfigurieren.
Es gibt auch genügend Informationen für Launchpad auf der Wiki-Seite
(http://processors.wiki.ti.com/index.php/LaunchPad_Redirect?DCMP=launchpad&HQS=Other+OT+launchpadwiki).
Viel Spass mit MSP430 und Launchpad.
-Leo-
Axel Schnell schrieb:> Zusammenfassen kann man also folgendes feststellen:>> MSP430 TI> Nachteile:> Unübersichtliche Bausteinbezeichnungen> keine einfach zu handhabende freie Entwicklungsumgebung mit Debugger> für Anfänger komplexe Konfigurationseinstellungen> wenig Informationen im Netz>
Axel Schnell schrieb:> keine einfach zu handhabende freie Entwicklungsumgebung mit Debugger
mspgcc und gdb mit eclipse:
http://springuin.nl/en/articles/launchpadwindows
Dass alle Einstellungen zur Laufzeit gemacht werden können, ist ein
Plus.
Die Produktkürzel sind bei Atmel auch nicht einleuchtender. Die
Dokumentation finde ich bei Atmel ebenfalls übersichtlicher, das mag
aber Gewöhnung sein. In die Peripherie muss man sich halt einarbeiten.
Insbesondere beim Timer fand ich die Doku nicht ausführlich genug.
Das LaunchPad mit ISP ist fantastisch billig und für kleine Projekte und
Experimente super (Interface zum PC), aber mit 2 kB Flash kommt man
nicht sehr weit.
Hallo Axel,
schöne Zusammenfassung die du da gemacht hast. Mittlerweile wird es
sicherlich schon eine kleine Fangemeinde zum Launchpad geben zumal nun
auch die 20 Pin DIL Typen zu haben sind. Vielleicht sollte man hier auch
einmal einen Blog zum Thema Launchpad aufmachen und ein Codesammlung
starten.
Anbei noch 2 Links zum Thema.
http://www.msp430launchpad.com/http://www.43oh.com/forum/
Hallo zusammen,
TI gibt sich zwar viel Mühe, aber mir schwirrt der Kopf vom ständigen
Englisch lesen.
Es ist wohl war, es gibt kaum Informationen im Netz. Mit meinem Arduino
Uno bin ich als Anfänger in kürzerer Zeit viel weiter gekommen (um nicht
zu sagen, mit dem Arduino konnte ich bereits erfolgreich ein Display
ansteuern, das es bei komputer.de mit passendem Breakout für ca. 5€
gibt, während ich beim Launchpad noch immer keine Ahnung habe, wie ich
z.B. eine externe LED anschließen und ansprechen kann).
Zum Arduino gibt es ein Forum, welches auch andere Sprachen als Englisch
unterstützt, zumal es auch viele Hobbybastler gibt, die auf ihrer
Homepage leicht verständliche Informationen bereitstellen. Wenn man nach
dem Launchpad googelt, braucht man jede Menge Glück, um Infos zum
Launchpad von TI zu bekommen und nicht zu diesem komischen
Midi-LED-Controller...
Und als Referenz fürs Launchpad muss man wohl die C-Referenz nehmen? Ich
habe keinen blassen Schimmer, wie ich da "umdenken" muss, um das aufs
Launchpad zu übertragen.
Wir sind hier auch auf die Idee gekommen, ein paar "Samples" bei TI zu
bestellen, die auch aufs Launchpad passen sollten. Mal schauen, ob das
bei diesem undurchsichtigen Shop-System von TI geklappt hat. Dann werde
ich auf jeden Fall das LCD-Beispiel ausprobieren. Ich bedanke mich schon
mal im Voraus dafür.
LG
Euer Anfänger
These sites are really good sites on launch pad board from texas
instruments.
I too developing new projects on Launch pad board
http://www.npeducations.com
static void lcd_nibble( unsigned char d ) // send upper 4 Bits of d
to lcd
{ // ignore lower 4 Bits of
d
LCD_D4 = 0; if( d & 1<<4 ) LCD_D4 = 1;
LCD_D5 = 0; if( d & 1<<5 ) LCD_D5 = 1;
LCD_D6 = 0; if( d & 1<<6 ) LCD_D6 = 1;
LCD_D7 = 0; if( d & 1<<7 ) LCD_D7 = 1;
LCD_E0 = 1; __delay_cycles( 1UL ); LCD_E0 = 0; // 1us
}
static void lcd_byte( unsigned char d ) // send all 8 Bits of d
to lcd in 2 nibbles
{
lcd_nibble( d ); __delay_cycles( 50UL ); // high nibble, wait 50us
lcd_nibble( d<<4 ); __delay_cycles( 50UL ); // low nibble, wait 50us
}
irgendwie verstehe ich das nicht ganz richtig.. schon klar der
bildschirm ist mit 4 leitungen angeschlossen. kann der lcd damit um wenn
zwei 4 bit zahlen hintereinander gesendet werden? setzt er die alleine
zusammen?
Hallo,
eine Frage hätte ich denn doch noch.
Im Code wird ja vor der while schleife der LMP3 betreten
Die Peripherals laufen ja mit ACLK und nicht mit MCLK.
Wenn nun durch einen Interrupt die jeweilige ISR ausgeführt wird steht
da nichts davon dass der LPM geändert wird.
Bedeutet das dass alles nur mit der langsamen ACLK läuft?
Das würde ja bedeuten dass die ganzen Delays viel zu länge wären da sie
ja nicht mit 1MHZ sondern mit 32kHZ oder so ausgeführt würden.
Danke für Aufklärung
Ich sehe keine while Schleife.
Mit dem LPM funktioniert so: Der interrupt legt das Statusregister und
damit den LPM auf den Stack. Dann wird die ISR im LPM0 ausgeführt und
mit dem RETI das Statusregister vom Stack restauriert. Der MSP ist dann
wieder im LPM vorm interrupt.
Bei rein interrupt gesteuerten Programmen braucht man beim MSP keine
Endlosloop im Hauptprogramm.
Ich will es gerade nachbauen, habe aber ein Problem.
Wie bekommt man das 10er Flachband an diese winzig kleinen Anschlüsse?
Hab mir schon die dazugehörige Buchse gekauft doch da kommen auch nur
mini leitungen raus..
ein Foto von unten wäre sehr hilfreich..
Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.
Wichtige Regeln - erst lesen, dann posten!
Groß- und Kleinschreibung verwenden
Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang