Ich weiß echt nicht ob ich lachen oder weinen soll:

#define LEFT_TOUCH 100 // Left servo touch
#define RIGHT_TOUCH 50 // Right servo touch [max. 255]

Die 100 für LEFT_TOUCH sind definitiv viel zu wenig! Erhöhe jetzt mal diesen Wert in 100er-Schritten (200, 300, 400, 500) und teste jedesmal, was passiert.

LEFT_TOUCH ist der Wert für die kleinste Impulslänge, LEFT_TOUCH+RIGHT_TOUCH ergibt dann den längsten Impuls.

Ich will dich wirklich nicht unnötig verwirren, aber wir quälen uns hier durch Dirks Servoprogramme und verlieren dabei zunehmend das eigentliche Ziel aus den Augen: Wir wollen ein Servo ansteuern und müssen dazu einen Impuls erzeugen den das Servo als Drehwinkel interpretiert. Dieser Impuls sollte ca. 1,5ms lang sein und alle 20ms wiederholt werden:
Code:
// Servoansteuerung1: Wir erzeugen den Impuls mit sleep()         10.1.2010 mic
// sleep(1) verzögert ca. 0,1ms
// Servo an SDA (PC1) (XBUS Pin 12)

#include "RP6RobotBaseLib.h"

int main(void)
{
	initRobotBase();

	DDRC |= SDA;
	PORTC &= ~SDA;
	
	while(1)
	{
	   PORTC |= SDA;		// Impulsstart
	   sleep(15);			// 1,5ms warten
	   PORTC &= ~SDA; 	// Impulsende
	   sleep(185);			// 18,5ms warten
	}
	return(0); // wird nie erreicht
}
Bevor das Programm gestartet wird, drehst du das Servo von Hand an einen Anschlag (links oder rechts ist egal, du kannst beides ausprobieren). Wenn dann das Programm gestartet ist, dreht das Servo auf eine Position (ca. Mitte) und bleibt dort. Wenn du nun mit der Hand versuchst das Servo zu verdrehen, spürst du deutlich einen Widerstand.

Wenn das funktioniert ist dein Servo in Ordnung und der Anschluß richtig. Melde dich dann bitte wieder.

Gruß

mic