Go Down

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

Janos

#75
Apr 09, 2013, 10:11 pm Last Edit: Apr 09, 2013, 10:22 pm by Janos Reason: 1
Giusto per togliermi una curiosità, acik, puoi provare ad usare questa versione modificata della SPI.cpp? Io non posso provare fino a domani pomeriggio.

Ho fatto questa modifica:
Code: [Select]
void SPIClass::begin() {

 // Set SS to high so a connected chip will be "deselected" by default
 digitalWrite(SS, HIGH);

 // When the SS pin is set as OUTPUT, it can be used as
 // a general purpose output port (it doesn't influence
 // SPI operations).
 pinMode(SS, OUTPUT);

 // Warning: if the SS pin ever becomes a LOW INPUT then SPI
 // automatically switches to Slave, so the data direction of
 // the SS pin MUST be kept as OUTPUT.
 SPCR |= _BV(MSTR);
 SPCR |= _BV(CPOL);  //Questa
 SPCR |= _BV(CPHA);  //E questa
 SPCR |= _BV(SPE);

 // Set direction register for SCK and MOSI pin.
 // MISO pin automatically overrides to INPUT.
 // By doing this AFTER enabling SPI, we avoid accidentally
 // clocking in a single bit since the lines go directly
 // from "input" to SPI control.  
 // http://code.google.com/p/arduino/issues/detail?id=888
 pinMode(SCK, OUTPUT);
 pinMode(MOSI, OUTPUT);
}


Visto che il W5100 può lavorare nelle modalità 0 e 3 della SPI (ci sono 4 modalità) e di default Arduino usa la 0, perché non provare con la 3?

EDIT: C'è una funzione della libreria della SPI che fa proprio questo:

Code: [Select]
SPI.setDataMode(3);

Ma deve essere eseguita prima di chiamare la Ethernet.begin();

Janos

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?  :smiley-eek: :smiley-eek: L'ho letto ieri sera spulciando il datasheet del micro...

leo72

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.

Janos

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
Code: [Select]
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?

lesto

#79
Apr 11, 2013, 01:35 pm Last Edit: Apr 11, 2013, 01:40 pm by lesto Reason: 1
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"
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Janos

#80
Apr 11, 2013, 01:59 pm Last Edit: Apr 11, 2013, 02:23 pm by Janos Reason: 1
@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?

pablos

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

pablos

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

Janos

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

pablos

#84
Apr 11, 2013, 03:23 pm Last Edit: Apr 11, 2013, 03:51 pm by pablos Reason: 1
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 :)

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

Janos

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

lesto


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


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

pablos

#87
Apr 11, 2013, 03:59 pm Last Edit: Apr 12, 2013, 06:55 pm by pablos Reason: 1
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  
no comment

Janos


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

lesto

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

Go Up