Arduino Mega mit Ethernetshield

Hallo, Bin mitlerweile am verzweifeln... Ich habe kürzlich an mein Arduino Mega 2560 ein (nachbau) Ethernetshield mit dem W5100 verbunden. Nach dem Tutorial dem ich nachging sollte ich zuerst die SD Karte ( 2GB FAT formatiert) testen, was auf anhieb funktioniert hat. Nach ein paar unerfolgreichen Netzwerktests wollte ich die SD Karte nochmals überprüfen und auf einmal bekam ich die Meldung das sie sich nicht mehr Initialisieren lässt! Hat irgendjmd eine Idee?? Habe ich mein Ethernetshield zerschossen? Was ich bisher versucht habe:

-Anderes MEGA -Mit DUE ausprobiert -Pin wie im sketch beschrieben auf 53 gesetzt -SD Karte neu fomartiert (auch mal auf FAT32) -Diverse Foren durchstöbert wobei es öfters darauf hinauslief das die Hardware defekt war...

Wäre um Hilfe sehr Dankbar!! Gruß

Gruzzlebeard: Nach ein paar unerfolgreichen Netzwerktests wollte ich die SD Karte nochmals überprüfen und auf einmal bekam ich die Meldung das sie sich nicht mehr Initialisieren lässt! Hat irgendjmd eine Idee?? Habe ich mein Ethernetshield zerschossen?

Das erste Augenmerk bei plötzlicher Nichtfunktion sollte beim Ethernet-Shield den Steckverbindungen gelten. Die ganze Konstruktion ist nämlich fehleranfällig für Steckverbindungen, die keinen Kontakt geben.

Problemlos sind meistens die seitlichen Headerleisten. Besonderes Augenmerk ist auf den 6-poligen ICSP Header zu richten, dass am ICSP-Anschluss die Pins tief genug in der Fassung sitzen.

Falls die seitlichen langen Pins sehr lang sind, so dass bei aufgestecktem Shield der ICSP-Header einerseits kaum Verbindung bekommt und andererseits zwischen der Oberseite der USB-Buchse und der Unterseite des Shields noch ausreichend Platz ist, kann es manchmal sinnvoll sein, mit einem hochwertigen Seitenschneider alle seitlichen Header-Pins um ca. 1,5-2 mm zu kürzen.

Falls aber umgekehrt die langen Pins recht kurz sind, dann kann es ggf. bei aufgestecktem Shield einen Kurzschluss zwischen der Obereite der USB-Buchse und der Unterseite des Shields geben. In dem Fall kann es sinnvoll sein, dass an der USB-Buchsenseite das Shield nicht bis ganz zum Anschlag eingesteckt wird und nur an der Seite mit dem ICSP-Header wird es ganz runtergedrückt.

Gruzzlebeard:
Nach ein paar unerfolgreichen Netzwerktests wollte ich die SD Karte nochmals überprüfen und auf einmal bekam ich die Meldung das sie sich nicht mehr Initialisieren lässt!

Hallo,

interessant wäre zu erfahren, was Du bei den nicht erfolgreichen Tests wie gemacht hast.

Gruzzlebeard:
Hat irgendjmd eine Idee?? Habe ich mein Ethernetshield zerschossen?

Infos über Deine Tests könnten bei der Beantwortung dieser Frage helfen.

Gruß,
Ralf

Danke für eure Antworten!
Kurzschluss ist ausgeschlossen da ich die Schnittstelle mit Isolierband abgeklebt habe. An der Verbindung hängts leider auch nicht, hab eben jede Lötstelle mit der passende Buchse kontrolliert.
Getestet hab ich den CardInfo und ReadWrite Sketch für die SD Karte. Und in puncto Netzwerk einmal einen “basic Webserver” aus einem Tutorial

#include <SPI.h>
#include <Ethernet.h>

// MAC address from Ethernet shield sticker under board
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 1, 20); // IP address, may need to change depending on network
EthernetServer server(80);  // create a server at port 80

void setup()
{
    Ethernet.begin(mac, ip);  // initialize Ethernet device
    server.begin();           // start to listen for clients
}

