sábado, 30 de novembro de 2013

Novidades sobre o ENC28J60!

Pessoal,

Estou a ponto de lançar a terceira aula do Curso Arduino Automation. Mas a cada aula faço estudos e revisões na biblioteca do ENC28J60. Até mesmo porque está ruim de utilizar e até de gravar a aula. A instabilidade do funcionamento da biblioteca Enc28CoreLib.h compromete todo o projeto!

Off-Topic: Consegui alguns avanços também na utilização do Ethernet Shield W5100 com a plataforma Supervisório. O problema é que o Shield Supervisório (link) não é compatível com o W5100, mas estou a ponto de conseguir contornar esse problema também.

Bom, mas o assunto continua o problemático ENC28J60! De tempos em tempos acompanho o trabalho de outros desenvolvedores, pelo mundo, que também contribuem com bibliotecas para essa plataforma.

Existem projetos como o do Turicas, chamado Ethernet_ENC28J60 (link) que foram abandonados e não são atualizados há mais de 2 anos, mas existem projetos como o EtherCard (link) que estão em pleno desenvolvimento! Além, lógico do meu próprio projeto chamado Enc28CoreLib (link), que também está em pleno desenvolvimento!

Foi então que achei uma ponta solta de um novelo e agora estou desenrolando ele. Vamos aos fatos.

  1. Sem querer, descobri que há quatro meses houve uma atualização grande e importante na biblioteca EtherCard
  2. Percebi que a plataforma estava bem madura
  3. Mas não, infelizmente eles ainda não resolveram o problema da segmentação de TCP
  4. Descobri também que eles ainda não sabem usar o DMA Copy do ENC28J60 (link), que já descobri ser uma mão na roda.
  5. Entretanto descobri onde fica a documentação (link)
  6. E também descobri onde fica a lista de BUGs conhecidos (link)
  7. Foi então que vasculhando as "issues", que são as "coisas" ou "acontecimentos" relatados pelos usuários, descobri a Issue #71 (link), que trata exatamente do ENC28J60 agindo como um Web Server e citando a limitação da segmentação TCP.
  8. Muito bem, existe um desenvolvedor apelido "fredycpu" que na Issue #68 (link) conseguiu em 15 de Julho de 2013 uma versão funcional do que ele chama de "Páginas Http Multi-Pacotes para/com Arduino" (original: Multi packets http pages with the arduino)
Concluindo, fredycpu finalmente implementou a funcionalidade de fragmentação TCP em cima da biblioteca EtherCard. Tudo o que eu precisava para finalmente consolidar a base da biblioteca EthernetSup (link).

Mas como nem tudo são rosas, existem problemas. Na verdade, estou em um empasse. O que acontece é que a EtherCard, como 99,99% das bibliotecas Ethernet para o ENC28J60, foi desenvolvido em cima do código do Guido Socher e Pascal Stang.

Já a minha biblioteca Enc28CoreLib é uma implementação do TCP/IP Stack da própria Microchip, desenvolvida originalmente por Howard Schlunder. Além disso, ainda adaptei o código para rodar em baixo da biblioteca Ethernet.h (original do Arduino), como podemos ver na segunda aula do Curso Arduino Automation (link).

Resumindo, tenho duas opções agora:
  1. Abandonar meu trabalho e ajustar a implementação da EtherCard com as modificações da Issue #68
  2. Fazer uma engenharia reversa na opção 1 e ajustar minha biblioteca.
A opção 1 acho que é a melhor, mas só tem um problema. Vamos perder a funcionalidade da biblioteca Enc28CoreLib de funcionar sob a Ethernet.h (original do Arduino).

E o problema com a opção 2 é que é mais demorado de implementar e o Curso Arduino Automation já está muito atrasado! 

Acredito que vou fazer uma implementação parcial para meu funcionamento e no lançamento da quarta aula, lanço uma versão nova oficial da Enc28CoreLib.

É isso aí pessoal, a batalha continua!

P.S.: Quase esqueci! Aprendi um termo novo hoje: "Zero-Copy" (wiki). Eu vi esse termo em uma discussão sobre uma memória DMA para o ENC28J60. O estranho é que o ENC28J60 tem isso através do DMA Copy. Como eles não viram isso?

Abraços,
Renato

sábado, 9 de novembro de 2013

Plataforma Wireless do Curso Arduino Automation

Pessoal,
 
  Estou fechando aqui a plataforma Wireless (sem fio) que será utilizada no Curso Arduino Automation. Muita gente me questionou sobre a utilização de Xbee e Relês para ativação a distância, sem fios...
 
  Na verdade esse tópico nem fazia parte do contexto original do Curso Arduino Automation, mas devida a necessidade de implementação em uma casa completa e não apenas em um "Quartinho", não dá pra ficar passando fio pela casa toda. E a plataforma Xbee é muito cara!
 
  Há muito tempo venho estudando uma plataforma mais barata. Infelizmente sempre trombamos no problema do alcance. Essas plataformas mais baratas de rádio são AM e utilizam um protocolo baseado na portadora, que pode ser confundido com qualquer outro sinal na mesma frequência.
 
  Por esse motivo ainda não lancei o Raduino, que é essa plataforma de Rádio para o Arduino (daí o nome). Existe até um manifesto sobre o assunto, que não pode ser divulgado, por problemas jurídicos, mas eu não me preocupo, pois ninguém ainda resolveu essa questão. Dá muito trabalho!
 
  O mesmo acontece com o ENC28J60, que vocês acompanharam o dilema em meus posts (e que ainda nem está perto de terminar)...
 
  Felizmente, o Raduino já está bem avançado e tem na bagagem quase 4 anos de estudos em todos os tipos de front-ends de rádio, bem como todos os tipos de encoders, antenas e amplificadores de sinal.
 
  Portanto vou lançar em breve os kits do Raduino, com código-fonte e hardware abertos, claro; e estou trabalhando em versões com Atmega8 SMD, sem cristal. O circuito é tão simples que qualquer um poderá fazer utilizando um ATMega8 e um kit Wiress 433Mhz. Não precisa de nenhum componente externo!
 
  Versões futuras do Raduino trabalharão com rádios de 2.4Ghz e também estou trabalhando em um front-end de rádio, do tipo "faça você mesmo" de 27Mhz que vai resolver o problema de 80% dos casos sem utilizar nenhum chip! Redução de custo ao máximo!
 
  Vou ver se consigo montar uma library no Eagle para implementação dessa plataforma em placas de plataformas de terceiros. Hummm! Ideias!
 
  Abraços, Pessoal!
 
  Ah! Semana que vem será cheia! Não deixem de verificar a última aula sobre Atmel Studio! Tem tudo a ver com o Raduino, pois eu preciso enfiar um elefante pela fechadura de um Atmega8!
 
  Parte 1 de 2 http://www.youtube.com/watch?v=ECkvuiXLxrM
 
  Parte 2 de 2 http://www.youtube.com/watch?v=kJ8F74CJiRc
 
  PS: Vou lançar um boletim em breve!
 
  Abraços, Renato Aloi