Forum: Mikrocontroller und Digitale Elektronik MSP430 Performance im Vgl. zu AVRs


von Tom M. (Gast)


Lesenswert?

Hallo


Seit einiger Zeit liebäugle ich mit den MSP430 MCUs, da sie 16 bittig 
(ALU) sind und mit linearem Adressraum aufwarten und mit mehr internem 
RAM glänzen. Das sind genau die Dinge, die ich bei den AVRs etwas 
vermisse.

Ausserdem scheint mir sind die MSP430 doch wesentlich weniger Komplex 
als die ARM/Cortexe & Co, da trau ich mich als Hobbyist erstmal nicht 
ran.

Drum mal meine Frage an euch, wennihr AVRs und MSPs kennt: Wie schlagen 
sich die MSPs im Vergleich zu den AVR, rein performance mässig? Gibt es 
wesentliche Nachteile, z.B. beim ADC (Samplerate, Genauigkeit), bei der 
ALU (HW Multiplikator drin?)... Was fällt euch da spontan ein?

Ist es richtig, dass alle MSPs einen UART bootloader mit drauf haben 
(der über tricksige Aussenbeschaltung aktiviert wird)? Damit wäre eine 
weitere Einstiegshürde für mich abgebaut, USB/UART Konverter hab ich 
rumliegen.

Bin gespannt auf eure Erfahrungen... :)


Danke
Tom

von Stefan H. (stefan_h16)


Lesenswert?

Tom M. schrieb:
> Ausserdem scheint mir sind die MSP430 doch wesentlich weniger Komplex
> als die ARM/Cortexe & Co, da trau ich mich als Hobbyist erstmal nicht
> ran.

Als Hobbyist sag ich folgendes:Wenn man bei den kleinen Cortex-M0 von 
ARM anfängt, erschlägt die Komplexität schon nach kurzer Zeit nicht 
mehr. Und wenn man mit fertigen Systemen wie LPCXPresso beginnt (knapp 
25Euro) bekommt man einen Debugger + Eclipse basierende C 
Entwicklungsumgebung fix und fertig vorgesetzt und hat mit den Haufen 
mitgelieferten Beispielen kaum ein Problem mit dem Umstieg. Das erste 
Programm läuft genauso schnell wie mit dem MSP430 Launchpad von TI. 
Dafür bekommt man ein Haufen Leistung für sehr wenig Geld (z.b. LPC1113 
(24KB Flash, 8KB RAM, bis zu 50 MHZ Clock) für knapp einen Euro pro 
Stück, auch als Hobbyist).

Tom M. schrieb:
> Ist es richtig, dass alle MSPs einen UART bootloader mit drauf haben
> (der über tricksige Aussenbeschaltung aktiviert wird)? Damit wäre eine
> weitere Einstiegshürde für mich abgebaut, USB/UART Konverter hab ich
> rumliegen.

Ob das stimmt, weiß ich nicht. Zum Programmieren und Debuggen(!) kann 
man aber das Launchpad von TI bestellen, gibts für 4,xx Euro zu kaufen. 
Da braucht man keinen Bootloader.

von ./. (Gast)


Lesenswert?

Tom M. schrieb:
> Ist es richtig, dass alle MSPs einen UART bootloader mit drauf haben
> (der über tricksige Aussenbeschaltung aktiviert wird)?

Nennt sich: BSL und ist bei allen (bis auf Exoten) verfuegbar.
Nachteil: Er loescht auch alle kalibrierten Werte im Info-flash.

von Tom M. (Gast)


Lesenswert?

Stefan H. schrieb:
> Als Hobbyist sag ich folgendes:Wenn man bei den kleinen Cortex-M0 von
> ARM anfängt, erschlägt die Komplexität schon nach kurzer Zeit nicht
> mehr.

Die LPCXPresso sehen wirklich toll aus, für ~25 Mücken kann ich damit 
loslegen? Das muss ich mir einfach mal antun. :D Habe bisher nur teure 
Dev-/Prototype Boards gesehen, wo dann noch ein JTAG weiswasich benötigt 
wird - einfach mal zu Antesten sind da schnell 100+ $$$ weg, und das ist 
mir doch etwas viel für's Reinschnuppern.