void loop()
{
    EthernetClient client = server.available();  // try to get client

    if (client) {  // got client?
        boolean currentLineIsBlank = true;
        while (client.connected()) {
            if (client.available()) {   // client data available to read
                char c = client.read(); // read 1 byte (character) from client
                // last line of client request is blank and ends with \n
                // respond to client only after last line received
                if (c == '\n' && currentLineIsBlank) {
                    // send a standard http response header
                    client.println("HTTP/1.1 200 OK");
                    client.println("Content-Type: text/html");
                    client.println("Connection: close");
                    client.println();
                    // send web page
                    client.println("<!DOCTYPE html>");
                    client.println("<html>");
                    client.println("<head>");
                    client.println("<title>Arduino Web Page</title>");
                    client.println("</head>");
                    client.println("<body>");
                    client.println("<h1>Hello from Arduino!</h1>");
                    client.println("<p>A web page from the Arduino server</p>");
                    client.println("</body>");
                    client.println("</html>");
                    break;
                }
                // every line of text received from the client ends with \r\n
                if (c == '\n') {
                    // last character on line of received text
                    // starting new line with next character read
                    currentLineIsBlank = true;
                } 
                else if (c != '\r') {
                    // a text character was received from client
                    currentLineIsBlank = false;
                }
            } // end if (client.available())
        } // end while (client.connected())
        delay(1);      // give the web browser time to receive the data
        client.stop(); // close the connection
    } // end if (client)
}

Und

Danke für eure Antworten!
Kurzschluss ist ausgeschlossen da ich die Schnittstelle mit Isolierband abgeklebt habe. An der Verbindung hängts leider auch nicht, hab eben jede Lötstelle mit der passende Buchse kontrolliert.
Getestet hab ich den CardInfo und ReadWrite Sketch für die SD Karte. Und in puncto Netzwerk einmal einen "basic Webserver" aus einem Tutorial

[sup]
#include <SPI.h>
#include <Ethernet.h>

// MAC address from Ethernet shield sticker under board
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 1, 20); // IP address, may need to change depending on network
EthernetServer server(80);  // create a server at port 80

void setup()
{
    Ethernet.begin(mac, ip);  // initialize Ethernet device
    server.begin();           // start to listen for clients
}

void loop()
{
    EthernetClient client = server.available();  // try to get client

    if (client) {  // got client?
        boolean currentLineIsBlank = true;
        while (client.connected()) {
            if (client.available()) {   // client data available to read
                char c = client.read(); // read 1 byte (character) from client
                // last line of client request is blank and ends with \n
                // respond to client only after last line received
                if (c == '\n' && currentLineIsBlank) {
                    // send a standard http response header
                    client.println("HTTP/1.1 200 OK");
                    client.println("Content-Type: text/html");
                    client.println("Connection: close");
                    client.println();
                    // send web page
                    client.println("<!DOCTYPE html>");
                    client.println("<html>");
                    client.println("<head>");
                    client.println("<title>Arduino Web Page</title>");
                    client.println("</head>");
                    client.println("<body>");
                    client.println("<h1>Hello from Arduino!</h1>");
                    client.println("<p>A web page from the Arduino server</p>");
                    client.println("</body>");
                    client.println("</html>");
                    break;
                }
                // every line of text received from the client ends with \r\n
                if (c == '\n') {
                    // last character on line of received text
                    // starting new line with next character read
                    currentLineIsBlank = true;
                } 
                else if (c != '\r') {
                    // a text character was received from client
                    currentLineIsBlank = false;
                }
            } // end if (client.available())
        } // end while (client.connected())
        delay(1);      // give the web browser time to receive the data
        client.stop(); // close the connection
    } // end if (client)
}[/sup]

Und einen Test den ich in einem anderen Thread gesehen habe:
[code]#include <SPI.h>
#include <SD.h>
#include <Ethernet.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(10,10,0, 177);

void setup() {
   Serial.begin(9600);

   // disable w5100 while setting up SD
   pinMode(10,OUTPUT);
   digitalWrite(10,HIGH);

   if(SD.begin(4) == 0) Serial.println("SD fail");
   else Serial.println("SD ok");

   Ethernet.begin(mac,ip);
   digitalWrite(10,HIGH);

   Serial.print("server is at ");
   Serial.println(Ethernet.localIP());
}

void loop() {

}

Und Zu guterletzt noch das Webserverbsp , wobei als ich pinmode(53,OUTPUT) hinzugefügt habe ein einziges mal die IP Adresse 255.255.255.255 zurückgeben wurde obwohl ich eine andere Adresse angeben habe.Danach immer wie auch bei alen anderen Versuchen nur 0.0.0.0. ausgeben.

Danke im vorraus
Gruß[/code]

Gruzzlebeard: byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; IPAddress ip(192, 168, 1, 20);

Bist Du sicher, dass weder die MAC-Adresse noch die IP-Adresse in Deinem Netzwerk von einem anderen Gerät bereits verwendet wird? Z.B. von einem anderen Arduino mit Ethernet-Shield?

