En28j60

Buenos días tengo un problema con el modulo de conexion ethernet en28j60. Tengo subiendo datos de sensores a un servidor. Tengo 12 mega 2560 distribuidos en varias provincias distintas, la mayoría funciona bien y continua, salvo que a veces se clavan y dejan de responder pero con un reinicio del programa por soft se recupera. Ahora tengo uno en particular, al cual le sume un modulo sim900 para alertas por sms, pero cada unas 8 horas se me cuelga y el modulo es como que se apaga, o sea la luz de alimentacion esta encendida pero no responde el ping ni sube los datos y por mas que reinicie el soft no levanta, salvo que desconecte la energía y la vuelva a conectar lo cual me da unas 8 horas mas de conexion.

el codigo resumido es el siguiente:

static byte mymac[] = {0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02};
#define STATIC 1  

#if STATIC
// ethernet interface ip address
static byte myip[] = { 192, 168, 1, 180 };
// gateway ip address
static byte gwip[] = { 192, 168, 1, 1 };
static byte dnsip[] = {192, 168, 1, 1 };
static byte hisip[] = { 179, 43, 117, 154 }; 
#endif



byte Ethernet::buffer[700];
static void my_callback (byte status, word off, word len) {

  Ethernet::buffer[off + 300] = 0;
  Serial.println((const char*) Ethernet::buffer + off);
  Serial.println("...");
  Serial.println(F(">>>"));

}


void setup ()
{
if (ether.begin(sizeof Ethernet::buffer, mymac, 53) == 0)
    Serial.println(F("Failed to access Ethernet controller"));
#if STATIC
  ether.staticSetup(myip, gwip, dnsip);
  ether.copyIp(ether.hisip, hisip);
  ether.copyIp(ether.dnsip, dnsip);
#else
  if (!ether.dhcpSetup())
    Serial.println("DHCP failed");
#endif

  ether.printIp("IP:  ", ether.myip);
  ether.printIp("GW:  ", ether.gwip);
  ether.printIp("DNS: ", ether.dnsip);

  if (!ether.dnsLookup(website))
    Serial.println(F("DNS failed"));

  ether.printIp("SRV: ", ether.hisip);
}


void loop () {

 ether.packetLoop(ether.packetReceive());

  if (millis() > timer) {

//lectura de sensores .....
.
.
.
.


 char argsCh[60];
    sprintf(argsCh, "id=%s&s1=%s&s2=%s&s3=%s&e=%s", idAsString, s1AsString, s2AsString, &hmAsString, enerAsString);

 timer = millis() + 9000;

    Serial.println(F("<<< REQ "));
    Serial.println(argsCh);
    ether.browseUrl(PSTR("/pagina.php?"), argsCh, website, my_callback);

}


if(timer > (60000 * 60)){
      Serial.println(F("Reiniciando"));
      reinicio();
      }

lo cual deberia devolver

<<< REQ
id=6&s1=0&s2=2&d=450&e=1
HTTP/1.1 200 OK
Date: Fri, 27 Jan 2017 13:00:03 GMT
Server: Apache/2.4.20 (Unix) OpenSSL/1.0.1e-fips mod_fastcgi/mod_fastcgi-SNAP-0910052141
X-Powered-By: PHP/5.5.36
Connection: close
Content-Type: text/html

pero se clava despues de un tiempo y jamas obtengo respuesta

<<< REQ
id=6&s1=0&s2=2&d=450&e=1

<<< REQ
id=6&s1=0&s2=2&d=450&e=1

<<< REQ
id=6&s1=0&s2=2&d=450&e=1
.
.
.

Alguna idea?

Tu código esta incompleto.
Por favor edita y postealo bien.
Digo esto porque el loop no termina
La funcion reinicio() no está

Revistaste memoria?
Esto es una cantidad importante

byte Ethernet::buffer[700];

Sin saber tu problema creo que es un problema de FreeRAM
En el playground hay una rutina, intenta usarla para que te de datos al respecto o establece un umbral para que te avisa cuando estas a punto de tener un problema
Te recomiendo un watchdog en lugar de tu reinicio.

Hola gracias por responder. Problema de memoria no creo que sea ya que tengo libre siempre 5359 devueltos por freeram.

El sketch utiliza el 13% de la memoria de programa y las variables globales el 33%, por lo que veo que memoria tiene de sobra.

Tendras que crear un log con una SD para que te ayude a determinarlo o como ya te sugerí un watchdog, mientras se sigue analizando el código.

Por ahora lleva mas de 24hs funcionando correctamente, modifique alguna le es de la librería. Voy a probar a ver q pasa.