Se me cuelga mi placa Arduino Ethernet

Hola a toda la comunidad. Mí plaquita Aurdino ethernet- no escudo- funciona en principio bien, no obstante tengo el siguiente problema, después de varias horas de funcionamiento- variable- se me queda el sistema colgado, he hecho varias comprobaciones y el micro no se cuelga, para mí es el módulo W5100, le pongo programas estandar de Pusingbox,Twitter, Servidor de web funcionan correctamente pero vuelvo a comentar que al cabo de no más de dos días se cuelga el sitema, parece como si se produjera un desbordamiento de una pila o algo por el estilo en el módulo W5100. A ver si alguien me puede orientar sobre este extraño problema.
P.D. No tengo otra placa para descartar hardware.

////
//
// General code from http://www.pushingbox.com for Arduino + Ethernet Shield (official) v1.2
//
////

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

  /////////////////
 // MODIFY HERE //
/////////////////
byte mac[] = { 0x90, 0xA2, 0xDA, 0x0F, 0x83, 0xD1 };  // Be sure this address is unique in your network
IPAddress ip(192,168,1,100);
IPAddress servdns(87,216,1,65);//dns primary jazztel with NuCom router.
//Your secret DevID from PushingBox.com. You can use multiple DevID on multiple Pin if you want
char DEVID1[] ="vCDEACDBD1B17D??" ; //Scenario : "The mailbox is open", ?? son dos números del escenario

//Numeric Pin where you connect your switch
uint8_t pinDevid1 = 6; // Example : the mailbox switch is connect to the Pin 9
// Debug mode
boolean DEBUG = true;
  //////////////
 // End //
//////////////


char serverName[] = "api.pushingbox.com";
boolean pinDevid1State = false; // Save the last state of the Pin for DEVID1
boolean lastConnected = false; // State of the connection last time through the main loop
long UltimaLectura=0;

// Initialize the Ethernet client library
// with the IP address and port of the server
// that you want to connect to (port 80 is default for HTTP):
EthernetClient client;

void setup() {
  while(millis()<180000);//espera 7' para que el router se estabilice en el supuesto de falta de energía.
  Serial.begin(9600);
  pinMode(pinDevid1, INPUT);
 
  // start the Ethernet connection:
  Ethernet.begin(mac,ip,servdns);
  delay(10);
 
    Serial.println("Ethernet ready");
    // print the Ethernet board/shield's IP address:
    Serial.print("My IP address: ");
    Serial.println(Ethernet.localIP());
  
  // give the Ethernet shield a second to initialize:
  delay(1000);
}

void loop()
{
      ////
      // Listening for the pinDevid1 state
      ////
      if (millis()>UltimaLectura+240000 && pinDevid1State == false) // switch on pinDevid1 is ON
      {
        if(DEBUG){Serial.println("pinDevid1 is HIGH");}
        pinDevid1State = true;
        UltimaLectura= millis();
        //Sending request to PushingBox when the pin is HIGHT
        sendToPushingBox(DEVID1);
      }
       if (millis()>UltimaLectura+60000 && pinDevid1State == true) // switch on pinDevid1 is OFF
      {
        if(DEBUG){Serial.println("pinDevid1 is LOW");}
        pinDevid1State = false;
        //Sending request to PushingBox when the pin is LOW
        //sendToPushingBox(DEVID1); //Here you can run an other scenario by creating a DEVID2 variable
      }
      
      
      //DEBUG part
      // this write the respons from PushingBox Server.
      // You should see a "200 OK"
      if (client.available()) {
        char c = client.read();
        if(DEBUG){Serial.print(c);}
      }
      
      // if there's no net connection, but there was one last time
      // through the loop, then stop the client:
      if (!client.connected() && lastConnected) {
        if(DEBUG){Serial.println();}
        if(DEBUG){Serial.println("disconnecting.");}
        client.stop();
      }
      lastConnected = client.connected();
      if(millis()>3600000){
       asm volatile ("  jmp 0");  // reset cada hora para ver si no se satura el W5100
      }
}


//Function for sending the request to PushingBox
void sendToPushingBox(char devid[]){
  client.stop();
  if(DEBUG){Serial.println("connecting...");}

  if (client.connect(serverName, 80)) {
    if(DEBUG){Serial.println("connected");}

    if(DEBUG){Serial.println("sendind request");}
    client.print("GET /pushingbox?devid=");
    client.print(devid);
    client.println(" HTTP/1.1");
    client.print("Host: ");
    client.println(serverName);
    client.println("User-Agent: Arduino");
    client.println();
  }
  else {
    if(DEBUG){Serial.println("connection failed");}
  }
}