Und hast Du nach dem Hochladen mal den RESET-Button auf dem Ethernet-Shield probiert?

Also ob der Sketch vielleicht dann ordnungsgemäß startet, nachdem Du bei geöffnetem Seriellen Monitor mal manuell den Reset-Button auf dem Shield drückst?

Hmm, wenn Du keine Kabel an- oder abgesteckt hast (oder sonstige Bauteile), halte ich es eigentlich nicht für möglich, dass Du nur mit einem Sketch Dein Schield beschädigt hast.

Also nochmal, nur weil ich vielleicht total auf dem Schlauch stehe: Du hast die SD-Karte probiert und sie ging, dann hast Du irgendwelche Sketches probiert und das ging nicht und dann hast Du den Ursprungszustand mit der SD-Karte wieder hergestellt und bekommst sie jetzt nicht mehr dazu dass sie funktioniert?

Gruß, Ralf

Hi Danke für die Antworten,

@jurs: Ja das ist ausgeschlossen, die MAC Adresse ist ja ziehmlich unüblich und IP hab ich mehrmals getauscht. Vllt hilft mein Setup: PC und Arduino einmal an eine alte Fritzbox und einmal einen ein TP Link Router angeschlossen und sonst nichts verändert (nur IP in Sketch eingestgellt)

@Schachmann: Ja genau so! Was noch merkwürdiger ist, ist dass die SD Karte funktioniert hat ohne das ich den Port 53 wie im Sketch beschireben auf Output (wg Mega) gestellt habe. Nach dem ReadWrite BSPSketch hab ich auch die Test.txt auf der SD Karte vorgefunden.

Falls noch nicht erwähnt die SD Karte war FAT in Windows schnellformatiert.

Gruß

Gruzzlebeard:
@Schachmann: Ja genau so! Was noch merkwürdiger ist, ist dass die SD Karte funktioniert hat ohne das ich den Port 53 wie im Sketch beschireben auf Output (wg Mega) gestellt habe. Nach dem ReadWrite BSPSketch hab ich auch die Test.txt auf der SD Karte vorgefunden.

Das macht mir eigentlich weniger Kopfzerbrechen. So wie ich das verstehe wird ja Pin 4 mit Deinem Shield als Chip-Select benutzt. Also wenn Du 10 oder 53 nicht gerade auf INPUT geschaltet hast, könnte das gehen.

Aber eine andere Frage: Wenn Du die SD-Karte neu formatiert hast, wie und womit?

Gruß,
Ralf

Mal ne ganz andere Idee: Router (egal welcher) merken sich i.d.R. einmal gültig angeschlossene Geräte - damit das beim nächsten Mal (hoffentlich) fixer mit der Anmeldung klappt. Dazu gehören dann auch je nach Verschlüsselungsart die entsprechenden Daten. Vielleicht hast du da zwischendurch mal irgendwo irgendwas - wenn auch nur minmalst - geändert ? Der Router sieht die MAC (übrigends: Einzigartig - nicht unüblich !) und sagt dann: Ey, Alda du kommst hier nitt rein ! Lösch mal die bestehenden Zugänge in deinem/deinen Router(n).

Hi ,

@Schachmann Formatiert hab ich bisher immer mit dem Windows Systemtool. (Schnellformatierung, FAT). Vor der ersten Formatierung hab ich noch mit dem SD Formater formatiert das die Karte in einem für Windows unbekannten Format formatiert war. Vor der ersten Verwendung hab ich dann aber nochmal mit dem Systemtool von Windows formatiert. Ich kann später noch versuchen mit einer anderen 2GB Karte den Sketch durchlaufen zu lassen um einen plötlichen defekt bei der SD Karte auszuschließen.

@TERWI Ja versuch ich sobald ich kann. Aber das würde ja nicht erklären warum die SD Karte nicht mehr erkannt wird. Oder hängt das zusammen?

Gruß

Gruzzlebeard: @jurs: Ja das ist ausgeschlossen, die MAC Adresse ist ja ziehmlich unüblich und IP hab ich mehrmals getauscht. Vllt hilft mein Setup: PC und Arduino einmal an eine alte Fritzbox und einmal einen ein TP Link Router angeschlossen und sonst nichts verändert (nur IP in Sketch eingestgellt)

Ist an Deinen beiden Routern DHCP aktiviert?

Teste mit aktiviertem DHCP im Router mal folgende geänderte Initialisierung im Webserver-Sketch, bei der die IP-Adresse per DHCP bezogen wird, ich poste mal nur die geänderte setup() Funktion:

