Ethernet Shield mi blocca tutto !

@Acik
Tanto per capire, fai uso di interrupt o di seriale nel tuo programma? Perché leggendo qui:
http://code.google.com/p/arduino/issues/detail?id=384
dice che il problema potrebbe essere che se arriva un interrupt durante la scrittura sulla SPI si potrebbe danneggiare il dato della SPI...

EDIT: avevo letto male, li parla se due dispositivi vanno a lavorare su una SPI, dei quali uno via interrupt... Non credo sia il tuo caso...

potrebbe essere che il problema si verifica quando si utilizza anche la seriale a buadrate superiori a 19200...

i miei sketch di test non hanno mai superato i 9600 baud .... altri test la seriale era totalmente esclusa .... si inchiodava lo stesso

diciamo che in 16 mesi ne ho fatto di prove e debug su tutte le lib che impiegano lo shield :smiley:

Janos:
@Acik
Tanto per capire, fai uso di interrupt o di seriale nel tuo programma? Perché leggendo qui:
Google Code Archive - Long-term storage for Google Code Project Hosting.
dice che il problema potrebbe essere che se arriva un interrupt durante la scrittura sulla SPI si potrebbe danneggiare il dato della SPI...

EDIT: avevo letto male, li parla se due dispositivi vanno a lavorare su una SPI, dei quali uno via interrupt... Non credo sia il tuo caso...

Provare non costa molto, basta mettere un cli() prima dell'operazione da fare via SPI ed un sei() subito dopo, per vedere se dipende da questo (sempre che la lib SPI non usi gli interrupt).

Sfortunatamente (o per fortuna, dipende dai punti di vista) oggi in ditta ci siamo imbattuti in questo problema. Il bello è che abbiato trovato una condizione ripetibile, quindi domani faccio in fretta a provare.

Lo scopo del software è banale, prendere quello che leggo da ethernet, inviarlo su seriale e viceversa: dopo poco cade la connessione, risponde solo al ping e non si ripristina neppure dopo un reset...

Nei miei sketch attuali, non faccio uso della seriale. Nemmeno interrupt.

Eppure si blocca..... e non sono ancora riuscito a capire perche'.

Quello che posso aggiungere e' che a me, statisticamente si e' bloccato piu' spesso non usandolo (o usandolo una volta al giorno) piuttosto che usandolo pesantemente...

