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
Lesezeichen