Servo an Arduino Mega macht Probleme?

Hallo,

Ich habe mir einen Arduino Mega zugelegt un stehe vor einem Problem: Ich kann ohne Probleme LEDs ansteuern etc, doch wenn ich einen Servo anschließe, und diesen dann wie gewohnt mit der Servo.h Bibliothek ansteuere, so passiert gar nichts, bis auf dass die "L-LED" auf dem Arduino Board am Blinken ist. Kann mir einer erklären was das zu bedeuten hat? Und Ja der Servo ist richtig angeschlossen. Selbst wenn ich einen PIN ansteuere an dem nichts angeschlossen ist, fängt die LED an zu blinken und nichts passiert.

Mfg

Gib uns bitte den Sketch und zeichne, Foto oder beschreibe wie Du den Servo anschließt.
Grüße Uwe

Also ich habe den Servo ganz normal Angeschlossen, wie ich es bei meinem Arduino UNO auch immer mit erfolg getan habe. Braunes Kabel an Ground, Rotes Kabel an 5V und das gelbe Kabel an den Jeweiligen Pin. In meinem Fall Pin 9.
Zum Testen habe ich den Sweep Sketch genommen:

#include <Servo.h> 
 
Servo myservo;  // create servo object to control a servo 
                // a maximum of eight servo objects can be created 
 
int pos = 0;    // variable to store the servo position 
 
void setup() 
{ 
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object 
} 
 
 
void loop() 
{ 
  for(pos = 0; pos < 180; pos += 1)  // goes from 0 degrees to 180 degrees 
  {                                  // in steps of 1 degree 
    myservo.write(pos);              // tell servo to go to position in variable 'pos' 
    delay(15);                       // waits 15ms for the servo to reach the position 
  } 
  for(pos = 180; pos>=1; pos-=1)     // goes from 180 degrees to 0 degrees 
  {                                
    myservo.write(pos);              // tell servo to go to position in variable 'pos' 
    delay(15);                       // waits 15ms for the servo to reach the position 
  } 
}

Beim Anschliessen des Servos bewegt er sich immer ein kleines Stück. Das tut er aber immer, deswegen gehe ich davon aus, der er richtig angeschlossen ist und auch funktioniert.

Mfg

HelishCoffe:
Zum Testen habe ich den Sweep Sketch genommen:

Du hast nicht zufällig Deine beiden Boards Uno und Mega gleichzeitig am PC angeschlossen und lädst den Sketch immer auf den Uno, während Du ihn eigentlich auf den Mega laden möchtest, oder vielleicht doch?

Nein daran liegt es nicht, die RX unt TX LED's am Arduino Mega Board blinken auch auf, wenn ich den Sketch hochlade. Und wie gesagt, wenn ich eine LED zum leuchten bringen möchte funktioniert alles wie geschmiert. Es muss irgendwas mit dem Servo zutuhen haben :confused:

HelishCoffe:
Nein daran liegt es nicht, die RX unt TX LED's am Arduino Mega Board blinken auch auf, wenn ich den Sketch hochlade. Und wie gesagt, wenn ich eine LED zum leuchten bringen möchte funktioniert alles wie geschmiert. Es muss irgendwas mit dem Servo zutuhen haben :confused:

Also die L-LED ist auf dem Board mit Pin-13 verbunden.
Wenn Du Pin-13 in Deinem Sketch überhaupt nicht ansteuerst und die L-LED blinkt trotzdem, dann fällt mir als einzige Ursache dafür ein, dass Dein Board einen Reset durchführt. Oder viele Resets nacheinander.

Was könnte die Ursache für Resets sein? Ich sehe da zwei Möglichkeiten:

  1. Hardware (z.B. irgendeine Schaltung, die im Sketch-Ablauf einen Kurzschluss verursacht)
  2. Software (z.B. ist aus irgendwelchen Gründen der Watchdog-Timer aktiviert)

Also am besten mal systematisch testen:
Wenn Du Deinen Servo vom Board abstöpselst, so dass keine externe Hardware angeschlossen ist, blinkt dann mit dem geposteten Sketch die L-LED immer noch? Oder dann nicht mehr?

jurs:

HelishCoffe:
Nein daran liegt es nicht, die RX unt TX LED's am Arduino Mega Board blinken auch auf, wenn ich den Sketch hochlade. Und wie gesagt, wenn ich eine LED zum leuchten bringen möchte funktioniert alles wie geschmiert. Es muss irgendwas mit dem Servo zutuhen haben :confused:

