Forum: Mikrocontroller und Digitale Elektronik Mathematischer Coprozessor für AVRs


von jojansen (Gast)


Lesenswert?

Hallo,
ich habe den Eindruck, daß die mathematische Präzision die mir Bascom
mit 'Single' Variablen nicht reicht.
Mir war, als ob ich schon einmal was von mathematischen Coprozessoren
für Controller gelesen zu haben. Nur kann ich mich an nichts genaues
mehr erinnern.
Hat da jemand einen Tip für mich?
:-) Johannes

von Theoid (Gast)


Lesenswert?

Humbug. Nimm gleich einen Controller, der deine Anforderungen erfüllt,
was soll das sonst?

von Horst-Otto (Gast)


Lesenswert?

Die Fragen hier werden immer irrer.

von A.K. (Gast)


Lesenswert?

Die Antworten auch: MM57109.

von Martin Thomas (Gast)


Lesenswert?

So etwas gibt es tatsaechlich: http://www.awce.com/pak1.htm. Aber fuer
die genannten Preise gibt es mehrere ARM7 der "Einsteigerklasse".
Selbst ein bastelfreundliches Header-Board mit ARM7 duefte billiger und
besser geeignet sein.

von Peter D. (peda)


Lesenswert?

Das hat überhaupt nichts mit der CPU oder nem Coproz zu tun, sondern
einzig und allein mit der Genauigkeit der Mathe-Bibliothek des Bascom
!

Wenn Du ne höhere Genauigkeit haben willst, hilft einzig und allein ne
genauere Bibliothek (falls verfügbar) oder ne andere Programmiersprache
mit ner genaueren Bibliothek.

Bzw. in Assembler kannst Du so genau rechnen, wie du lustig bist.

Ich hab z.B. aufm 8051 die Grundrechenarten mit max 80 Byte (640 Bit)
Genauigkeit implementiert:

http://home.tiscali.de/peterd/appl/soft/arithmet/index.htm


Peter

von Oliver (Gast)


Lesenswert?

Ohje, gibt es wirklich heute noch jemanden der einen 2. Prozessor
braucht um ein wenig mit float zu rechnen?
Macht jeder billige C-Compiler!

Und wenn der Prozessor das nicht mehr packt, es gibt genug andere.

Und wer es mag kann auch in ASM das versuchen. Ist aber das dümmste was
mach machen kann. So wie heute noch mit ASM oder einem Interpreter
System zu arbeiten.
Ist nur meine Meinung, nach 20 Jahren Software Entwicklung.

von jojansen (Gast)


Lesenswert?

Also, der MM57109 scheint ja schon einige Tage älter zu sein. Ich hatte
da was von '77 gelesen.
Die Preise vom PAK1 und PAK2 sind dann doch schon speziell.
Da wird mir wohl nichts übrig bleiben als mit den Beschränkungen der
32Bit der IEEE-sonstwas zu leben.
:-) Johannes

von A.K. (Gast)


Lesenswert?

Die Erwähnung des MM57109 hatte neben dem Jux noch einen gewissen
Hintersinn. Das Teil wurde anno 6502 und Z80 tatsächlich manchmal als
Fliesskomma-Koprozessor verwendet. Aber nicht oft, denn intern war das
ein festprogrammierter 4-Bit Microcontroller und sehr viel langsamer
als Fliesskommaroutinen auf dem 8-Bitter.

von Tom (Gast)


Lesenswert?

AMD 9511/9512 gabs auch noch, aber ich bezweifel ob die im Endeffekt
wirklich noch schneller sind als die Nutzung einer entsprechenden
Mathebibliothek.

von A.K. (Gast)


Lesenswert?

Gegenüber 6502 waren die AMD 951x wirklich schneller. Da war's eher der
Preis, der die Verbreitung einschränkte. Beim AVR mag das anders sein,
immerhin dürfte der grad bei solchem Code zwei Zehnerpotesnzen
schneller sein als der alte 6502 Prozessor.

von Profi (Gast)


Lesenswert?

Und überlege mal, ob Du wirklich Float brauchst, oder ob nicht
FixedPoint oder Integer auch geht (Skalieren).

Wie lautet denn das Problem? Welche Funktionen brauchst Du.

Vor 20 Jahren haben wir einen NS32081 (Math Coproc für den NS32032
32-Bitter) an einen Commodore PET angeschlossen, um Julia und
Mandelbrot zu berechnen. Das waren noch die wilden Zeiten.
http://www.ortodoxism.ro/datasheets/nationalsemiconductor/DS005234.PDF

Mit 24 Pins und 15 MHz .... wäre direkt eine Überlegung wert ...
Das Interface ist auch an andere Busse / IO-Ports recht einfach zu
bewerkstelligen.

Leider kann er nur die Grundrechenarten, also kein Sin, Log, Exp ...
Aber damals war man sehr froh, überhaupt was zu haben.

von Profi (Gast)