Stefan H. schrieb:
> Zum Programmieren und Debuggen(!) kann
> man aber das Launchpad von TI bestellen, gibts für 4,xx Euro zu kaufen.
> Da braucht man keinen Bootloader.

Hab schon vom Launchpad gelesen, aber die da mit gelieferten MCUs sind 
extrem abgespeckt (sehr wenig Flash/RAM). Das man das Launchpad als 
Debugger verwenden kann, wusste ich nicht.

von Horst H. (horst_h44)


Lesenswert?

Ich kenne den MSP430 sehr gut und er ist wegen seiner klaren Architektur 
sehr leicht zu verstehen und zu programmieren. Jeder der ihn einmal 
programmiert hat ist begeistert von den Leistungsdaten und einfachen 
Interrupt-Programmierung. Die 16Bit Register zu Register Architektur ist 
gerade für C-Compiler sehr effektiv. Die geringe Verlustleistung im 
Betrieb ist oft sehr hilfreich. Kostengünstige Starterkits und viele 
Typen zur Auswahl gibt es auch.

Am Besten ausprobieren wie sich ein erstelltes AVR-Programm mit dem 
MSP430 realisieren lässt und so etwas besser beurteilen kann ob man gut 
damit zurecht kommt. Übrigens, was kaum einer weiß ist, dass der MSP430 
in Deutschland entwickelt wurde.

von Andreas B. (andreas_b77)


Lesenswert?

Tom M. schrieb:
> Hab schon vom Launchpad gelesen, aber die da mit gelieferten MCUs sind
> extrem abgespeckt (sehr wenig Flash/RAM).

Bei den ursprünglichen Launchpads ja, in der aktuellen Revision sind 
größere MSP430 mitgeliefert, 20-Pinner mit 16k/512 und mit 8k/256 
Flash/RAM.

von Frank K. (fchk)


Lesenswert?

Tom M. schrieb:

> Seit einiger Zeit liebäugle ich mit den MSP430 MCUs, da sie 16 bittig
> (ALU) sind und mit linearem Adressraum aufwarten und mit mehr internem
> RAM glänzen. Das sind genau die Dinge, die ich bei den AVRs etwas
> vermisse.
>
> Ausserdem scheint mir sind die MSP430 doch wesentlich weniger Komplex
> als die ARM/Cortexe & Co, da trau ich mich als Hobbyist erstmal nicht
> ran.

Wenn Du nach einer AVR-Alternative suchst, schau Dir ansonsten auch mal 
die PIC24/dsPIC an. Die sind deutlich besser verfügbar, und die 
Peripherie ist leistungsfähiger.

fchk

von Roland H. (batchman)


Lesenswert?

Tom M. schrieb:
> Seit einiger Zeit liebäugle ich mit den MSP430 MCUs, da sie 16 bittig
> (ALU) sind und mit linearem Adressraum aufwarten und mit mehr internem
> RAM glänzen. Das sind genau die Dinge, die ich bei den AVRs etwas
> vermisse.

Was verstehst Du unter "linear"?

Wenn ich richtig informiert bin, dann wird es jenseits der 64K und vor 
allem jenseits der 128K Code für die AVRs mit GCC ungemütlich.

Beim MSP430
1
The MSP430X design overcomes the 64K bytes memory barrier by increasing the Program Counter (PC) and register width to 20‐bits.  Despite no memory paging being involved, the sizes of 
2
some MSP430X instructions are considerably larger than the original MSP430.  For example, when 
3
the large memory model is used, a double operand formatted instruction can take 8 bytes rather 
4
than 6 (a 33% increases):

Davon bemerkt man nichts direkt, aber irgendwie elegant ist das nicht.

Der stm32f407 (Cortex-M4) hat nominell 192KB RAM - unterteilt in zwei 
nicht "nebeneinander" liegende Bereiche zu 128 und 64 KB. Der GCC 
unterstützt dies nicht automatisch. Also mit "das RAM linear 
durchadressieren" ist da auch nichts. Verglichen den den beiden anderen 
is t das aber ein echtes Luxusproblem.

