Módulo Ethernet Baseado em ENC28J60

O módulo deve ser conectado conforme este diagrama:

Os pinos mudam porque trata-se da porta SPI, que está associada a pinos diferentes no mega.

Não é realmente necessário usar o pino ENC-INT. A Biblioteca Ethershield só usa interrupções em um dos exemplos. E nos meus testes programas simples funcionaram sem qualquer problema com esse pino desconectado.

Os pinos de entrada do ENC28J60 são tolerantes a 5V. Você deve alimentar com 3.3V, mas não há problema se o I/O for 5V, como é o caso do Arduino (exceto DUE).

Para download da biblioteca, que já vem com vários exemplos de uso, siga as instruções deste link.

Limitações

Ao rodar os exemplos de webserver da biblioteca, verá que são bem simples. Sem graça mesmo. Mas isso parece ser inevitável. Entre as limitações do ENC28J60 está o fato de que ele não pode lidar com múltiplos pacotes TCP-IP, então ele tem que mandar toda a página de uma vez, em um único pacote. Porém o tamanho de um pacote TCP-IP está limitado por padrão a algo em torno de 1500 bytes já contando com o overhead; então por segurança os exemplos usam buffers limitados a 500 bytes (não deveria ser tão drástico, mas talvez a biblioteca tenha outra limitação). Ou seja: o webserver não pode dar nenhuma resposta cujo HTML tenha mais que 500 bytes no total, mas código HTML não é nada “econômico” nesse sentido. O sintoma é que o webserver deixa de responder, ficando travado.

O tamanho desse buffer é definido nesta linha dos exemplos:

#define BUFFER_SIZE 500

Para complicar, o Arduino UNO/Duemilanove (ATMEGA328) tem apenas 2KB de RAM (o ATMEGA168 só tem 1KB) para ser usado por todo o seu sketch. Por isso, ao tentar contornar o problema aumentando o tamanho do buffer você corre o risco de travar todo o seu programa.

Veja bem: isso significa que não dá para fazer algo bonito como a GUI de um modem ADSL moderno com um ENC28J60 e um Arduino, porém não é esse o único propósito de uma conexão ethernet. O ENC28J60 é perfeitamente capaz como um meio de enviar comandos simples (por GET, por exemplo) e receber status via rede. Com 500 bytes por comando ou resposta dá para fazer muita coisa. Se você realmente não pode viver com essa limitação, precisa de um shield baseado em um chip com mais recursos, como o Wiznet W5100.

Nota: o ENC28J60 tem outras limitações. Eu só estou citando uma porque foi nessa que eu esbarrei.

 

Biblioteca Ethercard

O próprio autor da biblioteca ethershield anunciou que não atualizará mais a biblioteca e recomenda o uso da biblioteca Ethercard. Essa biblioteca é compatível com o módulo sem problemas, mas o pino CS precisa ser ligado ao pino D8 do Arduino UNO. Essa é a única diferença de conexão. Mas a biblioteca permite a escolha fácil do CS, que agora é definido na inicialização que é feita no sketch.

Por exemplo, para mudar o pino CS para 10, troque nos exemplos:

  if (ether.begin(sizeof Ethernet::buffer, mymac) == 0) //sem o parâmetro opcional, é usado D8.

por

  if (ether.begin(sizeof Ethernet::buffer, mymac,10) == 0) // define D10 como CS

 

 

Tags: , ,

  1. andre’s avatar

    Olá, tenho 2 shields, um sdcard e o ethernet, ambos precisam estar conectados nos mesmos pinos do arduino , qual a solução ? Funcionam em paralelo ?

    Responder

    1. Jefferson’s avatar

      Você precisa alterar uma das bibliotecas para usar outro pino de seleção e fazer respectiva mudança no hardware. Mas não sei o que isso tem a ver com este produto, que sequer é um shield. Se você é meu cliente entre em contato comigo usando o mesmo email usado na compra.

      Responder

Reply

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *