Beim Arduino ist die Zeitmessung ganz einfach:
http://arduino.cc/en/pmwiki.php?n=Reference/Micros

Damit kann man sich den, von Geistesblitz beschriebenen Zeit-Zähler ganz leicht basteln, indem man
-vor dem interessanten Teil die aktuellen Microsekunden speichert
-direkt nach dem interessierenden Codeteil die Microsekunden ausliest
und beides voneinander abzieht.

Code:
unsigned long startmicros=micros();                  // StartZeit
//hier Dinge tun, deren Dauer wir wissen möchten


unsigned long endmicros=micros();                              // EndZeit
//und dann bei passender Gelegenheit das Ergebnis ausspucken:

Serial.println(endmicros-startmicros,DEC);                // Zeitspanne ausgeben
Was den PID angeht: richtig. Ohne I-anteil wirst du nie wirklich auf Null landen.
Der Trick dürfte es sein, den Bereich, indem kein I mehr verwendet wird, so knapp zu bemessen, dass das Ergebnis noch zufriedenstellend ist (also: so knapp wie möglich, aber eben so dass es läuft).
Auch Modellbauservos fahren nicht _auf den Punkt_, die Abweichung ist lediglich so klein, dass man sie nicht bemerkt (bei den besseren jedenfalls, die Billigdinger machen wegen ein, zwei Grad keinen Wirbel).

Wenn du das Problem hast, dauernd über den Sollbereich drüber zu rauschen, dann benutz doch mal in der Gegend um den Sollbereich zahmere Regelparameter.
So wie das hier empfohlen wird: http://playground.arduino.cc/Code/PI...TuningsExample
Das lässt sich auch mit beliebig vielen Stufen aufbauen, und es können jeweils alle drei Grössen einzeln angepasst werden.

Auch empirisch geht sowas: ich hab mir seinerzeit kurzerhand ein paar Potis temporär hinzugefügt, um P,I und D "live" verstellen zu können, so erreicht man schnell erst mal "brauchbare" Wertebereiche.