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:
Code:
std | diy
sin(30°): 16384 | 16385
asin(0.5): 7680 | 7547
asin(0.7): 11373 | 11373
asin(0.3): 4469 | 4468
und der Source-Code:
Code:
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;
}
MFG
Lesezeichen