Forum: Mikrocontroller und Digitale Elektronik Atmel 32Bit/ARM mit FPU


von Ano N. (oorim)


Lesenswert?

Servus

Ich bin derzeit dabei ein AHRS (also eine Art künstlicher Horizont) zu 
entwickeln/bauen.
Da ich mit der Mathematischen Seite recht weit bin möchte ich parallel 
Anfangen mir um die praktische realisierung Gedanken zu machen. Was 
dabei noch fehlt ist eine passende CPU.

Nun war meine Überlegung, dass eine Leistungsfähige CPU mit FPU für die 
Matrixberechnungen und die Signalverarbeitung (Kalman- und ggf. FIR 
Filter) nicht schlecht wäre. Oder liege ich dabei falsch? Eine FPU 
sollte doch in diesem Kontext die genauigkeit erhöhen.

Aber welche nehm ich da? Ich hab mich bei Atmel ein wenig umgesehen (ich 
bin ein wenig Atmel addicted ...) und habe gesehen das es durchaus 32Bit 
mit FPU gibt. Allerdings finde ich bei denen bei den 32bitern keine 
Datenblätter mehr Oo.
Würde ich denn mit einem 32Bit Typ L oder B glücklich werden? Oder gibt 
es einen noch löt- und leistbaren ARM mit FPU von Atmel (ich hab bei den 
ARM nichts zum Thema FPU gesehen).

Ich bin für Ratschläge Dankbar :)

Grüße

von Tropenhitze (Gast)


Lesenswert?

Um Deine Frage nicht wie gewünscht zu beantworten, es gibt den SH7216 
und den R32C und den RX610. Zwar alle nicht ARM und nicht Atmel sondern 
Renesas, aber mit FPU + Flash + RAM +++ :-)

von Ano N. (oorim)


Lesenswert?

Erzähl mir mehr davon. Ich mein, ich kann ja auch mal über den 
Tellerrand hinweg sehen.

Was ich vielleicht noch erwähnen sollte: Das Teil sollte gut erhältlich, 
leicht Programmierbar (also ich möchte kein Entwicklungsgerät für 
mehrere 100€ kaufen müssen) und eine günstige und gute Toolchain haben. 
JTAG wäre natürlich Zauberhaft ...

von Tropenhitze (Gast)


Lesenswert?

http://www.msc-toolguide.com/renesas/tool-family/rsk/renesas-starter-kit-plus-for-rx610.html

Das wäre das günstigste Paket. Dazu gibt es einen GCC bei www.kpit.com 
für kostenlos.
Zu höheren Kosten gibt es auch ein SH7216 RSK mit E10A. Der rechnet 
sogar mit double Genauigkeit (64 bit). Bevor Du über die Kosten 
grübelst, warte ab, ob es überhaupt günstigere Alternativen gibt.

Soweit ich weiß, gibt es keinen 'embedded' ARM mit Flash, RAM, IO und 
FPU. Aber ich lerne gerne dazu.

von Ano N. (oorim)


Lesenswert?

Anders rum gefragt: Welche möglichkeit hab ich denn 
Matrix-Multiplikationen mit besserer Leistung und genauigkeit zu machen 
(auser FPGA und DSP)? Sollte eben noch Löt- und Layoutbar sein. Der 
Renesas sieht noch lötbar aus. Den schau ich mir mal an.
Ein EvalKit kommt halt eigentlich nicht in Frage weil ich ein eigenes, 
kleines Target am zaubern bin.

von Hans (Gast)


Lesenswert?

>Anders rum gefragt: Welche möglichkeit hab ich denn
>Matrix-Multiplikationen mit besserer Leistung und genauigkeit zu machen
>(auser FPGA und DSP)? Sollte eben noch Löt- und Layoutbar sein. Der
>Renesas sieht noch lötbar aus. Den schau ich mir mal an.
>Ein EvalKit kommt halt eigentlich nicht in Frage weil ich ein eigenes,
>kleines Target am zaubern bin.

Was muss der uC denn noch so nebenbei machen? Ein Flugzeug
steuern? Oder "nur" das AHRS durchrechnen?
Wie oft muss das pro Sekunde durchgerechnet werden?
Wie gross sind die Matrizen? Sind 32bit ausreichend? Kommt sonst
noch etwas ausser Multiplikationen(Anzahl/s?) und Additionen (Anzahl/s?)
pro Durchlauf dazu?