Also die L-LED ist auf dem Board mit Pin-13 verbunden.
Wenn Du Pin-13 in Deinem Sketch überhaupt nicht ansteuerst und die L-LED blinkt trotzdem, dann fällt mir als einzige Ursache dafür ein, dass Dein Board einen Reset durchführt. Oder viele Resets nacheinander.

Was könnte die Ursache für Resets sein? Ich sehe da zwei Möglichkeiten:

  1. Hardware (z.B. irgendeine Schaltung, die im Sketch-Ablauf einen Kurzschluss verursacht)
  2. Software (z.B. ist aus irgendwelchen Gründen der Watchdog-Timer aktiviert)

Also am besten mal systematisch testen:
Wenn Du Deinen Servo vom Board abstöpselst, so dass keine externe Hardware angeschlossen ist, blinkt dann mit dem geposteten Sketch die L-LED immer noch? Oder dann nicht mehr?

Ja dann blinkt die LED immernoch. Ich habe jetzt nichts mehr angeschlossen sondern nur den oben gezeigten Sketch hochgeladen und die LED blinkt. Habe hier nochmal ein kleines Video gemacht damit man sich das Problem etwas besser vorstellen kann:

HelishCoffe:
Ja dann blinkt die LED immernoch. Ich habe jetzt nichts mehr angeschlossen sondern nur den oben gezeigten Sketch hochgeladen und die LED blinkt. Habe hier nochmal ein kleines Video gemacht damit man sich das Problem etwas besser vorstellen kann:

Dein Video wird in meinem Browser nur mit einer "privat" Fehlermeldung angezeigt und nicht abgespielt.

Wenn die LED immer noch blinkt, dann ist entweder immer noch der Blink-Sketch drauf und der beabsichtigte Sketch wird gar nicht hochgeladen (den Fehler sollte die Arduino-Software allerdings anzeigen) oder aus irgendwelchen Gründen resettet sich das Board ständig, z.B. weil durch irgendeinen Fehler der Watchdog-Timer aktiviert wurde.

Versuche mal diesen Sketch hochzuladen (um einen eventuell aktivierten Watchdog-Timer abzuschalten):

#include <avr/wdt.h>
void setup(){
  wdt_reset(); // First thing, turn it off
  wdt_disable();
  Serial.begin(9600);
  Serial.println("Hello from setup");
}

void loop(){
  Serial.println("Hello from loop");
  delay(1000);
}

Beobachte dann Deine LED: Blinkt diese immer noch?
Schaue in den seriellen Monitor: Kommen die Textausgaben?

Wenn die LED mit diesem Sketch nicht mehr blinkt und die Textausgaben im seriellen Monitor ankommen, lade nochmal Deinen Servo-Sketch!

jurs:

HelishCoffe:
Ja dann blinkt die LED immernoch. Ich habe jetzt nichts mehr angeschlossen sondern nur den oben gezeigten Sketch hochgeladen und die LED blinkt. Habe hier nochmal ein kleines Video gemacht damit man sich das Problem etwas besser vorstellen kann:

Dein Video wird in meinem Browser nur mit einer "privat" Fehlermeldung angezeigt und nicht abgespielt.

Wenn die LED immer noch blinkt, dann ist entweder immer noch der Blink-Sketch drauf und der beabsichtigte Sketch wird gar nicht hochgeladen (den Fehler sollte die Arduino-Software allerdings anzeigen) oder aus irgendwelchen Gründen resettet sich das Board ständig, z.B. weil durch irgendeinen Fehler der Watchdog-Timer aktiviert wurde.

Versuche mal diesen Sketch hochzuladen (um einen eventuell aktivierten Watchdog-Timer abzuschalten):

#include <avr/wdt.h>

void setup(){
 wdt_reset(); // First thing, turn it off
 wdt_disable();
 Serial.begin(9600);
 Serial.println("Hello from setup");
}

void loop(){
 Serial.println("Hello from loop");
 delay(1000);
}




Beobachte dann Deine LED: Blinkt diese immer noch?
Schaue in den seriellen Monitor: Kommen die Textausgaben?

Wenn die LED mit diesem Sketch nicht mehr blinkt und die Textausgaben im seriellen Monitor ankommen, lade nochmal Deinen Servo-Sketch!

Das Video sollte jetzt sichtbar sein, war mein Fehler. Also wenn ich den von dir gezeigten Sketch hochlade funktioniert alles wunderbar. Die Led blinkt nicht mehr, und die Ausgaben werden im Seriellen Monitor angezeigt - Perfekt. Doch sobald ich den Servo-Sketch wieder lade, ist das Problem wieder da, wie im Video auch gezeigt. Die Led blinkt wieder und nichts passiert.
Habe auch mal andere Pins genommen, doch das Problem besteht weiterhin. Ich hoffe mal nicht das irgendwas am Arduino-board defekt ist, aber wenn etwas an der Hardware nicht stimmen sollte, dann dürfte dein Sketch doch auch nicht laufen.Aber er läuft.