allora, i pin SD e Ethernet vanno settati sempre anche se non usati se no sono flottanti e a caso possono diventare 1, e ci si mette una pull-down. (ricordo che l'arduino ha solo pull-up)

Il bello è che abbiato trovato una condizione ripetibile, quindi domani faccio in fretta a provare.

il codice pls!!!

ragazzuoli quì c'è da capirte in QUALE istruzione della libreria si blocca, e dopo QUALE comando... sempre che sia sempre lo stesso punto/comando.

Janos:
Sfortunatamente (o per fortuna, dipende dai punti di vista) oggi in ditta ci siamo imbattuti in questo problema. Il bello è che abbiato trovato una condizione ripetibile, quindi domani faccio in fretta a provare.

Per fortuna !

Janos:
Lo scopo del software è banale, prendere quello che leggo da ethernet, inviarlo su seriale e viceversa: dopo poco cade la connessione, risponde solo al ping e non si ripristina neppure dopo un reset...

Eh. Appunto.
Ma esistera' un modo per resettare questa shield senza spegnerla ??
Un comando da inviare via SPI ?
Un piedino da collegare da qualche parte...
Il RESET poi... perche' non funge ?

Eccolo, ma ho modificato anche la lib ufficiale in alcune parti per avere la possibilità di gestire più connessioni insieme. Comunque ecco il tutto...

Arduino.cpp (1.9 KB)

EthernetClient.cpp (3.45 KB)

EthernetClient.h (910 Bytes)

EthernetServer.cpp (3.45 KB)

Scusate il doppio post ma non potevo aggiungere più di 4 allegati... :wink:

EthernetServer.h (627 Bytes)

EthernetServerSocket.h (1.15 KB)

EthernetServerSocket.cpp (1.14 KB)

Questo è dalla parte Arduino, il quale deve stare nel mezzo fra una scheda con uno Z80 e un nostro sofware proprietario, dei quali ovviamente non posso pubblicare nulla... :wink:

lesto:
allora, i pin SD e Ethernet vanno settati sempre anche se non usati se no sono flottanti e a caso possono diventare 1, e ci si mette una pull-down. (ricordo che l'arduino ha solo pull-up)

Bisogna metterli in OUTPUT e settarli a HIGH.
L' abilitazione e' negativa.
Il codice postato da Pablos nell' altro thread e' corretto.

lesto:
ragazzuoli quì c'è da capirte in QUALE istruzione della libreria si blocca, e dopo QUALE comando... sempre che sia sempre lo stesso punto/comando.

Ho notato che quando ho attivita' sulla rete, blinkano tutti i led "LINK" di tutti i miei Arduini in rete.
Questo dovrebbe significare che la Ethernet Shield non invia allo switch il proprio MAC ADDRESS.....
Se fosse vero, questo significherebbe che lo switch invia alla Ethernet Shield qualsiasi cosa, anche dati che non dovrebbero arrivare li, che poi il WizNet5100 deve analizzare...
Se cosi' fosse, portebbe essere che la causa del blocco siano i vari computer, router, telefoni, console, stampanti, telecamere, mediacenter..... che ho nella mia rete !

A noi è capitato con Arduino collegato ad un PC con un cavo crossato... :wink:

visto che hai già messo le mani nella lib puoi capire a che istruzioni si impalla?

E' quello che sto cercando di capire, mi sto facendo le peggio paranoie ma non capisco dove sia il problema...
Però questo c***o di bug lo trovo, a costo di studiarmi il datasheet del W5100.... Deve essere una cavolata talmente cavolata che passa sotto il naso di tutti senza che nessuno la trovi... Oppure una cosa complicata e difficile da trovare...

Ci sono alcune cose che non ho capito di quello che state facendo, visto che un piccolo gruppo si è messo di buona volontà a cercare di capire una volta per tutte dove, quando e perchè la ethernet si inchioda.

  • Non dovremmo partire da uno sketch comune a tutti e lavorare su quello? Dire "ho usato quello di esempo" non significa nulla va postato lo sketch che lo vedano tutti. Poi si aggiunge un led lampeggiante, poi un begin, stringhe di dati .... dove sono questi pezzi che hai fatto?

C) Rifare Ethernet.begin non serve a nulla. (La Ethernet Shield non si riprende)

Ti ripeto, dove l' hai fatto e come l' hai fatto sto begin? ci si aspettava uno sketch che ci facesse vedere quali erano i test

D) Il tasto RESET non serve a nulla. (Arduino si riavvia, esegue lo sketch, rifa' Ethernet.begin, dialoga con la seriale, accende i LED... ma la Ethernet Shield non si riprende)

  • impossibile che non riparte, deve ripartire non ce ne sono santi, cosa hai fatto per farlo ripartire allora? ne hai comprato uno nuovo e hai buttato via quello inchiodato?

Se vuoi informazioni basta chiedere, senza questi toni.

  • Uso questi toni perchè informazioni non ne stai dando, contesti uno che sta sopra alla ethernet da quasi 2 anni, scrivi ma non dai nessun punto di analisi, nessun dettaglio di quello che fai, nessuno sketch, nessuna spiegazione, dici solo si inchioda evvai, pigio il reset non serve, l'istruzione ethernet.begin non serve, leggi sopra, leggi sotto, seconda riga terza parola ... che dovremmo capire da questo?

Ti starò sulle palle, ma così non arriviamo da nessuna parte :slight_smile: Ci vuole un punto di partenza comune a tutti hardware e software allora si può incominciare

Per quello che riguarda me il problema freeze l'ho risolto in maniera brutale, in casi estremi un ulteriore reset tramite 555 mi risolve un problema a distanza (anche se non è mai intervenuto), se volete uno in più che fa prove e mette a disposizione tutto quello sperimentato durante questi 2 anni io sono qui, se non ho mangiato pesante ... ahahahah

Il 555 sulla mega può essere eliminato caricando il bootloader modificato.

ciao

Ha ragione acik, quando si verifica questo problema la schield inizia a non rispondere più neppure dopo aver premuto il tasto reset, l'unico modo è togliergli l'alimentazione.

Potrebbe anche essere, ma come faccio a sapere io cosa fa? io facevo un reset e ripartiva, ricordo i primi tempi che chiamavo casa e dicevo "mi premi il bottoncino rosso che vedi sulla schedina sopra alla scrivania?", mi ricollegavo con lo smarphone e funzionava di nuovo per un po'.... vedi che non abbiamo punti in comune

Janos:
Ha ragione acik, quando si verifica questo problema la schield inizia a non rispondere più neppure dopo aver premuto il tasto reset, l'unico modo è togliergli l'alimentazione.

Se confermi vuol dire che succede anche a te e che lo hai visto di persona, mi passeresti lo sketch che da questo problema? lo carico anch'io .... voglio vederlo con le mie orecchie :smiley: :smiley: :smiley:

L'ho già pubbliato sopra, ma poiché non fa da webserver ma da ponte fra un nostro software di degub e una nostra scheda in seriale non puoi testarlo...

Il problema, secondo me, è che in quanche modo di riempie qualcosa nel W5100. Ho notato che il problema aumenta al diminuire della velocità della SPI, mentre diminuisce se rallento la velocità di trasmissione dei dati dal nostro software all'Arduino...