Mit meinem Vorschlag könntest Du das Vorzeichen übrigens auch ermitteln,
indem Du das Spannungssignal an einen weiteren Pin des µC führst und bei
der steigenden Flanke des EXOR-Ausgangs den Zustand sicherst und bei der
fallenden Flanke ebenfalls. Dann die beiden Werten wieder
EXOR-verknüpfen. Ist das Ergebnis 1, dann eilt der Strom nach, ist es
0, dann eilt er vor (Wenn ich nichts übersehen habe...)
Überlegung: Wenn die steigende Flanke auftritt (weil entweder der Strom
durch Null gegangen ist oder die Spannung) registriert der µC durch den
Capture den Impuls, sichert einen Timerwert und gleichzeitig den
Zustand des Spannungssignals. Wenn dann die fallende Flanke kommt, wird
der zweite Capture-Wert gesichert und wiederum der Zustand des
Spannungssignals. Hat das Spannungssignal in der Zwischenzeit seinen
Zustand geändert (also ist die Spannung durch null gegangen), dann
bedeutet das, dass der Strom noch nicht durch null gegangen ist und
demzufolge nacheilt. In dem Fall ergibt eine EXOR-Verknüpfung des
Spannungssignals mit dem ersten Wert eine '1', andernfalls (wenn der
Strom voreilt) eine '0'. Da bei induktiven und kapazitiven Lasten die
Phasenverschiebungen im Bereich +-90° liegen, müsste das so gehen.
Problematisch ist bei der Sache das Timing und damit die Auflösung, um
auch kleinere Verschiebungen erfassen zu können. Wenn Du eine
einigermaßen vernünftige Auflösung erreichen willst, ist es ein klarer
Fall für Assembler, da bei einer Interrupt-Steuerung sonst durch den
Compiler u.U. zu viel Overhead durch das Sichern von Registern beim
Einsprung in die ISR entsteht.
Mit externen Interrupts wird das ganze möglicherweise noch ungenauer,
weil man erst verzögert in der ISR den Timer bearbeitet. Mit Capture
benötigt man im Prinzip nur einen Interrupt, dessen Handler man in
Assembler dann auch sinnigerweise direkt in die Vektortabelle schreibt
(im Falle der Verwendung eines AVR natürlich), um die drei Taktzyklen
für den Sprung zu vermeiden. Außerdem sichert das Capture-Ereignis
verzögerungsfrei den Timerwert bei Auftreten der Flanke.