Wenn ich das Problem pragmatisch angehen müsste, würde ich mir
(als Entwicklungsumgebung) einen günstigen (ARM) NSLU2 auf Ebay
schiessen und mittels einer  Linux-basierten i386-Cross-
entwicklungsumgebung einen Prototypen machen; dann hätte man
wenigstens Durchsatzzahlen an der Hand, über die
man diskutieren könnte.... :-) Ein Ausgangspunkt wie "ich brauche
pro Durchlauf mit a Multiplikationen und b Additionen mit der
Technologie XY und Taktrate Z mit/ohne FPU (z.B.) 100ms und
muss auf 1ms runter", macht die Abschätzung einfach(er).

VG,
Hans

PS: Ein "eigenes Target zaubern" ohne Test in einer vorgelagerten
architekturkongruenten Entwicklungsumgebung ist sehr mutig!

von Ano N. (oorim)


Lesenswert?

PS: Ein "eigenes Target zaubern" ohne Test in einer vorgelagerten
architekturkongruenten Entwicklungsumgebung ist sehr mutig!

Wie meinst du das? Mit Target mein ich entsprechend die Platine mit 
Sensorik, µP und kram. Falls das nicht 100% klar war.


Ich kann noch gar nicht richtig abschätzen wieviel ich brauch und 
wieviel nicht. Ich probier aber gerne neues -> deshalb such ich eine 
32Bit CPU ("Datendurchsatz") mit FPU um vergleiche ziehen zu können 
zwischen 8Bit (mega128 zB) und einem 32bit mit/ohne FPU :D

Klingt alles ein bisschen dämlich aber ... ist halt so. Ich möchte das 
sehr viel später irgendwann auch mal auf einen FPGA mit Softcore braten, 
das ist aber Zukunftsmusik.

Die CPU selbst soll in diesem Kontext nur das AHRS berechnen und einen 
Kompass sowie eben die Lage ausgeben. Berechnen tu ich - bis jetzt sieht 
der Plan so aus, die Algorithmik ist noch nicht fertig - über 
Quaternionen und Kalman-Filter.

von 900ss (900ss)


Lesenswert?

Ano Nym schrieb:
> Nun war meine Überlegung, dass eine Leistungsfähige CPU mit FPU für die
> Matrixberechnungen und die Signalverarbeitung (Kalman- und ggf. FIR
> Filter) nicht schlecht wäre. Oder liege ich dabei falsch? Eine FPU
> sollte doch in diesem Kontext die genauigkeit erhöhen.

Die FPU erhöht nicht die Genauigkeit, sie erhöht nur die Geschwindigkeit 
deutlich bei Floatingpoint-Operationen. Wenn du keine FPU hast, wird die 
Berechnung in SW gemacht, genauso genau, aber eben langsamer.

Es gibt da eine Ausnahme, da du oben irgendwo den Atmega128 angesprochen 
hast. Bei denen wird bei double floating point trotzdem mit single 
precision gerechnet jedenfalls wenn man die Standard AVR Library nutzt. 
Dort würdest du eine höhere Genauigkeit mittels FPU bekommen, da dann 
double presision möglich ist. Allerdings kenn ich keine FPU, die du an 
den AVR klemmen kannst.

Da du die Rechenleistung nicht genau kennst, die du benötigst, würde ich 
mir erstmal ein kleines günstiges ARM-Evalboard kaufen (20€) und da die 
Algorithmen implementieren. Dann kannst du Messungen machen, ob die 
Rechenleistung ausreicht. Wenn nicht, dann nimmst du etwas mit einer 
FPU.
Du kannst z.B ein Cortex-M3 Board (ca. 20€) nehmen. Die haben meistens 
einen Bootloader für die serielle Schnittstelle auf dem Chip. Dazu eine 
kostenlose GNU-Toolchain. Dann kannst du für 20€ alles probieren.
Diese z.B.: http://www.futurlec.com/ET-STM32_Stamp.shtml
Achtung: Preis in $ dort.
Ich habe das Board hier, es ist prima. Der Shop ist auch OK.

von Ano N. (oorim)


Lesenswert?

