mikrocontroller.net

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


Autor: jojansen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Theoid (Gast)
Datum:

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

Autor: Horst-Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Fragen hier werden immer irrer.

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Antworten auch: MM57109.

Autor: Martin Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: jojansen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Tom (Gast)
Datum:

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

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Profi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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/nationalsemico...

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.

Autor: Profi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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/D...

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

Autor: Daniel Lancelle (bucho)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Ronny (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: inoffizieller WM-Rahul (Gast)
Datum:

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

(Duck und wecht)

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Carsten Pietsch (papa_of_t)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: jojansen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Manos (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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
:)

Autor: Mtron (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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é

Autor: TheMason (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Manos (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Ronny (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: TheMason (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ...

Autor: Carsten Pietsch (papa_of_t)
Datum:

Bewertung
0 lesenswert
nicht 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.. :-)

Autor: sous (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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....

:)

Autor: inoffizieller WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht kann man sich auch auf diesem Weg in irgendein Rechenzentrum
einwählen...

Autor: Rolf Magnus (Gast)
Datum:

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

Autor: jojansen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Manos (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 :)

Autor: jojansen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Manos (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 :)

Antwort schreiben

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

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.