void setup() {
 // Open serial communications and wait for port to open:
  Serial.begin(9600);
   while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }

  // start the Ethernet connection and the server:
  Serial.println();
  Serial.println("Starte Ethernet...");
  if (Ethernet.begin(mac))  
    Serial.println("Ethernet gestartet!");
  else  
    Serial.println("Ethernet FEHLER!");
  Serial.print("Server is at ");
  Serial.println(Ethernet.localIP());
  server.begin();
}

Welche Ausgaben erscheinen in welchen ungefähren zeitlichen Abständen im seriellen Monitor?

Wenn Du scheinbar nur "Starte Ethernet..." siehst und danach nichts mehr, warte mal 2 Minuten bis auf das Timeout!

Und probiere auch aus, ob es einen Unterschied macht, wenn der Arduino nach einem "Auto-Reset" neu startet (schließen und wieder öffnen des seriellen Monitors) oder nach einem "manuellen Reset" (Reset-Button auf dem Ethernet-Shield drücken)!

... das wär ja nen Ding, wenn mehr als ein DHCP aktiv ist und es (bisher) funktionierte ...

Gruzzlebeard: Formatiert hab ich bisher immer mit dem Windows Systemtool. (Schnellformatierung, FAT). Vor der ersten Formatierung hab ich noch mit dem SD Formater formatiert das die Karte in einem für Windows unbekannten Format formatiert war. Vor der ersten Verwendung hab ich dann aber nochmal mit dem Systemtool von Windows formatiert. Ich kann später noch versuchen mit einer anderen 2GB Karte den Sketch durchlaufen zu lassen um einen plötlichen defekt bei der SD Karte auszuschließen.

Die Windows-Schnellformatierung formatiert die Karte garnicht, sondern schreibt im Wesentlichen nur eine neue FAT. Deshalb würde ich auf jeden Fall die komplette Formatierung nehmen. Wenn Du ein Tool zum formatieren hast, noch besser, nimm das! Mal eine andere Karte probieren ist sicherlich auch keine dumme Idee - aber nicht nur schnellformatieren.

Gruß, Ralf

Hi erstmal danke für die Vorschläge!

DHCP war bei dem TP Link aktiviert. Die Fritzbox wurde leider vom Test ausgeschlossen da sie halb defekt ist und mir nicht mal mehr eine IP Adresse zuwies um in die Einstellungen zu kommen. (DHCP Einstellungen: Start Adress: 192.168.1.100 End Adress: 192.168.1.199, Address Lease Time: 120 minutes , Default Gateway: 192,168.1.1, Default Domain: - ,Primary und Secondary DNS: 0.0.0.0)

Zum Webserver Sketch: Habe ohne Reset nur "Starte Ethernet..." erhalten, auch nach 2 min keine Veränderung. Mit dem manuelle Reset gleiches Ergebnis. Nur beim Autoreset kam direkt Starte Ethernet... Ethernet FEHLER! Server is at 255.255.255.255 Diese Adresse hab ich wie oben erwähnt schonmal erhalten. (PS Alles ohne SD Karte ausgeführt falls relevant)

@ Schachmann; Hab eine andere 2GB Karte getestet und immernoch "initialization failed" . Habe sie auch mal mit dem SD Formater formatiert. (Von Quick auf Full gestellt) Immernoch kein Erfolg.. Das Format muss doch FAT sein oder??

EDIT: Da ich etwas unter Zeitdruck bin überlege ich ob ich mir ein neues Ethernetshield hole diesmal von Sainsmart. Wie hoch schätzt ihr die Warscheinlichkeit ein das es an der Hardware liegt? Habe ich eine bessere Erfolgsquote wenn ich meine Mega noch durch ein UNO austausche?

Gruß

Gruzzlebeard: Das Format muss doch FAT sein oder??

Ja!

// Now we will try to open the 'volume'/'partition' - it should be FAT16 or FAT32

Gruzzlebeard: Wie hoch schätzt ihr die Warscheinlichkeit ein das es an der Hardware liegt? Habe ich eine bessere Erfolgsquote wenn ich meine Mega noch durch ein UNO austausche?