Lesenswert?

Gerade ist mir eingefallen, es gibt ja noch den CMOS-Nachfolger NS32381
mit 30 MHz, 32-Bit-Interface und etwas erweitertem Befehlssatz:
http://eshop.engineering.uiowa.edu/NI/pdfs/00/91/DS009157.pdf

Interfacing the NS32381 as a Floating-Point Peripheral
http://manuales.elo.utfsm.cl/datasheet/national/pdf/nsc04427.pdf

von Daniel L. (bucho)


Lesenswert?

Bascom kann doch auch mit Double arbeiten. Reicht dir das nicht?

von Karl H. (kbuchegg)


Lesenswert?

Wobei dann auch noch die Frage bleibt:
UNterstützt Bascom überhaupt einen Co-Proz?

Einfach nur so anschliessen spielts nämlich nicht, wenn
der Compiler den Co-Proz nicht anspricht.

von Ronny (Gast)


Lesenswert?

"Und wer es mag kann auch in ASM das versuchen. Ist aber das dümmste
was
mach machen kann."

In der Anwendungsentwicklung stimme ich da zu.Aber im Embedded Bereich
macht es z.B bei der Interrupt-Programmierung von zeitkritischen Sachen
durchaus Sinn einzelne Routinen in Asm zu schreiben.Das selbe gilt für
komplexere mathematische Formeln,wo man (sehr gute Kenntnisse des
Zielsystems vorausgesetzt) einige Dinge optimieren kann,die ein
Compiler so nicht hinbekommt.

Aber nur um die Genauigkeit einer einzigen Multiplikation zu erhöhen
wäre das eine Kanonen-auf-Spatzen-Übung.

von inoffizieller WM-Rahul (Gast)


Lesenswert?

Könnte man nicht einen ARM oder so per SPI an den AVR hängen? ;)

(Duck und wecht)

von Peter D. (peda)


Lesenswert?

@Oliver

"Und wenn der Prozessor das nicht mehr packt, es gibt genug andere."


Immer noch nicht geschnallt, die CPU hat damit auch nicht das geringste
am Hut !!!

Die CPU kann ne 128Bit-Float-Unit haben, die Programmiersprache wird
trotzdem nur mit 24Bit Genauigkeit rechnen und die restlichen Bits
einfach abschneiden.


Peter

von Carsten P. (papa_of_t)


Lesenswert?

Also die uC-Anwendung, bei der Float-Genauigkeit nicht ausreicht (in
BasCom Single oder Double), würde mich auch spontan interessieren - laß
doch mal hören? Evtl. hast Du nur den Fusing - Befehl in Bascom
übersehen?

von jojansen (Gast)


Lesenswert?

Also ich bin noch am überlegen, ob ich mit dem, was ich an Genauigkeit
bekomme, trotzdem weiter rechnen soll oder ob ich das nicht doch ganz
anders mache. Ich rechne von den Schritten eines Steppers mit einem
Schneckengetriebe auf den Ablenkungswinkel und rechne dann wieder von
Soll-Abständen in einem rechtwinkligen Dreieck auf die Schritte zurück.
Das ganze mache ich mit der Tangens- und Arcustangensfunktion. Dabei
wollte ich den Wert für Winkel pro Schritt in gewissen Werten
einstellbar haben. Wenn ich nun per Terminalprogramm den Wert auf z.B.
0.03 setze und dann die Singlevariable wieder auslese, bekomme  ich als
Wert eine Zahl wie 0.029999579 zurück. Das hat mich im ersten Moment
doch etwas erschrocken. Im nachhinein scheint mir ein Coprozessor doch
etwas übertrieben zu sein.
Die Fuses sind als solches in Ordnung, da der Rest des Programms gut
funktioniert und auch die Timer so funktionieren wie sie sollen.
:-) Johannes

von Manos (Gast)


Lesenswert?

Ich hatte den Einwand von Oliver mit den anderen Prozessoren so
interpretiert, dass "wenn der zu langsam ist um das im gegebenen
Zeitfenster zu schaffen" gibt es noch genügend andere...

Ansonsten stimme ich natürlich zu, dass die Genauigkeit einzig und
alleine von der Software abhängt bzw. beliebig genau erreichbar ist
(wenn man genug Zeit und Platz hat).

"0.029999579" Arbeite einfach mit 6-Stellen nach dem Komma und runde
:)

von Mtron (Gast)


Lesenswert?

Nur so zu Info:

Single: Singles are stored as signed 32 bit binary numbers. Ranging in
value from 1.5 x 10^–45 to 3.4 x 10^38

Double: Doubles are stored as signed 64 bit binary numbers. Ranging in
value from 5.0 x 10^–324 to 1.7 x 10^308

Gruß
René

von TheMason (Gast)


Lesenswert?

@jojansen

also wenn es unbedingt ein mathe-co-prozi sein muß ...
ich bin die tage im netz über einen prozi gestoßen
ein mathe-co-prozessor