Danke. Wieder was gelernt. Ich denke mal die Performance von dem STM32 
reicht aus, der wird in dem Kontext auch öfter benutzt. 20€ für das Eval 
Board sind auch cool - seh ich das richtig das ich den dann über RS232 
Programmieren kann? Wenn ja wäre das natürlich noch cooler. Dann werd 
ich das zum Testen nehmen auch wenn ich nicht der Fan von Eval Boards 
bin. 90 MIPS klingt eigentlich so als wenn das kein Problem mit der 
Berechnung haben sollte.

Bezüglich FPU: Wieder was gelernt. Dankeschön! Hatte mich mit der 
Thematik noch nicht richtig befasst und bin jetzt auch schlauer :D

Dann werde ich die Sachen wohl damit Testen.

von 900ss (900ss)


Lesenswert?

Ano Nym schrieb:
> Danke. Wieder was gelernt. Ich denke mal die Performance von dem STM32
> reicht aus, der wird in dem Kontext auch öfter benutzt. 20€ für das Eval
> Board sind auch cool - seh ich das richtig das ich den dann über RS232
> Programmieren kann? Wenn ja wäre das natürlich noch cooler.

Ja, bei dem Board kannst du über die RS232 Programme flashen.
Hier findest du das Datenblatt, was auf dem Board (oben) verbaut ist.
http://www.st.com/mcu/devicedocs-STM32F103RE-110.html

Das Programm, um vom PC aus Porgramme auf das Ding zu laden, gibt es 
dort auch irgendwo (Stichwort Bootloader).

Ich verwende als Toolchain Codesourcery-Lite, kost nix. Yagarto sollte 
es auch tun, habe aber hier ein paarmal von Problemen bei floating point 
gelesen, weiß aber nicht mehr genau, womit die zusammenhingen. Also ich 
kann grad nicht sagen, ob das Problem bei Yagarto oder zwischen den 
beiden Ohren vor dem Bildschirm bestand ;-)
Du solltest dich dann auch etwas mit Make, GNU-Toolchain u.s.w 
auskennen. Eine "Rundum-Sorglos-IDE" gibt es nämlich nicht dabei. Wenn 
du Geld dafür ausgibst, dann sicher.

Beispiele zum Starten findest du bei Martin Thomas:
http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/

Der ist auch immer sehr hilfsbereit, wenn es Probleme gibt (das ist 
jetzt ein verstecktes 'danke schön' an Thomas). Ich bin mit seinen 
Beispielen auch mit dem ARM angefangen. Dann irgendwann Cortex-M3.

Wenn du noch etwas mehr in die Entwicklungsumgebung investieren 
möchtest, dann kostet ein Debug-I/F auch nicht viel. Ca. 60 Euro 
(private none commercial license) für den J-Link von Segger, da ist dann 
auch die SW dabei. Du kannst auch einen Olimex-ARM-JTAG-Key in 
Verbindung mit OpenOCD nutzen (oder auch den Armontec-Key). Ich 
persönlich habe den J-Link hier da er meines Erachtens mehr Freude 
macht. Ein Armontec kostet auch schon 50 Euro (meine ich) und man hat 
die Konfiguration von OpenOCD am Hals, was kein Zuckerschlecken ist.

Edit: Ergänzung... Ein kleines Manko hat das Board. Das JTAG-I/F ist bei 
dem Board nicht auf eine spezielle "JTAG-Stiftleiste" geführt, sondern 
die notwendigen Signale liegen an den langen Stiftleisten. Du mußt dir 
dann einen kleinen Adapter bauen, dann kann man auch über JTAG debuggen 
mit dem Board (hab ich so gemacht)..

von Ano N. (oorim)


Lesenswert?

Durch die Stiftleisten brauch ich ja sowieso einen Adapter aber das ist 
kein Problem.

Makfiles versteh ich solangsam, im Moment bin ich auch in einem Projekt 
wo die Makefiles sehr zickig sind. Nervt wie die Sau aber soviel 
versteckte Geheimnisse stecken da scheinbar nicht drin.

Ahm ja. Ich würds erstmal mit dem 20€ Teil probieren und wenn ich merk 
das ist cool setz ich auf JTAG und mehr ;) Dankeschön. Das hilft schon 
mal sehr weiter.

Und ich glaub mit den 90MIPS hab ich auch keine Geschwindigkeitsprobleme 
(hab ich auhc so nicht glaub ich ...)

Dankeschön!

von 900ss (900ss)


Lesenswert?

Ano Nym schrieb:
> Dankeschön!

Bitte schön :-)

