Tim schrieb:
> Ich bekomme einen Interrupt in meinem Programm, welcher den 0-Durchgang
> signalisiert. Was nun?
Dann muss logischerweise ucSineTableCounter gerade bei 0 sein.
Wenn nicht, musst du ihn eben auf 0 setzen.
> Ich möchte wenn möglich, den erzeigten Sinus nicht unterbrechen...
d.h. dann bleibt dir nichts anderes übrig als ucSineTableCounter nicht
einfach fix auf 0 zu setzen, weil ja dann sonst dein Ausgangssinus einen
Sprung in der Kurve machen würde.
Man könnte ihn zb sanft nachführen, indem man nur einzelne Werte in der
Tabelle überspringt.
Beim signalisierten 0-Durchgang ist dein ucSineTableCounter zb bereits
5. Dein Sinus läuft also ein wenig vor. Anstatt ucSineTableCounter hart
auf 0 zu setzen, verringerst du ihn erst mal um 1.
Beim nächsten signalsierten 0-Durchgang ist die Abweichung noch 4.
Wieder wird um 1 verringert.
usw. usw.
Bei jedem signalisierten 0-Durchgang siehst du dir den Wert von
ucSineTableCounter an, und je nach Abweichung korrigierst du ihn, so
dass sich die Phase deines Sinus mehr und mehr den 0-Durchgängen
annähert.
Dann springt dein Sinus nicht, sondern einzelne Wellenzüge werden ein
wenig gestaucht bzw. gestreckt, bis sich die Phasenlage synchronisiert
hat.