Gut, den Duty Cycle kannst Du, bei bekannter Frequenz feststellen indem Du einen Timer laufen lässt, der mit einer entsprechend hohen Frequenz tickt.

Wenn dann ein PinChange Interrupt auftaucht (low-high), setzt Du das Timer Register auf 0, beim nächsten Interrupt (high-low) liest Du den timer aus und kannst dann den duty cycle bestimmen. Die Timerfrequenz bestimmt dabei die erreichbare Genauigkeit, muss aber so niedrig sein, dass der Timer bei maximalem DC nicht überläuft.