Ethernet Shield mi blocca tutto !

Niente, ho provato a cambiare la modalità ma è rimasto uguale...
Via, da stasera mi metto a studiare il datasheet del W5100 e poi vedo cosa fa la libreria, è l'unico modo...

Piccolo OT: sapevate che la USART dell'ATmega328 può lavorare come se fosse una seconda SPI master? :astonished: :astonished: L'ho letto ieri sera spulciando il datasheet del micro...

L'avevo già letto. Però mi pare logico dato che la SPI è una comunicazione seriale anch'essa.
Il pin PD4 è il pin XCK corrispondente all'SCK dell'SPI.

Mi sto leggendo il datasheet del W5100 e lo sto confrontando con quello che fa la libreria.

Prima di trasmettere un dato l'Arduino va a leggere nel W5100 qual è lo spazio disponibile per la trasmissione. Stessa cosa per la ricezione.

W5100.cpp

uint16_t W5100Class::getTXFreeSize(SOCKET s)
{
  uint16_t val=0, val1=0;
  do {
    val1 = readSnTX_FSR(s);
    if (val1 != 0)
      val = readSnTX_FSR(s);
  } 
  while (val != val1);
  return val;
}

uint16_t W5100Class::getRXReceivedSize(SOCKET s)
{
  uint16_t val=0,val1=0;
  do {
    val1 = readSnRX_RSR(s);
    if (val1 != 0)
      val = readSnRX_RSR(s);
  } 
  while (val != val1);
  return val;
}

Perché viene fatta la lettura due volte dello stesso registro fino a che le due letture non coincidono?

seconde me da per scontato che se il W5100 sta trasmettendo/ricevendo, tra una read e l'altra il valore cambia. Quindi ritorna il valore in fase di "riposo"

@acik
Puoi fare una prova? Hai detto che il tuo sketch si blocca dopo circa 10 giorni alla media di una interrogazione al giorno; cosa succede se fai il refresh della pagina 10-20-30 volte? Dopo un po' va in blocco?

L'ultima volta ha scritto l'8 aprile oggi siamo all'11 ... sai quanto ci mettiamo a fere 2 test cosi' ? :sweat_smile: :sweat_smile: :sweat_smile: non sappiamo nemmeno se ha letto ....

Ti rispondo io ... bastano 5 connessioni da 3 apparati diversi

Le connessioni da più cliet in modalità server è impossibile senza la modifica che ho fatto io... :wink: Inoltre il W5100 accetta al massimo 4 connessioni simultanee...

infatti io non parlo mai di connessioni simultanee, perchè per me non esistono connessioni simultanee quando un micro 16Mhz riesce a mala pena a gestirne 1 ... parlo solo di apri una e chiudi l'altra

Mi riferisco a normali sketch prendi il messaggio e chiudi :slight_smile:

Chiariamo una cosa, che poi magari vengo frainteso, per come la vedo io l'accessorio ethernet shield su un micro così piccolo e scarsamente potente è solo un movimento commerciale, per renderlo un po' più invitante all'acquisto e alla sperimentazione diciamo un giocattolino un po' più completo (fino qui ci stiamo), però è anche vero che questo shield con una connessione persistente un micro (328-2560 quello che ti pare) perde più del 60% delle sue potenzialità, ti perde per strada molti dati che il micro potrebbe raccogliere e per il quale nasce, una connessione ogni tanto per leggere qualche dato lo posso capire, ma che qualcuno pensi a un progetto con 4 connessioni contemporanee, che vengano gestite separatamente perchè ne ha una necessità ... mi dite cosa gli resta da fare al micro che sta sotto? ce la fa a leggere una digital port ogni tanto? Trovo questa cosa difficile e poco pratica data la complessità e la necessità di un processore in grado di fare certe cose.

Ma chi te lo dice che non riesce a gestire 4 connessioni?

Janos:
Le connessioni da più cliet in modalità server è impossibile senza la modifica che ho fatto io... :wink: Inoltre il W5100 accetta al massimo 4 connessioni simultanee...

è possibile ma non sai con chi stai parlando, e molto complessa. Server.available() ritorna il client con dati in attesa, quindi se li leggi tutti e lui non ti scrive nel frattempo, o lo disconnetti, riesci a passare al client successivo.

