Tjaja, ich weiß, die Interrupts sind ein harter Streitpunkt. Natürlich kann man nicht bei jedem Programm auf Interrupts verzichten, aber es geht doch in ziemlich vielen Fällen und wenn man sich mal an das Prinzip gewöhnt hat, dann ist es auch gar nicht so schlecht.

Beim Tonereugungsprogramm sieht das folgendermaßen aus

while(1)
{

Ausgabewert ausrechnen ( z.B. sin(freq1)*sin(freq2)*Hüllkurve );
warte auf PWM-timer;
schreibe Wert an timer;

}

Es gilt: die Berechungsroutine darf nur soviel Zeit verbrauchen, dass sie in die Zykluszeit der Ausgabe passt. Das ist übrigens das wesentliche Merkmal eines Echtzeitsystems.

Das Warten auf den Timer benötigt hier sogar weniger Zeit als das Anspringen einer Interruptroutine und es bleiben damit sogar ein paar mehr Zyklen für die Rechenroutine.

Gruss,
stochri