zu finden unter :
http://www.hobbyengineering.com/CatPMFLOAT.html

das teil heißt uM-FP. was genau der kann, wie hich die geschwindigkeit
ist kann ich dir nicht sagen, habe mir das datenblatt nur mal
überflogen, aber vielleicht ist es das ja was du suchst.
allerdings würde ich auch erstmal schauen ob du nicht vielleicht auch
mit der genauigkeit klarkommst die du verwendest. i.d.r kann man mit
einem 32bit single - fließkomma wert so gut wie ALLES erschlagen.

von Manos (Gast)


Lesenswert?

Im übrigen... Sobald Du eine Zahl teilst die nicht endlich ist bekommst
Du - egal bei welcher Genauigkeit immer Rechenfehler.

1 / 8 = 0,125 * 8 = 1
1 / 3 = 0,333 * 3 = 0,999

von Ronny (Gast)


Lesenswert?

Mal am Rande....

Wieviel Prozent Fehler wären denn dein errechneter Wert zum
Sollwert?Und auf wieviel Prozent genau kannst du deinen stepper den
setzen?

von TheMason (Gast)


Lesenswert?

@jojansen

du kannst aber getrost davon ausgehen das 0.029999579 = 0.03 ist ...
diesen fehler hättest du auch wenn du am pc mit single werten
rechnest.
das liegt daran das fließkomma nur eine "näherung" zur basis 2 ist
(0.5, 0.25, 0.125 und 0.0625 sind in fließkomma "glatte werte") und
0.03 eben nur angenähert werden kann ...
von daher ist ein fehler von 4 millionstel wohl zu vernachlässigen ...

von Carsten P. (papa_of_t)


Lesenswert?

Ich meinte nicht die Fuses im Chip, sondern den Bascom - Befehl
"Fusing" (guck mal in der Hilfe) , mit dem Du in einem Zug auf eine
sinnvolle Anzahl Nachkommastellen runden kannst. Wenn Du den
Fließkommawert einfach einem String zuweist und dann den String
abschneidest, dann kommt eben ggf. X,99999YY 'raus. Glaub den
Vorrednern und mach mal eine Fehlerbetrachtung.. :-)

von sous (Gast)


Lesenswert?

>>>Könnte man nicht einen ARM oder so per SPI an den AVR hängen? ;)
>>>
>>>(Duck und wecht)

Ich weiss noch was lustigeres:
Den AVR über eine geeingete Hardware ans Internet hängen und dann
mittels der google-Rechenfunktionen....

:)

von inoffizieller WM-Rahul (Gast)


Lesenswert?

Vielleicht kann man sich auch auf diesem Weg in irgendein Rechenzentrum
einwählen...

von Rolf Magnus (Gast)


Lesenswert?

Oder per I2C an den SMBUS eines PCs gehen. Mit einer geeigneten Software
am PC kann man dann die Berechnungen dorthin auslagern.

von jojansen (Gast)


Lesenswert?

>>>Könnte man nicht einen ARM oder so per SPI an den AVR hängen? ;)
ich bin gerade dabei einen SPI <> 80387 zu entwerfen. Vielleicht nehme
ich auch gleich zwei davon ;-))))))
Nee nee, eben hatte ich mit einem Kollegen gesprochen und darüber
nachgedacht. Bei dem was ich da mache ist der 'Fehler' doch nicht so
wirklich tragisch.
Aber es gibt doch so schöne Numbercruncher von Sun, SGI/Cray. So was an
den Atmel anflanschen.........
:-) Johannes

von Rolf Magnus (Gast)


Lesenswert?

Wie wär's mit nem C64-Diskettenlaufwerk?
Da das Laufwerk nicht weniger (sondern teilweise mehr) Rechenpower als
der C64 selbst hatte und die Möglichkeit bot, eigene Programme
reinzuladen, wurden rechenaufwendige Tasks manchmal auf dessen
Controller ausgelagert.

von Manos (Gast)


Lesenswert?

Erinnert mich daran dass ich damals mal den Grafik-Speicher meiner
Hercules-Karte meines XT's (Gott hab' ihn selig) als
Hauptspeichererweiterung oder Ramdisc genutzt hatte...
man hatte ja nix :)

von jojansen (Gast)


Lesenswert?

War es die '64er', die ein Programm zum abtippen brachte, bei dem der
Prozessor der Floppy mit zum berechnen von Apfelmännchen benutzt wurde?
Leider hatte es bei mir nicht funktioniert :-((( Stunden meines Lebens
hatte es gekostet.
:-) Johannes

von Manos (Gast)


Lesenswert?

Um weiterhin Offtopic zu bleiben...

Es gab auch Programme mit denen man über den Nadeldrucker oder
Diskettenlaufwerk Musik machen konnte - nicht grade HiFi und auch nur
Mono aber man konnte was raushören :)

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.