Als Alternative, weil höherer CPU Takt. Auch schön klein, aber teurer:
http://mbed.org/

Gibt z.B. hier:
http://elmicro.com/de/mbed-nxp-lpc1768.html

von Tropenhitze (Gast)


Lesenswert?

Wenn Du noch garnicht weißt, was Du letzlich brauchst, erstelle doch ein 
Programm für einen AVR. Das sollte schnell und einfach gehen, wenn erst 
einmal die Rechenroutinen reichen.
Dann kannst Du sehen, ob Dir das reicht oder ob es schneller gehen soll. 
Brauchen Deine Berechnungen eine Beschleunigung um den Faktor 10, dann 
nimm einen ARM.
Wird der Beschleunigungsfaktor 100 benötigt, nimm einen SH7216 :-)

von Ano N. (oorim)


Lesenswert?

Danke für die Zahlreichen antworten.

Ich werde mir erstmal einen Matlab Code erstellen, daraus einen C Code 
und aus dem entstehenden ASM Code berechne ich mir die theoretische Zeit 
die ich zur berechnung brauche. Dann brat ich das vll mal auf einen 
Atmega128 und schau was passiert und mess mit einem Oszilloskop. Unter 
der Vorraussetzung das ich dann noch Student bin oder in meinem 
Praktikum messen darf ...

Dann weiß ich ja was ich brauch und wo es noch klemmt und dann schau ich 
mir die Prozessoren die hier genant wurden noch einmal an. Dankeschön!

von Stefan Kunz (Gast)


Lesenswert?

eine FPU ist bei Berechnungen immernoch langsamer als Berechnungen mit 
ganzen Zahlen (Fix Kommar) ebenso haben floats auch nicht mehr 
Informationsgehalt. Float Zahlen sind einfach nur da um für den Menschen 
vor der Maschine "einfacher" zu rechnen.

Und zu Matlab und C-Code.
Matlab C-Code ist zwar schön aber defenetiv unperformant. Er kann 
höchstens kleinen Anhaltspunkt nehmen.

Ich würd die Berechnungen ohne floats machen, selbst mit FPU bekommt man 
so min. einen Geschwindigkeitsgewinn um Faktor 4.

von Purzel H. (hacky)


Lesenswert?

Abhaengig von den Anzahl Messungen pro Sekunde koennt ich mir sogar 
vorstellen, einen Mega32 zu verwenden.

von Ano N. (oorim)


Lesenswert?

Naja den C Code tipp ich logischerweise selbst und verwende nicht den 
der aus Matlab kommt ;)

Ich erhöhe aber doch mit Float die Genauigkeit (es ist ja ein 
unterschied zB bei 2*pi ob ich 2*3 oder 2*3,14 oder 2*3,14159 rechne). 
Die FPU macht dann immer noch einen Unterschied in der Geschwindigkeit. 
Int oder gleich Binär rechnen macht das ganze natürlich schneller. (Ja 
man könnte die Float auch Binär zusammenbauen)

von guest (Gast)


Lesenswert?

Zumindest der Zahlenbereich ist bei float größer.
32 bit float erstreckt sich über +-10^38, 32 bit int über +-2^31 und das 
ist schon ein gewaltiger Unterschied. Erst mit 128 bit int kommt man in 
den Bereich von 10^38.
Wenn man viel rechnen muss, wartungsfreundlich programmieren möchte und 
eine FPU hat macht es auch Sinn sie auch zu nutzen weil sie einem ganz 
einfach Arbeit abnehmen kann.

P.S.: Von Atmel sind AVR32 MCs mit FPU angekündigt. Wann die kommen ist 
noch nicht raus, MC mit DSP Befehlen UND FPU klingt aber gut.

von Tropenhitze (Gast)


Lesenswert?

>eine FPU ist bei Berechnungen immernoch langsamer als Berechnungen mit
>ganzen Zahlen (Fix Kommar) ebenso haben floats auch nicht mehr
>Informationsgehalt. Float Zahlen sind einfach nur da um für den Menschen
>vor der Maschine "einfacher" zu rechnen.


Eine interessante Aussage, der ich gerne widersprechen möchte. Erzähl 
das einmal einem Physiker :-)

Es geht hier nicht um einen AMD9511 sondern um hochwertige 
Feinelektronik im Jahre 2010. Eine FPU läßt Festkommaschiebereien alt 
aussehen.

