problema con enc28j60

ragazzi scusatemi sto provando da un paio di giorni a fare funzionare uno schield ethernet con montato sopra un chip enc28j60 della microchip , dato che ho utilizzato degli esempi gia compilati vorrei capire dove sbaglio , ce qualcuno che con bonta di animo mi puo aiutare

Ci dai piú informazioni per favore? (non vorrei ancora tirare fuori la battuta della sfera di cristallo ...) ;) ;) Quale Ethernet shield e per favore il codice con cui stai provando a far funzionare l' insieme. Ciao Uwe

ho utilizzato due tipi di firmware il primo lo trovi su questo link http://www.mediafire.com/?1pp6ad77vlem1r9 l altro su questo http://www.mediafire.com/?naw8tnlnxyl8pv3 lo shield ethernet che utilizzo e questo grazie a tutti per il vostro aiuto

ciao

che problema ti danno gli sketch che hai caricato? quali prove stai facendo?

ho provato a caricare il web server ma non funziona e vorrei capire perche

"non funziona" é una descrizione molto vaga. Devi spiegare in modo piú dettagliato se vuoi che possiamo aiutarti. Ciao Uwe

ho collegato larduino con lo shield , gli ho collegato il cavo di rete proveniente dal rooter (dritto) e sono andato su explorer , da li ho digitato l indirizzo ip bche avrebbe dovuto avere lo schield tramite il firmware ma niente da fare mi da pagina non disponibile (dopo una decina di secondi) poi sinceramente non so cvosa tu voglia sapere di preciso

Per favore incolla il Firmware (sketch) che hai usato su questa discussione. Ciao Uwe

questo e lo sketch

#include “etherShield.h”

// please modify the following two lines. mac and ip have to be unique
// in your local area network. You can not have the same numbers in
// two devices:
static uint8_t mymac[6] = {0x54,0x55,0x58,0x10,0x00,0x24};
static uint8_t myip[4] = {192,168,1,15};
static char baseurl=“http://192.168.1.15/”;
static uint16_t mywwwport =80; // listen port for tcp/www (max range 1-254)
// or on a different port:
//static char baseurl=“http://10.0.0.24:88/”;
//static uint16_t mywwwport =88; // listen port for tcp/www (max range 1-254)
//

#define BUFFER_SIZE 500
static uint8_t buf[BUFFER_SIZE+1];
#define STR_BUFFER_SIZE 22
static char strbuf[STR_BUFFER_SIZE+1];

EtherShield es=EtherShield();

// prepare the webpage by writing the data to the tcp send buffer
uint16_t print_webpage(uint8_t *buf);
int8_t analyse_cmd(char *str);
void setup(){

/initialize enc28j60/
es.ES_enc28j60Init(mymac);
es.ES_enc28j60clkout(2); // change clkout from 6.25MHz to 12.5MHz
delay(10);

/* Magjack leds configuration, see enc28j60 datasheet, page 11 */
// LEDA=greed LEDB=yellow
//
// 0x880 is PHLCON LEDB=on, LEDA=on
// enc28j60PhyWrite(PHLCON,0b0000 1000 1000 00 00);
es.ES_enc28j60PhyWrite(PHLCON,0x880);
delay(500);
//
// 0x990 is PHLCON LEDB=off, LEDA=off
// enc28j60PhyWrite(PHLCON,0b0000 1001 1001 00 00);
es.ES_enc28j60PhyWrite(PHLCON,0x990);
delay(500);
//
// 0x880 is PHLCON LEDB=on, LEDA=on
// enc28j60PhyWrite(PHLCON,0b0000 1000 1000 00 00);
es.ES_enc28j60PhyWrite(PHLCON,0x880);
delay(500);
//
// 0x990 is PHLCON LEDB=off, LEDA=off
// enc28j60PhyWrite(PHLCON,0b0000 1001 1001 00 00);
es.ES_enc28j60PhyWrite(PHLCON,0x990);
delay(500);
//
// 0x476 is PHLCON LEDA=links status, LEDB=receive/transmit
// enc28j60PhyWrite(PHLCON,0b0000 0100 0111 01 10);
es.ES_enc28j60PhyWrite(PHLCON,0x476);
delay(100);

//init the ethernet/ip layer:
es.ES_init_ip_arp_udp_tcp(mymac,myip,80);

}