Das mit "mehr RAM" ist relativ. Die MSP430 benötigen mehr RAM im 
Vergleich zu den AVR, das ist zumindest meine Erfahrung, vermutlich ein 
Tribut an die 16-Bit. Das bemerkt man sehr deutlich bei den 
2k-Winzlingen (attiny2313 vs. msp430g2211/msp430g2231 - alle mit 128 
Byte RAM). Wenn es auf dem attiny lief, läuft es u. U. auf dem msp 
nicht. Der benötigt mehr für den Stack.

Welcher der MSP430 hat denn "viel" RAM? "Viel" bedeutet bei mir ">= 
32KB".

> Gibt es
> wesentliche Nachteile, z.B. beim ADC (Samplerate, Genauigkeit), bei der
> ALU (HW Multiplikator drin?)
1
The MSP430 does not have multiply instruction (MSP430 document slaa329, reference 1).  To carry 
2
out multiplication either a memory mapped hardware multiplier is used, or the multiply operation 
3
has to be handled by software using add and shift.  Even if a hardware multiplier is present the 
4
memory mapped nature of the multiplier results in the additional overhead of transferring data to 
5
and from the external hardware.  In addition, using the multiplier within an interrupt handler could 
6
cause existing data in the multiplier to be lost.  As a result, interrupts are usually disabled before a 
7
multiply operation and the interrupt is re‐enabled after multiplication is completed.  This adds 
8
additional software overhead and affects interrupt latency and determinism.

Im Vergleich zum Cortex nicht so der Brüller.

Tom M. schrieb:
> Hab schon vom Launchpad gelesen, aber die da mit gelieferten MCUs sind
> extrem abgespeckt (sehr wenig Flash/RAM). Das man das Launchpad als
> Debugger verwenden kann, wusste ich nicht.

Das funktioniert wunderbar. Deshalb habe ich mich auch nie für die "boot 
loader" der MSP430 interessiert habe. Das lohnt einfach nicht. Irgendwo 
habe ich kürzlich gelesen, dass die "boot loader" aber nicht auf den 
UART-Pins liegen, sondern auf anderen Pins. Das wäre dann im Vergleich 
zu Renesas RX und den Cortexen nicht so toll.

Nun aber auch etwas positives im Vergleich zum AVR-GCC: PROGMEM gibt es 
nicht mehr, ein "const" genügt, und der Compiler optimiert auch noch 
Strings, indem er "Hallo Welt" und "Welt" nur 1x im Flash ablegt. Das 
schaffen aber auch die ARMs, Renesas RX, PIC32. Also eigentlich alle, 
außer den AVRs.

Auch schön: Der msp430g2553 hat einen "fractional baud rate generator". 
Da kommt man bei 16 MHz auch auf 115k baud rate.

Im Vergleich zum AVR ist der von GCC erzeugte Code im Bereich von 32KB 
Applikationen wesentlich kompakter: 27KB (msp430) vs. 37KB 
(atmega128rfa1). Das ist ein dramatischer Unterschied.

Die Spitze hält allerdings ein Cortex-M3 (lpc1343) mit 26KB. Renesas RX 
liegt bei 28KB. Der Flop ist ein PIC32 mit 41KB - der einzige, der 
schlechter als die at(x)megas abschneidet. Das liegt wohl daran, dass 
ich den "freien" mips32-elf-gcc" verwende, also keinen Compiler von 
Microchip.

Tom M. schrieb:
> Die LPCXPresso sehen wirklich toll aus, für ~25 Mücken kann ich damit
> loslegen? Das muss ich mir einfach mal antun. :D Habe bisher nur teure
> Dev-/Prototype Boards gesehen, wo dann noch ein JTAG weiswasich benötigt
> wird - einfach mal zu Antesten sind da schnell 100+ $$$ weg, und das ist
> mir doch etwas viel für's Reinschnuppern.

Die ARMs haben preislich und leistungsmäßig die besten Eval-Boards. Das 
lpcxpresso ist sogar relativ "teuer".

Wie wolltest Du die größeren MSP430 testen? Ich habe mir extra für den 
msp430f6736 einen Adapter bei TI bestellt, weil ich kein günstiges Board 
gefunden hatte, auf welchem ein MSP430 mit >= 4 Timer enthalten war. Das 
war relativ teuer.