von Stefan Kunz (Gast)


Lesenswert?

floats haben trotzdem keinen Mehrwert an Information, der Zahlenbereich 
ist augenwischerei. Daneben sind FPUs trotzdem langsamer in ihren 
Berechnungen.

Auch ein Physiker wird sich davor hüten zusehr auf das Format zu 
vertrauen. Denn was passiert wenn man eine mittelgroße(wertmässig) 
Floatzahl mit einer kleinen (wertmässig) Floatzahl addiert? Grade bei 
sehr kleinen Zahlen sind floats trügerisch.

von Tropenhitze (Gast)


Lesenswert?

ja ja, die Welt ist böse.
Ich bringe gerade meinem Elefanten das Fliegen bei, damit werde ich dann 
wohl eher Erfolg haben ;-)

von Ano N. (oorim)


Lesenswert?

Die Lage deines Elefanten kannste dann mit meinem AHRS regeln :D

von Stefan Kunz (Gast)


Lesenswert?

Du verkennst, das 32bit float nur 32bit Informationsgehalt hat. 32bit 
int hat auch nur 32bit Informationsgehalt. Daher bringt float keinen 
Informationsgewinn.
Wie gesagt floats macht die Betrachtungsweise einfacher bringt aber mehr 
Rechenaufwand mit sich. Aber diese Thematik wurde hier schon öfters 
besprochen.

von Ano N. (oorim)


Lesenswert?

Aber es ist doch ein unterschied ob ich 3,14 oder 3 verwende auch wenn 
der Informationsgehalt in Bit der selbe is ...

von Tropenhitze (Gast)


Lesenswert?

>Die Lage deines Elefanten kannste dann mit meinem AHRS regeln :D

Ich seh' schon, wir kommen ins Geschäft ;-)
Mein Elefant schafft schon 3,14798 mm mit einem Rüsselschlag!

von Ano N. (oorim)


Lesenswert?

xD

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

Meiner schafft 314798 100000stel.
Passt doch wunderbar in 32 Bit ohne Float.

von Ano N. (oorim)


Lesenswert?

Es geht doch nicht darumob es reinpasst sondern darum das 3*3,1479 
genauer ist als 3*3 ...

von Arc N. (arc)


Lesenswert?

Ano Nym schrieb:
> Danke. Wieder was gelernt. Ich denke mal die Performance von dem STM32
> reicht aus, der wird in dem Kontext auch öfter benutzt. 20€ für das Eval
> Board sind auch cool - seh ich das richtig das ich den dann über RS232
> Programmieren kann? Wenn ja wäre das natürlich noch cooler. Dann werd
> ich das zum Testen nehmen auch wenn ich nicht der Fan von Eval Boards
> bin. 90 MIPS klingt eigentlich so als wenn das kein Problem mit der
> Berechnung haben sollte.

Wenn's zum Testen auf den Preis ankommt, LPCXPRESSO LPC1114 ~20€ von 
NXP.
Vorteil: Wenn man das Target nicht braucht, kann man die Platine teilen 
und benutzt nur den JTAG/SWD-Teil für eigene Targets.
Entwicklungsumgebung ist Eclipse, GCC (inkl optimierter C-Lib)
http://www.embeddedartists.com/products/lpcxpresso/lpc1114_xpr.php
http://www.embeddedartists.com/products/lpcxpresso/lpc1343_xpr.php

>
> Bezüglich FPU: Wieder was gelernt. Dankeschön! Hatte mich mit der
> Thematik noch nicht richtig befasst und bin jetzt auch schlauer :D
>
> Dann werde ich die Sachen wohl damit Testen.

von Tropenhitze (Gast)


Lesenswert?

Und um das mit der Rechengeschwindigkeit zu verdeutlichen, habe ich mal 
die Ausführungszeiten aus dem Datenblatt zum 7216 bei 200MHz Takt 
rausgesucht. Angaben in ns für (float32/double64)

FMUL (5/30), FDIV (50/115), FSQRT (45/110)

Wenn FMUL mit float32 gerechnet einen Takt braucht, wird es mit 
Festkomma Tricksereien nicht schneller gehen können.
Zum Vergleich braucht ein ATmega bei 16MHz ca. 20000ns für FMUL. Um 
wieviel die FPU schneller ist, kann man gerne mit Integer rechnen.

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.