Loading...
Pages: 1 ... 7 8 [9] 10   Go Down
Author Topic: Articolo su Ethernet shield client  (Read 3580 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
God Member
*****
Karma: 4
Posts: 873
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Vaseo a te e' andata bene perche' nella tua applicazione fai p2p e devi muovere frame di pochi byte, e questo fa si che tu non ti debba mai scontrare ne con la congestion avoidance ne con frame rate costanti ad alto throughput ne con il limite di 4 connect massime contemporaneamente.

A me gia' solo il fatto di aprire e chiudere un socket per mandare una manciata di byte in p2p causa grossi problemi di throughput perche' ogni volta che apri e abbatti un socket forzi le finestre del tcp/ip al minimo sindacale, oltre al fatto che per aprire un socket introduci delle latenze.

Pero' hai ragione a sottolineare che dipende dalla applicazione, dai requisiti della applicazione.
Logged

Forum Administrator
Offline Offline
God Member
*****
Karma: 43
Posts: 616
I find plain exciting
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao


Purtroppo ho visto questo thread solo ora... posso chiedervi di farmi una sintesi del problema e vedere come possiamo aiutarvi?

Per quanto riguarda lo shield le ultime 2 versioni sono molto stabili e le abbiamo in produzione da un tot. Sulla scheda ci sono un paio di cosine che aggirano dei problemi del Wiznet. credo ce ne siano in giro tra le 50 e le 80 mila schede di questo tipo...

m








Logged

Global Moderator
Milano, Italy
Offline Offline
Edison Member
*****
Karma: 10
Posts: 1098
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Tra i bug-fix all'IDE di Arduino proposti su github, ho trovato una patch che sembra risolvere o perlomeno migliorare il comportamento del chip Wiznet. Tra le situazioni in cui il chip sembra freezarsi e una delle cause potrebbe essere che quando si trova nella condizione di lasciare una connessione, si mette nello stato di CLOSE_WAIT, quindi sta lì ad aspettate una risposta che di fatto non riceve perchè qualcosa è andato storto nella trasmissione precedente.

Questa cosa è tra quelle che succedono più frequentemente la patch proposta mira ad aggiungere alle condizioni per cui chiudere la connessione anche quella lo stato di CLOSE_WAIT. Quindi, come citavate qualche post fa, sembra essere l'implementazione di un workaround che migliora parecchio la situazione di freeze della Ethernet Shield.

Il lavoro da fare per applicare questa patch è davvero minimo perchè basta aprire il file EthernetClient.cpp che trovate nella directory della libreria Ethernet e nel metodo
Code:
int EthernetClient::connect(IPAddress ip, uint16_t port)
aggiungere la condizione
Code:
|| s == SnSR::CLOSE_WAIT
all'interno del dell'  
Code:
if (s == SnSR::CLOSED || s == SnSR::FIN_WAIT)

quindi viene fuori così:
Code:
if (s == SnSR::CLOSED || s == SnSR::FIN_WAIT || s == SnSR::CLOSE_WAIT)

Se riceverà un buon numero di feedback positivi, questa patch verrà introdotta nella prossima release dell'IDE. A voi testarla, secondo me funziona!
« Last Edit: April 27, 2012, 11:43:23 am by Federico Vanzati » Logged

F

Genova
Offline Offline
Edison Member
*
Karma: 14
Posts: 2442
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Il problema molto fastidioso di doverla resettare più volte per farla partire dopo averla alimentata  non si è mai più verificato con la 1.0rc2, uso molto la shield eth, nel mio caso posso dire che la interrogo per pochi minuti e poi chiudo la connessione remota, non l'ho mai trovata freezata, ogni volta che la chiamo risponde.
A voi succede quando arduino e ethernet sono in costante comunicazione dati? per ore e ore? se è così posso provare a lasciarla 1-2 giorni in costante comunicazione web. Dopo quanto tempo riscontrate un freeze?
ciao
Logged

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

Offline Offline
Jr. Member
**
Karma: 0
Posts: 93
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Io la patch la sto testando ma si blocca lo stesso ...
 smiley-sad


qualcuno conosce questo ??

http://code.google.com/p/tinkerit/source/browse/#svn%2Ftrunk%2FEthernet2%20library%2FEthernet2

Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 68
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

mi serve un consiglio ...  smiley

ho realizzato questo http://www.giannifavilli.it/blog/arduino-controllo-remoto-http/ progetto e funziona tutto bene
tranne che i pin 13 e 12 che si dovrebbero illuminare al superare una determinata soglia di luce e temperatura.
il mio codice e uguale a quello del progetto sopra e la cosa curiosa e che il pin 9 si attiva (diventa HIGH) quando si accende via http e il pin 11 e HIGH (e nessuno l'ha programmato) il pin 12 che dovrebbe accendersi  al superare di una determinata luce si trova sempre a 2,5 volt e il 13 (temperatura) e perennemente spendo malgrado abbia superato la soglia prevista per l'accensione.

da vedere che se controllo con il monitor dell'IDE di arduino, i pin vengono settati giusti e anche visualizzati i dati.

pensavo che la  Ethernet shield fosse collegata male e ho scollegato e ricollegato ma sempre stesso problema.

idee?  smiley-wink smiley-wink smiley-wink smiley-wink
.........................aggiunta
mi sono accorto ora che nel codice originale del sito prima di impostare HIGH o LOW mettono
un punto e poi virgola ".,"
questo il codice:
Code:
if (temp < tempreg) { // accende o spengo un led se la temperatura è più bassa di quella di controllo
          digitalWrite(ledPintemp., HIGH); //accendo
          Serial.print("ON pin "); //scrivo in console
          Serial.println(ledPintemp); //scrivo in console
        }
        else {
          digitalWrite(ledPintemp., LOW); //spengo
          Serial.print("OFF pin "); //scrivo in console
          Serial.println(ledPintemp); //scrivo in console
        }
 
        if (light < 150) { // accende o spengo un led se la c'è luce
          digitalWrite(ledPinlux., HIGH); // accendo
          Serial.print("ON pin "); //scrivo in console
          Serial.println(ledPinlux.); //scrivo in console
        }
        else {
          digitalWrite(ledPinlux., LOW); //spengo
          Serial.print("OFF pin "); //scrivo in console
          Serial.println(ledPinlux.); //scrivo in console
        }

credo sia un errore perche io ho messo solo virgola:
Code:
if (temp < tempreg) { // accende o spengo un led se la temperatura è più bassa di quella di controllo
          digitalWrite(ledPintemp, HIGH); //accendo
          Serial.print("ON pin "); //scrivo in console
          Serial.println(ledPintemp); //scrivo in console
        }
        else {
          digitalWrite(ledPintemp, LOW); //spengo
          Serial.print("OFF pin "); //scrivo in console
          Serial.println(ledPintemp); //scrivo in console
        }
 
        if (light < 150) { // accende o spengo un led se la c'è luce
          digitalWrite(ledPinlux, HIGH); // accendo
          Serial.print("ON pin "); //scrivo in console
          Serial.println(ledPinlux.); //scrivo in console
        }
        else {
          digitalWrite(ledPinlux, LOW); //spengo
          Serial.print("OFF pin "); //scrivo in console
          Serial.println(ledPinlux.); //scrivo in console
        }
come vede dopo aver impostato le uscite high o low invia in seriale le scritte "OFF pin " , "ON pin " con i relativi pin (12 e 13) e questo va a buon fine.

ciao a tutti
« Last Edit: May 30, 2012, 09:58:47 am by arduinh3nk3r » Logged

Malo ( VI )
Offline Offline
Sr. Member
****
Karma: 0
Posts: 371
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

tranne che i pin 13 e 12
Siccome in quel progetto ho letto nel titolo HTTP e qui si parla di Ethernet
Penso che il tuo problema sia questo
Arduino communicates with both the W5100 and SD card using the SPI bus (through the ICSP header). This is on digital pins 11, 12, and 13
Logged

Le mie opere : Flusso correnti nell'impianto fotovoltaico http://arduino.webveneto.net/energy_control/     PING ed E.Mail http://arduino.webveneto.net/link_test/

Bruno L.

Offline Offline
Jr. Member
**
Karma: 0
Posts: 68
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

@ bruno|949

Quote
Penso che il tuo problema sia questo
Arduino communicates with both the W5100 and SD card using the SPI bus (through the ICSP header). This is on digital pins 11, 12, and 13

quindi tradotto (spero bene):
Arduino comunica sia con il W5100 e la scheda SD con il bus SPI (attraverso l'intestazione ICSP).
Questo è il pin digitali 11, 12 e 13

Qualche delucidazione in più? o esempio?

intanto grazie
Logged

0
Offline Offline
Tesla Member
***
Karma: 82
Posts: 8212
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

quindi esiste un pin detto enable, quando più dispositivi stanno sulla stessa linea SPI, solo uno alla volta può essere attivo
Logged

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

Offline Offline
Jr. Member
**
Karma: 0
Posts: 68
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

 smiley-roll smiley-roll smiley-roll
??????????????????
Logged

Malo ( VI )
Offline Offline
Sr. Member
****
Karma: 0
Posts: 371
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Questo è il pin digitali 11, 12 e 13
Qualche delucidazione in più? o esempio?
C'e' anche il 4 coinvolto comunque se usi la SD

Separa il tuo incedere ..
Comincia con gli esempi della Ethernet presenti nell'IDE
Poi .... aggiungi il resto
Io sto' ultimando il mio Energy control che puoi vedere in firma ed ho fatto cosi'
Un passo alla volta
Logged

Le mie opere : Flusso correnti nell'impianto fotovoltaico http://arduino.webveneto.net/energy_control/     PING ed E.Mail http://arduino.webveneto.net/link_test/

Bruno L.

Offline Offline
Jr. Member
**
Karma: 0
Posts: 68
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

@ tutti

grazie  anche se il fatto che il pin 12 e 13 non diventi alto ad un determinato evento, resta un mistero.
Logged

Cagliari
Offline Offline
Faraday Member
**
Karma: 49
Posts: 3011
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

@ tutti
grazie  anche se il fatto che il pin 12 e 13 non diventi alto ad un determinato evento, resta un mistero.
Il pin 13 è utilizzato dalla Ethernet shield per il clock del protocollo SPI. Anche se lo imposti alto dopo al massimo 9 microsecondi torna basso.
Il pin 12 invece è l'input del master, quindi se lo metti alto credo che attivi la pull-up interna.

Alla fine della fiera: se usi la Ethernet shield non puoi usare a tuo piacimento i pin 10,11,12 e 13 perchè sono usati dalla scheda.
Così come non si possono usare i pin 0 e 1 quando si usa la seriale per debug.
Logged


Offline Offline
Jr. Member
**
Karma: 0
Posts: 68
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ok io ho capito tutto, ma come mai nel progetto che ho spiegato sopra 
http://www.giannifavilli.it/blog/arduino-controllo-remoto-http/ dicono che funziona bene.

Logged

Genova
Offline Offline
Edison Member
*
Karma: 14
Posts: 2442
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

E neanche il 4 se c'è lo slot SD
Logged

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

Pages: 1 ... 7 8 [9] 10   Go Up
Print
 
Jump to: