
Den där lösningen är nog i alla fall snabbare än att anropa sin() varje gång.
Men det är *inte* en lösning med en lookup tabell...

Det är en "PC-lösning" intryckt i en PIC, vilket kanske "fungerar" men det har
inte speciellt mycket med programmering av mikrokontrollers att göra, och du
har inte lärt dig speciellt mycket på det heller.
Sen så bör du nog tänka till lite. vilket upplösning har det register som du ska skriva till ?
D.v.s CCPR1L ? Är det ens i närheten av "double" eller t.ex "0.2902846773" ??
Det ser ju minst samt löjligt ut med 10 decimaler...

Och du har alltså 16 värden per kvarts-cykel.
Och du har ju fortfarnde en hel del beräkningar i varje steg. Kom du aldrig på tanken
att lägga de värden som ska in i CCPR1L direkt i din "tabell" ? Då slipper du
ju i princip alla beräkningar helt och hållet. Alltså något i stil med :
Kod: Markera allt
#include <pic16F887.h>
unsigned char Sinus(int b);
void Delay(int a);
int x = 0, i = -1.0;
void main(){
...
...
while(1){
while(x<=16){
CCPR1L = 1+Sinus(x);
x++;
}
...
...
}
}
unsigned char Sinus(int b){
...
...
else
if (b == 2){
return 24;
}
...
...
}
}