Pages: 1 ... 5 6 [7] 8   Go Down
Author Topic: Ethernet Shield mi blocca tutto !  (Read 5518 times)
0 Members and 1 Guest are viewing this topic.
Ivrea
Offline Offline
God Member
*****
Karma: 5
Posts: 680
"La teoria è quando si sa tutto ma non funziona niente. La pratica è quando funziona tutto ma non si sa il perché. In ogni caso si finisce sempre con il coniugare la teoria con la pratica: non funziona niente e non si sa il perché." Albert Einstein
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Code:
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:
http://www.wiznet.co.kr/sub_modules/en/technical/Q_A_View.asp?boardcd=101&SF_AO=And&PK_NUM=29029&page=1&SF_Part=boardno,%20writer,%20subject,%20contents&SF_KeyWord=arduino&SF_AO=And

* w5100.cpp (3.96 KB - downloaded 7 times.)
« Last Edit: April 11, 2013, 11:10:39 am by Janos » Logged

Genova
Offline Offline
Faraday Member
**
Karma: 17
Posts: 2747
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Le connessioni da più cliet in modalità server è impossibile senza la modifica che ho fatto io...  smiley-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
Logged

Meglio imparare dalle cose inutili piuttosto che non imparare niente.   [Arduino Mega R3 + Ethernet shield W5100 + SD card 8Gb FAT32]

Ivrea
Offline Offline
God Member
*****
Karma: 5
Posts: 680
"La teoria è quando si sa tutto ma non funziona niente. La pratica è quando funziona tutto ma non si sa il perché. In ogni caso si finisce sempre con il coniugare la teoria con la pratica: non funziona niente e non si sa il perché." Albert Einstein
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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...  smiley-wink
Logged

Switzerland
Online Online
Faraday Member
**
Karma: 82
Posts: 4206
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

.... 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 smiley-wink

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

Guglielmo
Logged

Search is Your friend ... or I am Your enemy !

Genova
Offline Offline
Faraday Member
**
Karma: 17
Posts: 2747
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 ..
Logged

Meglio imparare dalle cose inutili piuttosto che non imparare niente.   [Arduino Mega R3 + Ethernet shield W5100 + SD card 8Gb FAT32]

Ivrea
Offline Offline
God Member
*****
Karma: 5
Posts: 680
"La teoria è quando si sa tutto ma non funziona niente. La pratica è quando funziona tutto ma non si sa il perché. In ogni caso si finisce sempre con il coniugare la teoria con la pratica: non funziona niente e non si sa il perché." Albert Einstein
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

0
Online Online
Shannon Member
****
Karma: 117
Posts: 10106
:(){:|:&};: TOX id: fcb8e918bef08581e23f6ddf9d4dba77697c25b217bf372736ed959a95fde36df5b8c5b90fbb
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

anzi, a dirla tutta è molto più efficiente NON usare il protocollo HTML, ma il più possibile il TCP grezzo
Logged

my Arduino code: https://github.com/lestofante/arduinoSketch
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Genova
Offline Offline
Faraday Member
**
Karma: 17
Posts: 2747
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ho capito che volete usare i 4 soket su 4 ip differenti, io non uso nemmeno una riga di client.print, ho semplicemente un file html che viene spedito con un client.write di 4 righe, tutti i file che servono li prende il client da un server esterno, questo è l'unico modo che conosco per aprire un canale verso arduino senza installare software sui client e comunque li uso solo per visualizzazione e comandi semiautomatici in content type text/plain
Se poi nel tuo progetto come clients ci metti altre 4 shield e altri 4 arduini e vuoi fare un modbus TCP/IP allora è tutto un altro discorso, non so quanto possa essere efficiente in questo caso, secondo me è pesante, ma tutto dipende dal peso dei dati.

Però tornando al freeze  Janos tu hai riscontrato questo difetto? o solo acik?

« Last Edit: April 11, 2013, 04:37:53 pm by pablos » Logged

Meglio imparare dalle cose inutili piuttosto che non imparare niente.   [Arduino Mega R3 + Ethernet shield W5100 + SD card 8Gb FAT32]

0
Online Online
Shannon Member
****
Karma: 117
Posts: 10106
:(){:|:&};: TOX id: fcb8e918bef08581e23f6ddf9d4dba77697c25b217bf372736ed959a95fde36df5b8c5b90fbb
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
questo è l'unico modo che conosco per aprire un canale verso arduino senza installare software sui client[...]secondo me è pesante

ah, telnet questo sconosciuto... probabilmente l'unico programma che esiste e con la stessa sintassi base su windows, linux e mac. Hai bisogno di molti più componenti per usare un browser, che è più difficile da usare in uno script. E l'html lo fai residente sul PC, con javascript che accedono alla seriale o lanciano gli script con i comandi telnet. Tanto se la pagina è salvata sul PC i browser non applicano regole di sicurezza.

ma stiamo divagando.
Logged

my Arduino code: https://github.com/lestofante/arduinoSketch
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Genova
Offline Offline
Faraday Member
**
Karma: 17
Posts: 2747
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