Horst H. schrieb:
> Ich kenne den MSP430 sehr gut und er ist wegen seiner klaren Architektur
> sehr leicht zu verstehen und zu programmieren. Jeder der ihn einmal
> programmiert hat ist begeistert von den Leistungsdaten und einfachen
> Interrupt-Programmierung. Die 16Bit Register zu Register Architektur ist
> gerade für C-Compiler sehr effektiv. Die geringe Verlustleistung im
> Betrieb ist oft sehr hilfreich. Kostengünstige Starterkits und viele
> Typen zur Auswahl gibt es auch.

Der Text passt auch auf die ARMada, Renesas RX und PIC32, wenn man die 
16-Bit durch 32-Bit ersetzt. Es kann gut sein, dass die MSP430 im "low 
power"-Bereich besonders gut dastehen, ansonsten sehe ich keinen Grund, 
nicht auf eine der genannten 32-Bit Plattformen zu wechseln.

Das mit der "klaren" Architektur kann ich nicht bestätigen. Ich finde 
beispielsweise, dass das "clock setup" zwischen den verschiedenen MSP430 
erheblich differiert und reichlich komplex ist.

Für gehören auch die "header files" zur Architektur. Ich werde mich nie 
an folgendes gewöhnen:
1
TA0CTL = TASSEL_2 | ID_3      | MC_1;
2
TA0CTL = TASSEL1  | ID1 | ID0 | MC0 ;

Beide bewirken das gleiche, aber einmal einen "underscore" zuviel oder 
zuwenig ...

Leider sind die Bit-Positionen aber nicht separat definiert - also das, 
was ich benötige, gibt es nicht.

Horst H. schrieb:
> Übrigens, was kaum einer weiß ist, dass der MSP430
> in Deutschland entwickelt wurde.

Doch. Bin ja bei der Wikipedia-Lektüre dabei fast vom Stuhl gefallen. 
War für mich der Grund, mich damit zu beschäftigen :-)

Alles zusammen wüsste ich - außer dem "low power"-Bereich und dem 
patriotischen - keinen Grund, nicht auf eine der 32-Bit-Plattformen zu 
wechseln.

von Jörg S. (joerg-s)


Lesenswert?

Roland H. schrieb:
>
1
> TA0CTL = TASSEL_2 | ID_3      | MC_1;
2
> TA0CTL = TASSEL1  | ID1 | ID0 | MC0 ;
3
>
> Beide bewirken das gleiche, aber einmal einen "underscore" zuviel oder
> zuwenig ...
Gibt immer verschiedene Wege was zu programmieren, das ist jetzt nicht 
wirklich überraschend :)
Will man jedes Bit einzeln setzen nimmt man die untere Schreibweise, 
will man lieber "alles auf einmal" setzen, nimmt man die obere. Ist doch 
nett wenn man sich das aussuchen kann..

> Leider sind die Bit-Positionen aber nicht separat definiert - also das,
> was ich benötige, gibt es nicht.
Lass mich raten, du willst diese grausige "AVR Schreibweise" (1<<x) 
weiter machen, richtig?

von Jörg S. (joerg-s)


Lesenswert?

Tom M. schrieb:
> Ist es richtig, dass alle MSPs einen UART bootloader mit drauf haben
> (der über tricksige Aussenbeschaltung aktiviert wird)? Damit wäre eine
> weitere Einstiegshürde für mich abgebaut, USB/UART Konverter hab ich
> rumliegen.
Der Vorteil vom MSP ist ja eher das JTAG Interface den eigentlich alle 
drauf haben. Wenn du Parallelport nutzt, hast du so einen JTAG Adapter 
mit Teilen für'n paar Euro schnell selbst gebaut. Dann geht zwar kein 
SBW, aber dafür kostet es halt so gut wie nix :)

von Roland H. (batchman)


Lesenswert?

Jörg S. schrieb:
>> Leider sind die Bit-Positionen aber nicht separat definiert - also das,
>> was ich benötige, gibt es nicht.
> Lass mich raten, du willst diese grausige "AVR Schreibweise" (1<<x)
> weiter machen, richtig?

Das ist keine "AVR-Schreibweise". Das ist so möglich bei AVR, ARM (LPC, 
STM), RX, PIC32 - nur nicht bei MSP430. Ob das nun besser oder 
schlechter ist, sei dahingestellt. In jedem Fall ist es anders.

