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:
Und das wird eben endlos wiederholt.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 } }
Gruß
mic







Zitieren

Lesezeichen