Und Danke für deine Hilfe :slight_smile:

HelishCoffe:
Die Led blinkt nicht mehr, und die Ausgaben werden im Seriellen Monitor angezeigt - Perfekt. Doch sobald ich den Servo-Sketch wieder lade, ist das Problem wieder da, wie im Video auch gezeigt. Die Led blinkt wieder und nichts passiert.

Sehr merkwürdig.

Hast Du die richtige Arduino-Softwareversion installiert: 1.0.5?
Und nicht etwa die Betaversion 1.5.x für den DUE?

Wenn die korrekte Softwareversion 1.0.5 läuft und der MEGA dieses merkwürdige Verhalten nach dem Sketch-Upload zeigt, würde ich vermutlich probieren, den Bootloader neu auf dem Board zu installieren. Also entweder einen "Programmer" oder ein anderes Board als "Arduino as ISP" anschließen und dann "Bootloader installieren". Ist aber mehr so auf Verdacht, weil mir sonst nichts anderes mehr einfällt.

jurs:
Sehr merkwürdig.

Hast Du die richtige Arduino-Softwareversion installiert: 1.0.5?
Und nicht etwa die Betaversion 1.5.x für den DUE?

Wenn die korrekte Softwareversion 1.0.5 läuft und der MEGA dieses merkwürdige Verhalten nach dem Sketch-Upload zeigt, würde ich vermutlich probieren, den Bootloader neu auf dem Board zu installieren. Also entweder einen "Programmer" oder ein anderes Board als "Arduino as ISP" anschließen und dann "Bootloader installieren". Ist aber mehr so auf Verdacht, weil mir sonst nichts anderes mehr einfällt.

Ja ich benutze die Version 1.0.5 . Am Bootloader würde ich ja ungerne herumfuschen, da ich erstens davon wenig Ahnung habe, und ich nichts kaputt machen möchte (Es kann ja sein dass es daran gar nicht liegt) und zweitens der Arduino Mega ja brand neu ist.

Ich habe jetzt noch ein wenig herumgespielt und mir ist folgendes Aufgefallen: Wenn ich diesen Sketch hier Lade:

#include <Servo.h> 
 
Servo myservo;
void setup() 
{ 
    myservo.attach(9);
} 
void loop() 
{ 
    myservo.write(0);
}

Blinkt die LED nicht mehr, aber der Servo wird auch nicht an die gewünschte Position gefahren... sehr merkwürdig. Unter anderem fängt die LED auch an zu Blinken wenn ich Töne erzeugen möchte:

void setup() 
{ 
} 

void loop() 
{ 
  tone(9, 500, 100);
  delay(110);
}

Ich verstehe das alles nicht mehr. Trotzdem Danke für deine Hilfe und Geduld :slight_smile:

HelishCoffe:
Ich verstehe das alles nicht mehr. Trotzdem Danke für deine Hilfe und Geduld :slight_smile:

Ich verstehe es auch nicht.

Vielleicht kannst Du mal in einen der Blinke-Sketche einige Serial-Debug-Ausgaben mit einbauen, etwa so:

#include <Servo.h> 
 
Servo myservo;
void setup() 
{ 
  Serial.begin(9600);
  Serial.println("Starting...");
  myservo.attach(9);
} 
void loop() 
{ 
  Serial.println("Running...");
  myservo.write(0);
  delay(1000);
}

So dass man im Serial Monitor erkennen könnte, ob der Sketch ständig ausgeführt wird, ob er immer wieder neu startet, oder ob er gar nicht ausgeführt wird?

Der Serial Monitor gibt zwar nur Bruchstücke aus, aber ich gehe mal davon aus das "Sta~" für Starting stehen sollte und er an dieser Stelle abbricht, da er den Zeilenumbruch anscheind auch nicht mehr mitnimmt. Der Arduino blinkt wieder mal fröhlich vor sich hin:

Also er scheint den Sketch wohl an dieser Stelle abzubrechen aber wieso?

HelishCoffe:
Also er scheint den Sketch wohl an dieser Stelle abzubrechen aber wieso?

Also Dein Arduino resettet ständig und startet laufend neu.
Offenbar immer dann, sobald im Setup der Servo per attach zugeschaltet wird.

