quarta-feira, 4 de setembro de 2013

Dilema do ENC28J60 - Parte 2

Pessoal,

Boa noite! Estou de volta após alguns contratempos! Infelizmente não dá para fazer projetos de clientes e criar aulas do Curso Arduino. Tive que escolher um e optei pelo último!

Mas para a segunda aula do Curso Arduino Automation, um amadurecimento da biblioteca EthernetSupENC28J60.h, lançada na primeira aula, era necessário.

O problema nem era a biblioteca em si, mas o núcleo dela que tinha alguns BUGs sérios e que comprometiam o funcionamento e a velocidade.

O principal BUG que me fez rescrever totalmente o núcleo, ao invés de apenas arrumá-lo, é um que reinicia o Arduino a cada request, forçando a biblioteca utilizar EEPROM para manter o estado entre os reinícios. Além de comprometer a EEPROM do Arduino, ainda existe o problema do reinício que é ruim por si só.

Por esse e outros problemas, causados principalmente pela pressa que fiz a primeira versão, mudei um pouco a abordagem nesse novo núcleo e o compilei separadamente em uma biblioteca chamada EtherEncLib.h, que acabei de publicar no GitHub, conforme segue o link:

https://github.com/renatoaloi/EtherEncLib

Essa biblioteca é independente e não necessita da EthernetSupENC28J60.h (ainda a ser lançada) para funcionar. Acompanha exemplos de funcionamento. Um deles inclusive apresenta todas as portas digitais disponíveis no Arduino UNO para acionamento, em links numa página HTML.

Para finalizar, devo acrescentar que o desafio dessa vez foi organizar todo o código. São mais de 1500 linhas de funções que não seguem um funcionamento linear. A função available() por exemplo não apenas avisa a chegada de um request, mas também efetua a conversação inicial (handshaking) e alimenta o buffer de parâmetros do GET. Obs: POST ainda não foi implementado

Outra modificação importante foi a separação de parte do código no arquivo enc28j60.c para o arquivo socket.c, isolando de vez as funções de hardware.

Para os mais avançados, vale a pena dar uma olhada nas funções de macros do arquivo net.h, utilizadas no arquivo EtherEncLib.c; e foram isoladas dessa forma para caracterizar funções de leitura e escrita dos buffers.

É isso aí pessoal! A segunda aula já está saindo!

Ah! Pessoal, sobre dúvidas, sugestões sobre este tópico, principalmente as técnicas, participem do:

Fórum do Curso Arduino
http://www.seriallink.com.br/forum

Abraços,
Renato

2 comentários:

  1. Renato, boa sorte, admiro seu trabalho. Atente em usar as Pilhas TCP/IP da Microchip, pois a maioria são voltadas para o PIC 18F que tem a estrutura Ethernet integrada. Existe uma versão nova de Stand-Alone Ethernet, bem melhor que o ENC28j60, por que você não cria o seu próprio Shield Ethernet em cima dele? Valeu amigo!

    ResponderExcluir
  2. Renato, cara tenho acompanhado seu trabalho, eu e a comunidade Arduino Bahia admiramos muito você, mais pelo seu espirito livre de disponibilizar as suas aulas, isso é sensacional, a comunidade precisa de pessoas assim, e acredite, os contribuintes sempre terão seu lugar ao sol. Agora amigo, em vários de seus posts (inclusive este), você me diz fazer coisas para clientes, se puder compartilhe conosco que tipo de projetos são esses e se realmente eles são lucrativos, isso seria muito legal.

    23 de janeiro de 2014 20:17

    ResponderExcluir