terça-feira, 22 de outubro de 2013

Aula 2 - Curso Arduino Automation

Pessoal,

Segue o link do vídeo da Aula 2 do Curso Arduino Automation!

Valeu pela paciência e pelo apoio de todos!


sexta-feira, 18 de outubro de 2013

Lançamento da Aula 2 do Curso Arduino Automation!

Pessoal!

Agora finalmente está saindo a segunda aula do Curso Arduino Automation. Acredito que a partir de agora não teremos mais atrasos como dessas duas primeiras aulas do Curso Automation.

Consegui chegar a uma solução bem interessante! Mas vamos voltar um pouco para organizar as coisas. Primeiro, vale a pena conferir a seqüência certa de posts que culminaram no atraso do lançamento deste curso:


Este então é o último post desta série e também o de lançamento das bibliotecas EthernetSup.h (rev3) e Enc28CoreLib.h

Agora não teremos mais versões separadas para o Ethernet Shield W5100 e para o Módulo Ethernet ENC28J60. Pra isso eu criei um "adaptador" que é a biblioteca Enc28CoreLib.h para ser instalado na biblioteca oficial do Arduino.

Dessa forma, quem já possui um código funcionando para o W5100, basta trocar alguns arquivos para compilar o mesmo código para ENC28J60! 

Isso mesmo! agora acabou o martírio de ter que fazer um código para o ENC28J60 e outro para o W5100. Ambos agora podem ser implementados através da biblioteca Ethernet oficial do Arduino! Por isso agora teremos uma única versão da EthernetSup.h! 

Optei por essa abordagem por dois motivos: a) para quem quiser utilizar a biblioteca sem ter que modificar o código existente seja para W5100 ou ENC28J60; b) para unificar uma versão da EthernetSup.h

Instruções de Instalação EthernetSup

  1. Faça download da biblioteca EthernetSup.h (clique aqui)
  2. Efetue a cópia dos arquivos para a pasta libraries
    No Windows: Meus Documentos\Arduino\Libraries
    No MAC/Linux: /Users/nome_do_usuario/Documents/Arduino/libraries

Para quem utiliza o Ethernet Shield W5100 não precisa fazer mais nada. Para quem utiliza o ENC28J60, precisa também instalar a biblioteca Enc28CoreLib.h


Instruções de Instalação Enc28CoreLib


  1. Faça download da biblioteca Enc28CoreLib (clique aqui)
  2. Faça backup  da pasta Ethernet que fica dentro da pasta libraries, sob o diretório de instalação do Arduino
    No Windows: C:\Arquivos de Programas\Arduino\libraries\Ethernet
    No MAC: /Applications/Arduino.app/Contents/Resources/Java/libraries/Ethernet
    (clique em "mostrar conteúdo do pacote" no aplicativo Arduino) 
  3. Copie os arquivos da biblioteca Enc28CoreLib para a pasta utility
    No Windows: C:\Arquivos de Programas\Arduino\libraries\Ethernet\utility
    No MAC: /Applications/Arduino.app/Contents/Resources/Java/libraries/Ethernet/utility
    (clique em "mostrar conteúdo do pacote" no aplicativo Arduino)
  4. Apague os arquivos w5100.cpp e w5100.h (não renomeie, delete mesmo!)
  5. Agora renomeie o arquivo enc28.h para w5100.h
  6. Abra os arquivos w5100.h e enc28.cpp
  7. Efetue as modificações indicadas abaixo
  8. Abra o código do Arduino que você deseja compilar novamente para ENC28J60 e clique em Carregar (Upload).
  9. Apenas conecte o ENC28J60 no seu Arduino e você está pronto!

Modificações nos Arquivos


  • w5100.h (old enc28.h)
    • Line: 112
      • From: extern ENC28Class ENC28;
      • To: extern ENC28Class W5100;
  • enc28.cpp
    • Line: 11
      • From: #include "enc28.h"
      • To: #include "w5100.h"
    • Line: 23
      • From: ENC28Class ENC28;
      • To: ENC28Class W5100;

É isso aí pessoal! Vou explicar melhor essa instalação na aula que estará em breve no ar! Acompanhe!

Abraços,
Renato

segunda-feira, 14 de outubro de 2013