Hardware kann natürlich immer mal kaputt gehen. Aber wenn bei mir was nicht klappt, findet sich der Fehler in den allermeisten Fällen ca. 60 cm vor dem Monitor. Ein neues Shield? Ich weiß es nicht, aber: Versuch macht "kluch"! Ich muss aber ehrlicher Weise zugeben, das ich mal Probleme mit einem SD-Kartenleser hatte und es nicht in den Griff bekam. Als letzten Versuch habe ich dann einen neuen Kartenleser bestellt, angeschlossen und es lief. In dem alten Leser hatte sich ein Kontakt zur SD-Karte verabschiedet (konnte ich aber erst sehen, nachdem ich ihn aufgeknackt hatte wie eine Walnuss, vulgo zerstört).

Den Mega gegen einen Uno tauschen bringt vielleicht was, weil der Chip-Select auf einem anderen Pin liegt. Aber auch hier hilft nur ausprobieren.

Gruß, Ralf

Gruzzlebeard: EDIT: Da ich etwas unter Zeitdruck bin überlege ich ob ich mir ein neues Ethernetshield hole diesmal von Sainsmart. Wie hoch schätzt ihr die Warscheinlichkeit ein das es an der Hardware liegt? Habe ich eine bessere Erfolgsquote wenn ich meine Mega noch durch ein UNO austausche?

Wenn Du das Ethernet-Shield gegen ein anderes tauschen möchtest, dann bietet sich das "Rev. 03" Original an: http://store.arduino.cc/ww/index.php?main_page=product_info&cPath=11_5&products_id=199 Das hätte nämlich den großen Vorteil des eigenen "CAT811" Reset-Controllers auf dem Shield, mit dem der W5100 beim Power-On korrekt resettet wird, unabhängig von sonstigen Timings und unabhängig vom Board, auf dem es draufsteckt. Schaltbild des "Rev. 03" Ethernet Shields mit CAT811 Rest-Controller: http://arduino.cc/en/uploads/Main/arduino-ethernet-shield-06-schematic.pdf

Von den China-Versendern einschließlich Sainsmart habe ich bisher noch kein einziges Ethernet-Shield nach diesem neuen Schaltplan gesehen. Und ein Shield gegen ein baugleiches anderes auzutauschen ist vermutlich nicht der große Bringer, es sei denn, Dein jetziges Shield ist tatsächlich defekt und nicht nur inkompatibel zu Deinem Arduino-Board.

Allerdings liegen mir mit einem "Rev. 03" Shield auch noch keine persönlichen Erfahrungen vor.

Vielleicht hat ja auch Dein MEGA-Board einen Hau weg oder ist inkompatibel, hast Du denn mal versucht, das Ethernet-Shield auf einem anderen Board in Betrieb zu nehmen? Z.B. auf einem UNO?

Ich hab es schon mit einem anderen MEGA und mit einem DUE versucht da ich diese sowieso zuhause habe. Wenn ich das richtig in Erinnerung habe bekomme ich aus Deutschland für 35€ ein UNO und ein Ethernetshield von Sainsmart. Das ist doch eine funktionierende Kombination oder? Damit müsst ich ja auch jeden Fall abgedeckt haben.

Gruß und vielen Dank für eure Hilfe!!

Gruzzlebeard: Wenn ich das richtig in Erinnerung habe bekomme ich aus Deutschland für 35€ ein UNO und ein Ethernetshield von Sainsmart. Das ist doch eine funktionierende Kombination oder? Damit müsst ich ja auch jeden Fall abgedeckt haben.

Ja, die Kombination "China UNO-Nachbau" und "China Ethernet-Shield" funktioniert meiner Erfahrung nach eigentlich immer sehr, sehr zuverlässig. Nur der Ethernet-Teil, nur die SD-Karte, oder beides in einem Sketch nacheinander im Wechsel, alles kein Problem. Beim Kauf im Set aus einer Hand sollte das kein Thema sein.

Bei mir ist es auch eher so, dass die Kombination "MEGA R3 + China Ethernet-Shield" einige Macken zeigt. Und zwar wohlgemerkt mit demselben Ethernet-Shield, das an einem UNO-Board vollkommen unauffällig funktioniert.

Hier: http://forum.arduino.cc/index.php?topic=191860.msg1417798#msg1417798 schon mal mitgelesen ? Vielleicht ein ähnlich / gleiches Problem ?

Hi, Habe noch letztmalig den Mega Hack mit Steckverbindungen versucht, nichts. Darum ist jetzt unter ebay die Kombi Uno und Ethernetshield von Sainsmart für 38€ bestellt. Kommt aus Berlin sollte also nicht zu lange brauchen. Melde mich dann nochmal ,hoffentlich erflogreich, zurück.

EDIT: Ich denke das Shield war defekt, das neue in Verbindung mit dem UNO funktioniert perfekt!!

Gruß