Bei so kräftigen Stromverbrauchern wie einem Servo kann das passieren, wenn die Spannungsversorgung des Boards wegen zu viel Stromverbrauch durch den Servo zusammenbricht. Oder wenn der Servo falsch angeschlossen ist.

Wenn das aber auch ohne Beschaltung (nichts ist am Board angeschlossen) passiert, liegt eventuell irgendwo ein Kurzschluss auf (oder unter) dem Board vor. Oder ein Defekt.

Du hast nicht zufällig kleine Drahtstücke abgeschnitten, die jetzt lose auf dem Board liegen und an irgendwelchen Leiterbahnen oder Bauteilen einen Kurzschluss verursachen können? Oder das Board auf einer leitfähigen Unterlage abgelegt?

Hat das Board irgendwelche Kurzschlüsse oder vielleicht Überspannungen über 5V (außer am Netzteilanschluss) abbekommen? Oder hast Du versucht die 5V-Stromversorgung des Servos an einem Arduino-Ausgang abzugreifen?

Eventuell könnte man versuchen, einen kleinen Test-Sketch zu programmieren um herauszufinden, ob und ggf. welche Pins noch gefahrlos auf Output geschaltet werden können, ohne dass sich das Board resettet. Pin-9 scheint an diesem Board ja wohl mindestens ausgefallen zu sein und kann nicht mehr als Output verwendet werden.

Vielleicht das hier mal laufen lassen (ohne irgendwas am Board anzuschließen):

// Kurzschluss-Testprogramm für DigitalPins Arduino MEGA
// Schaltung: Nichts an das Board anschließen!
int pins=54;

void setup() 
{
  Serial.begin(9600);
  for (int i=2;i<pins;i++)
  {
    Serial.print("Teste Pin ");
    Serial.print(i);
    pinMode(i,OUTPUT);
    delay(10);
    digitalWrite(i,HIGH); 
    delay(10);
    digitalWrite(i,LOW); 
    pinMode(i,INPUT);
    Serial.println(" OK");
  }

} 

void loop() 
{ 
}

Läuft das Fehlerfrei durch alle Ports? Oder wo bleibt es hängen und startet neu?

Eventuell könnte man versuchen, einen kleinen Test-Sketch zu programmieren um herauszufinden, ob und ggf. welche Pins noch gefahrlos auf Output geschaltet werden können, ohne dass sich das Board resettet. Pin-9 scheint an diesem Board ja wohl mindestens ausgefallen zu sein und kann nicht mehr als Output verwendet werden.

Pins sind alle Ok, ein Kurzschluss etc. wird wohl nicht vorliegen. Habe gerade eine LED an Pin 9 problemlos angeschlossen und zum Leuchten gebracht. Die L-LED Blinkt nicht und das Board resetet sich auch nicht. Ich kann problemlos eine kleine Fade Animation mit der LED machen ohne Probleme:

void setup() 
{ 
    pinMode(9, OUTPUT);   
}
void loop() 
{ 
  for(int i = 0; i < 50; i++)
  {
    analogWrite(9, i);
    delay(10);
  }
  for(int i = 50; i > 1; i--)
  {
    analogWrite(9, i);
    delay(10);
  }
}

Es muss irgendwie an der Software liegen oder doch am Board ich weiß es nicht.

Und wenn ich nun wieder den altbekannten Sweep-Sketch aufspiele, ganz egal ob ein Servo an Pin 9 angeschlossen ist oder nicht, so resetet sich das wieder pausenlos.

In der Arduino FAQ habe ich auch noch etwas gefunden:

When uploading your sketch, Arduino 0004 checks if it's too big for the ATmega8, but it bases its calculation on a 1 Kb bootloader. You may have a older bootloader that takes up 2 Kb of the 8 Kb of program space (flash) on the ATmega8 instead of the 1 Kb used by the current bootloader. If yours is bigger, only part of the sketch will be uploaded, but the software won't know, and your board will continually reset, pause, reset.

Ich glaube aber eher nicht, dass das Problem mit der Größe des Sketches zusammenhängt, wobei das Verhaltensmuster "reset, pause, reset" mein Problem beschreibt.

Ich habe nochmal testweise den Sweep-Sketch auf meinem Arduino UNO aufgespielt und es klappt alles wunderbar.
Ich verstehe das echt nicht mehr.

Gibt es denn große Unterschiede ziwschen dem Arduino Mega 2560 und dem Arduino Mega (ATmega1280) ?
Ich habe den Mega2560. Gibt es da irgendwelche Entscheidenen Unterschiede?