Hi,
ich hab das ganze doch noch hinbekommen; falls jemand ebenfalls darauf stoßen sollte, hier ist des Source-Code;
allerdings ist noch zu klären warum das Ergebnis an manchen stellen so weit vom soll-wert abweicht; (+-1 ist ok da ich durch 2^15 dividiere und nicht durch 2^15-1);
Ausgabe:
und der Source-Code:Code:std | diy sin(30°): 16384 | 16385 asin(0.5): 7680 | 7547 asin(0.7): 11373 | 11373 asin(0.3): 4469 | 4468
MFGCode:nt16_t linasin(int16_t input) { uint8_t neg = input<0?1:0; uint16_t _input = abs(input); //input &= ~(1 << 15); //=abs() for (uint8_t i = 0; i < 91; i++) { uint16_t data1 = pgm_read_word(&linsin_tab[i]); uint16_t data0 = pgm_read_word(&linsin_tab[i+1]); if (_input >= data1 && _input < data0) { data0 -= data1; data1 = _input - data1; int16_t res = i * 256 + 256 * data1 / data0; return neg ? -res :res; } } return 0; }






Zitieren

Lesezeichen