É isso mesmo! A Saga do ENC28J60 está chegando ao fim! Não quero nem ver meus posts antigos sobre o assunto, pois eu sofri demais nesses últimos 4 anos lutando contra o hardware do ENC28J60; até que recentemente consegui vencê-lo!
Sim! Acabei com a raça dele! :)
No início desse ano de 2015 consegui finalmente implementar o Buffer de 8K de memória interna que o ENC28J60 possui; e estava lá sem fazer nada!
Para quem não acompanha a Saga: As outras bibliotecas do Arduino para ENC28J60 não utilizam 10% do poder de fogo desse chip.
Essas bibliotecas, ao invés disso, penduram tudo na memória do Arduino, que deixa tudo mais complicado. Veja tabela comparativa entre as bibliotecas e o consumo de memória RAM:
https://github.com/renatoaloi/EtherEncLib/wiki/Comparsion-Table
Reparem por essa tabela acima que a EtherCard.h (http://jeelabs.org/ethercard), que é outra biblioteca para o ENC28J60, deixa apenas 760 bytes de memória livre no Arduino, para outras partes do programa.
Em resumo, a biblioteca EtherCard consome 80% dos recursos do Arduino e 10% dos recursos do ENC28J60. Não está certo né?
Foi com esse objetivo que desenvolvi a EtherEncLib (https://github.com/renatoaloi/EtherEncLib), que é a minha biblioteca para ENC28J60 que utiliza 90% do poder de fogo desse maravilhoso chip de Ethernet!
Deixando assim o Arduino 90% livre para fazer outras tarefas!
Repare, ainda pela tabela do link acima, que a biblioteca original do Ethernet Shield W5100 (https://www.arduino.cc/en/Main/ArduinoEthernetShield) ocupa apenas 350 bytes de memória (utilizando HTML de meus testes)!
Isso significa que a biblioteca oficial do Arduino é super leve e por isso todo mundo usa e acha maravilhoso! Todo mundo gosta de um programa que funciona e a gente nem percebe que ele está lá!
Agora veja também que a biblioteca EtherEncLib ocupa o segundo lugar (com honra!) gastando apenas 400 bytes de memória!
Isso mesmo, agora você pode utilizar o ENC28J60 como se fosse um W5100 e ainda achar melhor, pois o ENC28J60 é mais rápido que o W5100. Estou preparando uns testes que vão provar isso, principalmente com HTML's grandes, maiores de 2Kbytes.
Para finalizar a Saga, implementei UDP, que estava faltando e agora permite integração com a plataforma Homeseer.
E tivemos uma contribuição Russa do SKA, que implementou todo tratamento POST/GET.
Ontem eu finalizei os testes de desempenho e coloquei uma trava de segurança no caso de colisão de pacotes e o SKA tbém implementou melhoras na comunicação SPI.
Agora a biblioteca está a prova de fogo! Não trava mais e quando acontece por uma colisão de pacotes, em 1 segundo ela se reestabelece e volta a funcionar normalmente.
Essa colisão de pacotes é um problema que surgiu recentemente devida velocidade absurda de funcionamento da biblioteca. O cliente não dá conta de acompanhar e se atrapalha todo. Tive que reduzir a velocidade da biblioteca e adicionar um "fail-safe" baseado em tempo para resetar a conexão caso ela leve mais que 1 segundo.
Pelos testes que fiz, estou transmitindo 2.5Kbytes em 140ms. Na verdade são 2700 bytes em 136 milissegundos. Será que o W5100 consegue essa taxa de transferência?
Vou fazer o teste derradeiro carregando um HTML com uma imagem de 200Kbytes e vamos ver quem vai ganhar esse embate!
Depois posto notícias sobre os testes finais! Eu acho que o ENC28J60 vence! Estou há 4 anos preparando ele para esse confronto final!
Abraços,
Renato
Muito bom!
ResponderExcluirParabéns pelo belo trabalho. Estou usando a biblioteca UIPEthernet e estou enfrentando alguns problemas quanto a travamentos. Estou usando o ATMEGA1284 com ENC28J60. Vou testar sua biblioteca. Tem alguns exemplos? Implementa as mesmas APIs da biblioteca do Arduino, como a UIPEthernet?
ResponderExcluirBoa noite Renato, execelente seu post e sua Library, fiz uso dela, muito show, recentemente comprei uma ENC28J60 e como sou novo em arduino estava esperando um bom exemplo para usar.
ResponderExcluirPorém só consegui fazer rodar em uma placa Uno, é isso mesmo?
Roda também em Mega 2560? quais os pinos que devo usar?
grato,
toda ajuda sempre é bem vidnda para quem esta começando.
Grande Renato Aloi,
ResponderExcluirPrimeiramente parabéns pelo seu ótimo trabalho com módulo ENC28J60. Venho acompanhando sua luta contra esse módulo desde o início, em 2010, quando você disponibilizava vídeo aulas dos cursos Arduino no youtube. Inclusive foi a partir de suas aulas que aprendi a mexer um pouco com essa excelente plataforma que é o Arduino. Foi também assistindo essas aulas que aprendi a fazer placas de circuito impresso, muito obrigado por compartilhar seu conhecimento.
Por um tempo tive a impressão de que você tinha desistido da luta contra o módulo ENC28J60 devido à parada de posts sobre o assunto, mas você é bom no que faz e está vencendo essa batalha. Não é à toa que sua biblioteca, a EtherEncLib, ocupa o segundo lugar em termos de uso de memória do Arduino, e com certeza ocupa o primeiro lugar em termos de desempenho.
É de se admirar que utilizando o ENC28J60 você consiga enviar 200Kb para o Arduino! Atualmente temos que limitar ao máximo o nosso código, contendo scripts HTML, por motivo da pouca memória que fica disponível (em torno de 1,5 Kb). Se assim for em pouco tempo sua biblioteca será a mais utilizada no mundo Arduino.
Renato, consigo usar sua LIB como CLIENT TCP para conectar uma aplicação SERVER no Windows ?
ResponderExcluirMarcelo