però la cosa si porta avanti da talmente tanto tempo che quasi quasi mi prendo il wiz solo per tentare anche io il debug

ho modificato il post sopra, ripeto non voglio essere frainteso, ma trovo un uso sbagliato del micro, è vero che può gestire 4 connessioni ma perchè devo far portare a una formica un frigorifero quando ho un elefante a disposizione?
Se hai necessità di fare un server potente rivolgiti a un G25 a un Raspberry Pi, qualcosa che abbia una certa potenza.

Lo scopo del treadh era quello di capire perchè si inchioda un w5100 con le librerie dell'ide, non partendo da un project con 4 connessioni contemporanee, perchè ne basta 1 per inchiodarlo

lesto:
è possibile ma non sai con chi stai parlando, e molto complessa.

lesto, come ho detto sopra ho modificato la libreria proprio per gestire più connessioni simultaneamente...

sì, se non erro eri tu cha avevi aperto un post apposta con cui abbiamo discusso per un pò..
e il tuo problema era che tu volevi assegnare ad un EthernetClient un Socket univoco, cosa che la libreria non fa. Però ciò non vuol dire che con le debite limitazioni e accortezze non si possa usare.

TROVATO!!!!!!!!!!!!!!!!! (almeno spero)

Il problema è che non c'è nessun ritardo fra l'abilitazione del segnale /SS del W5100 e l'inizio della trasmissione. Basta aggiungere un ritardo di 1 microsecondo (sul datasheet dice che il tsetup e thold del /SS deve essere almeno 21ns, quindi in teoria non servirebbe, ma a quanto pare...)...

Ad esempio, questa funzione del W5100.cpp

uint8_t W5100Class::write(uint16_t _addr, uint8_t _data)
{
  setSS();  
  delayMicroseconds(1);
  SPI.transfer(0xF0);
  SPI.transfer(_addr >> 8);
  SPI.transfer(_addr & 0xFF);
  SPI.transfer(_data);
  delayMicroseconds(1);
  resetSS();
  return 1;
}

Allego il W5100.h che ho modificato, così lo potete provare anche voi...

P.S. Per correttezza, l'idea della soluzione l'ho trovata qui:

w5100.cpp (3.96 KB)

Janos:
Le connessioni da più cliet in modalità server è impossibile senza la modifica che ho fatto io... :wink: Inoltre il W5100 accetta al massimo 4 connessioni simultanee...

scusa questa non l'ho capita ... io al mio server mi ci sono collegato con 8 browser client (3 mobile e 3 lan cavo e 2 wifi).... un rallentamento pazzesco ma funzionava .... comunque inutile olte 2 connessioni

Peccato che il browser apra la connessione, invii/riceva i dati e chiuda subito la connessione, quindi avrai sempre una connessione alla volta attiva.

Se hai WindowsXP apri hyperterminal in modalità TCP/IP e lo colleghi all'IP di Arduino sulla porta 80, poi prova ad accedere al browser web e mi dici se funziona. Se non hai WindowsXP sxaricati hyperterminal che si trova su internet... :wink:

pablos:

Janos:
.... Inoltre il W5100 accetta al massimo 4 connessioni simultanee...

scusa questa non l'ho capita ... io al mio server mi ci sono collegato con 8 browser client (3 mobile e 3 lan cavo e 2 wifi).... un rallentamento pazzesco ma funzionava .... comunque inutile olte 2 connessioni

Il limite delle 4 connessioni simultanee, se guardate il datasheet, è intrinseco nell'HW ... ha registri a sufficienza SOLO per tenere le info di 4 sessioni aperte :wink:

... e comunque, come dice giustamente Janos, il browser, fatta la richiesta e ricevuta la risposta, chiude la sessione :wink:

Guglielmo

So cosa vuol dire connessioni contemporanee, infatti il server risponde alla request e chiude immediatamente, ma non capisco perchè 1 client deve rimanere aperto con arduino costantemente, figuriamoci 4 ....a cosa serve una cosa così, qual'è l'utilità di questa libreria, posso identificare l'user che si collega tramite popup di autenticazione, posso usare i cookie per sapere chi sei e quanto puoi stare connesso e quando ti sei connesso l'ultima volta... vabbè forse parliamo di 2 cose differenti ..

Forse perché la ethernet non serve solo per il protocollo HTML?