Bei "(0 << x)" und "(1 << y)" versteht jeder, was gemeint ist.
Bei den beiden MSP430-Varianten sieht man auf den ersten Blick nicht, 
welche Variante welchen Ansatz darstellt. Das mag keine Rolle spielen, 
wenn man ausschließlich auf MSP430 unterwegs ist.

Wobei die TI-Beispiele m. W. anstelle des "|" ein "+" verwenden. Das 
wird dann lustig, wenn das gleiche Bit mehrfach vorkommt.

von Kindergärtnerin (Gast)


Lesenswert?

Das ist wieder ein Fall für die Kindergärtnerin.
>>> Leider sind die Bit-Positionen aber nicht separat definiert - also das,
>>> was ich benötige, gibt es nicht.
Dann definiere es halt. Einmal im seperaten Header ist es immer 
verfügbar. Besser mal etwas selber schreiben, als immer über die 
Ergebnisse Anderer herzuziehen.
(Beim IAR gibt es beide Varinaten im Baustein Header)

> Bei "(0 << x)" und "(1 << y)" versteht jeder, was gemeint ist.
> Bei den beiden MSP430-Varianten sieht man auf den ersten Blick nicht,
> welche Variante welchen Ansatz darstellt. Das mag keine Rolle spielen,
> wenn man ausschließlich auf MSP430 unterwegs ist.
Warum sollte shiften auf dem MSP nicht funktionieren? Wenn es Dir besser 
gefällt, dann schreibe es halt so.

von Jörg S. (joerg-s)


Lesenswert?

Roland H. schrieb:
> Das ist so möglich bei AVR, ARM (LPC, STM), RX, PIC32 - nur nicht bei
> MSP430.
Das ist eine Compiler Frage, keine Controller Frage.

> Ob das nun besser oder schlechter ist, sei dahingestellt.
Ich find es jedenfalls schlecher alles mit unnötigen shifts zuzuknallen.

> Bei den beiden MSP430-Varianten sieht man auf den ersten Blick nicht,
> welche Variante welchen Ansatz darstellt.
Mag sein, aber es erlaubt halt mehrere Bit auf einmal zu setzen (wenn 
man will).

> Wobei die TI-Beispiele m. W. anstelle des "|" ein "+" verwenden. Das
> wird dann lustig, wenn das gleiche Bit mehrfach vorkommt.
Wie will das denn mehrfach vorkommen?

von Dosmo (Gast)


Lesenswert?

Ist schon eine Weile her, daß ich mit dem MSP430 gearbeitet hab, aber 
damals war er vorallem sehr energiesparend, d.h. sehr gut für 
Batteriegeräte.
Was mich am AVR immer ein wenig gestört hat, ist, daß die Peripherie 
(ADC, UART usw.) recht einfach gehalten sind. Da sind 16Bitter wie 
MSP430 oder PIC24 besser aufgestellt.
Ich persönlich mag den PIC24 (16 Bit) gerne, man bekommt mit dem PicKit3 
für ca. 70.- Euro einen guten Debugger und von Microchip einen 
kostenlosen C-Compiler. Der PIC24 hat übrigens mit dem 8Bit-PIC nichts 
am Hut, also wer den 8Bit-PIC nicht mag (so wie ich), kann sich trotzdem 
mit dem 16Bit-PIC anfreunden. Gibt's übrigens bei Reichelt im 
DIL28-Gehäuse.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Jörg S. schrieb:
> Das ist eine Compiler Frage, keine Controller Frage.

Das ist noch nicht mal eine Compilerfrage, sondern nur eine der 
Strukturierung der Headerdateien, der Unterschied liegt nur darin, ob 
man die Nummer oder den Wert eines Bits angibt.

Die Kombination mehrerer Bits zu einem Ausdruck ist eine 
Komforterweiterung, die sich direkt auf die Tabellen im jeweiligen 
Family User's Guide beziehen, mit denen die Kombinationsmöglichkeiten 
für Peripheriefunktionen beschrieben werden.

Diese Kombinationen kann man nutzen, man muss aber nicht.

Roland H. schrieb:
> Auch schön: Der msp430g2553 hat einen "fractional baud rate generator".
> Da kommt man bei 16 MHz auch auf 115k baud rate.

Bereits die UART von MSP430-Veteranen wie 'F16x benötigt keine 
sogenannten "Baudratenquarze".

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.