Probleme mit Servo & ATMEGA8535

Hi!

Ich hab mal wieder ein Problemchen und würde damit gerne an euch treten:

Ich möchte über einen ATMEGA8535 einen Servo ansteuern, wenn vorher in einem Zahlenfeld der richtige Code eingegeben wurde.

Was die Programmierung angeht bin ich auch auf dem richtigen Weg, allerdings machen die Servos nicht das, was ich von ihnen erwarte.

Ich habe folgende drei Servos, von denen ich letzten Endes aber nur einen brauchen werde. Zu Testzwecken schließe ich in der Regel aber alle drei nacheinander an. Bei den Servos handelt es sich um folgende:

TowerPro – MicroServo9g / SG90
Modelcraft – Y-3009
Modelcraft - MC-410

Der entscheidene Code sieht folgendermaßen aus:

Else  // Eingabe des richtigen Codes
{
digitalWrite(redPin, LOW);
digitalWrite(greenPin, HIGH); 
digitalWrite(buzzer, HIGH);

myservo.write(160);    // drehen des Servos über <SoftwareServo.h> // <Servo.h> bei dem Controller anscheinend nicht möglich
SoftwareServo::refresh();


delay(5000);
digitalWrite(redPin, HIGH);
digitalWrite(greenPin, LOW); 
digitalWrite(buzzer, LOW);

myservo.write(0);
SoftwareServo::refresh();


}

Gewünscht ist, dass nach Eingabe des richtigen Codes sich der Servo dreht und nach Ablauf der Zeit wieder zurück dreht.

Mit dem von mir gegebenen Code lässt sich bisher allerdings nur der TowerPro ansprechen. Die anderen beiden Servos bewahren stillschweigen, bis auf ein Zucken, wenn ich sie mir Strom versorge.
Die Versorgung der Servos läuft über eine 9V Batterie, während der Controller über meinen ArduinoOne mit 5V betrieben wird.

Allerdings funktioniert der verbleibende Servo auch nur teilweise:
Zum einen dreht er immer weiter, anstatt zurück, zum anderen bleibt er des öfteren hängen und macht gar nichts mehr.
Via <servo.h> Lib und ArduinoOne funktioniert alles wie gewünscht, nur nicht mehr, wenn ich es auf das ATMEGA8535 lade.

Ich hoffe euch fällt dazu etwas ein, was mir weiterhelfen kann ?

Wieso muß es ein ATMEGA8535 sein???
Grüße Uwe

Hallo!
Standard Servos nur an 5 Volt betreiben !
Der 9 Volt-Block ist sowieso ungeeignet..kann den Strom uner Last nicht bereitstellen.
besser 4 x NiMh oder 2s Lipo mit Spannungsregler verwenden.

mfg Martin

Okay,

5V Spannungsregler kommt. Aber das Problem lösen wird das ja eher nicht oder?

Was würdet ihr denn Vorschlagen anstatt dem ATMEGA8535, der lag halt so rum :wink:

Atmega328. Der gleiche wie im UNO

Der 8535 ist mit dem ATtiny85 vergleichbar:

8kB Flash und 512 Bytes RAM

Der hat auch wie alle kleineren Atmegas den Unterschied, dass sich die Timer ein einziges TIMSK Register teilen. Die Servo Lib geht aber davon aus, dass es getrennte Register für jeden Timer und damit TIMSK1 gibt. Das gleiche gilt glaube ich für das Interrupt Flag Register TIFRn. Allerdings weiß ich nicht wie das dann überhaupt kompiliert.

Oder du machst die Servo-Ansteuerung per Hand. Dazu wird hier auch schon mal Code gepostet.