Ey Sebastian, du bekommst gleich nen Watschen von mir!

Code:
while (!(TIFR & (1<<TOV2))); // ()
TIFR =  1<<TOV2; // sonst löschen wir alles (TOV2 ist eh gesetzt)
Wie schon gesagt kann die Multiplikation zweier Sinüsse durch Summe ersetzt werden (andere Frequenzen und Amplituden). Das Zauberwort ist "Additionstheorem".

Zeit bei der Multiplikation spart man eigentlich nur dann, wenn der AVR keine MUL-Befehle hat. Zwei Sinüsse zu addieren, deren Frequenzen dicht beisammen sind, dürfte schwerer sein, als zu Multiplizieren, wenn sich die Frequqnzen teilen:
Code:
{
	uint8_t x1 = 0;
	uint8_t x2 = 0;
	uint8_t f = 0;
	const uint8_t fak = 7; // Teilungsverhältnis der Frequenzen.
	
	uint8_t wert1, wert2 = 0, wert;
	
  	while (1) 
  	{
      		wert1 = sinwerte[x1++];
      		if (0 == f)
	      		wert2 = sinwerte[x2++];
      		
      		if (++f == fak)
      		    f = 0;
      		
      		wert = (uint16_t) (wert1 * wert2) >> 7;
      		
      		while (!(TIFR & (1 << TOV2)));
		OCR2 = wert;
		TIFR |= (1<<TOV2);

		if (x1 == sizeof(sinwerte) / sizeof(sinwerte[0]))
			x1 = 0;
			
		if (x2 == sizeof(sinwerte) / sizeof(sinwerte[0]))
			x2 = 0;
	}
}