Go Down

Topic: Problema com W5100 Ethernet (Read 2606 times) 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!!!

jamaljamil

Funcionou. Instalei os dois resistores de 100r conforme mencionado acima. :)

leomuniz

Para corroborar: também funcionou comigo soldar os dois resistores de 100ohms.
Muito obrigado pela dica!

Em outros lugares da internet vi algumas pessoas sugerindo dessoldar o resistor de 510ohms - que é minúsculo - e soldar outros resistores no lugar. Se já tive dificuldade em soldar esses de 100ohms porque achei o espaço pequeno, imagina substituir o outro... sem chance.

Importante: esse shield chinês com resistor errado funciona corretamente no meu modem antigo da GVT (de 2011, eu acho). Quando troquei a internet de casa por NET, com um modem bem mais novo, ele parou de funcionar. Ou seja: se o resistor veio errado, vale soldar os resistores mesmo que esteja funcionando atualmente.



Go Up