Go Down

Topic: Problema com W5100 Ethernet (Read 1 time) previous topic - next topic

giova014

Quote
Tem que ser 100ohms ? Se usar 120ohms nao funciona ? Pq tenho de 120ohms, senao vou comprar de 100ohms amanha.
Use 100 Ohms.

Quote
Eu vou desoldar esses resistores que vieram e colocar esses, seguindo a pinagem que voce me passou
Se você está falando em dessoldar a rede resistiva 511, não o faça. Apenas acrescente os de 100 Ohms.

Quote
E outra coisa, como funciona o negocio do "keep alive" ??  Eh ele que resolve o problema de quando eu reinicio a energia ele reconecta automaticamente o arduino ?  Porque eh foda toda vez quando desligo e ligo a energia, eu tenho que ficar espetando o cabo em cada porta LAN do router ate ele ligar.

Tem alguma solucao isso ?
Não vou conseguir elaborar agora pois não estou em casa, mas assim que der lhe mostro.
Arduino!!

lcorbi

Maravilha!!

Muito obrigado por enquanto!!  :)

giova014

Para implementar o "Keep alive", deve alterar a biblioteca do W5100, que normalmente fica na pasta:

"C:\Program Files (x86)\Arduino\libraries\Ethernet\src"

No arquivo "EthernetServer.h" adicione na classe EthernetServer o protótipo do método:
Code: [Select]
static void keepAlive(uint32_t interval = 5000);

E no arquivo "EthernetServer.cpp", adicione a definição:
Code: [Select]
void EthernetServer::keepAlive(uint32_t interval){

static uint32_t lastKeepAlive = 0;

if (millis() - lastKeepAlive > interval) {
lastKeepAlive = millis();

for (int sock = 0; sock < MAX_SOCK_NUM; sock++) {
EthernetClient client(sock);

if (client.status() == SnSR::ESTABLISHED) {
W5100.execCmdSn(sock, Sock_SEND_KEEP);
}
}
}
}


No arquivo "Ethernet.cpp", dentro no método:
Code: [Select]
int EthernetClass::begin(uint8_t *mac_address, unsigned long timeout, unsigned long responseTimeout)
acrescente:
Code: [Select]
// Configurate timeout = 3,22 seconds
  W5100.setRetransmissionTime(512); //miliseconds * 10
  W5100.setRetransmissionCount(5);


Os três arquivos alterados estão em anexo para facilitar.

No seu código, normalmente no loop(), adicione antes de:
Code: [Select]
EthernetClient client = server.available();
A chamada do método:
Code: [Select]
server.keepAlive();

Em meus testes, o W5100 fecha as conexões travadas em dois momentos: quando falha ao enviar algum dado e usando o keep alive.
O problema do keep alive é que se você transmitir algo para os clientes logo após o invocar, o keep alive é "anulado", então são necessário testes.
Arduino!!

lcorbi

Muito obrigado! Tentarei isso e lhe informo.  :)

lcorbi

Opa giova014!!

Tudo bem ?

Comprei ontem os resistores de 100ohms e acabei de soldar. Funcionou perfeitamente!!!  \ :) /

Fiz do jeito que vc disse, foi perfeitamente!! E o legal eh que quando desligo a energia e volto novamente, ele reconecta automatico, sem precisar desplugar e plugar novamente.

Muito obrigado viu!! Vlw mesmo por essa dica!!!

Grande abssss!!!

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy