Hallo Leute,
ich habe dein Problem. Und zwar sitze ich hier an meiner Studienarbeit,
in der ich ein kleines Programm mit Matlab entwickelt habe. Nun soll ich
im Rahmen dieser Arbeit ungefähr abschätzen welcher Mikrocontroller
dafür geeignet ist. Ich habe davon aber überhaupt keine Ahnung. Ich
schildere hier mal das ganze Vorhaben:
Ich habe zwei Zeilenvektoren die jeweils aus 5000 Messwerten (Datentyp
Integer) bestehen. Mit meinem kleinen Programm insgesamt so 50 Zeilen
berechne ich daraus verschiedene Werte. Ich bekomme alle 15 min neue
Werte. Das war es im großen und ganzen. Also Matlab braucht für das
ganze Programm keine 10 s.
Kann man daraus jetzt ungefähr auf einen geeigneten Mikrocontroller
schließen? Oder was müsste ich dafür noch in Erfahrung bringen?
MFG
Sören
Wie gross ist ein Messwert in Bits, wieviele Operationen welcher Sorte
(Add, Mul, Div, ...) finden insgesamt pro Zyklus statt und wieviel Zeit
steht zur Verfügung?
wie wäre es mit aufpassen in den Vorlesungen? Uns wurde erklärt wie man
sowas macht, bzw. eigentlich ist es ja nur en bissel Verständniss was
ein uC tut, gewürzt mit etwas gutem menschenverstand + google.
ein 8 bit controller kann 2 8bit zahlen in einem schritt miteinander
addieren/subtrahieren (1-2 systemzyklen). Also hast du entsprechend mehr
aufwand wenn du 32bit zahlen in einem 8bit uC addieren willst. Für eine
Abschätzung kann man das mal so verallgemeinern. Bei Multiplikationen
wird das noch etwas komplizierter, und die Krönung wäre wenn du uCs mit
integrierten DSPs mit betrachten willst (Cortex M4 beispielsweise).
Also,
1) Ein Messwert ist 8 Byte groß und vom Typ Double, sprich jeder
Zeilenvektor a 5000 Messwerte ist insgesamt 40 kByte groß. Ich habe zwei
Zeilenvektoren. Diese werden von dem Programm verarbeitet.
2) Im Programm selbst, werden dann drei for-Schleifen ausgeführt. Es
werden insgesamt zwei einfache Berechnungen mit jeweils einmal Div und
Mul ausgeführt.
Dann wird noch ein logischer Vergleich durchgeführt.
3) Der Mikrocontroller hat dafür 15 min Zeit.
Und das wars. Also Matlab braucht dafür insgesamt 1,408 Sekunden. Und
dabei liegen zwei Matrizen mit jeweils 1331 Zeilenvektoren vor. Also
viel mehr als eigentlich gebraucht wird. Insgesamt ist das Programm dann
107,325688 Bytes groß. Das müsste doch jeder kleine 8bit Mikrocontroller
locker schaffen.
> Kann man daraus jetzt ungefähr auf einen geeigneten> Mikrocontroller schließen?
Nein.
> 1) Ein Messwert ist 8 Byte groß und vom Typ Double
Vorher waren es Integer.
> Also Matlab braucht dafür insgesamt 1,408 Sekunden.
Vorher 10 Sekunden.
Zähle die Anzahl der Fliesskommaoperationen +-*/<>
Ein Microcontroller der üblichen Art (AVR, PIC, 6502, Z80)
schafft davon ca. 1500 pro Sekunde.
Ein Microcontroller der grösseren Art (ARM ohne Floating
Point) ca. 15000 und ARM mit Floating Point Coprozessor
wie A9 über 150000.
Sören schrieb:> Ein Messwert ist 8 Byte groß und vom Typ Double
Muss der so "groß" sein?
Wie genau müssen deine Berechnungen sein?
> Mit meinem kleinen Programm insgesamt so 50 Zeilen
Wie komplex sind die Berechnungen?
> Ich bekomme alle 15 min neue Werte.
Das bekommst du ja mit einem Taschenrechner und einem Blatt Papier in
der Zeit hin...
Also das Problem ist das noch nicht genau feststeht in welcher Größe
diese Daten vorliegen werden. Deswegen ist es schwierig für mich da eine
Aussage zu treffen. Aber es geht mir ja auch nur um eine grobe Schätzung
welche Mikrocontroller dieses Programm in einer Zeit von 15 Minuten
schaffen können. Ich weiß auch das 15 Minuten sehr viel Zeit ist und
deshalb glaube ich ja das man da wirklich auf recht einfache
Mikrocontroller zurück greifen kann.
Ansonsten stimmen die Werte so wie ich sie vorhin angegeben habe.
Die Messung muss schon sehr genau sein, weshalb die Daten auch so "groß"
sein müssen.
Im Programm selbst kommen:
2x >
1x ==
2x /
1x -
1x *
und halt fünf spezielle Matlabbefehle vor. Ich habe das ganze aber
bisher noch nicht in C-Code vorliegen sondern nur mit Matlab
programmiert. Das Programm hat jetzt auch nur noch 30 Zeilen.
Sören schrieb:> Die Messung muss schon sehr genau sein, weshalb die Daten auch so "groß"> sein müssen.
Wenn wie nun skizziert 64-Bit Fliesskommarechnung erforderlich sind,
dann such dir einen µC, dessen Compiler dies auch unterstützt. Das ist
insbesondere bei kleinen Typen nicht selbstverständlich.
> 2x >> 1x ==> 2x /> 1x -> 1x *
7 Operationen in 15 Minuten schafft jeder. Wahrscheinlich sogar mit
Papier und Bleistift. ;-)
Die Frage war eher, wieviele Operationen es in den geforderten 15
Minuten sind. Nicht wieviele im Matlab-Programm stehen. Herrje - es geht
darum, wieviele Operation pro Sekunde durchgeführt werden müssen, ist
das derart schwer verständlich?
Sören schrieb:> 1) Ein Messwert ist 8 Byte groß und vom Typ Double, sprich jeder> Zeilenvektor a 5000 Messwerte ist insgesamt 40 kByte groß. Ich habe zwei> Zeilenvektoren. Diese werden von dem Programm verarbeitet.>> 2) Im Programm selbst, werden dann drei for-Schleifen ausgeführt. Es> werden insgesamt zwei einfache Berechnungen mit jeweils einmal Div und> Mul ausgeführt.> Dann wird noch ein logischer Vergleich durchgeführt.
Nimm einen 32Bit-Controller. Preislich unterscheidet er sich auch nicht
wesentlich von den geeigneten 8Bit-Controllern, zum Beispiel:
http://de.rs-online.com/web/p/mikrocontroller-prozessoren/6868657/
Sören schrieb:> Er soll diese ganze Rechnung einmal in den 15 Minuten durchführen.
Du solltest endlich mal die gestellten Fragen beantworten und mit der
Information rausrücken: WELCHE Rechnung?
Das ist bisher, wie wenn ich dich frage:
Ich brauche ein Automobil fürs Fahren. Aber ein paar Kurven und Berge
sind auch dabei, und schnell sollte es auch sein, ich weiß aber nicht
wei schnell. Kannst du mir dann eins empfehlen, das passt?
Du weißt die Anzahl der Schleifendurchläufe und die Operationen, die je
Durchlauf gemacht werden.
Also einfach nur diese Zahlen addieren und multiplizieren.
Und dann hier hinschreiben, z.B.:
je 15min:
64bit double mul: 11111
64bit double sin: 666
64bit double div: 333333
usw.
Peter
wer selbst nach etlichen gutgemeinten und geduldigen Hinweisen nicht in
der Lage ist, seine Frage so zu stellen, dass man sie beantworten kann,
der darf eigentlich keine Studienarbeit verfassen.
Wo gibt es denn sowas???
Ich plädieren hier für einen geordneten Ratschlag-Stopp