PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Suche arithmetischen Co-Prozessor für Atmel-8Bitter



oberallgeier
10.03.2022, 09:10
Hallo Leute,
gibts eigenlich für die mathematisch recht simpel ausgestatteten Atmels 8Bitter (oder höher) einen Mathe-Co-Prozessor? Vor urdenklichen (Z80-)Zeiten hatte ich mal nen FORTRAN-Offset (FLOAT80) für nen Mathe-CoPro für den Z80 geschrieben - funzte super und rechnete transzendente Funktionen uvm. in Windeseile aus. Zu Atmel-Zeiten - nein, im Atmel-Umfeld, hatte ich noch nie gehört, dass es so etwas gäbe.

Kennt jemand so ne Lösung oder einen ähnlichen elektronischen Mathe-(Hardware)-Spezialisten?

Danke für Eure Hilfe

gunzelg
10.03.2022, 09:54
Hallo
sowas in derArt?
https://picaxe.com/hardware/add-on-modules/um-fpu-floating-point-coprocessor/

https://media.digikey.com/pdf/Data%20Sheets/Parallax%20PDFs/uM-FPU%20Floating%20Point%20Coprocessor.pdf (https://picaxe.com/hardware/add-on-modules/um-fpu-floating-point-coprocessor/)

https://micromegacorp.com/wheretobuy.html


Gruß
gerhard