void loop(){
uint16_t plen, dat_p;
int8_t cmd;

plen = es.ES_enc28j60PacketReceive(BUFFER_SIZE, buf);

/*plen will ne unequal to zero if there is a valid packet (without crc error) */
if(plen!=0){

// arp is broadcast if unknown but a host may also verify the mac address by sending it to a unicast address.
if(es.ES_eth_type_is_arp_and_my_ip(buf,plen)){
es.ES_make_arp_answer_from_request(buf);
return;
}

// check if ip packets are for us:
if(es.ES_eth_type_is_ip_and_my_ip(buf,plen)==0){
return;
}

if(buf[IP_PROTO_P]==IP_PROTO_ICMP_V && buf[ICMP_TYPE_P]==ICMP_TYPE_ECHOREQUEST_V){
es.ES_make_echo_reply_from_request(buf,plen);
return;
}

// tcp port www start, compare only the lower byte
if (buf[IP_PROTO_P]==IP_PROTO_TCP_V&&buf[TCP_DST_PORT_H_P]==0&&buf[TCP_DST_PORT_L_P]==mywwwport){
if (buf[TCP_FLAGS_P] & TCP_FLAGS_SYN_V){
es.ES_make_tcp_synack_from_syn(buf); // make_tcp_synack_from_syn does already send the syn,ack
return;
}
if (buf[TCP_FLAGS_P] & TCP_FLAGS_ACK_V){
es.ES_init_len_info(buf); // init some data structures
dat_p=es.ES_get_tcp_data_pointer();
if (dat_p==0){ // we can possibly have no data, just ack:
if (buf[TCP_FLAGS_P] & TCP_FLAGS_FIN_V){
es.ES_make_tcp_ack_from_any(buf);
}
return;
}
if (strncmp("GET “,(char *)&(buf[dat_p]),4)!=0){
// head, post and other methods for possible status codes see:
// HTTP/1.1: Status Code Definitions
plen=es.ES_fill_tcp_data_p(buf,0,PSTR(“HTTP/1.0 200 OK\r\nContent-Type: text/html\r\n\r\n

200 OK

”));
goto SENDTCP;
}
if (strncmp(”/ ",(char *)&(buf[dat_p+4]),2)==0){
plen=print_webpage(buf);
goto SENDTCP;
}
cmd=analyse_cmd((char *)&(buf[dat_p+5]));
if (cmd==1){
plen=print_webpage(buf);
}
SENDTCP: es.ES_make_tcp_ack_from_any(buf); // send ack for http get
es.ES_make_tcp_ack_with_data(buf,plen); // send data
}
}
}

}
// The returned value is stored in the global var strbuf
uint8_t find_key_val(char *str,char *key)
{
uint8_t found=0;
uint8_t i=0;
char *kp;
kp=key;
while(*str && *str!=’ ’ && found==0){
if (*str == *kp){
kp++;
if (*kp == ‘\0’){
str++;
kp=key;
if (*str == ‘=’){
found=1;
}
}
}else{
kp=key;
}
str++;
}
if (found==1){
// copy the value to a buffer and terminate it with ‘\0’
while(*str && *str!=’ ’ && *str!=’&’ && i<STR_BUFFER_SIZE){
strbuf_=*str;_

  • i++;*
  • str++;*
  • }*
    _ strbuf*=’\0’;_
    _
    }_
    _
    return(found);_
    _
    }_
    int8_t analyse_cmd(char str)
    _
    {
    _
    * int8_t r=-1;*

* if (find_key_val(str,“cmd”)){
_ if (strbuf < 0x3a && strbuf > 0x2f){_
_
// is a ASCII number, return it
_
_ r=(strbuf-0x30);_
_
}
_
* }*
* return r;*
}
uint16_t print_webpage(uint8_t buf)
_
{_
uint16_t plen;
plen=es.ES_fill_tcp_data_p(buf,0,PSTR(“HTTP/1.0 200 OK\r\nContent-Type: text/html\r\n\r\n”));
plen=es.ES_fill_tcp_data_p(buf,plen,PSTR(“

Welcome to Arduino Ethernet Shield V1.0

“));
plen=es.ES_fill_tcp_data_p(buf,plen,PSTR(”

_

<font color=“blue”>-- Put your ARDUINO online – “));_
plen=es.ES_fill_tcp_data_p(buf,plen,PSTR(”
Control digital outputs "));
plen=es.ES_fill_tcp_data_p(buf,plen,PSTR(”
Read digital analog inputs HERE "));
plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("
_

“) );_
plen=es.ES_fill_tcp_data_p(buf,plen,PSTR(”
V1.0 <a href=“http://www.nuelectronics.com”>www.nuelectronics.com"));*

* return(plen);*
}

poi vicino allo scketch ci sono le librerie

anche io avevo un problema simile, ossia pingando l'indirizzo IP della scheda ( che poi è lo stesso che inserisci te nello sketch ) non riusciva a trovarla...ho dovuto testare diversi indirizzi IP, modificando anche quello della LAN vero e proprio ( mettendolo da dinamico a fisso ), e poi ho dovuto usare sia un IDE più vecchio ( 0.21 ) sia una liberira apposita per quella scheda ( che monta appunto un enc28j60 ).

quindi cosa mi consigli di fare di usare un vecchio ide (0.21) e di prendere cio che manca da questa libreria ????

Meglio la IDE0022. È la versione corretta della 0019 che é uscita con Arduino UNO. Ciao Uwe

niente da fare non funziona , cmq ho usato wireshark ed ho notato che lo shield non emette protocollo

nessuno mi aiuta ??????????

sto' ancora tentando di capire che intendi con "Non emette protocollo" :)

Testato:
sto’ ancora tentando di capire che intendi con “Non emette protocollo” :slight_smile:

Madai, non trovi piú la tua sfera di cristallo? :wink: :wink: :wink:
(penso che devo smettere di fare commenti su questo tema senó qualcuno me lo fa pagare …)
Ciao Uwe

:stuck_out_tongue_closed_eyes: :stuck_out_tongue_closed_eyes: :stuck_out_tongue_closed_eyes:

Ma sei sicuro di aver configurato lo shield sulla stessa sottorete che usi sul router? hai provato a configurarlo con 192,168,0,15 ? (che è più classico). Wireshark anche lui non ha la sfera di cristallo e quindi se il router ha all'interno uno switching hub (molto probabile) non vedi niente anche con la cattura promiscua dei pacchetti, prova a connetterlo direttamente al pc.

ho provato pure a fare un ping sull ' indirizzo ma niente da fare ieri ho scaricato ide 021 e 022 ma lo stesso non funziona, ora vorrei chiederti perche non facciamo un passo alla volta e magari mi fai eseguire gli stessi pasaggi che hai efettuto tu a suo tempo con lo shield simile al mio??? cmq con il termine non emette protocollo intendo che lo shield non comunica col rooter