conosco il telnet, ma sappiamo che a tanti non piace aprire la porta 23 o meglio il servizio smiley  smiley-grin anche se può cambiare, ma diventa troppo oneroso,
« Last Edit: April 11, 2013, 05:04:55 pm by pablos » Logged

Meglio imparare dalle cose inutili piuttosto che non imparare niente.   [Arduino Mega R3 + Ethernet shield W5100 + SD card 8Gb FAT32]

0
Online Online
Shannon Member
****
Karma: 117
Posts: 10106
:(){:|:&};: TOX id: fcb8e918bef08581e23f6ddf9d4dba77697c25b217bf372736ed959a95fde36df5b8c5b90fbb
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

conosco il telnet, ma sappiamo che a tanti non piace aprire la porta 23 o meglio il servizio smiley  smiley-grin anche se può cambiare, ma diventa troppo oneroso,

guarda che non è obbligatorio usare la 23, e comunque che sia la 23 per telnet o la 80 per HTTP niente cambia.
il fatto di usare telnet non vuol dire che devi implementare il portocollo telnet: scrivere su telnet è come fare una client.write! infatti puoi usarlo per mandare gli stessi comandi di WebClient e ricevere le risposte HTTP (ottimo per debuggare le risposte HTTP e gli header), puoi inviare i comandi SMTP o POP3 per inviare e rivecere le mail, etc.. e ovviamente tutte queste cose di conseguenza può farle anche arduino! (anzi arduinopuredi più visto che supporta anche l'UDP)
Logged

my Arduino code: https://github.com/lestofante/arduinoSketch
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Ivrea
Offline Offline
God Member
*****
Karma: 5
Posts: 680
"La teoria è quando si sa tutto ma non funziona niente. La pratica è quando funziona tutto ma non si sa il perché. In ogni caso si finisce sempre con il coniugare la teoria con la pratica: non funziona niente e non si sa il perché." Albert Einstein
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

... questo è l'unico modo che conosco per aprire un canale verso arduino senza installare software sui client...

Il fatto che tu non ne conosca altri non vuol dire che non ne esistano, e se per favore non scendi dal tuo piedistallo di onniscenza e assumi toni più umili io non intendo continuare a parlare con te... Come ti ho già detto qualche post fa, prima di fare da luminare sii sicuro di quello che stai dicendo e documentati prima, o quantomeno sii disponibile anche ad imparare e non solo ad insegnare...

Qui ci sta bene il proverbio "chi sa fa, chi non sa insegna"...
Logged

Ivrea
Offline Offline
God Member
*****
Karma: 5
Posts: 680
"La teoria è quando si sa tutto ma non funziona niente. La pratica è quando funziona tutto ma non si sa il perché. In ogni caso si finisce sempre con il coniugare la teoria con la pratica: non funziona niente e non si sa il perché." Albert Einstein
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Tornando in topic, io ero arrivato ad avere una condizione ripetibile del problema: ricevevo dei dati su ethernet da un client TCP e li dovevo girare su seriale, dopo poco si bloccava e non riuscivo più ad aprire la connessione, neppure dopo aver premuto il tasto reset.
In seguito alla modifica della SPI non ho più avuto problemi.
Se riesco vedo di analizzare con un oscilloscopio i segnali /SS e SCK per vedere se sono rispettate le tempistiche indicate nel datasheet, sia con e senza il delay, per vedere quanto cambia la situazione, poi pubblico i risultati.

Ho aperto un Issue su GitHub a questo link:
https://github.com/arduino/Arduino/issues/1360

Perdonatemi il pessimo inglese...  smiley-wink
Logged

0
Online Online
Shannon Member
****
Karma: 117
Posts: 10106
:(){:|:&};: TOX id: fcb8e918bef08581e23f6ddf9d4dba77697c25b217bf372736ed959a95fde36df5b8c5b90fbb
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ottimo, speriamo che diano peso al tuo issue visto che è un problema cos diffuso e di una shield ufficiale
Logged

my Arduino code: https://github.com/lestofante/arduinoSketch
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Ivrea
Offline Offline
God Member
*****
Karma: 5
Posts: 680
"La teoria è quando si sa tutto ma non funziona niente. La pratica è quando funziona tutto ma non si sa il perché. In ogni caso si finisce sempre con il coniugare la teoria con la pratica: non funziona niente e non si sa il perché." Albert Einstein
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Allora, c'è qualcos'altro da analizzare... Stamani il problema si è ripresentato, e sono riuscito ad individuare la discriminante da ieri sera a stamani: la SD inserita!!!
Con la SD inserita (soltanto inserita e basta, da software non ci faccio niente, non ho neppure incluso la libreria) si blocca, tolta la SD tutto ok.

EDIT: nello sketch avevo sbagliato a impostare il pin 4...  smiley-cry smiley-cry smiley-cry smiley-cry smiley-cry smiley-cry smiley-cry smiley-cry smiley-cry smiley-cry smiley-cry

L'avevo impostato basso invece di alto...

Reimpostato alto funziona tutto anche senza i delay... Corro a modificare l'issue su github...
« Last Edit: April 12, 2013, 01:56:53 am by Janos » Logged

Pages: 1 ... 5 6 [7] 8   Go Up
Jump to: