PIN PD5 als Ausgang fürs Servo sollte falsch sein.
Schau noch mal ins Datenblatt von deinem mega8. Die Ausgänge der Hardware-PWM sollten PB1-3 sein. In deinem Fall mit OCR1A also PB1.
Ansonsten sollte der Code soweit eigentlich funktionieren.
Bei mir hat der Servo einen max. Ausschlag bei 720us und bei 2520us.
Wenn du das umrechnest (s. erster codeschnippsel von mir)
kommst du auf OCR1A=495 bis 452.
Ich würde testweise noch ein delay einbauen, sonst dürfte er zu schnell runterzählen.
Code:
while(1){
if (!( PIND & (1<<PIND2))) /* mache was wenn PinD2 low ist */
{
if(OCR1A > 452){
OCR1A--; /* Pulsbreite verkürzen */
}
} else {
OCR1A = 476;
}
for(i=0;i<50;i++)
_delay_ms(10);
}
Sollte also so lange der Taster gedrückt ist aller 500ms die Pulsbreite reduzieren und so den Servo bis max in eine Richtung drehen und beim loslassen wieder resetten.
Zum testen sollte es reichen. Evtl. noch Taster entprellen.
Lesezeichen