oberallgeier
10.03.2022, 10:45
Hallo Gerhard!
.. sowas in derArt?
https://picaxe.com/hardware/add-on-modules/um-fpu-floating-point-coprocessor/
(https://picaxe.com/hardware/add-on-modules/um-fpu-floating-point-coprocessor/) . . .
https://micromegacorp.com/wheretobuy.htmlGENAU! Danke für Deine Hilfe.

Nur dumm: beim italienischen (https://www.robot-italy.com/it/catalogsearch/result/?q=Coprocessor) und beim französischem (https://www.lextronic.fr/module/ambjolisearch/jolisearch?s=uM-FPU+Floating+Point+Coprocessor) Shop gibts den nicht (kein Artikel angezeigt), beim englischen Shop (https://www.picaxestore.com/catalogsearch/result/?q=fpu) ist der 8- und auch der 18-Beiner "OUT OF STOCK". Sogar mein Chinese hat den Chip nicht - der zeigt zu dem Stichwort "uM-FPU Floating Point Coprocessor" jede Menge Schwimmerschalter, Schwimmerschalter- (Pumpen-) -Steuerungen und Kugelschreiber . . .

gunzelg
10.03.2022, 10:56
Schade. Aber warum tust du dir das überhaupt an? Wenn du so nen um-fpu-chip hättest, müsstest du auch noch Code für die I2C-Kommunikation schreiben. Wieso nicht gleich nen fetten uC hernehmen, der gnügend MIPS mitbringt und dann die float-Funktionen der C-Bibliothek hernehmen. Musst dich halt dann in nen neuen uC einarbeiten. Was verwendest du denn jetzt? Ich bin einer von PIC-Front :-) und nehem immer gern die PIC18, oder wenns dicker werden soll nen PIC24 (16Bit).

Ach ja, aber da stand auch was von "direkt" bei dem Laden:

uM-FPU V3.1 $19.95 USD

Parallax (DIP-18)
Solarbotics (DIP-18, SOIC-18)
Lextronic (DIP-18)
Robot Italy (DIP-18)
available directly from Micromega (DIP-18, SOIC-18)

Evtl mal ne email hinschicken, und frech fragen obs ein kostenloses Muster gibt: sales@micromegacorp.com

Gruß
gerhard

Holomino
10.03.2022, 11:51
sowas in derArt?


Mal ganz naiv gefragt (weil im DB hab ich keine Angaben gefunden): Wie fix wird denn damit z.B. eine sin()-Berechnung?

oberallgeier
10.03.2022, 13:02
Mal ganz naiv gefragt (weil im DB hab ich keine Angaben gefunden): Wie fix wird denn damit z.B. eine sin()-Berechnung?Für sin hatte ich nie Werte. Aber für den (nicht erfragten) Zeitbedarf des atan hatte ich mal was gerechnet (und Sternthaler) - weil es mal um das Thema Rückwärtseinschnitt (https://www.roboternetz.de/community/threads/36932-Navigation-mittels-Triangulation?p=351334&viewfull=1#post351334) ging. Und da hatte ich eben auch die Näherungsrechnung(en) auf nem Atmel gestoppt. Ergebnisse z.B. hier (http://forum.diegeodaeten.de/index.php?mode=thread&id=2946) (Post vom Sonntag, 18.04.2010, 20:16). Die Bilder sind leider alle perdü.
Wenn ich mich richtig erinnere war ich zu meinen Z80-Zeiten auf dem CoPro (an dessen Namen erinnere ich mich nicht) um ein oder zwei Größenordnungen schneller. Wie erwähnt - beim atan. Und in meiner Einfalt vermute ich zu heutigen Zeiten ähnliche Verhältnisse. (Der Z80 lief damals mit zwei bis vier Megahertz).

Holomino
10.03.2022, 15:13
Dieser Code in der main


/* Replace with your application code */
double x=0.5;
while (1)
{
x+=0.5;
double y = atan(x);
if (y > 1)
PORTB = 0xFF;
else
PORTB = 0x00;
}

benötigt lt. Simulator (ATMega328 ) etwa 2900 Zyklen pro Schleifendurchlauf. Das sind bei 8MHz ca. 360µs.
Per TWI zu FPU jeweils 4 Byte hin und 4 Byte zurück sind bei 400kHz Busfrequenz allerdings auch schon 200µs
Ok, den Bus kann man von Seite der FPU auf bis zu 4MHz hochdrehen, allerdings muss man im AVR immer noch in der ISR die Bytes einzeln einfüttern oder auslesen.

Hast Du schon mal über Overclocking nachgedacht? :p

White_Fox
11.03.2022, 17:40
Oder mach das mit eine STM32...32-Bit FPU mit 40MIPS und mehr als genug Schnittstellen.

oberallgeier
12.03.2022, 15:34
Oder mach das mit eine STM32...32-Bit FPU mit 40MIPS und mehr als genug Schnittstellen.Wenn ich könnte . . . :-/ . . . Seit Jahren habe ich hier eine Disco-STM32F407 rumliegen (heißt eigentlich STM32F4DISCOVERY, new order code STM32F407G-DISC1 (https://www.st.com/resource/en/user_manual/dm00039084-discovery-kit-with-stm32f407vg-mcu-stmicroelectronics.pdf)). Klar, ne FPU und so, etliche UARTs, mehrere I²Cs etc hatten mich in Versuchung geführt. Ein Bekannter hatte mir ein (bei ihm) funktionierendes Paket mit ner Eclipse-IDE überlassen, aber ich war nie in die Lage auch nur ein funktionierendes hello world rauszubringen. An I²C-Verbindung oder höheren Funktionen war nie zu denken. Schade. Ich hatte mein Bemühen mit dieser Technik dann vor Jahren aufgegeben, das Ding liegt seitdem hier in einer Schachtel :-/ ; leider. Mein archie, mein bisher anspruchsvollstes Projekt, funktionierte ja (zur Not) trotzdem ganz ordentlich.

White_Fox
13.03.2022, 09:07
Naja, dann probiers doch nochmal. Mittlerweile hat sich bei ST auch einiges getan: die alte Standardlibrary ist mittlerweile völlig obsolet, die schwerfällig-lahm-fette HAL wurde durch die Low-Level-Library ersetzt...da geht schon einiges.

Einfach mal fragen, wenn es klemmt...vielleicht besser auf mikrocontroller.net, da ist immer wer der was weiß (auch wenn da viele sind, die nix wissen und sich trotzdem zu Wort melden).

oberallgeier
13.03.2022, 09:41
Naja, dann probiers doch nochmal. Mittlerweile hat sich bei ST auch einiges getan ...da geht schon einiges .. Einfach mal fragen ..Ja, Du hast recht - kostet nur noch Überwindung. Aber ich arbeite mal dran *ggg*.


.. auch wenn da viele sind, die nix wissen und sich trotzdem zu Wort melden).Die gibts immer. Ist ja bekannt: es wurde zwar schon alles gesagt, aber es hat noch nicht jeder alles gesagt.

Schönen Sonntag - hier (Oberallgäu) scheint die Sonne und im Tal ist so gut wie alles trocken - und es geht mitm Bike in die Natur.

White_Fox
14.03.2022, 20:13
Es gibt von ST übrigens ein Werkzeug, womit du den ganzen Konfigurationskram automatisch erstellen kannst. Du wählst (auf einer Klicki-Bunti-Oberfläche) erstmal deinen Mikrocontroller oder das Board aus, dann kannst du jeden Pin einzeln konfigurieren (E/A, PushPull, Open-Drain, Pullups/downs, ...), Hardwareperipherie wie Timer, ADCs, SPI, UART, ...und dann macht der ein fertiges Projekt daraus wo du sofort loslegen kannst.

Vielleicht erleichtert das den Einstieg etwas.

https://www.youtube.com/watch?v=szMGedsp9jc

Moppi
16.03.2022, 07:08
Dieser Code in der main ...

Wieviele unterschiedliche Werte kommen für "x" überhaupt infrage; endlich viele, womöglich bei genauer Betrachtung nur Wenige? Und wie wirkt sich "x" auf "y" aus (y > 1), kann "x" dann auf wenige Werte reduziert werden (weil Zwischenwerte am Ende zum selben Resultat führen)? Dann kann der Code optimiert werden, ohne eine Hochleistungsrechenmaschine zu benötigen.

Crazy Harry
09.04.2022, 19:40
benötigt lt. Simulator (ATMega328 ) etwa 2900 Zyklen pro Schleifendurchlauf. Das sind bei 8MHz ca. 360µs.


Hochgerechnet auf einen 64MHz XMega 45µs ;)

oberallgeier
23.06.2022, 09:25
.. oder: kann ein ESP8266-12F nen number cruncher machen ? ?


Für sin hatte ich nie Werte. Aber für den .. Zeitbedarf des atan hatte ich mal was gerechnet (und Sternthaler) .... und dann flattert mir in den letzten Tagen ein klitzekleiner 32Bitter (ESP8266-12F (https://www.az-delivery.de/collections/esp8266/products/esp8266-12e)) auf die Arbeitsplatte. Danke Sternthaler.
Nebensache: das erste Mal im Leben in die arduino IDE einarbeiten (brrrrrr). Die Ergebnisse scheinen mir interessant.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Auszug aus meinem Logbuch [Inst-Logb_arduino_ab_Mai-2022.txt] . Stark gekürzt (ohne jeweilige Anmerkung)
Hintergrund ist meine ALTE Überlegung zur Bahnplanung des archie beim Fahren ABER auch zur Bewegung
mehrgliedriger "Arme" nach Art von Roboter-Bewegungsroutinen. Da benötige ich vielfach Wurzel und Arcustangens
. . . und ich dachte, dass z.B. so ein ESP auch als Numbercruncher herhalten könnte. Wobei ich die Tests hier -
die mit den herkömmlichen Rechnern 328P und 1284P - noch nie gemacht hatte. Leider.
- - - - - - - - - - - - - Auszug - - - - - - - - - - - - -
– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
16. 6.2022 19:40 Studio4/1284p@20MHz Messung SQRT 22.7 µs ATAN 130.2 µs
– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
16. 6.2022 10:ff Studio4/328p/nano@20MHz Messung SQRT 24.7 µs ATAN 169. µs
– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
15. 6.2022 18:ff Studio4/328p/nano@16MHz Messung SQRT 30.9 µs ATAN 185.6 µs
– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
15. 6.2022 16:50 ainoIDE/nano328.ino/nano@16MHz Messung SQRT 3.71 µs atan 3.71 µs
– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
15. 6.2022 15:08 ainoIDE/ESP12F2.ino/ESP12F@80MHz Messung SQRT 6.94 µs atan 30.57 µs
ainoIDE/ESP12F2.ino/ESP12F@160MHz Messung atan 15.29 µs
– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
Anm2.: anano, aino und ähnlich bedeutet hier arduino-nano oder arduino-IDE-file und ähnlich.
- - - - - - - - - - - - - Ende - - - - - - - - - - - - -

Das mit dem arduino-nano-Clone+arduinoIDE @16 MHz gefahrene Ergebnis wurde mehrfach wiederholt - es bleibt bis auf Nachkommastellen gleich. Bedauerlicherweise gibt es (? find ich jedenfalls nicht) bei/durch die arduino-IDE keinen Output ähnlich den *.lls-Dateien beim Studio4 - sodass ich weder Rechenweg noch Rechenumfang der verschiedenen IDE´s beurteilen kann.

Auszug des Codes für Studio 4 - die *.ino-Version ist gleich(-wertig).
/* >>
Stand D:\D_pro-f..Std4-1284p\Messg-sq+at-Std4-1284\Messg-sq+at-Std4-1284.c
================================================== ============================= =
Target MCU : ATmega Mega1284P TQFP
Target Hardware : 1284Platine-archie
Target cpu-frequ. : 20 MHz
. . . alles Weitere stark gekürzt, meist/teils ohne besondere Anmerkung
================================================== ============================ */
// ================================================== =========================== =
// === HAUPTProgramm ================================================== ======== =
. . . gekürzt
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
int main(void)
{ //
. . . gekürzt
float mf = 21.1415926F; // mf = millisfloat
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
. . . gekürzt
while ( 1 ) // Das eigentliche Hauptprogramm
{ //
// - - - - - - - - - - - - - - - -
PORTA |= ( 1<<5 );
rt = sqrt ( mf ); //
PORTA &= ~( 1<<5 );
wms ( 2 ); //
// - - - - - - - - - - - - - - - -
PORTA |= ( 1<<5 );
rt = atan ( mf ); //
PORTA &= ~( 1<<5 );
wms ( 20 ); // 22062022-16h38: bei 100 => ca. alle 4 ms
// - - - - - - - - - - - - - - - -
mf = mf + 0.01415926F; // Wert ändern
rt2 = rt; //
// - - - - - - - - - - - - - - - -
} // Ende while ( 1 )
. . . gekürzt
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
return 0; //
} //
// ===== Ende des Testabschnittes, er kann aus mehreren Abschnitten bestehen ====
// ================================================== =============================
/* Übersetzungskommentar: Programsize Datasize
Build 16. 6.2022 13:12:10 3908 bytes ( 3.0%) 284 bytes (1.7%)
16. 6.2022 13:18:01 3904 bytes ( 3.0%) 280 bytes (1.7%)
Build succeeded with 0 Warnings...
================================================== ========== */

Zur Messung auf M1284P@20MHz/Studio-4 gibts auch z.B. für den ATAN dieses Messbild (https://dl.dropbox.com/s/82r7b6dwn596lx1/Messung-sqrt%2BATAN-Std4-1284p_130p2%C2%B5s.JPG?dl=0) (der Linienzug vor der Markierung stammt von "SQRT").

oberallgeier
14.07.2022, 12:46
Die oben genannten Ergebnisse zur arduinoIDE auf arduino-nano@16MHz fand ich unglaubwürdig. Neue, ausführliche Messungen über die oben vorgestellte Ergebnisse bestätigten mein Misstrauen, die folgenden Werte sind aus meiner Sicht gesichert(er).

SEHR kurz zusammengefasst:

Mit arduino-IDE:
auf ESP8266-12F@80MHz.....atan zwischen..26,1 (68,2) überwiegend 31,2 µs (±0,3)
auf ESP8266-12F@160MHz...atan zwischen 13,1 (46,7) überwiegend 16,8 µs (±0,3)
auf arduino-nano@16MHz.....atan zwischen 178...(155) überwiegend 145 µs (± 5)
Mit Studio7 (7 statt 4 wegen Werteausgabe seriell)
auf nano328@20MHz+Studio7 atan ca 115 µs, sqrt ca. 25 µs

Die erfassten Zahlenwerte zeigten eine gute Übereinstimmung in den ersten sechs (signifikanten) Stellen. Beispiel für ne Ausgabe vom arduino-nano@20MHz:

......35811

Ausführlichere Informationen bei Bedarf.

Mein Fazit: der ESP8266 (hier ~12F) ist - angebunden z.B. mit I²C - insbes. beim Betrieb mit 160 MHz ist, insbes. für ATMEL-8Bitter, ein lohnender number cruncher für transzendente Rechnungen. Die Ein- und Ausgänge des ESP könn(t)en dabei auch direkt für Steuerungsaufgaben benutzt werden.

engineer
02.11.2022, 01:48
Wäre für einen solchen Prozessor nicht eine Näherung das Beste?


sin = (((((((( 0.0000027 * x*x ) - 0.0001984 ) * x*x ) + 0.0083333 ) * x*x ) - 0.1666667 ) * x*x ) + 1.0 ) * x;

oberallgeier
02.11.2022, 09:15
Wäre für einen solchen Prozessor nicht eine Näherung das Beste? ..Kann sein. Für Atmels hatte ich das schon zum Thema Rückwärtseinschnitt untersucht, siehe weiter oben.

Aber wozu ne Näherung, wenns ein CoPro im Rahmen seiner Möglichkeiten/Grenzen schnell genug erledigt!