ENC28J60 - Ativando Super Poderes!

Pessoal,

Ainda estou no calabouço, mas agora vai sair alguma coisa interessante desse meu trabalho. Infelizmente não tem muito jeito. É um trabalho que não consigo dividir com outras pessoas e acho que ninguém acredita muito no ENC28J60, mas algo me dizia que era errado descartar essa opção...

Vi alguns comentários de pessoas dizendo que utilizam as bibliotecas atuais do ENC28J60 sem problemas. É verdade, a maioria delas funciona satisfatoriamente. Eu nem gosto de escrever essa palavra. Ninguém paga mais caro no W5100 porque ele é satisfatório! As pessoas preferem pagar mais caro pelo W5100 porque ele é completo e não requer esforços para instalação da biblioteca. Isso vale o preço. (vide primeiro post sobre o assunto)

Mas eu fui estudar um pouco as origens do ENC28J60 para entender seus conflitos e porque seus super poderes ainda não haviam aparecido, ou se existiam mesmo...

Descobri então que ele é a obra prima da Microchip. Isso não é exatamente um termo bom. Aqui no Brasil temos o termo "obra prima" como algo de superior qualidade, mas o termo realmente significa outra coisa: "Primeira Obra". Ou seja, o primeiro trabalho como profissional do artista ou da empresa. Profissional no sentido que o artista ou criador já passou do nível amador; estudou o suficiente sobre o assunto e aprimorou suas técnicas para o nível profissional.

No sentido real, obra prima significa o primeiro trabalho de uma empresa sobre determinado assunto, lançado comercialmente no mercado. Por esse motivo o ENC28J60 é cheio de BUGs e tem vários documentos de ERRATA.

Não muito tempo depois a Microchip amadureceu seu produto e lançou outros módulos Ethernet bem superiores, são eles o ENC424J600 e o ENC624J600.

Mas o ENC28J60, apesar de seus BUGs, de suas limitações, da falta de bibliotecas por parte da comunidade (nota: não existe biblioteca UDP para ele no ambiente do Arduino); ele ainda sim tem super poderes! Vamos ver alguns:


  • Preço baixo
  • Necessita poucos componentes externos
  • Encapsulamento DIP
  • Checksum auxiliado por hardware (ainda não consegui usar esse, por conflito)
  • Cópia de dados DMA entre endereços do buffer (super poder!)
  • Buffer FIFO cíclico de 8K bytes
  • Liberdade total para programação da camada de aplicação!

Comentando os itens acima, sobre o preço nem precisa falar nada, né? Existem módulos prontos a preços bem acessíveis.

Inclusive esses módulos Ethernet com o ENC28J60 estão ficando cada vez menores! Isso sem falar que existe o encapsulamento DIP, que facilita na hora de projetar com ele. É possível comprar um ENC28J60 que pode ser "espetado" na protoboard. Isso facilita muito o projetista que deseja embarcar essa tecnologia em sua placa.

Sobre as outras características, as principais que descobri são sobre o Buffer de 8K que estava lá sem fazer nada e sobre a cópia DMA que nos permite copiar partes da memória do ENC28J60, oferecendo uma solução de memória adicional ao Arduino.

Ou seja, não preciso utilizar a memória do Arduino para acumular os pacotes TCP a serem enviados. Eu posso simplesmente copiar os bytes para uma área da memória do ENC28J60 e depois fazer um DMACopy para copiar aquele pacote para a área de transmissão, e então transmitir o pacote.

É um caminho mais árduo, mas elimina o limite da memória do Arduino que é de apenas 2K bytes na versão UNO e 4K bytes no MEGA.

O ENC28J60 tem 8K bytes!!! Ele tem o mesmo de memória que dois Arduinos MEGA juntos! É um absurdo de memória que até agora não havia sido utilizada! Consegui resolver isso também!

Ufa! É isso, é pau, é pedra, é o fim do caminho.

Meu objetivo com esse trabalho é que os criadores do Arduino reconheçam essa biblioteca como digna de fazer parte da IDE do Arduino (leia-se: do pacote de instalação original do Arduino). Assim a biblioteca seria distribuída de forma integrada com o Arduino e não mais seria uma ovelha negra perante a comunidade e principalmente, os iniciantes.

Abraços,
Renato