Hallo

Also ich habe jetzt dieses Programm ausprobiert:
https://www.roboternetz.de/phpBB2/vi...=318650#318650

Die Impulslänge für die Servoposition setzt sich aus LEFT_TOUCHT und pos zusammen:
Code:
void pulseSERVO(uint8_t position)
{
	cli();
// Impulsstart, Ausgang auf High
	PORTC |= SERVO_OUT;
// Der Gesamtimpuls besteht aus zwei Teilen, zuerst der Anteil für linke Position
	delayCycles(LEFT_TOUCH);
// und dann der Abstand von Links zum gewünschten Drehwinkel in Einzelschritten*pos
	while (position--) {
		delayCycles(PULSE_ADJUST);
	}
// Impuls ist gesendet, Ausgang wieder auf Low
	PORTC &= ~SERVO_OUT;				// SERVO_OUT -> LO (pulse end)
	sei();
}

void task_SERVO(void)
{static uint8_t pos;
// wenn Stopwatch1 größer 19 ist sind 20ms seit dem letzten Impulsstart vergangen
	if (getStopwatch1() > PULSE_REPETITION) {
//Impuls zum Servo senden
		pulseSERVO(pos);
// ---------------------------------------------------------------------
// Nach ca. 50ms wird der Impuls für einen neuen Winkel berechnet
		if (getStopwatch2() > 48) {
			pos++; // Impulslänge um einen Schritt erhöhen
			//pos+=3; // größere Schritte
// Wenn der rechte Endpunkt erreicht ist, starten wir wieder links
			if (pos > RIGHT_TOUCH) {pos = 0;}
			setStopwatch2(0); // restart der 50ms-Verzögerung
		}
// ---------------------------------------------------------------------
		setStopwatch1(0); // restart der 20ms-Impulswiederholung
	}
}
Und das wird eben endlos wiederholt.

Gruß

mic