Podrías intentar así:
byte sine[] = {
127, 134, 142, 150, 158, 166, 173, 181, 188, 195, 201, 207, 213, 219, 224, 229,
234, 238, 241, 245, 247, 250, 251, 252, 253, 254, 253, 252, 251, 250, 247, 245,
241, 238, 234, 229, 224, 219, 213, 207, 201, 195, 188, 181, 173, 166, 158, 150,
142, 134, 127, 119, 111, 103, 95, 87, 80, 72, 65, 58, 52, 46, 40, 34, 29, 24, 19,
15, 12, 8, 6, 3, 2, 1, 0, 0, 0, 1, 2, 3, 6, 8, 12, 15, 19, 24, 29, 34, 40, 46, 52,
58, 65, 72, 80, 87, 95, 103, 111, 119,};
int index;
void setup(){
//set digital pins 0-7 as outputs
for (int i=0;i<8;i++){
pinMode(i,OUTPUT);
}
noInterrupts();
}
void loop(){
index=(index+1)%100;
PORTD=sine[index];
}
Y ver qué velocidad consigues. Si es mayor que la deseada, podrías ralentizarla metiendo alguna instrucción o bucle "inútil"; si está por debajo de la velocidad útil, creo que para tu proyecto deberás cambiar el chip (nunca mejor dicho).
Saludos