Re: Algorytmy dla mikrokontrolerow



Masz problem? Zapytaj na forum elektroda.pl

Poprzedni Następny
Wiadomo¶ć
Spis tre¶ci
From: Lucas Socha <jolly_at_nospam_zeus.polsl.gliwice.pl>
Subject: Re: Algorytmy dla mikrokontrolerow
Date: Wed, 01 Dec 1999 00:18:06 +0100




Grzegorz Kraszewski napisał(a):

Lucas Socha wrote in
*"Algorytmy dla mikrokontrolerow"*

Usilnie poszukuję informacji na temat algorytmów do obliczania
funkcji matematycznych (szczególnie trygonometrycznych) dla
mikrokontrolerów 80C51 XA(!!), x166 lub 68HC16. Może mam złą strtegię
poszukiwań,

Bo pewnie szukasz gotowych procedur zamiast pogłówkować samemu.
Generalnie są dwie metody:

1. tablica - mało dokładnie i szybko
2. przybliżenie funkcji w potrzebnym przedziale za pomocą wielomianu
odpowiedniego stopnia - dokładnie, ale wolno

Można też kombinować, czyli np. tablica + interpolacja trójmianem.


No tak, ponieważ wychodzę z założenia, że nie muszę odkrywać poraz n-ty
tego, co inni wielokrotnie już obmy¶lali i niejedną bezsenną noc nad tym
spędzili. Ale generalnie dziękuję. OdpowiedĽ była bardzo na temat i
kompletnie bezużyteczna. Precyzując, poszukuję rozwinięcia w szereg
potęgowy odwrotnych funkcji trygonometrycznych (arcsin, arccos, etc.).
Słowem kluczowym jest dokładno¶ć, więc tablice odpadają. Jak również
wcze¶niej zaznaczyłem, drugim słowem kluczowym jest mikrokontroler
16-bitowy nie zawierający FPU (floating point unit), więc zdaję sobie
sprawę, że poniżej 10 ms nie zejdę. Dzięki

jolly

--
> Grzegorz Kraszewski (Krashan/BlaBla) <krashan_at_nospam_amiga.org.pl>
> Druga Strona BlaBla - http://amiga.org.pl/~krashan


Poprzedni Następny
Wiadomo¶ć
Spis tre¶ci
From: "JS" <jar0sz_at_nospam_polbox.com>
Subject: Re: Algorytmy dla mikrokontrolerow
Date: Thu, 02 Dec 1999 19:03:49 GMT


potęgowy odwrotnych funkcji trygonometrycznych (arcsin, arccos, etc.).
Z tablic:
asin(x)=x+1/2*x^3/3+1/2*3/4*x^5/5+1/2*3/4*5/6*x^7/7+...
acos(x)=pi/2-asin(x)
Szybk± zbieżno¶ć uzyskuje się dla x <<1, dlatego warto zredukować zakres
argumentu. Podobny algorytm (rozwinięcie acos(1-x)/sqrt(x)) jest w [1].

Inne metody:
Redukcja argumentu + interpolacja.
Aproksymacja wymierna (Padego - iloraz wielomianów)
Algorytmy CORDIC (uzbieżnianie szeregów) [2]

Jeżeli możesz kupić jaki¶ kompilator C, (lub znaleĽć GNU w wersji dla
twojego procesora) to problem rozwi±zuje doł±czona do niego biblioteka
zmiennoprzecinkowa. Przy okazji odpada implementacja podstawowych operacji
(+-*/). Jeżeli jednak zamierzasz sam to pisać, to sporo informacji jest w
[3]. Na marginesie - warto dobrze przemy¶leć wybór reprezentacji f-p; IEEE
nie musi być wcale optymalne.


Można też pomy¶leć o dołożeniu do systemu koprocesora, np. w postaci
małego zmiennoprzecinkowego DSP (C31 Texas Instruments) we współpracy z
prostszym procesorem głównym lub nawet samodzielnie.

Literatura:
[1] Jerzy Kaczmarczuk "Mikroprocesor Z80"
[2] Janusz Biernat "Arytmetyka komputerów"
[3] D.E. Knuth "The art of computer programming" Vol. 2

--
Jarosław Szynal
"To err is human; to forgive, divine."