Go Down

Topic: neue Ethernet Shields mit eigenartigen Verhalten (Read 6 times) previous topic - next topic

Andreas Watterott

#25
Sep 27, 2012, 10:34 am Last Edit: Sep 27, 2012, 10:44 am by Andreas Watterott Reason: 1
Ich würde vorschlagen erst einmal die grundlegende Kommunikation mit dem W5100 zu testen. Dabei nur das Eth-Shield auf den Arduino stecken und alles über USB mit dem PC verbinden (kein Netzwerkkabel anschließen). Anschließend mehrmals einen Reset ausführen und schauen, ob die IP durch das Testprogramm immer richtig gesetzt wird.
Hier das entsprechende Testprogramm: https://raw.github.com/wiki/watterott/KnowledgeBase/files/arduino_ethshield.ino

Update: So wie es aussieht, ist auf dem Eth-Shield der Reset-IC nicht bestückt und daher wird es hier das bekannte Resetproblem des W5100 geben.

Gruß
Andreas

COOL

Nochmals DANKE für eure Interesse und Hilfe !
Es hat eine Weile gedauert, um jeden Hinweis nachzugehen, zumal es mich ganz raschelig gemacht hat, die Boards untereinander zu tauschen und ggf. als defekt zu deklarieren.
Aber ich bin mit eurer Hilfe VIEL weiter gekommen.
Der Hinweis von Andreas, mal das Testtool für den W5100 einzusetzen, hat erst einmal Licht ins Dunkle gebracht. Beide Arduino Duemilanove Boards mit gesatteltem Ethernet V5 Shield standen am Start.
Keines der beiden Probanden bestand den Test und antwortete mit 4x 0 für die angeblich übertragene IP-Adresse (Bilder im Anhang).
Durch vielseitiges Tauschen der Baugruppen gelang es mir 2x 2 funktionierende Arduino-Boards mit Ethernet zusammen zu stellen, die tatsächlich die korrekte IP wiedergaben. Komisch ? doch nicht kaputt ? Nur in dieser Kombination liefen beide Kandidaten am MAC und Windows-Rechner einwandfrei - warum auch immer.
Jetzt kam der nächste Schritt - das Testprogramm als Server. Ich habe es auf den Hinweis von Mario mit weiteren Daten, die zum Controller übergeben werden sollten, ergänzt. Das sieht dann jetzt so aus.
#include <SPI.h>
#include <Ethernet.h>

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 178, 177 };
byte gateway[] = { 192, 168, 178, 1 };
byte subnet[] = { 255, 255, 255, 0 };

EthernetServer server(80);

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:
  Ethernet.begin(mac, ip, gateway, subnet);
  server.begin();
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());
}


void loop() {
  // listen for incoming clients
  EthernetClient client = server.available();
  if (client) {
    Serial.println("new client");
    // an http request ends with a blank line
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.write(c);
        // if you've gotten to the end of the line (received a newline
        // character) and the line is blank, the http request has ended,
        // so you can send a reply
        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("Connnection: close");
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
                    // add a meta refresh tag, so the browser pulls again every 5 seconds:
          client.println("<meta http-equiv=\"refresh\" content=\"5\">");
          // output the value of each analog input pin
          for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
            int sensorReading = analogRead(analogChannel);
            client.print("analog input ");
            client.print(analogChannel);
            client.print(" is ");
            client.print(sensorReading);
            client.println("
");       
          }
          client.println("</html>");
          break;
        }
        if (c == '\n') {
          // you're starting a new line
          currentLineIsBlank = true;
        }
        else if (c != '\r') {
          // you've gotten a character on the current line
          currentLineIsBlank = false;
        }
      }
    }
    // give the web browser time to receive the data
    delay(1);
    // close the connection:
    client.stop();
    Serial.println("client disonnected");
  }
}


Wahnsinn, das erste Board gab mir am MAC und am Windows-PC die "gepingten" Adressen wieder. Jetzt kam der zweite Kandidat auf den Prüfstand - durchgefallen beim MAC, jedoch gepunktet beim Windows-Rechner ?!?
Jetzt bot sich doch erst einmal der Tip von Mario an, mal eben mit dem MAC die Umgebung nach doppelt vergebenen IP`s oder Mac-Adr. zu schauen.
Das Team was mir die IP zurück gab brachte keine Überraschung, jedoch bei der zweifelhaften Kombination bekam ich als Antwort ? (192.168.178.177) at (inkomplette) on en1 ifscope (ethernet)
WAS IST DAS ?
Jetzt ging es um die Wurst. Mit aktuellen Browsern von Microsoft, Firefox und Safari von MAC und Windows wurde die 192.168.178.177 ohne und mit :80 eingegeben.
Das Ergebnis war umschmetternd ! Nichts funktionierte.
Beim MAC mit Firefox kam : ...braucht zu lange um eine Antwort zu senden
Beim MAC mit Safari kam : ...kann Seite nicht öffnen
Beim Windows mit Microsoft kam : Webseite existiert nicht, oder Programm ist nicht installiert
Beim Windows mit Firefox kam : Die Verbindung wurde zurückgesetzt, während die Seite geladen wurde
? ? ?
Da steht die Kuh nun auf dem Eis - doch das Redet-Problem ?!?

Gruß Gerd



mkl0815

Code: [Select]
Ethernet.begin(mac, ip, gateway, subnet);
wird nicht klappen, da muss zwingend der DNS mit rein, sonst wird subnet als DNS verwendet.
Das nur kurz, den Rest schaue ich mir später an.

COOL

hallo @mkl0815,
muss dich leider enttäuschen, es geht auch ohne. Ich habe, weil ich unsicher war, die DNS-Adr. mit eingebunden.
Am Ergebnis hat sich leider nichts geändert.

pylon

Quote
muss dich leider enttäuschen, es geht auch ohne. Ich habe, weil ich unsicher war, die DNS-Adr. mit eingebunden.


Dann verwendest Du wahrscheinlich eine alte IDE. Ich glaube, ab Version 1.0 müsste da der DNS noch rein, sonst wird das Subnet als Gateway gesetzt (und der Gateway als DNS), womit Du nur noch vom selben Netz-Segment her Zugriff hättest. Auf das grundsätzliche Problem dürfte das aber keinen Einfluss haben.

Quote
(192.168.178.177) at (inkomplette) on en1 ifscope (ethernet)


Heisst in etwas soviel wie: es fand ein ARP-Request statt, der aber scheiterte und somit ist für diese IP keine MAC-Adresse bekannt.

Nach Deiner Beschreibung würde ich auf den fehlenden Reset-Baustein tippen, denn jedes Arduino-Board dürfte ein ganz leicht anderes Reset-Timing haben. Vielleicht willst Du den Tipp eines anderen Forum-Teilnehmers umsetzen und bei Deinen Boards die Reset-Leitung auf einen Arduino-Pin rerouten, damit Du das Shield später im setup() Deines Sketches resetten kannst.

Go Up