Go Down

Topic: Ethernet Shield mi blocca tutto ! (Read 10144 times) previous topic - next topic

Janos

#90
Apr 11, 2013, 06:01 pm Last Edit: Apr 11, 2013, 06:10 pm by Janos Reason: 1
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: [Select]
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

pablos


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

Janos

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...  ;)

gpb01



.... 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 ;)

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

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

pablos

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 ..
no comment

Janos

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

lesto

anzi, a dirla tutta è molto più efficiente NON usare il protocollo HTML, ma il più possibile il TCP grezzo
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

pablos

#97
Apr 11, 2013, 11:32 pm Last Edit: Apr 11, 2013, 11:37 pm by pablos Reason: 1
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?

no comment

lesto

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.
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

pablos

#99
Apr 12, 2013, 12:01 am Last Edit: Apr 12, 2013, 12:04 am by pablos Reason: 1
conosco il telnet, ma sappiamo che a tanti non piace aprire la porta 23 o meglio il servizio :)  :D anche se può cambiare, ma diventa troppo oneroso,
no comment

lesto


conosco il telnet, ma sappiamo che a tanti non piace aprire la porta 23 o meglio il servizio :)  :D 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)
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Janos


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

Janos

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...  ;)

lesto

Ottimo, speriamo che diano peso al tuo issue visto che è un problema cos diffuso e di una shield ufficiale
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Janos

#104
Apr 12, 2013, 08:51 am Last Edit: Apr 12, 2013, 08:56 am by Janos Reason: 1
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...  =( =( =( =( =( =( =( =( =( =( =(

L'avevo impostato basso invece di alto...

Reimpostato alto funziona tutto anche senza i delay... Corro a modificare l'issue su github...

Go Up