Hallo!

Also ich habe gerade mit einer ganz simplen Ansteuerung versucht, einen Modelbauservo (robbe FS100) mittels AtMega32 anzusprechen.

Dabei hab ich die Stromversorgung des Servos aus einer eigenständigen Stromquelle (wie empfohlen) sichergestellt. Der Signal-Pin ist an den Port-B2 angelegt.

Zum Programm:
Code:
void servo2mitte()
{
        PORTB |= (1<<PB2);
        _delay_us( 1500 );    // in den 1500 steckt die Lageinformation
        PORTB &= ~(1<<PB2);
 
        _delay_ms( 18 );      // ist nicht kritisch
}

void servo2left()
{
        PORTB |= (1<<PB2);
        _delay_us( 2000 );    // in den 2000 steckt die Lageinformation
        PORTB &= ~(1<<PB2);
 
        _delay_ms( 18 );      // ist nicht kritisch    
}

void servo2right()
{
        PORTB |= (1<<PB2);
        _delay_us( 1000 );    // in den 1000 steckt die Lageinformation
        PORTB &= ~(1<<PB2);
 
        _delay_ms( 18 );      // ist nicht kritisch  
}
Die 3 Methoden rufe ich jetzt nacheinander auf, also links, mitte, rechts, mitte, links, ...

So, was passiert jetzt?
Der Servo dreht ca 2mm nach links, fängt dort zu zittern an, und das wars. Weiter passiert nichts.

Was ich geplant hatte?
Der Servo soll sich einfach bis zum Anschlag nach links drehen, dann in die Mitte, dann nach rechts, wieder in die Mitte, etc.

Ich komme jetzt leider einfach nicht dahinter wo mein Fehler liegt.
Bitte daher um Hilfe!
Btw: Ich wollte absichtlich auf den einsatz von Timern verzichten, weil ich mich mit denen noch nicht so gut auskenne.

LG



Nachtrag:
Der Port ist folgendermaßen difiniert:
Code:
DDRB |= (1<<PB2); 
    PORTB |= (0<<PB2);