@ikarus_177

Code:
 ...
   switch (iCounter)
   {
      case 1: SERVOPORT |= (1 << SERVO1);
      case 2: SERVOPORT |= (1 << SERVO2);
      case 3: SERVOPORT |= (1 << SERVO3);
      case 4: dServo = 1;
   } ...
Ich glaube da wird nicht das getan, was Du haben möchtest. In C ist das so, dass bei einem passenden case-Vergleich der komplette Code bis zum Ende des Blockes ausgeführt wird. D.h. wenn iCounter 2 ist, dann wird nicht nur SERVOPORT |= (1 << SERVO2); sondern auch SERVOPORT |= (1 << SERVO2); und SERVOPORT |= (1 << SERVO3); sowie dServo = 1; ausgeführt. Um das zu verhindern muss man am Ende jedes Abschnitts ein break; setzen, dadurch wird der switch-Block verlassen.
Code:
 ...
   switch (iCounter)
   {
      case 1: SERVOPORT |= (1 << SERVO1); break;
      case 2: SERVOPORT |= (1 << SERVO2); break;
      case 3: SERVOPORT |= (1 << SERVO3); break;
      case 4: dServo = 1; break;
   } ...
MfG Mark