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
Humbug. Nimm gleich einen Controller, der deine Anforderungen erfüllt, was soll das sonst?
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.
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
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.
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
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.
AMD 9511/9512 gabs auch noch, aber ich bezweifel ob die im Endeffekt wirklich noch schneller sind als die Nutzung einer entsprechenden Mathebibliothek.
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.
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.
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
Bascom kann doch auch mit Double arbeiten. Reicht dir das nicht?
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.
"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.
@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
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?
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
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 :)
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é
@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.
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
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?
@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 ...
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.. :-)
>>>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.... :)
Vielleicht kann man sich auch auf diesem Weg in irgendein Rechenzentrum einwählen...
Oder per I2C an den SMBUS eines PCs gehen. Mit einer geeigneten Software am PC kann man dann die Berechnungen dorthin auslagern.
>>>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
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.
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 :)
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.