Problema con modulo ETHERNET W5100

Hola, buenas noches. Me llamo Gabriel, soy nuevo en este foro pero no en arduino, (poseo los conocimientos justos y necesarios) ya que me dedico a la parte electrónica. Recurro a sus conocimiento para tratar de solventar un problema que tengo. Voy a realizar un proyecto donde pueda manipular las salidas y leer el estado de sensores desde web en una red local (no es indispensable en este momento conexión a internet). Dispongo de un arduino MEGA 2560 y un modulo ethernet W5100, estoy probando con el ejemplo que trae arduino "WebServer". Conecto directo el cable rj45 desde el modulo a la PC y todo anda perfecto. Ahora bien, cuando trato de conectarlo mediante router no me responde, probé con cables cruzado y directo entre el modulo y el router y obtengo el mismo resultado. Ademas probé con distintos router, cableados y wireless. La IP está dentro del rango, no esta ocupada por otro dispositivo, mirè varios tutoriales, videos, acá mismo en el foro y hago todo al pie de letra. Nose si estará dañado el modulo, aunque no entiendo porque conectado directamente si funciona. Nose si sea relevante pero tambièn probé alimentando al arduino desde USB y con una fuente externa de 9v, sin resultados. Por favor si omití algún dato estoy a su estera disposición. Agradezco cualquier tipo de ayuda o comentario. Saludos!

Debo suponer que usas el mismo cable para comunicarte con la pc y luego con el router? Se supone que debes usar un cable cruzado con la PC y un cable RJ45 directo con el router. es asi?

Nunca probé hasta ahora el ejemplo WebServer y como el único elemento a editar es la dirección IP supongo que la que elegiste esta dentro del rango de IPs fijas de tu router. Otro elemento tal vez obvio pero que debe respetarse.

Esperaré a que respondas. No se si estoy ayudandote o ya has verificado estos dos puntos.

Correcto, primero conecte el modulo con un cable directo a la pc y funcionó, luego probé con uno cruzado y también funcionó. ahora cuando conecto el modulo al router y el router a la pc es cuando no anda, indistintamente del tipo de cable ya que use todos los posibles y ninguno dió resultado. Si, me aseguré de que la ip estuviera en el rango

Puedes descartar problemas de conexion y protocolos usando el comando ping desde el pc a la ip de la placa ethernet cuando lo tengas conectado al router.

Prueba a cambiar la Mac, ya que es muy posible que al router, no le guste la mac que lleva el ejemplo.

Lo importante es fijar algunas cosas:

Cable cruzado para conexión directa con la PC Cable directo para conexión con el router.

Gracias a todos por responder. Hago ping a la IP que pongo en la arduino y no responde (es como si simplemente no huiera nada) aunque los leds de TX y RX del modulo parpadean cada tanto y los de conexion se encienden bien. En cuanto a la mac, pongo cualquier otra? Uso cable cruzado cuando es Arduino--PC y cable directos arduino--router---PC, Esta bien asi?

Pon tu código de arduino, y en tu pc ejecuta ipconfig /all y pega la respuesta también.

Saludos Haz una prueba, conecta tu PC al router y en CMD escribes ipconfig. Esto te dara al IP de tu PC y el gateway, publica esa informacion aqui junto con tu Sketch. para asi ver si estan en la misma subred tu Arduino y tu PC.

Otra cosa que puedes hacer es establecer a tu PC una IP del mismo rango que tienes en el Arduino y probar la comunicacion, ya que si usas DHCP tu PC tomara la IP que comunique con el router.

Yo probaria con una mac, con las 3 primeras cifras hex iguales a las de la mac del pc, y las 3 últimas distintas, de forma que nos aseguramos de usar una mac cuyo vendor, sabemos que funciona.

/*
  Web Server
 
 A simple web server that shows the value of the analog input pins.
 using an Arduino Wiznet Ethernet shield. 
 
 Circuit:
 * Ethernet shield attached to pins 10, 11, 12, 13
 * Analog inputs attached to pins A0 through A5 (optional)
 
 created 18 Dec 2009
 by David A. Mellis
 modified 9 Apr 2012
 by Tom Igoe
 
 */

#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 };
IPAddress ip(169,254,122,132);

// Initialize the Ethernet server library
// with the IP address and port you want to use 
// (port 80 is default for HTTP):
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);
  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("Connection: close");  // the connection will be closed after completion of the response
	  client.println("Refresh: 5");  // refresh the page automatically every 5 sec
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
          // 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");
  }
}

Prueba con:

byte mac[] = { 0x80, 0xEE, 0x73, 0x3A, 0x12, 0x4E };

Me llama la atención que no haya puerta de enlace, y que la ip sea 169.254.x.x ya que esa ip, es la que asigna windows automáticamente, cuando no hay un dhcp disponible.

Con el pc conectado al router, ¿tiene esa misma ip?

justamente iba a decir lo mismo. Como es que tu ip da 169.254.x.x tienes algo mal ahi. O te estas conectando a un enlace wifi y no usas tu router y tu crees que si.

No estas conectado al router, eso es obvio.

Ahora probe en una pc con Ubuntu…

IPAddress ip(192,168,1,3);

amigo hace poco pude resolver ese problema digamos que de suerte me pasaba lo mismo q comentas intente de todo fuentes externa cables de todo tipo hasta pense en comprar otra ethernet shield, lei por todos lados y nada funcionaba en algun foro me acuerdo leer que ay unos routers que sencillamente no sirven con la ethernet shield (la verdad no entiendo aun porque) asi que empeze a probar con otro y hasta con un switch pero nada finalmente me prestaron un router y sencillamente como si nada funciono sin tener que cambiarle nada e sugiero que agotes todos los routers q puedas dado que yo probe 3 routers y un switch y hasta el cuarto me sirvio

Entonces debe ser lo que dice camerloco que a algunos routers no le gusta la mac que sugieres. Ve al router y mira las mac que tienes en tu casa o trabajo y sugiere una similar.