sound home lights web server

86
MEGA PLACA & Media Sound Home Auto- mation & Stage Lights Web Server Placa Linux Elektor: nova e melhorada! l Apresentamos o BeagleBone Black l Elektorcardigrama Android (3) l Ligação RF modular usando código Manchester (2) DesignSpark Dicas e Truques Construção de uma infra-estrutura para fazer denúncias Analisador de condensadores IT-28 da Heathkit Extensão para placa Linux Elektor (2) A Melhor Revista de Electrónica Prática do Mundo www.elektor-magazine.pt Outubro 2013 magazine

Upload: others

Post on 11-Sep-2021

14 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Sound Home Lights Web Server

MEGAPLACA

& MediaSound

HomeAuto- mation

& StageLights

WebServer

Placa Linux Elektor: nova e melhorada! l Apresentamos o BeagleBone Black l Elektorcardi♥grama Android (3) l Ligação RF modular usando código Manchester (2) DesignSpark Dicas e Truques

Construção de uma infra-estrutura para fazer denúncias Analisador de

condensadores IT-28 da Heathkit Extensão para placa Linux Elektor (2)

A Melhor Revista de Electrónica Prática do Mundo

www.elektor-magazine.pt

Outubro 2013

magazine

Page 2: Sound Home Lights Web Server
Page 3: Sound Home Lights Web Server

www.elektor-magazine.pt | Outubro 2013 | 3

Edição 341, Outubro 2013Depósito Legal: nº 7313/84ISSN 0870-1407R.C. Social nº 110 523www.elektor.com.ptwww.elektor-magazine.com/pt

Editor: Elektor International Media bvHolandaSede: Elektor International Media b.v.P.O. Box 11 NL-6114-ZG SusterenThe Netherlands.Telefone: +31 46 4389444Fax: +31 46 4370161www.elektor.com | www.elektor.org

A Elektor publica-se 10 vezes ao ano com edição dupla em Janeiro/Fevereiro e Julho/Agosto.

Assinaturas:Internet: www.elektor.com.pt Ir à secção Assine Já!Email: [email protected]

Contacto geral da Elektor Portugal:[email protected]

Publicidade:Elektor International MediaEmail: [email protected]ão Martins: [email protected]

Direitos de autorOs circuitos descritos nesta revista são exclusivamente para utilização pessoal. Os direitos de autor de todos os gráficos, fotografias, desenhos de circuitos impressos, circuitos integra-dos programados, discos, CD-ROM, software e os textos dos artigos publicados nos nossos livros e revistas (que não sejam propriedade de terceiros) estão registados pela Elektor Interna-tional Media bv e não podem ser reproduzidos ou difundidos de nenhuma forma nem por nenhum meio, incluindo fotocópias, digitalizações ou registos de imagem, parcial ou totalmente, sem a prévia autorização escrita do Editor. Também será pre-ciso dispor da referida autorização escrita antes de armazenar qualquer parte desta publicação em sistemas de armazena-mento de qualquer natureza. Os circuitos, dispositivos, com-ponentes, etc., descritos nesta revista podem estar protegidos por patentes. O Editor não aceita responsabilidade alguma pela ausência de identificação da(s) referida(s) patente(s) ou pro-tecções intelectuais de outro tipo. A apresentação de desenhos ou artigos implica que o Editor está autorizado a modificar os textos e desenhos para apresentação na revista, assim como a utilizar esses conteúdos noutras publicações e actividades da Elektor International Media. O Editor não garante a devolução de qualquer material que lhe seja enviado.

RessalvaOs preços e descrições dos produtos relacionados com a publi-cação estão sujeitos a modificações. Excluem-se erros e omis-sões. As opiniões expressas nos diferentes artigos, assim como o conteúdo dos mesmos, são responsabilidade exclusiva dos seus autores e não reflectem necessariamente as opiniões do Editor. O conteúdo e mensagens publicitárias são da responsa-bilidade exclusiva dos respectivos anunciantes.Os preços e descrições dos elementos relacionados com a publicação estão sujeitos a alteração sem prévio aviso. Estão excluídos erros ou omissões.

© Elektor International Media b.v. 2013

A revista Elektor é publicada originalmente também na Holanda, Alemanha, França, Inglaterra, Estados Unidos,

Espanha e Brasil nos respectivos idiomas.

A Equipa ElektorDirecção Editorial: João Martins ([email protected])

Editor Portugal/Espanha: Eduardo Corral ([email protected])

Responsável Técnico

da Edição Portuguesa: Carlos Reis

Redacção Internacional: Harry Baggen, Thijs Beckers, Jan Buiting, Wisse Hettinga, Denis Meyer, Jens Nickel, Clemens Valens

Equipa de desenho: Thijs Beckers, Ton Giesberts, Luc Lemmens, Raymond Vermeulen, Jan Visser

Design gráfico e DTP: Giel Dols, Mart Schroijen

Director online: Daniëlle Mertens

Director de marca: Wisse Hettinga

Director general: Don Akkermans

EditorialComunidade Elektrónica ao rubro!Aos laboratórios da Elektor na Holanda, todas as semanas têm chegado caixas e caixas de novos produtos que, na sua larga maioria, dizem respeito a soluções compatíveis Arduino, Raspberry Pi e outras novas plataformas programáveis.Com os smartphones e os tablets a evoluir a um ritmo alucinante – assinale-se o facto de a Apple ter acabado de lançar o primeiro smartphone baseado num pro-cessador a 64 bit, combinando mais de 1000 milhões de transístores num encapsu-lamento de 102mm no chip A7 do novo iPhone 5s – ao mesmo tempo, as platafor-mas embebidas Raspberry Pi e Arduino estão a estabelecer um patamar acessível para aplicações educativas e estão a gerar um entusiasmo nas comunidades de desenvolvimento como há muito não se via.Todos os grandes fabricantes de semicondutores estão a embarcar numa estra-tégia semelhante à que garantiu o sucesso da Arduino e Raspberry Pi, sendo que alguns dos novos produtos ainda nem sequer estamos autorizados a divulgar.Podemos adiantar que vamos ter fortes apostas da Texas Instruments e vimos recentemente surgir a nova placa GR-Sakura que é o primeiro resultado visível da divisão Gadget Renesas que há um ano se propôs criar soluções compatíveis com sistemas Arduino. A própria placa Embedded Linux da Elektor ganhou recente-mente a capacidade de se ligar a muitas placas de extensão através do seu conec-tor “Gnublin”, incluindo a Raspberry Pi e a nova BeagleBone Black.Começámos agora a disponibilizar a nova Arduino Yún na Loja Elektor e foi com bastante interesse que vimos surgir no mercado a nova solução chipKIT Pi, dese-nhada pela Microchip para criar uma ponte com o universo Raspberry Pi mas que se torna também na primeira plataforma compatível Arduino da marca. Uma solu-ção com base no MCU 32-bit PIC32 da Microchip que permite criar, compilar e pro-gramar aplicações Arduino baseadas em sketchs chipKIT directamente no sistema operativo Raspberry Pi!Entretanto, tivemos oportunidade de acompanhar a iniciativa da RS Components, com o lançamento do software DesignSpark Mechanical, uma solução de software grátis e intuitiva para desenhar estruturas de produtos electrónicos que, acredita-mos, irá revolucionar o mercado.Esta iniciativa da RS em colaboração com a SpaceClaim complementa as biblio-tecas de componentes em 3D disponíveis online e integra-se directamente com o software DesignSpark PCB. O resultado, é que agora podemos criar novos projec-tos com base em software grátis, transmitir os ficheiros para produção e colocar produtos mais rapidamente no mercado.

João Martins,Director Editorial para Países de Língua Portuguesa e Espanhola

•Comunidade

Page 4: Sound Home Lights Web Server

mag

azin

e

4 | Outubro 2013 | www.elektor-magazine.pt

Outubro 2013•Índice No. 341

Comunidade 10 Universo Elektor

Projecto 12 Placa servidora Web XMEGA 24 Elektorcardi grama

Android (3) 47 Apresentamos o BeagleBone

Black 57 Placa Linux Elektor:

nova e melhorada!

Hardware & Software 54 Extensão para placa Linux

Elektor (2) 60 Domina as FPGAs

Teste & medida 70 Medidor LCR de 500 ppm

Curso 78 Curso Arduíno (5)

Labs 84 Energia negativa

DesignSpark 32 Ligação RF modular usando

código Manchester (2) 38 Dicas e Truques

Magazine 42 Analisador de condensadores

IT-28 da Heathkit

Tech The Future 50 Construção de uma

infra-estrutura para fazer denúncias

Page 5: Sound Home Lights Web Server

United KingdomWisse Hettinga+31 46 [email protected]

USAHugo Van haecke+1 [email protected]

GermanyFerdinand te Walvaart+49 241 88 [email protected]

FranceDenis Meyer+31 46 [email protected]

NetherlandsHarry Baggen+31 46 [email protected]

SpainEduardo Corral+34 91 101 93 [email protected]

ItalyMaurizio del Corso+39 [email protected]

SwedenWisse Hettinga+31 46 [email protected]

BrazilJoão Martins+31 46 [email protected]

PortugalJoão Martins+31 46 [email protected]

IndiaSunil D. Malekar+91 [email protected]

RussiaNataliya Melnikova+7 (965) 395 33 [email protected]

TurkeyZeynep Köksal+90 532 277 48 [email protected]

South AfricaJohan Dijk+31 6 1589 [email protected]

ChinaCees Baay+86 21 6445 [email protected]

As Nossas Redes

Conectamos-te com

www.elektor-magazine.pt | Outubro 2013 | 5

Page 6: Sound Home Lights Web Server

• Indústria

6 | Outubro 2013 | www.elektor-magazine.pt

Circuitos Impressos

DesignSpark MechanicalCapacidades de desenho em 3D acessíveis a todos!No dia 16 de Setembro foi lançado o sof-tware DesignSpark Mechanical – uma apli-cação grátis que permite desenhar produtos em 3D para fins profissionais. A iniciativa da RS Components complementa naturalmente as bibliotecas de componentes em 3D dispo-níveis na sua loja online e integra-se direc-tamente com o software DesignSpark PCB. Ou seja, com estas ferramentas grátis de software da RS, já é possível criar um novo produto electrónico na íntegra e transmitir os necessários ficheiros para produção, com a vantagem de que os orçamentos e listas de materiais (BoM) podem ser criados auto-maticamente caso se usem as referências online da RS.O DesignSpark Mechanical foi criado por ini-ciativa da RS Components e Allied Electronics (nos Estados Unidos) e implementado pela SpaceClaim, a empresa especializada em soluções CAD profissionais, resultando numa solução que combina idealmente os aspectos fundamentais da criação de projectos com a integração directa com as bibliotecas e os dados que podem ser importados do site da RS/Allied.O ambiente gráfico é semelhante a outros pacotes de desenho 3D, mas é bastante mais simples – fazendo lembrar de certa forma alguns aspectos do SketchUp 3D – a outra aplicação 3D gratuita que permitiu a milhões

de pessoas experimentarem pela primeira vez este tipo de ferramentas.Mas são as ferramentas disponíveis no DesignSpark Mechanical que fazem toda a diferença, sendo ideais para quem deseja fazer uma transição de desenho em 2D para 3D e não tem bases de formação CAD muito profundas. Os resultados que se podem atin-gir podem mesmo ser exportados para pos-terior tratamento em soluções CAD especia-lizadas, destinando-se essencialmente a criar conceitos e protótipos que podem inclusiva-mente ser exportados para impressão em 3D.As ferramentas do DesignSpark Mechanical baseiam-se essencialmente em modelado-res baseados em gestos que permitem ao utilizador pensar as geometrias dos objec-tos por extrusão, combinação e modelação directa de objectos poligonais simples, sem a complexidade das ferramentas 3D tradi-cionais e sendo o motor de rendering opti-mizado sempre em fundo, sem necessidade de intervenção por parte do utilizador. Um utilizador sem grande experiência pode criar rapidamente o seu conceito e pode sempre voltar atrás e corrigir aspectos específicos, sem comprometer o trabalho realizado. No final, o DesignSpark Mechanical fornece toda a documentação necessária para produ-ção, para além de criar desenhos com espe-

cificações detalhadas de forma praticamente automática.Além disso, o DesignSpark Mechanical foi pensado para colaboração remota – embora as próximas versões venham certamente a introduzir ainda maior evolução nesse sen-tido – tal como explicaram os responsáveis da SpaceClaim presentes no evento de lan-çamento desta solução.Em termos de importação e exportação de ficheiros – a área a que foi dada bastante atenção anteriormente ao lançamento – o DesignSpark Mechanical permite importar os ficheiros de desenho PCB em formato IDF, importar modelos tridimensionais do catálogo da RS / Allied Catalogue e mais de 40 formatos de ficheiros 3D, sendo os resul-tados dos projectos exportados em formato STL que permite a construção de protótipos rápidos.

20 milhões de utilizadoresEste importante desenvolvimento vem repre-sentar também uma profunda alteração na forma como o desenho de produtos electró-nicos passa a estar disponível a uma comu-nidade alargada de utilizadores, incluindo o suporte de múltiplas línguas, tal como já acontecia com a ferramenta de desenho elec-trónico DesignSpark PCB e em ligação directa aos recursos online disponibilizados no site do mesmo nome.A disponibilidade do DesignSpark Mechani-cal vem superar duas importantes barreiras ao acesso de ferramentas de desenho 3D, criando enormes benefícios para quem qui-ser desenvolver rapidamente conceitos sofis-ticados e produtos: o custo proibitivo das soluções CAD existentes e o tempo necessá-rio para aprender a usar programas CAD 3D apropriados a esta área. Não só o DesignS-park Mechanical é grátis como a simplicidade de utilização significa que qualquer pessoa pode encarar concretizar as suas ideias em 3D, sem as semanas ou meses que normal-mente implica usar um software CAD tra-dicional. Existem actualmente cerca de 1,5 milhões de licenças de software CAD 3D instaladas no mercado e a RS estima que cerca de 20 milhões de pessoas possam agora vir a experimentar esta nova aplica-

Esta nova solução de software grátis, rápida e intuitiva permite desenhar estruturas de produtos electrónicos e vem abrir novas possibilidades e acelerar o processo da ideia até à produção.

Page 7: Sound Home Lights Web Server

notícias

Kits Hercules LaunchPad da Texas Instruments agora disponíveis na FarnellTodos os grandes fabricantes de microcon-troladores estão a embarcar numa estraté-gia semelhante à que garantiu o sucesso de outras placas / plataformas junto da comuni-dade electrónica internacional. A Texas Instru-ments é apenas o nome mais recente a aderir a este tipo de iniciativa com a sua plataforma TI Hercules LaunchPad, desenhada para sim-plificar o desenvolvimento de qualquer pro-jecto baseado nos MCUs Hercules Safety, os quais respondem especificamente a soluções certificadas IEC 61508 e ISO 26262 e m t e r m o s de padrões de segurança operacional.A Farnell element14 veio já confirmar que irá manter as placas TI Hercules LaunchPad em stock, per-mitindo assim que os seus clientes possam avaliar as capacidades, desempenho e carac-terísticas desta plataforma.A flexibilidade das mais recentes novidades para o ecossistema TI MCU LaunchPad são motivos suficientes para o gigante da distri-buição electrónico apostar no stock desta pla-taforma que garante enormes funcionalidades e permite acelerar o processo de desenvolvi-mento. Os novos kits de avaliação expandem a plataforma LaunchPad com os MCUs Hercules Safety que são capazes de responder a todo o tipo de aplicações, sendo uma solução de baixo custo. A Farnell element14 confirma que irá manter em stock os dois novos kits de desenvolvimento

Hercules LaunchPad da Texas Instruments com suporte aos MCUs ARM Cortex TMS570 e série RM4x. Cada kit contém a placa, um cabo USB e documentação. A emulação integrada e os MCU destas soluções permitem explorar funções avançadas, sendo que a placa alimentada por USB integra também um emulador XDS100v2

JTAG, luzes LED, um sensor de luz e porta série SCI para

PC. O software integrado inclui demonstrações

com interfaces gráficas de uti-

lizador (GUI) que se podem descarregar.

Existem já diversos kits de avaliação LaunchPad para dife-

rentes microcontroladores: as soluções MSP430, C2000, Tiva C Series e Hercules

Safety. Basta escolher a solução de avaliação LaunchPad baseada no microcontrolador que se adapta melhor às necessidades e objectivos de cada projecto. Cada kit inclui a placa Laun-chPad, um cabo USB e um guia de iniciação rápido para ajudar os utilizadores e estão dis-poníveis uma ampla gama de documentação e recursos online em E2E.ti.com, onde existe um fórum também para colocar dúvidas e parti-lhar ideias com os especialistas da TI e mem-bros da comunidade.Estes kits de avaliação LaunchPad são também especialmente adequados para aplicações de ensino.http://www.ti.com/ww/en/launchpad/over view_head.htmlwww.farnell.comwww.element14.com

Circuitos Impressos

ção grátis. Além disso, a utilização deste tipo de ferramentas num ciclo inicial do desenvolvimento permite eliminar pro-cessos morosos que normalmente exis-tem na fase de transporte da ideia para o processo de produção.A capacidade de impressão directa dos modelos tridimensionais criados será outro dos benefícios evidentes, criando assim uma ferramenta acessível a todos que irá complementar de forma ideal a disponibilidade de impressoras 3D a preços bem mais económicos.Com acesso aos mais de 38.000 modelos que a biblioteca online de componentes DesignSpark disponibiliza, o DesignS-park Mechanical permite rapidamente criar soluções profissionais que podem ser implementadas directamente. A RS e a Allied tem estado também a colaborar com a empresa de conteúdos 3D Trace-Parts, para permitir o acesso a milhões de modelos disponíveis no portal CAD tracepartsonline.net, directamente em formatos que podem ser importados para o DesignSpark Mechanical.Vale mesmo a pena experimentar o software DesignSpark Mechanical que, como único defeito, tem apenas o facto de correr, para já, apenas em Windows. De resto é uma solução extremamente elegante e intuitiva.www.rs-components.com

É possível descarregar directamente a aplicação gratuita de desenho 3D no link:www.designspark.com/mechanical

Page 8: Sound Home Lights Web Server

• Indústria

8 | Outubro 2013 | www.elektor-magazine.pt

Novas perspectivas de aplicação com a nova Arduino YúnA nova placa Arduino Yún ficou dispo-nível no dia 10 de Setembro 2013, tem a mesma dimensão da Arduino Uno mas combina agora um microcontro-lador ATmega32U4 (o mesmo da Leo-nardo) e um sistema Linux baseado no chipset Atheros AR9331. Além disso, a Arduino Yún tem capacidades Ethernet e WiFi já integradas.Segundo a Arduino explica, a Yún é única na sua gama, porque oferece um sistema de dis-tribuição Linux ligeiro para complementar o seu tradicional interface de microcontrolador. A placa vem também preparada para comuni-cação em redes WiFi e Ethernet, criando uma ferramenta poderosa para comunicações com dispositivos “internet of things”, sendo que os processadores Linux e Arduino comuni-cam através da biblioteca Bridge, permitindo enviar comandos directamente para a linha de comandos do Linux.O desenho da Yún mantém os pinos de E/S tal como na Arduino Leonardo, permitindo assim que esta seja compatível com a maioria dos shields desenhados para Arduino.Com o sistema de auto-descoberta da Yún, qualquer computador consegue reconhecer as placas ligadas na mesma rede, permitindo carregar sketches através da rede sem fios para a Yún, para além de pelo conector micro--USB, tal como na Leonardo.Mas a placa tem ainda dois interfaces de rede separados, uma porta Fast Ethernet a 10/100

Mbit/s e um interface Wi-Fi IEEE 802.11 b/g/n que funciona em 2.4GHz, com suporte de encriptação WEP, WPA e WPA2. Este interface WiFi pode também funcionar como ponto de acesso, permitindo que outros dispositivos na rede se liguem directamente à Yún. Neste modo como ponto de acesso, a Yún não se pode ligar à Internet, mas pode servir como agregador para grupos de sensores via Wi-Fi, por exemplo. Desta forma ficam também ultrapassadas algumas limitações de interface das soluções Arduino com serviços web, sendo que o ambiente Linux simplifica o acesso a serviços, usando as mesmas ferramentas que existem para computador, permitindo tam-bém correr várias aplicações complexas sem sobrecarregar o microcontrolador ATmega.Para ajudar a desenvolver aplicações ligadas a serviços web, a Arduino criou uma parceria com a Temboo, um serviço que simplifica o acesso a centenas das APIs mais populares, sendo que a biblioteca da Temboo vem com a Yún.A biblioteca Bridge da Yún permite a comu-nicação entre dois processadores, ligando a porta série hardware do AR9331 à porta Série 1 do processador 32U4 (pinos digitais

0 e 1). A porta série do AR9331 dá acesso à consola Linux (command line interface) para comunicação com o ATmega 32U4. Ferramentas de gestão de sistema estão instaladas por defeito e é possível insta-lar e correr as nossas próprias aplicações usando esta funcionalidade Bridge.

A Yún pode ser alimentada também atra-vés do conector micro-USB, pelo pino Vin, ou com um módulo opcional Power Over Ether-net (POE). A alimentação pelo Vin deve ser de 5VDC. Não existe regulador de tensão inte-grado para tensões mais elevadas.A Yún corre uma versão Linux OpenWRT deno-minada Linino e a memória integrada de 16MB da placa contém a imagem Linux, um instala-dor python completo e um sistema de gestão que permite instalar software adicional.O processador AR9331 tem 64 MB de memó-ria DDR2 RAM disponível, suficientemente para correr um web server ou streaming de vídeo de uma webcam. É possível expandir a memória de armazenamento através de um cartão micro-SD ou de memórias USB. Basta incluir um directório chamado “arduino” no nível de root do dispositivo de armazena-mento para este ser automaticamente reco-nhecido pela Yún.Além disso, a Yún tem uma porta USB host ligada ao AR9331, o que permite ligar perifé-ricos diversos, tal como webcams, memórias, controladores, etc.http://arduino.cc/en/Main/ArduinoBoardYun

Ganhe um Kit de Desenvolvimento PICDEM™ Lab da MicrochipA Elektor Portugal oferece mais uma vez aos seus leitores a possibilidade de ganharem um kit de desenvolvimento PICDEM™ da Microchip. O PICDEM Lab Development Kit (#DM163045) foi dese-nhado de forma a oferecer uma plataforma de desenvolvimento e aprendizagem completa, para projectos baseados nos microcontroladores PIC a 8-bit baseados em Flash da Microchip, com 6-, 8-, 14-, 18- e 20-pinos. Sendo uma solução orientada para um primeiro contacto com microcon-troladores PIC, nomeadamente para estudantes, este kit de desenvolvimento é fornecido com cinco dos mais populares microcontroladores PIC a 8-bit e um conjunto de componentes separados para podermos criar uma grande variedade de circuitos. Os adaptadores de expansão oferecem acesso e conectividade completa a todos os pinos dos microcontroladores PIC ligados e a todos os componentes que estejam instalados.Para complementar este kit, a Microchip inclui ainda o Programador/Depurador PICkit™ 3 ade-quado apenas a desenvolvimento, em conjunto com uma suite de ferramentas de software grátis que permite criar rapidamente aplicações originais.Para ganhar este Kit de Desenvolvimento PICDEM Lab, basta visitar a página http://www.micro-

chip-comps.com/elektor-lab e preencher o formulário com os nossos dados. O vencedor será contactado pela Microchip e a revista Elektor irá divulgar o nome do feliz contemplado.

Page 9: Sound Home Lights Web Server

notícias

Nova placa GR-Sakura da RenesaspClaramente, o impacto provocado pela Arduino no mercado da electrónica mundial ainda não parou de gerar ondas de choque. Até mesmo a Renesas, a maior empresa de semiconduto-res do mundo, decidiu “entrar na onda” e criar soluções compatíveis Arduino para chegar a novas gerações de entusiastas da electrónica.O esforço foi anunciado há um ano no Japão com a criação da Gadget Renesas, uma divisão que foi criada especialmente para implemen-tar projectos de criação de uma série de pla-cas com ambientes de software “simples para começar” e chegar a pessoas sem experiên-cia na programação de sistemas embebidos e, ao mesmo tempo, permitindo aos profissio-nais mais experientes criar facilmente novos protótipos. Os planos da Gadget Renesas (GR) acabaram por dar frutos e, em Julho de 2013, foi anunciado que estava disponível a primeira placa GR-Sakura, produzida pela Wakamatsu Tsusho. Esta placa GR-Sakura, tem um micro-controlador RX63N, tem dimensões compa-tíveis com sistemas Arduino e vem acompa-

nhada de templates e bibliotecas em C++.Entretanto, as GR-Sakura chegaram ao mer-cado internacional em Agosto de 2013 e na Elektor temos estado também a experimen-tar as possibilidades destas placas – que sin-ceramente aos olhos do mercado ocidental parecem ser uma espécie de “Arduino para meninas” ou versão Hello Kitty da Arduino. Mas não devemos deixar a cor iludir-nos, por-que as duas versões das placas GR-Sakura são “brinquedos” sérios, com a versão standard, equipada com um MCU a 32-bit da Rene-sas (RX63N), tendo pinos compatíveis com a placa da Arduino UNO e respectivos shields, enquanto a versão GR-Sakura Full (full featu-red), vem com um conector de rede (RJ-45), conector USB host, ficha de alimentação DC e um adaptador de cartões MMCA placa Gadget Renesas compatível Arduino possui memória flash integrada e funções avançadas de comunicação, incluindo um controlador Ethernet e USB 2.0. A memória do chip RX63N é programável em modo USB

e a memória flash integrada é visível como um drive se tivermos a placa ligada a um PC.O compilador web RX63N on Cloud é uma base GNU suportada directamente pela Renesas e oferecido gratuitamente, existindo uma App para Android que permite criar aplicações com módulos plug-in, permitindo a virtualmente qualquer pessoa criar novos sistemas sem a necessidade de programação complexa. Basta ligar a placa a um PC, tablet ou smartphone com um cabo USB e descarregar ficheiros já disponíveis que podem ser executados na placa.http://japan.renesas.com/gr/http://www.facebook.com/renesasfun

Page 10: Sound Home Lights Web Server

•Comunidade

10 | Outubro 2013 | www.elektor-magazine.pt

Wisse Hettinga

Universo Elektor

Módulo Iso-PiQuando Brian Millier, colaborador da Circuit Cellar, recebeu o seu primeiro Raspberry Pi no passado 2012, iniciou um projecto que inspirou o artigo Módulo de E/S para Raspberry Pi, dividido em duas partes publicadas nas edições de Agosto e Setembro de 2013 da Circuit Cellar. Brian Millier, um antigo engenheiro de instrumentação da Univer-sidade Dalhousie em Halifax, Canadá, resume a sua curva de aprendizagem na utilização do Raspberry Pi e partilha o versátil módulo de E/S que projectou para este computador que consiste apenas num módulo. “Desde que recebi o meu Raspberry Pi, um dos projectistas deste computador desen-volveu um módulo de E/S chamado Gertboard”, disse Brian Millier. “Penso que o meu módulo é diferente e que tem algumas vantagens em relação ao Gertboard”.Por exemplo, Brian Millier disse que o seu módulo “fornece um iso-lamento galvânico completo entre todos os dispositivos de E/S a este ligados e também ao Raspberry Pi (protegendo assim o módulo Raspberry Pi)”. Na edição de Setembro de 2013 da Circuit Cellar pode ver como configurar o “Iso-Pi” de Brian Millier.

O módulo de E/S Iso-Pi de Brian Millier está ligado ao Raspberry Pi através de um pequeno cabo.

eXpressamente para áudioA longa História do áudio da revista Elektor vai entrar numa nova era com o relançamento da audioXpress. Em 2011 a Elektor adquiriu as revistas audioXpress e Voice Coil, os catálogos Loudspeaker Industry Sourcebook e World Tube Directory, livros de áudio diversos, e muito mais. Acreditando que o universo dos entusiastas deve servir como modelo para a indústria, na sua excelência e qualidade de construção, estes títulos foram fundados nos EUA por Edward T. Dell (1923-2013) e, durante 35 anos, forneceram aos fãs do áudio, assim como àqueles que trabalham na indústria, grandes artigos, projectos, dicas e tecnologias.Uma nova equipa editorial, reforçada pelos autores seleccionados da rede Elektor, está actual-mente a trabalhar no relançamento desta publicação num formato expandido. A nova Audio- Xpress está orientada para a comunidade global de engenharia de áudio, sem esquecer a cobertura do esforço de Investigação e Desenvolvimento da indústria em muitas novas áreas de aplicação.A “nova” audioXpress vai ser lançada na próxima convenção da AES em Nova Iorque (17 a 20 de Outubro de 2013) com uma nova imagem gráfica, em versão impressa nos Esta-

dos Unidos e disponível a nível mundial em formato digital, incluindo uma newsletter regular para os mais de 30 000 membros (actualmente). A audioXpress já está em contacto com a comunidade global de áudio através do Twitter (@audioXP_editor) e do Facebook (facebook.com/audioxpresscommunity).

www.audioxpress.com

Todos os dias, a todas as horas, em todos os momentos há projectistas e entusiastas a pensar, alterar, a fazer engenharia inversa e a desenvolver novos produtos electrónicos. Principalmente por divertimento, mas às vezes o divertimento transforma-se numa actividade séria. O Universo Elektor faz a ligação entre alguns destes eventos e actividades – para divertimento e negócios.

Page 11: Sound Home Lights Web Server

www.elektor-magazine.pt | Outubro 2013 | 11

À Volta do Mundo...

Universo Elektor O próximo passo: Arduino.next

Decididamente as plataformas Arduino tornaram-se uma das principais portas de entrada para o Mundo da Tecnologia para muitos jovens estudantes. Uma das chaves para este sucesso pode ser a facilidade de

construção de uma aplicação em minutos. Não são necessários conhecimentos aprofundados de electró-nica ou de programação. Está quase tudo na Internet – copia-se e cola-se simplesmente os fragmentos de

código, reproduz-se um circuito simples e a sua aplicação está pronta a funcionar.Mas, e se quisermos aprofundar um pouco mais? Como se pode modificar o comportamento da sua aplicação? Ou como fazê-la funcionar de forma diferente? Que circuito é necessário para fazer funcionar uma nova função? Foram analisadas estas questões e estão a ser trabalhadas as respostas adequadas, fáceis de entender para o ajudar a dar o próximo passo na sua plataforma embebida favorita. Este passo chama-se Arduino.next e vai estar disponível brevemente – impulsionado pela Elektor.Mantenha-se sintonizado com os nossos canais de comunicação! Siga-nos no Facebook, em www.facebook.com/arduinonext, e no Twitter, em arduinonext, e veja os produtos já disponíveis para venda em www.elektor.com.pt.

Circuit Cellar “renovada”Na edição de Setembro de 2013, a revista Circuit Cellar desvendou uma nova e arrojada imagem e novos conteúdos para engenheiros electrónicos, académicos, e para todos os projectistas de sistemas embebidos. Em conjunto com a equipa da Elektor International Media, a equipa da Circuit Cellar fornece uma imagem limpa e moderna que torna o estudo de fotografias e a análise de esquemáticos mais fácil e excitante. No decorrer das pági-nas estão inseridas ligações directas úteis (e também códigos QR) para uma variedade de recursos essenciais on-line, tais como código fonte, vídeos e listas de componentes.Em relação aos novos conteúdos, a Circuit Cellar vai ter duas colunas informativas: Com-putação Verde de Ayse Coskun (edição 278) e Programação Lógica na Prática de Colin O’Flynn (edição 279). Outra nova secção é o Universo CC (pag. 8). Assim como a secção Universo Elektor da revista Elektor, a Circuit Cellar fornece agora mensalmente actualiza-ções de tópicos de interesse para a comunidade, tais como o CC Weekly Code Challenge (http://bit.ly/1brGEIU).A equipa espera que goste da Circuit Cellar renovada. Para propor artigos e ideias para projectos, envie um e-mail para [email protected].

Armadilha para Mosquitos Amiga dos AnimaisPara muitos de nós a “luta” contínua para evitar as picadas dos mosquitos é uma preocupação! Boa sorte – vai provavelmente acordar todas as noites a explorar o quarto à procura daqueles pequenos !@#$$$% que andam atrás do seu sangue.Ou… faça como Aurélian Moulin, o estagiário francês do laboratório da Elektor. Sem-pre à procura de novos projectos, propôs o “derradeiro caçador de insectos”: um LED e uma ventoinha de um velho computador. Quando as piadas se acalmaram foi-lhe perguntado se já tinha experimentado isto – a resposta foi simples, “sim” (os estagiários franceses são bastante sérios). A ideia era simples – os LEDs atraem os mosquitos, e depois a ventoinha aspira-os para uma pequena rede. O Aurélian construiu um protótipo simples e, para grande surpresa, o dispositivo capturou 120 mosquitos na primeira noite!Respondendo à pergunta de 1 milhão de dólares: todos os mosquitos capturados estavam vivos. Uma pergunta: como pensa que estes mosquitos se esquivaram da velocidade mortífera das pás da ventoinha?

(130187)

Page 12: Sound Home Lights Web Server

•Projecto

12 | Outubro 2013 | www.elektor-magazine.pt

Jens Nickel (Elektor Alemanha)Desenvolvimento: Achim Lengl e Bernd Köppendörfer (KöpLe Engineering)

Placa servidora Web XMEGAMostrador, cartão SD, Ethernet, RS-485, botões e LEDs

Neste artigo apresentamos uma placa baseada num microcontrolador XMEGA especialmente adequada para aplicações de monitorização e controlo. O módulo TCP/IP permite a implementação do um servidor Web ou de outras aplicações de rede, e o cartão micro-SD facilita o registo de dados. O interface de utilizador fica a cargo de quatro LEDs, quatro botões, e um mostrador amovível. A placa inclui também, naturalmente, uma ampla gama de interfaces externos.

Page 13: Sound Home Lights Web Server

XMega Web Server

www.elektor-magazine.pt | Outubro 2013 | 13

A popularidade do ElektorBus demonstrou de forma clara o interesse por parte dos nossos lei-tores em aplicações de monitorização e controlo. Obviamente, é sempre possível utilizar um compu-tador como controlador central, mas para muitas aplicações esta opção é claramente um exagero, quer em termos de custo, tamanho ou até ruído. Para algumas aplicações a placa Elektor Linux é uma boa opção, embora nem todos os nossos leitores se sintam confortáveis com um sistema operativo deste género. E, em muitos casos, tudo o que é necessário é um simples microcontrolador de 8 bits, como por exemplo um da série AVR.Os interfaces externos são essenciais numa placa deste género, para garantir um fácil acesso a sensores e actuadores remotos. Um interface RS-485 é uma escolha apropriada, e claro, um interface de rede (Ethernet) é sempre útil. A presença de um leitor de cartões SD possibilita igualmente o registo das leituras dos sensores, e o mostrador de texto, juntamente com os botões e LEDs, permite o desenho de interfaces de utili-zação simples, baseados em menus.

Baseada num XMEGAA placa descrita neste artigo cumpre todos

os requisitos acima descritos. Na Figu- ra 1 pode-se ver o seu diagrama de

blocos. A KöpLe Engineering [1] trouxe também algumas ideias

adicionais ao projecto, tendo sido também a responsável

pelo desenho final do circuito e da placa de circuito impresso.

O fruto do seu trabalho está disponível através da Elektor, na forma de uma placa

já montada e testada ou, para os leitores que o prefiram, apenas a placa de circuito impresso [2]: consulte a Figura 2.A escolha do microcontrolador foi fortemente influenciada pelo desejo de implementar apli-cações WEB, pelo que seria necessária bastante memória flash. Assim, excluiu-se à partida o ATmega2560 (que é utilizado, por exemplo, nas placas Arduino de maiores dimensões) e optou-se antes pelo ATxmega256A3. Este dispositivo tem 256 KB de memória flash e 16 KB de memória RAM, assim como algumas características interes-santes, como por exemplo um sistema de eventos avançado [3]. Este permite, por exemplo, contar o número de transições de nível em qualquer um dos pinos GPIO. O controlador de interrupções com níveis de prioridade configuráveis é também

TCP/IP

MCUXMEGA256A3

ELEKTORBUS

MicroSD-CARD

BUTTONS

BUTTONS

DISPLAY

UART (MINI_DIN)

EEC(EXTENSIONS) LEDS

3V3SPI

ETHERNET

SPI

SPISPII2C

12V

120126 - 13

RS485REGULATOR

12V

5V

UART (FTDI/BOB→USB)

Figura 1. Diagrama de blocos da placa Elektor XMEGA.

Características•ATxmega256A3 com 256 KB de memória flash e 16 KB de memória

SRAM•Quatro botões de pressão e quatro LEDs•Módulo mostrador plug-in, com três linhas de dezasseis caracteres,

e iluminação de fundo com LEDs• Interface RS-485 com terminais (de parafuso) para os sinais A e B,

assim como 12 V e GND (compatível com o ElektorBus)•Bloco de pinos opcional para ligação de cabo FTDI USB para TTL •Bloco de pinos opcional para módulo conversor Elektor BOB USB

para TTL •Pinos para UART adicional levados até conector mini-DIN opcional•Blocos de pinos opcionais para ligação de praticamente todos

os pinos do microcontrolador•Conector para cartões microSD ligado através de interface SPI •Conector para módulo WIZ820io, disponível no Serviço Elektor

(# 130076-91)•Conector extensão embebido (EEC) com três entradas A/D,

duas entradas GPIOs, SPI e I2C num bloco de 14 pinos (2x7), com várias placas de expansão compatíveis disponíveis na loja Elektor

•A placa de circuito impresso pode ser montada nas caixas Hammond 1598REGY ou RS referência 220-995

•Programável através do programador de baixo custo AVRISP e do ambiente de desenvolvimento gratuito Atmel Studio

•Biblioteca de funções em C para todos os módulos periféricos disponível como download gratuito

Page 14: Sound Home Lights Web Server

•Projecto

14 | Outubro 2013 | www.elektor-magazine.pt

placa, de forma a possibilitar a comunicação com outros circuitos preexistentes e baseados em 5 V. Os circuitos de alimentação são assim dois, cada um deles baseado num eficiente regulador de tensão comutado MC34063A [4]: consulte o esquema do circuito na Figura 3. Para facilitar a selecção dos componentes para cada um destes circuitos, pode recorrer a uma útil ferramenta de cálculo disponível gratuitamente na Internet [5].Ambos os controladores são alimentados por uma tensão de 12 V, que pode ser obtida através de um bloco de terminais (descrito de seguida) ou de um conector jack: atenção à polaridade! JP1 permite seleccionar qual das duas entradas vai alimentar o circuito.O conector K1 é um interface de programação e depuração de 6 vias, que permite a programação directa do microcontrolador no circuito. A dis-posição de pinos deste programador é diferente dos já familiares programadores In-Circuit da restante série ATmega, mas ainda assim pode recorrer ao programador de baixo custo AVRISP mkII [6]: este suporta automaticamente a tensão de alimentação de 3,3 V deste dispositivo XMEGA. E claro, não falta também o botão de reset.

InterfacesO interface série UART é, ainda hoje, o mais popu-lar para comunicação entre placas. A programa-ção do mesmo é muito simples, graças às UARTs embebidas no interior do microcontrolador. Para além disso, existem também vários conversores disponíveis, por exemplo para RS-485 ou USB. O nosso microcontrolador contém seis módulos UART, dos quais três são utilizados directamente nesta placa.Os sinais PC2 e PC3 provenientes de uma das UARTs são dirigidos para um circuito integrado de interface com o barramento RS-485, sendo as linhas A e B (RS-485) disponibilizadas num bloco de terminais. O terminal adicional é a ligação à massa, que permite assim a ligação a outras pla-cas com o interface RS-485 ou ao ElektorBus. Por exemplo, o nosso conversor RS-485 para USB [7] pode ser ligado através de três condutores, permi-tindo assim um controlo remoto, eventualmente a uma distância considerável, através de um PC; o módulo Elektor AndroPod [8] pode também ser utilizado para controlar esta placa, mas neste caso através de um tablet ou telemóvel. Uma quarta ligação no bloco de terminais permite que a placa seja também alimentada a partir do barramento de 12 V disponível no ElektorBus.

útil em aplicações mais complexas. À partida pode-se considerar o facto da disposição de pinos deste microcontrolador não ser compatível com os membros mais antigos desta família como uma desvantagem, e até os projectistas mais experi-mentes com os dispositivos AVR podem precisar de algumas horas para se familiarizarem com a nova folha de características. Contudo, uma alternativa mais rápida passa por tomar partido dos controladores fornecidos pelo fabricante para os interfaces UART, SPI e restantes, disponíveis gratuitamente no ambiente de desenvolvimento proposto, o Atmel Studio 6. Mas aqui na Elektor optámos por tornar as coisas ainda mais simples: fornecemos um interface de programação, isto é, uma API (application programming interface), para o microcontrolador, juntamente com um ficheiro com todos os controladores necessários para os vários interfaces da placa, conforme será descrito nas próximas secções.

Fonte de alimentaçãoComo é normal na electrónica moderna, o micro-controlador XMEGA requer uma tensão de ali-mentação de 3,3 V. Tornou-se assim óbvio que seriam necessárias tensões de 3,3 V e 5 V na

Figura 2. A placa Elektor XMEGA pode ser adquirida já totalmente montada e testada. Pode ser expandida com módulos adicionais através de blocos de pinos adicionais.

Page 15: Sound Home Lights Web Server

XMega Web Server

www.elektor-magazine.pt | Outubro 2013 | 15

ATXMEGA256A3-AU

RESE

T

IC5

AVCC

PA5PA6

PA3

PB0PB1

PC0

PB2

GNDVCC

PA4

PA7

PB3PB4PB5PB6PB7

PC1

PC2

PC3

PC4

PC5

PC6

PC7

GND

VCC

PD0

PD1

PD2

PD3

PD4

PD5

PD6

PD7GNDVCCPE0PE1PE2PE3PE4PE5PE6PE7

GNDVCCPF0PF1PF2

PF3

PF4

PF5

GND

VCC

PF6

PF7

PDI

PR0

PR1

GND

PA0

PA1

PA2

141516

10111213

17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32

33343536373839404142434445464748

49505152535455565758596061626364

123456789

K612345678

K1112345678

K101 2 3 4 5 6 7 8

K71 2 3 4 5 6 7 8

K312345678

K4

12345678

K14

12345678

K13

12345678

9

8

7

65

1

3

4

2

K9

LED_

3/PA2

LED_

2/PA1

LED_

1/PA0

PDI_C

LKPD

I_DAT

AW

IZ_P

WDN

WIZ

_INT

WIZ

_RES

/M2_

UART

_2M1

_UAR

T_2

TX_U

ART_

2

LED_4/PA3S_1/PA4S_2/PA5S_3/PA6S_4/PA7PB0PB1PB2PB3PB4PB5DISP_CONDISP_CS

DE

RX_UART_2RTS_UART_2CTS_UART_2

SD_CLKSD_MISOSD_MOSI

SD_CSSD_CD

DISP_RSSCL/PE1SDA/PE0

SPI_CLK

RE RO DI WIZ

_CS

WIZ

_MOS

IW

IZ_M

ISO

WIZ

_SCK

CTS_

UART

_1RT

S_UA

RT_1

RX_U

ART_

1TX

_UAR

T_1

SPI_C

SSP

I_MOS

ISP

I_MIS

O

C24

100n

+3V3

C10

100n

C17

100n

+3V3

C21

100n

+3V3

C15

100n

+3V3

Q1

16MHz

C20

22p

C16

22pL3

10uH

+3V3

+5V+3V3

R24

10k

C9

100n

DISP_CON

K8

101112

123

456789

SPI_CLKSPI_MOSIDISP_CSDISP_RSS_1/PA4S_2/PA5S_3/PA6S_4/PA7

+3V3

C29

100n

C30

10u 16V

WIZ_MOSIWIZ_SCKWIZ_CSWIZ_INT

WIZ_PWDNWIZ_RES/M2_UART_2

WIZ_MISO

K1123456

PDI

PDI_CLK

PDI_DATA

R2

100R

R3

10k

S1

+3V3

K15

1011 1213 14

1 23 45 67 89

EEC

+3V3

PB1PB2SDA/PE0SPI_MISOSPI_CLKPB4 PB5

SPI_CSSPI_MOSI

SCL/PE1PB3PB0

TXB0106

IC4

VCCA VCCB

GND

B1A1 16

15

A2 B2 14

A3 B3 13

A4 B4 12

A5 B5 11

A6 B6 10

OE

1

9

2

345678

+3V3 +5V

C14

100n

C13

100n

3

2

1JP3

R27

10k

C22

100n

RTS_UART_2RX_UART_2TX_UART_2CTS_UART_2M1_UART_2WIZ_RES/M2_UART_2

TXB0106

IC6

VCCA VCCB

GND

B1A1 16

15

A2 B2 14

A3 B3 13

A4 B4 12

A5 B5 11

A6 B6 10

OE

1

9

2

345678

+3V3 +5V

C27

100n

C28

100n

3

2

1JP4

R30

10k

C26

100n

RTS_UART_1RX_UART_1TX_UART_1CTS_UART_1

mini DIN8

K16

123456

T232 BOB

K18

123456

FTDI

LT1785

IC3VCC

GND5

8

76

4

1

32

D

R

+5V

C11

100n

R205k6

R23

10k

R22

10k

R21

10k

RO

REDE

DI

R13

120R

JP2 1

R11

680R

R18

680R

K5

RJ485

1

2

3

4

+12V

+12V

GND

A

B

ext

S2

R25

10k

C12

100n

+3V3

S_1/P

A4

S3

R26

10k

C18

100n

S4

R28

10k

C19

100n

S5

R29

10k

C23

100n

S_2/P

A5

S_3/P

A6

S_4/P

A7

D4

R9

680R

D5

R12

680R

D7

R17

680R

D8

R19

680R

LED_

1/PA0

LED_

2/PA1

LED_

3/PA2

LED_

4/PA3

+3V3

R31

10k

SD_CD

SD_MISOSD_CLK

SD_MOSISD_CS

R41R

R71R

C1

220p

D2

MBRS140

L1

470uH

C2

100n

C3

47u

+5V

R63k6

R5

1k2

MC34063A

SWI EMI

DRI COL

SWI COL

COMP IN

TIM CAP

I SENS

(SO8)

IC1

GND

VCC6

3

2

8

4

1

7 5

D1

R1

1k6

R81R

R101R

C8

150p

D3

MBRS140

L2

470uH

C7

100n

C6

47u

+3V3

R153k6

R14

2k2

MC34063A

SWI EMI

DRI COL

SWI COL

COMP IN

TIM CAP

I SENS

(SO8)

IC2

GND

VCC6

3

2

8

4

1

7 5

D6

R16

680R

K2

1

3

2

C4

100n

C5

10u

10V

10V

16V

+12V+12V

JP11

C25

100n

+3V3

CS/DAT3DAT2

DAT1DAT0

VDD

GND

K17

MicroSD-CARD

Slot CMDCLK

VSS

CD 108

123

4

5

6

7

9

ext

WIZ820IO

RESET

MOSI3V3D3V3D

PWDN

MISO

K12

GNDGND

SCK

INT

GNDJ2

101112

CS

J1123456

789

120126 - 11

**

*

* *

Figura 3. Esquema do circuito da placa XMEGA. É feita uma utilização extensiva das capacidades E/S do microcontrolador, nomeadamente dos três módulos SPI, três UARTs e módulo I2C.

Page 16: Sound Home Lights Web Server

•Projecto

16 | Outubro 2013 | www.elektor-magazine.pt

ExpansãoEmbora os interfaces previamente descritos sejam suficientes para a maioria das aplicações, é fácil imaginar situações nas quais as capacidades da placa precisam de ser ampliadas através de dis-positivos adicionais. A maioria destes dispositivos será controlada através de interfaces I2C ou SPI, pelo que se optou por levar os pinos correspon-dentes do microcontrolador até um bloco de pinos na placa. Foi nesta altura que nos ocorreu utilizar a mesma disposição de pinos que a placa Linux Elektor, desenvolvida por Benedikt Sauter. Isto significa que podemos utilizar o mesmo conector embebido de extensão de 14 vias EEC (Embedded Extension Connector) para ligar qualquer uma das placas de extensão da placa Elektor Linux desenvolvida pela equipa de Projectos Embebi-dos (Embedded Projects). Entre estas, contam--se uma placa de expansão com um mostrador, um placa de expansão de portas e um relógio em tempo-real [9], uma placa de relés [10], uma placa de controlo de motores passo-a-passo, um sensor de temperatura e muito mais: consulte os artigos previamente publicados em [11] e [12].É também possível montar conectores ou blocos de pinos adicionais junto ao microcontrolador para efeitos de teste, depuração e expansão, permitindo assim acesso a praticamente todos os pinos do XMEGA. A placa fornecida pela Elektor

inclui apenas um conector soldado junto ao lado inferior do integrado, mas este destina-se apenas a garantir estabilidade e suporte mecânico ao módulo mostrador descrito na secção seguinte. Não tem qualquer função elétrica quando utili-zado nesta configuração.

Interface de utilizadorSe esta placa for utilizada como centro da apli-cação de monitorização e controlo, é particu-larmente útil a presença de um mostrador. Mas nem todas as aplicações o requerem, e como tal este é um módulo distinto para ligação (opcio-nal) à placa, conforme necessário. Esta opção é mais flexível, pois permite também a montagem do mostrador noutro local, por exemplo, numa caixa à parte.

Os sinais digitais DE e /RE controlam a trans-missão e recepção por parte do circuito inte-grado que controla o interface RS-485. O jum-per JP2 activa a resis-tência de terminação de 120 Ω no barramento. As resistências opcio-nais R11 e R18 garan-tem um nível de tensão bem definido nas linhas A e B sempre que nenhum outro nó no barramento estiver a transmitir, o que reduz a sensibilidade da placa a interferências. Ainda assim, nas nossas experiências com o bar-ramento ElektorBus não notamos qualquer pro-blema em qualquer um

dos casos (com ou sem as resistências).Os pinos da segunda UART são ligados a um conector mini-DIN (não incluído na versão dis-ponibilizada da placa), juntamente com quatro sinais GPIO. Pode assim comunicar com outros módulos ou circuitos através de um cabo dese-

nhado à medida. Este conector mini-DIN é com-patível, por exemplo, com o conector mini-DIN presente no módulo Andropod. Para garantir uma melhor compatibilidade, o jumper JP3 permite seleccionar se os níveis de sinal devem ser com-patíveis com lógica de 3,3 V ou de 5 V.A terceira UART (nos pinos PD2 e PD3) foi sele-cionada para ligação a um conversor UART/USB. Demos aos projectistas a escolha entre um cabo adaptador FTDI USB para TTL ou a placa Elektor BOB USB para TTL, ambas disponíveis no Ser-viço Elektor [2]. Também neste caso é permi-tida a opção entre níveis lógicos de 3,3 V e 5 V: a tensão pretendida é configurada através de JP4. Podem usar-se blocos de pinos em ângulo ou direitos, conforme for mais adequado para a aplicação pretendida.

EA_DOG-M163X-ALCD- DISPLAY

LCD1CAP1N

CAP1PVO

UTVDD

RST

R/W VIN

GND

PSB

D6

2640 37 36 25 2435

D0

34

D1

33

D2

32

D3

31

D4

30D5

38

RS

39

CSB

27 2329 28

D7

21

22

20

A2

19

C2A1 C1E

1 2

K310 11 12

1 2

3 4

5 6 7 8

9

R3

0R

+3V3+5V

S2S1 S3 S4

R2

27R

R4

27R

R1

27R

R50R

+5V

C5

100n

C4

100n

+3V3

C3

100n

C1

10u

C2

100n

+3V3+5V

120126 - 12

SPI_C

LKSP

I_MOS

IDI

SP_C

SDI

SP_R

S

Figura 4. Esquema do circuito do módulo mostrador. Os quatro botões permitem a implementação de um sistema de menus.

... A maneira simples, Webserver e outras aplicações de rede ...

Page 17: Sound Home Lights Web Server

XMega Web Server

www.elektor-magazine.pt | Outubro 2013 | 17

SCK e CS ligados ao módulo de hardware SPI no porto E do XMEGA. Tal como para os restan-tes periféricos do microcontrolador, foi incluída uma pequena biblioteca de programação para um interface mais fácil com este periférico. Esta biblioteca lida apenas com dados guardados em bruto no cartão: por outras palavras, trabalha com um formato usável apenas na própria placa. Se pretende desenvolver capacidades mais evo-luídas para este controlador, pode encontrar uma boa introdução ao tópico em [14]. O pino CD no receptáculo SD é levado à massa sempre que é inserido um cartão, e este sinal é ligado ao pino associado ao porto PE3 do microcontrola-dor XMEGA.Uma característica especial desta placa é o espaço dedicado a um módulo de interface de rede WIZ820io. Este módulo, também disponível no Serviço Elektor (# 130076-91) [2], é uma placa com microprocessador autónoma que implementa a pilha de protocolos TCP/IP. O microcontrolador XMEGA fica assim aliviado da tarefa de lidar com o tráfego de rede ao nível do protocolo. Tudo o que o microcontrolador tem de fazer é indicar ao módulo quando deve abrir uma ligação (socket), especificando para tal um endereço IP e um porto, quando pode enviar caracteres, e por aí adiante. Os dados provenientes de outro dispositivo na rede podem ser recebidos de forma idêntica. A ligação entre a placa XMEGA e o módulo de interface de rede é mais uma vez feita através do barramento SPI, neste caso ligado ao porto

O bloco de pinos para o mos-trador (K8) tem 12 pinos, dos quais três são reservados para a ligação à massa e para as duas tensões de alimentação. O mos-trador propriamente dito é con-trolado via SPI: para além dos habituais sinais MOSI, SCK e CS, existe um quarto sinal RS que indica se um byte deve ser inter-pretado pelo mostrador como um comando ou como dados. Pode obter mais informações na res-pectiva folha de características [13].Quando o módulo mostrador é ligado à placa do microcontrola-dor, este leva o pino 4 do bloco de terminais à massa. Este pino é ligado ao porto PB6 do micro-controlador. Se PB6 for configu-rado por software como uma entrada e a resis-tência de pull-up interna for activada, o micro-controlador pode detectar automaticamente a ligação do mostrador através da análise do nível de sinal nesta entrada.Os quatro botões de pressão estão associados a quatro pinos adicionais, também incluídos neste módulo mostrador (Figura 4). Os botões estão dispostos por baixo do mostrador, o que faci-lita bastante a implementação de um sistema de menus.Mesmo que uma dada aplicação não faça uso do mostrador, os botões de pressão podem ainda assim ser necessários. Por esta razão os botões são duplicados na placa principal, e como tal são ligados aos mesmos pinos do microcontrolador. Os condensadores C12, C18, C19 e C23 fazem o amortecimento do sinal proveniente destes contactos, para compensar possíveis oscilações mecânicas.Para concluir esta secção falta mencionar os LEDs, indispensáveis não apenas para indicar o estado da aplicação, mas também para facilitar a depuração do código. A placa inclui um total de quatro LEDs.

Cartão SD e RedeO receptáculo SD aceita cartões micro-SD, atra-vés dos quais se pode implementar a funcionali-dade de armazenamento em massa nesta placa. O cartão SD é controlado através do chamado modo SPI, com os quatro sinais MISO, MOSI,

Figura 5. Pode-se ligar uma ampla gama de placas de expansão através do conector de expansão embebido (EEC).

Page 18: Sound Home Lights Web Server

•Projecto

18 | Outubro 2013 | www.elektor-magazine.pt

C do microcontrolador. Por limitações de espaço não vamos descrever este módulo de rede, mas pode obter toda a documentação junto do fabri-cante coreano WIZnet [15]. As bibliotecas dos controladores estão disponíveis em C para uma ampla gama de microcontroladores, garantindo assim um interface para para o código da aplica-ção (um servidor Web, por exemplo), na forma de funções como SocketOpen(). Adaptámos o back--end deste controlador para a nossa placa e para o XMEGA, e ampliámos o front-end com algumas funções simples adicionais. Iremos descrever a utilização desta placa numa rede doméstica e a sua ligação à Internet num artigo separado, a ser publicado brevemente.

SoftwareA biblioteca ElektorBus, juntamente com uma pequena biblioteca para o mostrador da KöpLe e o controlador WIZnet tiveram um papel deter-minante no desenvolvimento da Biblioteca de Firmware Embebido, que foi o tema de dois arti-gos anteriores da Elektor [16][17]. Uma vez que o desenvolvimento desta biblioteca integrada foi focado no suporte para a placa de servidor Web XMEGA, estamos agora em posição de oferecer, com bastante agrado, bibliotecas de funções para todos os blocos periféricos na placa.O código EFL (Embedded Firmware Library) pode ser obtido em [2] e [18]. Este inclui os módulos de código individuais, assim como uma aplica-ção de demonstração para a placa. O interface de programação (API) para o microcontrolador XMEGA é, como habitual, disponibilizado num par de ficheiros, ControllerEFL.h e ControllerEFL.c. Neste caso, os dois ficheiros residem na sub--pasta Xmega256A3. São disponibilizadas fun-ções para ler e configurar entradas e saídas digi-tais, efectuar leituras do conversor A/D, enviar e receber dados através dos interfaces UART, e muito mais. E tudo isto sem ter de consultar a folha de características!O ficheiro da placa contém código que invoca estas funções do microcontrolador. Inclui funções de baixo nível que permitem comunicar com os blocos de periféricos, para uso das funções de mais alto nível disponibilizadas pela EFL. Assim, por exemplo,

void Display_SendByte(uint8 DisplayBlockIndex, uint8 ByteToSend, uint DATABYTE_COMMANDBYTE)

Listagem 1. Demonstração com LEDs, botões de pressão e mostrador

int main(void)

{

Controller_Init();

Board_Init();

//Extension_Init();

ApplicationSetup();

while(1)

{

ApplicationLoop();

}

};

void ApplicationSetup(void)

{

LEDButton_LibrarySetup(ButtonEventCallback);

Display_LibrarySetup();

Display_WriteString(0, 0, “Display0”);

//Display_WriteString(1, 0, “Display1”);

}

void ApplicationLoop()

{

ButtonPollAll();

}

void ButtonEventCallback(uint8 BlockType, uint8 BlockNumber,

uint8 ButtonPosition, uint8 Event)

{

//Buzzer(BuzzerBlockFirstIndex, 1000,

BUZZER_TONEMODE_RAMP);

if (Event == EVENT_BUTTON_PRESSED)

{

ToggleLED(0, 0);

Display_WriteNumber(0, 1, BlockNumber);

Display_WriteNumber(0, 2, ButtonPosition);

}

}

Page 19: Sound Home Lights Web Server

XMega Web Server

www.elektor-magazine.pt | Outubro 2013 | 19

placa de extensão. A aplicação de demonstração XmegaDemo ilustra esta capacidade: na pasta base do código carregue na pasta Applications e localize o ficheiro XmegaDemo.atsln. Um duplo clique neste ficheiro abre o projecto no Atmel Studio 6. Assim que o ficheiro hexadecimal tenha sido programado com sucesso no microcontro-lador, a primeira linha do mostrador deve apre-sentar o texto Display0. Se pressionar um dos botões, o respectivo número será apresentado no mostrador e o primeiro LED da placa irá piscar.

A Listagem 1 contém o código fonte. Na função de configuração (setup) da aplicação são inicia-lizadas as bibliotecas do mostrador (Display) e dos LEDs e botões (LEDbutton). Esta inicialização indica à biblioteca, entre outras coisas, que fun-ções da aplicação devem ser chamadas quando cada um dos botões for pressionado.Para garantir que os botões são amostrados com frequência suficiente, deve-se garantir que o ciclo principal da aplicação inclui uma chamada à fun-ção ButtonPollAll().A função ButtonEventCallback() contém o código executado sempre que for detectado o pressio-nar de um botão. O argumento ButtonPosition indica o número do botão pressionado na placa

é uma função que envia um octeto (byte) atra-vés do bloco SPI ligado ao mostrador (a tabela de blocos periféricos inter-nos inclui uma referên-cia a este dispositivo). Esta função também con-figura o sinal RS para o nível correcto, conforme se tratar de um octeto de comando ou dados: para tal, a função deve consultar quais dos pinos do microcontrolador está ligado à linha RS do mostrador. O código de alto nível não precisa de conhecer as ligações internas da placa, pelo que uma aplicação pode utilizar a biblioteca de controlo do mostrador de forma independente do hardware. Para além disso, no que diz respeito à aplicação, sempre que esta chama a função Display_SendByte().

não lhe interessa se o mostrador é ligado atra-vés de um interface SPI ou de um porto paralelo (de quatro bits).No ficheiro da placa são fornecidas outras fun-ções de baixo nível similares, para acesso ao cartão SD e ao módulo de rede. O código base inclui documentação para todas estas funções, obtida com recurso à ferramenta Doxygen. A pasta Manuals inclui também documentação adicional com a descrição interna da EFL, em inglês, francês e alemão.

O meu primeiro programaOs ficheiros da biblioteca independente de har-dware para o mostrador (DisplayEFL.h/.c) podem ser encontrados na pasta Libraries no código base.A aplicação inicializa a biblioteca com a chamada

Display_LibrarySetup();

podendo a partir daí comunicar com até quatro mostradores, numerados de zero a três, e loca-lizados na placa de controlo principal ou numa

Figura 6. Pode-se construir uma poderosa unidade de controlo através da adição de oito relés. A placa pode também ser controlada por um PC através de um barramento RS-485.

Page 20: Sound Home Lights Web Server

•Projecto

20 | Outubro 2013 | www.elektor-magazine.pt

ExpansãoSe for o feliz proprietário de um placa de exten-são Linux [9], pode ligá-la através do conector de expansão embebido EEC, utilizando um cabo plano: consulte a Figura 5. Um par de ficheiros ExtensionEFL.h/.c acompanha esta placa, nos quais são disponibilizadas todas as funções para controlo de baixo nível dos vários blocos perifé-ricos. Estes ficheiros já estão incluídos no pro-jecto, e tudo o que tem a fazer é remover o(s) caracter(es) de comentário no início da linha na qual é chamada a função Extension_Init(). Deve de seguida fazer o mesmo nas restantes linhas comentadas no ficheiro principal (main).

Uma vez recompilado o programa e programado no XMEGA, os três botões na placa de extensão serão também amostrados. A função ButtonE-ventCallback() pode determinar que grupo de botões foi responsável pela chamada (callback), utilizando o argumento BlockNumber, onde um valor de zero indica botões na placa principal, e um valor de um indica botões na placa de expansão.Como se pode facilmente constatar, para o código da aplicação é indiferente se os botões ou mostrador estão ligados na placa principal ou numa placa de expansão. O que torna isto ainda mais notável é que no caso da placa de expansão Linux, os botões de pressão estão ligados às entradas analógicas do microcon-trolador, e não nas entradas digitais (consulte a secção sobre virtualização na documentação EFL adicional).

Plug & playConforme descrito em artigos anteriores, pode agora ligar a placa a um PC utilizando o seu inter-face RS-485 e o conversor RS-485 para USB [6] e, por exemplo, ligar a placa de relés descrita na edição anterior [10] ao conector de expansão. Esta configuração deve ser semelhante à apre-sentada na Figura 6.A aplicação que iremos utilizar é a XmegaRelay.atsln. O código no ficheiro principal é notavel-mente curto: consulte a Listagem 2. O código de configuração da aplicação e respectivo ciclo principal foram descritos em detalhe no artigo sobre a EFL [17]. Para além dos interfaces UART na placa (quer para o interface RS-485, quer para o cabo FTDI ou BOB), é também inicializada um biblioteca que implementa um simples protocolo de controlo chamado BlockProtocol.

Servidor Web XMEGA (de zero a três). A variá-vel Event pode assumir os valores EVENT_BUT-TON_PRESSED (= 1) ou EVENT_BUTTON_RELEASED (= 2), para indicar que um botão foi pressionado ou solto, respectivamente. A aplicação pode assim reagir de forma distinta ao pressionar ou soltar de um botão.

Listagem 2. Controlo através de RS-485 ou UART

int main(void){ Controller_Init(); Board_Init(); Extension_Init();

ApplicationSetup(); while(1) { ApplicationLoop(); }};

void ApplicationSetup(void){ UARTInterface_LibrarySetup(); UARTInterface_SetBaudrate(0, 38400); BlockProtocol_LibrarySetup(UARTInterface_Send, 0, UARTInterface_GetRingbuffer(0));}

void ApplicationLoop(){ BlockProtocol_Engine();}

Acerca da equipa de desenvolvimentoBernd Köppendörfer e Achim Lengl estudaram Engenharia Electrónica e de Computadores no Instituto Tecnológico Georg Simon Ohm (Institute of Technology), em Nuremberga, Germuitas, tendo concluido o seu curso em 2009. Em 2010 fundaram a sua própria empresa KöpLe Engineering GbR em Oberasbach, junto à cidade. Desde então têm trabalhado como consultores para várias empresas, nomeadamente no desenvolvimento de circuitos analógicos e digitais, desde módulos simples até complexos sistemas de processamento de imagem em tempo-real implementados com recurso a FPGAs.

Page 21: Sound Home Lights Web Server

XMega Web Server

www.elektor-magazine.pt | Outubro 2013 | 21

Uma vez que o ficheiro hexadecimal tenha sido programado no microcontrolador deve-se exe-cutar um programa de emulação de terminal no PC, seleccionar a porta série (COM) apropriada e configurar a velocidade (baud rate) para 38400. O emulador de terminal deve também ser confi-gurado de modo a que a linha completa de carac-teres, juntamente com um caracter de retorno

Na função que implementa o ciclo principal (main), a linha

BlockProtocol_Engine();

faz a amostragem necessária para determinar se a placa recebeu um novo comando prove-niente do PC.

Lista de ComponentesPlaca Principal

ResistênciasTodas SMD 0805R1 = 1,6 kΩR2 = 100 ΩR3;R21–R31 = 10 kΩR4;R7;R8;R10 = 1 ΩR5 = 1,2 kΩR6;R15 = 3,6 kΩR9;R12;R16;R17;R19 = 680 ΩR11;R18 = 680 Ω (opcional)R13 = 120 ΩR14 = 2,2 kΩR20 = 5,6 kΩ

CondensadoresC1 = 220 pF (0805)C2;C4;C7;C9–C15;C17;C18;C19;C21–C29

= 100 nF (0805)C3;C6 = 47 µF/10 V tântalo (SMD-D/E)C5;C30 = 10 µF/16 V tântalo (SMD-C)C8 = 150 pF (0805)C16;C20 = 22 pF (opcional)

BobinasL1;L2 =470 µH (Ferrite; PIS4728)L3 = 10 µH (LQH3C)

SemiconductoresD1;D4–D8 = LED; refª LG T67K (PLCC2)D2;D3 = MBRS140IC1;IC2 = MC34063A (SO8)IC3 = LT1785CS8 (SO8)IC4;IC6 = TXB0106 (TSSOP16)IC5 = ATXmega256A3-AU (TQFP64)

DiversosJP1;JP2 = Barra de terminais de 2 vias,

com jumperJP3;JP4 = Barra de terminais de 3 vias,

com jumperK1 = Barra de terminais de 6 vias (2x3)K2 = Conector jack 2,5 mm, PCIK5 = Bloco de terminais de aperto de 4 vias, PCI K8 = Barra de terminais de 12 viasK9 = Conector mini-DIN de 8 vias (opcional)K12 = 2 conectores de 6 vias, para módulo Wiz820ioK15 = Barra de terminais de 14 vias (2x7)K16 = Barra de terminais de 6 vias, para o conversor

USB/TTL Elektor BOB (opcional)K17 = Conector para cartão microSD

K18 = Barra de terminais de 6 vias, para cabo FTDI USB/TTL (opcional)

Q1 = Cristal de quartzo 16MHz (opcional)S1,S2,S3,S4,S5 = Botões de pressão SMD

de percurso curtoPCI # 120126-1

Em alternativaPlaca de controlo Elektor # 120126-91,

já montada e testada

www.e

lekt

orpcbservice.com

Page 22: Sound Home Lights Web Server

•Projecto

22 | Outubro 2013 | www.elektor-magazine.pt

BlockProtocol_LibrarySetup(UARTInterface_Send, 0, UARTInterface_GetRingbuffer(0));

para

BlockProtocol_LibrarySetup(UARTInterface_Send, 1, UARTInterface_GetRingbuffer(1));

As mensagens serão a partir de agora trocadas no segundo canal UART. Em alternativa, pode ainda receber mensagens por TCP/IP alternando a linha para

BlockProtocol_LibrarySetup(IPInterface_Send, 0, IPInterface_GetRingbuffer(0));

Vamos analisar em maior detalhe todas estas as possibilidades no próximo artigo desta série.

(120126)

(carriage return - ASCII 13), seja apenas enviada quando for pressionada a tecla Enter.Assim, ao introduzir

R 0 0 + <ENTER>

o primeiro relé deve activar-se, e ao introduzir

R 0 0 - <ENTER>

o relé deve ficar novamente inactivo. Os restantes relés podem ser controlados através de comandos com a forma R 0 x ..., onde x pode ir de um a sete.Se não dispuser de um conversor USB para RS-485, pode em alternativa utilizar um cabo FTDI ou BOB para ligar a placa a um PC. O código deve então ser modificado para utilizar a segunda interface UART, com o número 1 (em vez da pri-meira), o que passa simplesmente por mudar a seguinte linha

Lista de Componentes

Módulo Mostrador

Resistências(SMD 0805)R1;R2;R4 = 27 ΩR3 = 0 ΩR5 = 0 Ω (opcional)

CondensadoresC1 = 10 µF/16 V tântalo (SMD-C)C2–C5 = 100 nF (0805)

DiversosDISPLAY1 = Mostrador EA-DOG-M163X-A

com iluminação de fundo a LEDs LED55X31Conector de 20 vias SIL, + 2 peças de 2 vias,

para montagem do DISPLAY1K1 = Barra de terminais de 12 viasK2 = Barra e terminais de 12 vias (opcional)K3,K4 = Barra de terminais de 8 viasS1,S2,S3,S4 = Botões de pressão de percurso curto

PCI, Elektor #120126-2

Em alternativa,Módulo Mostrador Elektor # 120126-92,

já montado e testado

11 22 33 44 55 66 77 8811 22 33 44 55 66 77 88

11 22 33 44 55 66 77 88 99 10 11 12

11 22 33 44 55 66 77 88 99 10 11 12

40 39 2122

19 201 2

Internet[1] www.koeple.de (site em alemão)[2] www.elektor.com.pt/120126[3] www.atmel.com/Images/Atmel-

8331-8-e-16-bit-AVR-Microcontroller-XMEGA-AU_Manual.pdf

[4] www.onsemi.com/pub_link/Collateral/MC34063A-D.PDF

[5] www.nomad.ee/micros/mc34063a/[6] www.atmel.com/tools/AVRISPMKII.aspx[7] www.elektor.com.pt/110258[8] www.elektor.com.pt/110405

[9] www.elektor.com.pt/120596[10] www.elektor.com.pt/130157[11] www.elektor.com.pt/130212[12] www.elektor.com.pt/gnublin[13] www.lcd-module.de/eng/pdf/doma/

dog-me.pdf[14] http://elm-chan.org/docs/mmc/

mmc_e.html[15] www.wiznet.co.kr/WIZ820IO[16] www.elektor.com.pt/120668[17] www.elektor.com.pt/130154[18] www.elektor-labs.com/efl

www.e

lekt

orpcbservice.com

Page 23: Sound Home Lights Web Server
Page 24: Sound Home Lights Web Server

•Projecto

24 | Outubro 2013 | www.elektor-magazine.pt

Construção: alguns comentáriosPara a construção do Elektorcardiograma (tam-bém referido como interface ECG), metade do trabalho já está feito, uma vez que o módulo está disponível já montados, testados e pronto a usar [8]. Todos os componentes para o circuito publi-cado no primeiro artigo [9] encaixam numa placa com um tamanho modesto (100×60 mm) (Figura 19) que foi projetada para encaixar (sem preci-sar de qualquer parafuso!) numa caixa comum com um compartimento para bateria (ver lista de componentes). A única coisa que tem que ser feita é ligar os dois cabos fornecidos.Se gosta do desafio de construir você mesmo a placa de circuito impresso em vez de comprar o módulo já montado, tente apenas isso se já tiver uma sólida experiência nesta área. O regu-lador IC12 deve ser do tipo MCP1640BT (versão de baixo ruído). É possível utilizar um módulo Bluetooth diferente do sugerido (Figura 4c no primeiro artigo), desde que o mesmo utilize o protocolo SPP. A vantagem deste é que oferece a possibilidade de fazer um reset (S3). Se não montar ou dessoldar a bobina com núcleo de fer-rite de supressão de interferências L3, torna-se mais simples testar as várias partes do circuito em separado. O conector de pinos na parte infe-rior da placa de circuito impresso é opcional. Per-mite reprogramar o microcontrolador no circuito

(ICSP), usando uma ferramenta compatível (por exemplo, o PICkit2 ou o PICkit3 da Microchip).As funções dos três botões e dos dois LEDs são apresentadas no desenho do painel frontal (Figura 20): S1 = Off (reset do microcontro-lador), S2 = On, S3 = Bluetooth Reset, D3 = transmissão de dados para o Terminal Android (TX) e D4 = estado do módulo Bluetooth (BT).Vai ainda ter de fazer um conector para os seus eléctrodos, e talvez mesmo os próprios eléctrodos – mas, vamos voltar a isto mais tarde. Primeiro, vamos começar por colocar o nosso interface ECG a funcionar. Assim que a alimentação for aplicada através das duas pilhas AA, tudo o que tem que fazer é pressionar por breves instantes S2 e o

3ª Parte

Elektorcardi♥gramaAndroid Construção, ajustes e instruções de operação

Aqui está o último capítulo desta série de artigos. Tanto quanto sabemos não existe nada comparável a nível comercial, quer seja em termos de desempenho ou de preço.

Queremos agradecer a Aurélien Moulin,

estudante no ESEO, Angers (França), e estagiário

no laboratório da Elektor, pela sua activa participação

nos testes e depuração dos primeiros módulos montados e fornecidos

pelo Serviço Elektor.

Marcel Cremmel (França) em colaboração com Raymond Vermeulen (Elektor)

Page 25: Sound Home Lights Web Server

Electrocardi♥grama

www.elektor-magazine.pt |Outubro 2013 | 25

Figura 19. O interface ECG cabe na palma da sua mão.Os entendidos vão apreciar a boa separação entre os encaminhamentos da parte digital e analógica do circuito, vital neste caso.

A numeração das ilustrações e os links seguem o esquema

dos artigos anteriores.

LISTA DE COMPONENTES Resistências (SMD 0603, 1%)R1,R13,R15,R18,R19,R20,R33,R34,R54 = 10 kΩ/0,25 WR2, R12 = 3,3 kΩR3 = 523 kΩR4 = 300 kΩR6 = 150ΩR7–R11,R23 = 1 kΩR14,R53,R55,R56,R57,R59–R62 = 100 kΩR5,R16,R17,R35 = 1 MΩR21,R36,R37,R38 = 330 kΩR22 = 100 ΩR24,R65 = 390 kΩR25,R29 = 47 MΩ/5%R26,R30 = 10 MΩR27,R31 = 2,2 MΩR28,R32 = 470 kΩR39,R40,R49–R52 = 47 kΩR41,R42,R45,R46 = 28,7 kΩR43,R44 = 1,4 MΩR47,R48 = 45,3 kΩR58 = 9,1 kΩR63,R64 = 27 ΩP1,P2 = ajustável 5 kΩ/20% (Vishay TS53YJ502MR10)P3 = ajustável 2 kΩ/20% (Vishay TS53YJ202MR10)

Condensadores(SMD 0603)C1,C13 = 33 µF/6,3 V, tântaloC2,C4,C7,C9,C12,C14 = 10 µF/6,3 V, X5RC3,C5,C6,C8,C10,C15,C21,C22,C23,C24,C39,C40,C41,C42,C43

,C44 = 100 nF/25 V, X7RC11,C16,C25,C26,C31–C38 = 1 µF/10 V, X5RC17–C20 = 1 nF/50 V, X7R*C27, C29 = 470 pF/50 V, 5%, NP0C28, C30 = 47 nF/25 V, 5%, X7R

* C18, C19, C20 são de 1 nF/50 V, não 100 nF/50 V como se mostra no esquemático

BobinasL1 = 4,7 µH/20%, 0,5 A (Wuerth 744032004)L2–L9 = núcleo de ferrite, 30 Ω @ 100 MHz

(Murata BLM18PG330SN1D) SemicondutoresD1, D2 = BAV99SD3, D4 = LED vermelho (PLCC-4)T1 = PSMN6R5-25YLC NMOSFETIC1 = PIC24FJ32GA002-I/SS, programado,

Elektor # 120107-41IC2 = TPS60403DBVTIC3–IC7 = TLC2252AIDRG4IC8 = LMC6482AIMX/NOPB IC9 = DG4053 AEQ-T1-E3IC10, IC11 = CD74HC4052PWIC12 = MCP1640BT-I/CHYIC13 = LTC1981ES5#TRMPBF

DiversosK1 = Barra de terminais de 5 viasK2 = Barra de terminais de 6 viasK3 = barra de terminais de 2 viasMOD1 = Módulo Bluetooth, Roving Networks/

Microchip type RN-42S1,S2,S3 = Botão de pressão, Omron SPNO B3FS-1052),

Omron B32-2010Caixa Pactec PPL-2AAPCI # 120107-1 ou módulo montado e testado

Elektor # 120107-91

OFFON RESET BT

BTTX

Figura 20. Desenho do painel frontal com 3 botões e 2 LEDs.

www.e

lekt

orpcbservice.com

Page 26: Sound Home Lights Web Server

•Projecto

26 | Outubro 2013 | www.elektor-magazine.pt

módulo montado vai apresentar sinais de vida piscando D4 (2 Hz), que mostra que o módulo Bluetooth pode ser identificado.

Aplicação AndroidA instalação é convencional: faça o download da aplicação Android (ficheiro ANDROECG.apk) [10], copie-o para a pasta raiz do terminal Android e selecione-o usando o Gestor de Ficheiros. Vai ser instalado automaticamente (assumindo que o leitor já permitiu a instalação de aplicações que não estejam no mercado no menu de segurança do seu terminal Android).Pode depois colocar um atalho onde quiser. Se o interface Bluetooth do terminal não estiver activo quando a aplicação for executada, a aplicação vai avisá-lo. E claro, vai ter que o activar.Nesta fase, a ligação rádio BT entre o interface ECG e o terminal Android ainda não foi estabe-lecida. Para fazer isto, tem que abrir o menu e emparelhar os dispositivos BT (Figura 21). A ligação deve ser estabelecida imediatamente depois de ter seleccionado o módulo Bluetooth do interface ECG. Neste caso, o gráfico começa a deslizar e o LED de estado do BT no interface per-manece aceso. Na primeira ligação, vai precisar de inserir o código PIN (neste caso, 1234) para o módulo BT. O periférico BT está agora regis-tado no terminal Android e não vai ser necessário voltar a inserir o PIN novamente. O interface do microcontrolador não está envolvido neste pro-tocolo. O código MAC impresso no módulo BT e exibido no terminal Android pode tornar mais fácil identificar o interface ECG se a lista de dis-positivos BT for longa.Se não for estabelecida nenhuma ligação BT num espaço de 5 minutos, o interface será desligado automaticamente.Não vai demorar muito tempo para se familiarizar com os menus e funções do software do Elektor-cardiograma no terminal Android, graças às ins-truções de utilização intuitivas da Figura 22. Existe também um vídeo de demonstração [11].

Agora tudo o que resta é seguir em frente e ajustar o interface, o que envolve apenas duas simples operações: ajustar a relação de rejeição de modo comum (CMRR), e balancear os ganhos.

Ajuste do CMRR para cada canalO primeiro ajuste consiste em optimizar o CMRR para cada amplificador diferencial com a ajuda de um gerador de funções. Comece por construir

Figura 21. Menu para seleccionar a ligação Bluetooth a estabelecer entre o interface ECG e o terminal Android próximo.

Figura 22. Vista sobre as funções do interface por toque.

Current Cardiac Rhythm

Block/Verify Data Transmission(reduce interface power consumption)

Timebase Selection: zoom x1 (250 pixels/s), x2 (125 p/s), x4 (62.5 p/s), or x8 (31.25 p/s)

Vertical Gain (x1, x1.2, x1.5, x2 or x3)

Selection: Standard Derivation (DI, DII and DIII), or Enhanced Derivation (aVR, aVL and aVF)

Select Derivation: set of 3, or individual

Verify Cardiac Beep

Verify Calibration Signal Production

Open Context Menu

Current Battery Voltage

130295-29U

Trace-Memory Cursor:0 (right) to –10 minutes (left)

Traces follow horizontal finger movement on screen(in Stop mode)

scale = 1 s.

Page 27: Sound Home Lights Web Server

Electrocardi♥grama

www.elektor-magazine.pt |Outubro 2013 | 27

o acessório de calibração do lado esquerdo da Figura 23 (BNC + conector de pinos sem resis-tências). Ligue-o ao conector K1, certificando-se de que o coloca na posição certa: o pino 1 fica do lado direito quando estiver a segurar o interface com os botões virados para si. As entradas RA, LA e LL estão ligadas entre si de modo a injectar um sinal de modo comum através dos pinos 1, 2 e 3 do acessório de calibração; o pino 4 está ligado ao corpo da ficha BNC e desse modo à massa do gerador de funções, enquanto o pino 5 (massa do interface ECG) é deixado em aberto.Ajuste o gerador para obter uma onda sinusoi-dal com 50 Hz e uma amplitude de 1 V. Ligue o interface ECG e execute a aplicação ANDRO-ECG. Estabeleça a ligação Bluetooth e observar os sinais DI e DII na amplificação máxima. Em seguida, ajuste P1 e P2 para reduzir as amplitu-des pico-a-pico, tanto quanto possível. Devem ser muito pouco visíveis para uma amplificação de ×10 (Figura 24).Na ausência de um gerador de funções de baixa frequência, pode fazer o seguinte:• Toque na massa do interface com um dedo de

um dos lados;• Com um dedo na outra ponta, toque no ponto

comum dos três eléctrodos RA, LA e LL: ao fazê--lo, está a injectar um sinal de modo comum captado pelo seu corpo a partir da linha de energia de 50 Hz;

• Observar os sinais DI e DII no terminal Android;• Usando a sua terceira mão (talvez precise de

uma cobaia!), ajuste P1 e P2 para obter as curvas mais planas possível.

Balancear os ganhosO ganho total dos amplificadores em cada canal deve ser idêntico, dado que os sinais de DI e DII são usados para calcular os outros terminais (ver secção Terminais [9]). É recomendado um gerador de sinais para este ajuste, com um ate-nuador, isto porque o sinal a injectar deve ser muito baixo: 1,4 mVPP (à direita na Figura 23, ficha BNC + conector de pinos + resistências). Este atenuador, formado por duas resistências de 1,5 kΩ e 150 Ω ligadas como se mostra na Figura 25, deve ser inserido entre o gerador de funções e o interface ECG no conector K1: o pino 1 fica do lado direito quando está a segurar o interface com os botões virados para si.Ajuste o gerador para gerar uma onda sinusoidal de 1 Hz com uma amplitude de 140 mVPP. Se ainda não estiver feito, ligue o terminal Android

ATENÇÃOO fabrico e uso de dispositivos médicos estão regidos por leis interna-cionais e nacionais. O Elektorcardiograma não tem qualquer aprovação médica e, por isso, não se destina a utilização profissional.A fim de cumprir os requisitos de protecção de classe III, o dispositivo tem que ser alimentado apenas através de bateria, e só pode ser utilizado para fins pessoais de estudo e experimentação. Sob nenhuma circunstân-cia devem ser o autor deste artigo, ou os editores, responsabilizado pelas consequências da utilização deste interface.

Figura 23. Apenas precisa de ligar o seu ferro de soldar para construir estes dois conjuntos de calibração.

Figura 24. A amplitude residual das componentes de 50 Hz deve ser minimizada.

Figura 25. Este acessório de ajuste divide o sinal de calibração injectado por 100.

12

1k5

K1345

BNC

150k

RALALLRL0 V

Page 28: Sound Home Lights Web Server

•Projecto

28 | Outubro 2013 | www.elektor-magazine.pt

ao seu interface ECG e observe os sinais DI, DII e DIII usando uma amplificação x2. Deve observar um sinal sinusoidal com 1 Hz em DI e DII como se vê na imagem 1 na Figura 26. Agora ajuste P3 para minimizar o traço para o sinal DIII. De facto, o terminal Android calcula DIII = DII - DI: DIII deve ser nulo quando DI = DII. A amplificação pode ser incrementada para obter uma maior sensibilidade, e exibir apenas DIII. As imagens 2 e 3 representam DIII antes e após o ajuste.Na ausência de um gerador de sinais, aguarde pela injecção periódica do sinal de calibração CAL na entrada do interface ECG (Figura 27, ver também a Figura 9, no segundo artigo) e ajuste P3 para obter o mínimo sinal CAL possível em DIII. As imagens 4 e 5 (Figura 26) mostram os resultados antes e depois do ajuste; note que não é possível eliminar os picos que se veem na imagem 5.Nota: Os utilizadores impacientes forçam a injec-ção imediata de um sinal desseleccionando e depois seleccionando novamente o botão Cal.

O Elektorcardiograma está agora operacional e pode usar os vários botões de toque no ecrã do terminal Android (Figura 22) para escolher os gráficos, amplificar as amplitudes, alterar a base de tempo, e movimentar-se ao longo dos traços (memória). Mas para ser capaz de observar os seus eletrocardiogramas no ecrã do seu termi-nal Android, precisa de se equipar com alguns eléctrodos – e encontrar um paciente voluntário.

EléctrodosOs sinais eléctricos que vão ser captados com a ajuda dos eléctrodos são infinitamente mais fra-cos do que os que estamos normalmente fami-liarizados. Por isso, apenas será possível obter um bom eletrocardiograma com bons eléctrodos, posicionados e ligados correctamente. Como lem-brete, no conector dos eléctrodos (Figura 28a), a massa fica do lado esquerdo quando estiver a segurar o interface ECG com os botões virados para si. Do lado do paciente, adquira o hábito de aderir ao código de cores [9]:•vermelho � RA (braço direito)•amarelo � LA (braço esquerdo)•verde � LL (perna esquerda)•preto � RL (perna direita)

Se não quiser entrar em despesas para comprar quatro eléctrodos comerciais – as garras, muito

Figura 26. Estas leituras vão ajudar a balancear os amplificadores IC3 e IC4 (canais DI e DII): o traço para o terminal DIII deve ser minimizado.

Figura 27. A cada minuto, o interface gera um sinal CAL de 2 Hz/1 mV durante 10 s, que pode ser usado para balancear os ganhos (ver Figura 26).

1

2

3

4

5

O balanceamento de ganho requer a injecção de um nível o mais alto possível sem levar os amplificadores ao estado de saturação. Antes do ajuste, certifique-se que as ondas sinusoidais exibidas no terminal estão isentas de efeitos de saturação ou distorção (particularmente o sinal DI). Reduza o nível do sinal caso seja necessário.Em princípio, a saturação não deve ocorrer uma vez que existe uma pequena margem quando se injecta um sinal de 1,4 mV.

Page 29: Sound Home Lights Web Server

Electrocardi♥grama

www.elektor-magazine.pt |Outubro 2013 | 29

1 mV, que é usado como referência com o qual comparam ECGs.A aplicação Android calcula o ritmo cardíaco uti-lizando um algoritmo baseado na derivação do sinal Dl. Este algoritmo pode por vezes correr mal, juntamente com a sua exibição no ecrã, e

úteis com as crianças, não são baratas – p de facilmente fazer umas por si próprio. Qualquer eléctrodo com o seu cabo de ligação também é uma grande antena, e aqui temos quatro: pelo que é imprescindível utilizar cabos blindados, para minimizar a influência de sinais indesejados. A blindagem está ligada apenas na extremidade do interface; do lado do eléctrodo, deve ser iso-lado de modo a evitar qualquer contacto com a pele. Tenha cuidado! Embora um cabo de áudio seja electricamente adequado, é muito frágil mecanicamente. Redutores de tensão reduzem o risco de falha (Figura 28b).Os conectores de 4 mm do tipo banana permitem--lhe usar acessórios comercialmente disponíveis (Figura 29) como bananas com terminais adap-tadores com mola [12] ou bananas com parafuso (RS Components Ref. 641-8053).Se tiver algumas moedas de liga de níquel pode produzir esses acessórios de forma muito mais barata. A única parte complicada é soldar um suporte de 4 mm para a moeda (Figura 30), que por sua vez vai ficar fixada nos pulsos e tornozelos através de quatro pulseiras elásticas (elástico + fita velcro). Pode também usar anéis obtidos a partir de uma moto ou scooter. Fixe os eléctrodos aos pulsos e tornozelos, se possível usando gel condutor, o que melhora a qualidade dos ECGs, reduzindo significativamente o ruído e as tensões de contacto.

Gravar e reproduzir ECGsEstas operações são muito simples, não são ofe-recidas opções: pode gravar ou reproduzir os 10 min de amostras para os terminais DI, DII e DIII. O índice da amostra mais recente (actual) dentro da memória circular do ECG é também guardado a fim de ser possível voltar à mesma aparência dos traços durante a reprodução (última amos-tra representada na parte direita do ecrã: ver Figura 17 no segundo artigo).As operações de gravação e reprodução são dis-ponibilizadas no menu. A janela oferece-lhe a escolha entre um ficheiro já existente ou um novo ficheiro, para o qual tem que introduzir o nome (Figura 18 no segundo artigo [13]).

Outras funçõesA caixa de selecção CAL dá-lhe a opção de perio-dicamente injectar um sinal de calibração (Figura 22) em vez dos sinais de ECG. Os cardiologis-tas estão muito familiarizados com este sinal de calibração, com uma amplitude de exactamente

Figura 28. Construímos este adaptador para conectores de eléctrodos disponíveis comercialmente (Figure 28a). Note nas garras no robusto conector de fabrico caseiro (28b) produzido em 2006 para a versão Gameboy, que usava menos um eléctrodo.

Figura 29. Os acessórios comerciais não são baratos.

Figura 30. Podem ser obtidos uns eléctrodos satisfatórios usando pequenas moedas com liga de níquel, desde que consiga soldar um suporte para conector do tipo banana de 4 mm nas mesmas.

a

b

Page 30: Sound Home Lights Web Server

•Projecto

30 | Outubro 2013 | www.elektor-magazine.pt

o seu médico ou cardiologista poderão consultar regularmente a sua página de Internet para ver como está o seu estado de saúde.

(130295)

um beep sonoro gerado. Como este ruído pode tornar-se irritante, o mesmo pode ser desligado usando o botão SP.

Funções futurasUm projecto como este está constantemente em evolução. No seu estado actual, a única aplica-ção de exibição disponível é a versão Android. No entanto, a Elektor ficaria encantada em publi-car versões para iPhone, Linux, Mac ou PC se os leitores interessados surgissem com essas apli-cações. Entretanto, as seguintes funções estão em desenvolvimento para a aplicação Android:•Filtro digital de 50 Hz (ou 60 Hz) para rejei-

ção do ruído da linha de alimentação AC;•Cloud para armazenamento das leituras de

ECG através de uma Google API (Application Programming Interface).

Estou também a trabalhar numa aplicação para o

Windows para con-sulta de ECGs grava-dos num cartão SD e até mesmo exibi-los

ao vivo através de um interface Bluetooth.

Pensando mais à frente, vou possi-

velmente ainda oferecer algum código para copiar para o seu site que vai permitir o leitor receber e exibir ECGs lidos através do seu terminal Android e transmitidos para o seu site. Se assim o desejar,

Internet

[8] www.elektor.com.pt/120107

[9] Parte 1: www.elektor.com.pt/120107

[10] Aplicação ANDROECG.apk: www.elektor.com.pt/130295

[11] Vídeo demonstração: em produção, verifique o canal “elektorim” no Youtube.

[12] Eléctrodos: www.praxisdienst.fr/fr/home/

[13] Parte 2: www.elektor.com.pt/130227

Adaptador banana para mola:

http://goo.gl/5WWYFu ou

http://www.praxisdienst.com/en/ Diagnosis/Specialised+diagnosis/ECG+devices+and+accessories/oxid+oxid/Press+stud+adapter+for+ECG+red.html

Garras:

http://goo.gl/bZIKXf ou

http://www.praxisdienst.com/en/ Diagnosis/Specialised+diagnosis/ECG+devices+and+accessories/oxid+oxid/Limbs+Clip+electrode+Adult+red.html

O autor Marcel Cremmel é professor qualificado em Engenharia Electrotécnica, opção de electrónica, no Curso Superior de Electrónica no Louis Couffignal College, em Estrasburgo.Website: http://electronique.marcel.free.fr/E-mail: [email protected]

Page 31: Sound Home Lights Web Server

Electrocardi♥grama

www.elektor-magazine.pt |Outubro 2013 | 31

Electrocardiograma normalRitmoO ritmo cardíaco normal em descanso situa-se entre 50 e 100 batimentos por minuto. Abaixo dos 60 (por vezes 50) temos a bradicardia sinusal, acima dos 100 temos a taquicardia sinusal.

Despolarização atrial: onda PA duração normal é inferior ou igual a 0,1 s.A sua amplitude normal é inferior ou igual a 0,25 mV, isto é, ¼ da amplitude do sinal de calibração CAL.A onda P é geralmente máxima em DI, DIII e aVF. A onda P é sempre positiva em DI e DII e negativa em aVR.

Intervalo PR ou PQA duração normal do intervalo PR situa-se entre 0,12 e 0,20 s. Este é medido desde o início da onda P até ao início do complexo QRS. Corresponde ao tempo necessário para realizar o afluxo da aurícula para o ventrículo. Isto pode reduzir, quando aumenta a frequência cardíaca durante o esforço. Acima dos 0,20 s, indica um problema com a condução atrioventricular.

Amplitude QRSNos cabos da frente, a amplitude é muito variável. Com uma amplitude inferior a 0,5 mV (½ CAL) em todos esses terminais, falamos de uma micro-tensão.

Duração do complexo QRSEste corresponde em média a 0,08 s; deve ser inferior a 0,12 s. Acima disto, é mais frequentemente um assincronismo na despolarização dos dois ventrículos, associado a um problema com a condução intra-ventricular.

Repolarização ventricular: segmento ST – onda T – onda UO segmento ST separa o complexo QRS da onda T. Inicia-se no final do QRS.A onda T é geralmente de baixa amplitude, assimétrica com a inclinação crescente e menor que o declive descendente, e com a mesma polaridade que QRS. É normalmente positiva em DI, DII, DIII e aVF. A onda T que é bifásica ou negativa em DIII deve ser considerada fisiológica.A onda U, inconsistente, surge na sequência da onda T. Tem a mesma polaridade, mas uma amplitude menor. A sua importância é muito debatida.O intervalo QT (início do QRS, final de T) varia de acordo com o ritmo cardíaco. Para um ritmo cardíaco de cerca de 60 batimentos por minuto, a duração do intervalo QT é de cerca de 0,4 s.

R

di

Q

QRSS

P

P

PR QT

TU

Page 32: Sound Home Lights Web Server

32 | Outubro 2013 | www.elektor-magazine.pt

Como mencionámos na edição passada, os módu-los RF propriamente ditos não têm qualquer inte-ligência integrada, por isso, se o nosso sistema de comunicação é suposto ter algum tipo de “cére-bro” este deve ser disponibilizado pelo software do microcontrolador. Neste sentido, a inteligên-cia inclui a selecção do protocolo de codificação adequado, a velocidade da ligação (bit rate), a organização dos dados e os mecanismos de detec-ção/correcção de erros.O software foi projetado de forma modular com todas as funções essenciais organizados em controladores que permanecem inalteradas. O utilizador tem total liberdade para implementar qualquer a rotina na área principal. Uma cha-mada ao controlador TX envia os dados. No lado do receptor, o controlador RX também trata de todas as tarefas mais complicadas, retornando apenas os dados úteis para o programa principal.

Código ManchesterO código Manchester tem já provas dadas de ser um meio básico mas muito fiável para enviar

dados através de uma ligação rádio. Com este projeto velocidades de até 5.000 bps demonstra-ram uma boa estabilidade, consistindo na taxa máxima de transferência da nossa ligação; está disponível uma opção de velocidade mais baixa para maior versatilidade. Para a transmissão os dados estão organizados numa estrutura macro designada por trama (frame). Existe um byte de correção de erros. A sua lógica é muito simples: cada bit é representado por uma transição, em vez de um nível lógico. A Figura 1 mostra a lógica por trás do Código Manchester e as duas conven-ções para representar cada bit. Estamos a usar as definições presentes na norma IEEE 802.3: o valor lógico um vai ser representado por uma transição de nível baixo para nível alto, enquanto que um valor logico zero é representado por uma transição nível alto para nível baixo. As vantagens deste tipo de codificação são bastante óbvias:• O sinal de relógio está sempre presente em

cada transição, não importa a sequência de bits, sendo facilmente recuperado no lado do receptor.

Marcelo Maggi (USA)

Ligação RF modular usandocódigo Manchester (2)2ª Parte: Software

Na edição anterior abordámos o hardware relacionado com este projeto. Agora é altura de falar sobre o software. Enquanto que um correcto projeto de hardware e layout da placa de circuito impresso garantem a correcta radiação e recepção dos sinais RF, o software (por vezes referido como firmware) desempenha um papel fundamental na fiabilidade da mensagem transportada pelo sinal.

Page 33: Sound Home Lights Web Server

Ligação RF Código Manchester

www.elektor-magazine.pt | Outubro 2013 | 33

• O nível médio DC do sinal é constante, situando--se em torno dos 50%.

• Utilizando uma modulação OOK (On-Off Keying), como a que usamos aqui, a potência de trans-missão média é reduzida. Isto é útil não apenas para economizar energia em aplicações portá-teis, mas também para permanecer dentro dos limites de potência de transmissão de acordo como os regulamentos locais para a utilização da banda ISM, enquanto que o pico de potên-cia pode ser maior para aumentar o alcance.

Os módulos da Linx estão projectados para velo-cidades até 10.000 bps. Embora esta velocidade seja possível, a nossa ligação tem uma velocidade máxima de 5.000 bps. Isto deve-se à codificação, uma vez que cada bit tem dois níveis lógicos; com uma transmissão binária simples, a taxa de transferência duplicaria. No entanto, dadas as vantagens do código Manchester, sacrificámos a velocidade de transmissão para obter simplici-dade e fiabilidade. Com uma velocidade de 5.000 bps a ligação RF revelou grande fiabilidade para distâncias superiores a 180 m.É disponibilizada uma velocidade mais baixa (2.500 bps) para se utilizar o circuito em ambien-tes muito ruidosos, ou para aumentar o alcance. A Linx afirma que é possível atingir distâncias de até 1.000 metros com a configuração de har-dware adequada.

Formato de dados Os dados a transmitir são compostos por três elementos, cada um correspondente a um byte longo: endereço, dados e CRC. O byte de ende-reço destina-se a indicar qual o receptor a que se destina a transmissão de dados. Com um byte do tipo longo, temos 256 possibilidades. Na maioria das situações isto é um desperdício de bits, pelo que a forma mais eficiente seria utilizar o byte de endereço para indicar o receptor e função:• Nibble superior (4 bits) usado para definir o

receptor (16 endereços).• Nibble inferior usado para chamar a função

dentro do receptor (16 opções).Desta forma, o receptor número cinco pode ser controlado para executar o comando número nove usando os dados, que pode ser para actuar um servomecanismo e posicioná-lo com base no con-teúdo dos dados.No nosso código exemplo, o endereço vai ser uti-lizado simplesmente para indicar qual o receptor; contém o número 15 apenas para mostrar como

pode ser usado. Do lado do receptor, quando o valor 15 é lido no byte de endereço, os dados serão considerados válidos e processados pelo código. No formato binário o valor 15 é represen-tado por 00001111, que é facilmente identificável num osciloscópio. Em código Manchester isto é representado pela sequência 1010101001010101.O byte de dados transporta efectivamente a informação e pode ter um valor fixo, como uma ordem para executar uma tarefa definida, ou outra variável, como a saída de um conversor A/D. O código exemplo vai enviar um byte de dados diferente com base no estado do pino B3 (RB3/CCP1, pino 9): se estiver no nível logico baixo, o byte de dados contém um valor fixo de 1, se estiver no nível logico alto, o byte de dados vai alternar entre o valor 0 e 1, usando um tem-porizador interno para controlar a comutação. No lado do receptor isto vai ser usado para comutar o LED D1 do estado ON (1) e OFF (0). Esta é uma forma muito simples de testar a ligação e demonstrar como usar o byte de dados.Apesar da simplicidade do exemplo fornecido, tome nota das suas capacidades. Ao usar o byte de endereço adequadamente é fácil enviar mais do que um byte de dados de cada vez. O nibble inferior pode ser usado para indicar que byte está a enviar, assim o receptor pode montar corre-tamente os dados. O envio de mais do que um byte de dados é muito mais eficiente do que o

Figura 1. Convenções e lógica do código Manchester.

Características• Um transmissor, múltiplos receptores

possíveis.• Alcance até 180 m.• Bit rate selecionável entre 2.500 bps

e 5.000 bps (via software).• Correcção de erros facilmente

implementável.• Desenhos da placa de circuito impresso e

ficheiros com código exemplo disponíveis na Internet gratuitamente [2].

Page 34: Sound Home Lights Web Server

34 | Outubro 2013 | www.elektor-magazine.pt

firmware, mas pode ser seleccionada utilizando a entrada B2 (RB2/TX/CK, pino 8) do microcon-trolador, acessível através do pino 11 de K2. Se este estiver no nível lógico baixo, a taxa de trans-ferência de bits será de 2.500 bps, se estiver no nível lógico alto, a taxa de transferência será de 5.000 bps. O receptor detecta a velocidade auto-maticamente. Como a detecção é baseada em medições de tempo utilizando o oscilador local como referência, é muito importante manter o cristal de quartzo de 20 MHz inalterado.O transmissor precisa de enviar as tramas a intervalos determinados para a ligação funcio-nar. Uma trama isolada pode não ser recebida correctamente, assim como as tramas espaça-das mais de 10 a 15 ms. O receptor tem que ser “acordado” e ter as configurações de ganho ajustadas para receber e desmodular o sinal ade-quadamente. Depois de 10 ms ou mais de inac-tividade, o receptor pode não estar pronto para receber uma trama.A solução mais simples é enviar as tramas de forma repetida em intervalos de 10 ms ou menos. Embora isto funcione, tem dois grandes inconvenientes:• Não é permitida nenhuma tarefa no microcon-

trolador que precise mais do que 10 ms.• Para além da potência de transmissão, a legis-

lação em vigor em alguns países ou locais para a utilização da banda ISM pode também limitar o tempo de actividade de um transmissor para uma determinada frequência.

A solução é simples: definir um temporizador interno no programa principal e transmitir duas ou três tramas num único burst, espaçadas de 10 ms ou menos. Depois, deixe o transmissor no estado de inactividade durante alguns segundos.

Nota: O exemplo fornecido, disponível para download em [1], é apenas para mostrar como a ligação RF funciona e fazer um teste funcional. O código principal não deve ser usado num dispo-sitivo tal como está. Por favor, verifique as nor-mas locais de utilização da banda ISM para que o seu dispositivo esteja totalmente dentro das

envio de um byte de cada vez. Neste exemplo demonstramos o básico da ligação RF, mas algu-mas alterações ao código permitem enviar qual-quer número de bytes de dados ao mesmo tempo.O CRC (Cyclic Redundancy Check) contém infor-mações útil para validar o byte (ou bytes) de dados recebidos anteriormente e pode fornecer elementos para recuperar alguns erros. Os vários métodos e algoritmos geralmente usados para criar um byte CRC estão para além do âmbito deste artigo, mas um fluxo de dados adequado deve ter um, pelo que o incluímos. No nosso exemplo o CRC é uma cópia dos dados. No recep-tor, se o CRC não for igual ao byte de dados, sabe que algo não correu bem. No entanto, não há nenhuma forma de saber qual bit(s) está errado.

Construção de uma tramaAgora vamos colocar os três principais elementos juntos numa estrutura macro chamada trama. Uma vez que todas as ligações RF são suscetíveis a ruídos, o receptor tem que conter elementos para determinar se uma dada trama é válida, e onde começa. Por esse motivo foi adicionada uma função de sincronismo de trama no início de cada trama. Esta sincronização corresponde a uma sequência inalterável que não pode ser reproduzida por uma outra qualquer combinação dos três bytes descritos anteriormente.Usamos uma sequênc i a de b i t s de 111111111111111111110. É adicionado um espaçador à trama. Este consiste numa sequência muito curta, de apenas um 1 e 0, adicionados no final de cada byte. Uma sequência de sincroniza-ção de conflito (quando o endereço e os dados são ambos 11111111 e o CRC é 11110XXX) é então evitada: 11111111 10 11111111 10 11110XXX 10. A longa sequência de 1 é quebrado pelo espa-çador, garantindo assim que nenhuma combina-ção vai corresponder à sequência de sincronismo. A Figura 2 mostra uma trama completa e os seus componentes no código Manchester.

Bit rateA velocidade de transmissão é seleccionada no lado do transmissor (TX). Esta é pré-definida pelo

Sincronismo120187-12

Endereço Dados CRC

Figura 2. Estrutura completa de uma trama.

Page 35: Sound Home Lights Web Server

Ligação RF Código Manchester

www.elektor-magazine.pt | Outubro 2013 | 35

Controlador RXA trama é recebida e descodificada no contro-lador do receptor. Toda a complexidade da li-gação reside neste controlador, o qual contém comentários para explicar cada secção. A fun-ção de recepção mc_rx, chamada a partir do programa principal, é responsável por chamar o resto das funções de compilação de bits.

Primeiro é detectado o bit rate: baud_detect conta a duração de duas metades de um bit. Todas estas actividades são desencadeadas pela transição ascendente do sinal de entrada. O primeiro bit de uma trama é um 1 – no có-digo Manchester, transição de nível baixo para nível alto – assim, quando a interrupção for ac-cionada, a primeira metade deste primeiro bit já passou. Portanto, baud_detect conta a se-gunda metade de um bit e a primeira metade do próximo bit.Não é suficiente medir uma metade, já que os bits são simétricos? Sim e não. Se enviarmos dados de uma forma contínua, o receptor vai estar continuamente activo e os níveis DC in-ternos serão estáveis. Dessa forma os bits são bastante simétricas. No entanto, se as tramas estiverem espaçadas no tempo, digamos por 10 ms, o receptor pode não estar completa-mente pronto quando chega cada nova trama. Como consequência, os primeiros bits da tra-ma podem não ser simétricos, como se mostra na Figura 3. Embora a ligação ainda funcione, se não medirmos um bit completo para recu-perar o bit rate existe uma forte possibilidade de detectarmos o valor errado, fazendo assim com que qualquer detecção de bits subsequente seja impossível. No nosso exemplo, enviamos as tramas espaçadas de 1 ms, pelo que não existe qualquer problema. No entanto, a função baud_detect foi concebida com esses casos ex-tremos em mente.Após a primeira metade do segundo bit o tem-porizador timer0 vai ter a duração de bit, mais ou menos. Um pouco de matemática simples:

• Um oscilador a cristal de 20 MHz resulta num relógio de instrução de 5 MHz.

• O período de um ciclo é de 1/5.000.000 = 0,2 µs.

• O temporizador Timer0 incrementa a cada 0,2 µs × 16 = 3,2 µs.

• Com uma taxa de transmissão de 5.000 bps um bit tem a duração de 200 µs, pelo que

passado um bit completo temos timer0 = 200/3,2 = 62,5 µs.

Sendo um inteiro de 8 bits, timer0 tanto pode ser 62 ou 63. Mas isso não é realmente rele-vante. Por natureza, os sinais de rádio apresen-tam um fenómeno chamado jitter, desvio ale-atório das extremidades (transições) do sinal, encurtando ou alongando os bits. Assim timer0 varia em torno de 62,5 µs. Qualquer um des-tes valores circundantes é interpretado como o comprimento de bit real calculado. O programa implementa isto aceitando um intervalo entre 55 e 70. Se o timer0 cair dentro dessa gama, a duração de bit é de 200 µs, pelo que metade de um bit será de 100 µs. Isto é exatamente o que está armazenado na variável semi, retornado pela função, e designado por semiperiod. Para 2.500 bps semiperiod é de 200 µs e a gama de detecção para o timer0 é 118-133.Agora que sabemos a duração do bit, a detec-ção dos bits é fácil: ler o estado do sinal, es-perar que mude, ler o próximo estado, e com-parar. Cada bit vai ter um sinal de mudança de estado no centro do período de bit. Antes de ler o próximo bit esperamos um intervalo se-miandjitter para assegurar que o próximo bit é lido e não a cauda do anterior. Se o estado 1 for maior do que o estado 2 (transição de nível alto para nível baixo, in1 e in2 no código), o bit re-cebido é zero, caso contrário é um. Em seguida, este bit é adicionado a uma variável de 32 bits (three_byte_rx), que por sua vez é deslocado para a esquerda de modo a estar pronto para aceitar o bit seguinte. Ao eliminar cuidadosa-mente os espaçadores, a variável three_byte_rx vai conter o endereço, dados e CRC com os res-tantes 8 bits vazios.Desde que não existam erros no processo, a va-riável three_byte_rx é agora chamada ad_da_cr_rx e copiada para frame_rx na função mc_rx. O seu conteúdo é então deslocado 8 bits para a esquerda (×256) e o semiperiod adicionado. Frame_rx está agora pronta para ser devolvida ao programa principal, onde vai ser conhecida simplesmente por trama. No caso de existir um erro, a rotina retorna ao programa principal de-volvendo uma variável frame_rx vazia.Nota final: assim como no programa do trans-missor, para evitar conflitos verifique os nomes das variáveis utilizadas aqui e não as use no programa principal.

Page 36: Sound Home Lights Web Server

36 | Outubro 2013 | www.elektor-magazine.pt

-período), de modo que o código Manchester seja facilmente obtido. O sincronismo de trama é construído chamando a função one vinte vezes, e depois uma vez a função zero.Cada byte é analisado bit a bit, começando pelo bit mais significativo (MSB). Dependendo do resul-tado, a função adequada é chamada (one ou zero), inserindo depois o espaçador no final de cada byte completo. E já está! Uma trama completa com todas as características descritas anteriormente é enviada através do pino B0 com a velocidade definida pela variável que defini o bit rate. Não há necessidade de alterar o programa do controlador para enviar uma trama padrão. Se for necessário incluir mais bytes de dados na trama, apenas são necessárias algumas modificações.Além disso, foi ainda implementado um mostrador LCD com o objetivo de apresentar a informação codificada (endereço, dados e CRC).

Software do receptor (RX)Semelhante ao seu hardware correspondente, o código do receptor (RX) é um pouco mais com-plexo do que o do transmissor. Mas não é caso para se preocupar: a complexidade reside no controlador, o qual é apresentado na secção Con-trolador RX. Mantém-se a mesma estrutura de três ficheiros:•Programa principal Manchester_Link_RX.c•Configuração do PIC Manchester_Link_RX.h•Controlador do receptor MAN_RX.c

Mais uma vez, o programa principal é bastante simples. Depois dos procedimentos do LCD, são colocadas as definições padrão. Note que a fun-ção de atendimento à rotina de interrupção (ISR) é definida em void detection_isr();. Isto é importante uma vez que a informação rece-bida entra através do pino B0 (RB0/INT, pino 6) gerando a interrupção externa com a transição ascendente. O programa salta para esta função assim que a transição é detectada. Outra linha importante que deve ser incluída é a configuração do timer0 dentro da função prin-cipal: setup_timer_0(RTCC_INTERNAL|RTCC.... Isto define o timer0 como um temporizador de 8 bits que é incrementado a cada 1/16 do período do sinal de relógio. Este temporizador interno é utilizado para determinar a taxa de transmissão dos bits do sinal de entrada (ao medir o compri-mento de um bit).Como usamos interrupções, estas têm de ser acti-vadas usando enable_interrupts(GLOBAL);. Em

normas. É da sua respon-sabilidade garantir isso.

Firmware do Transmissor (TX)Ambas as rotinas funda-mentais do transmissor e do receptor foram agrupa-das num ficheiro separado, como os controladores de hardware do PC. Estas rotinas contêm a parte mais complexa do código e pode permanecer inalte-

radas, não importa a aplicação. O programa prin-cipal, com apenas algumas linhas para executar as funções básicas descritas anteriormente, é fornecido para mostrar como a ligação funciona. É aqui que deve escrever o seu próprio código.Todo o software foi escrito em C, usando o com-pilador C CCS. Foram inseridos comentários no código para fornecer informações adicionais e úteis ao utilizador. Vamos analisar o código do transmissor, dividido em três arquivos:•Programa principal Manchester_Link_TX.c•Configuração do PIC Manchester_Link_TX.h•Controlador do transmissor MAN_TX.c

O programa principal é bastante simples. Após as definições iniciais o programa entra num ciclo infinito, onde o pino B2 é lido para definir a taxa de transmissão de bits, o endereço é fixado em 15, o pino B3 é lido para determinar o valor dos dados e o CRC é igual aos dados. Com todas as quatro variáveis definidas, a função de trans-missão é chamada com mc_tx(baud, address , data, CRC);. Aqui, o programa principal envia as variáveis para o controlador do transmissor. Não importa o quão simples ou complexo seja o programa principal, esta é a única linha neces-sária para transmitir a informação. A última linha corresponde apenas a um atraso de 1 ms antes de começar tudo de novo.O controlador do transmissor é o verdadeiro valor deste projeto. Deve permanecer inalterado, não importa qual a aplicação que o utilizador possa estar a usar. Precisa de ser incluído no programa principal logo no início, após a configuração do PIC. O controlador contém todos os elementos necessários para criar uma trama em código Manchester usando apenas as quatro variáveis recebidas do programa principal. O bit rate é convertido em metade do tempo de bit (semi-

Figura 3. Sinal recebido com as tramas espaçadas de 10 ms, capturadas num osciloscópio.

Page 37: Sound Home Lights Web Server

Ligação RF Código Manchester

www.elektor-magazine.pt | Outubro 2013 | 37

mais do que um byte de dados de cada vez. Bytes adicionais podem ser facilmente adicionados a uma trama, apenas precisa de saber quantos está à espera para não perder nenhum. Obvia-mente, uma única variável de 32 bits não será capaz de conter todos os bits, pelo que deve ser considerada uma estrutura.As aplicações são infinitas, limitadas apenas pela imaginação do utilizador; isto é apenas um bloco de construção para muitos projetos maiores.A Figura 4 mostra os protótipos montados no laboratório da Elektor com um mostrador LCD apresentando o endereço 15, os dados e o CRC a 1, o bit rate (B) no nível alto (H = 5000 bps) e Error (E) igual a zero (sem erros).Esta simples aplicação mostra todo o potencial destas unidades e é muito útil para depurar o código, quando as coisas não funcionam como se espera.Isto conclui a segunda e última parte deste pro-jeto. Se tiver alguma questão, preocupações ou apenas comentários sobre o hardware ou sof-tware apresentado, não hesite em se juntar a nós no nosso tópico sobre este projecto [2], ou então visitar a página de Internet do autor [3]; os desenhos das placas de circuito impresso e as rotinas de software estão disponíveis para download no site da Elektor.

(120187)

Correção à 1ª parte (Elektor setembro 2013)Na edição anterior, a legenda da Figura 5 mencionava que a “Potência de transmissão de saída pode ser ajustada usando R3”. Isto deve ser corrigido para se ler: ... R1.

Internet[1] www.elektor.com.pt/120187[2] www.elektor-projects.com/120049[3] www.magusporta.com

seguida o programa entra num ciclo infinito, no qual os dados de entrada são monitorizados. O código de programa do utilizador pode ser inse-rido aqui, desde que nenhuma das actividades desactive as interrupções. Algumas actividades, como mostrar os dados num LCD, pode desabi-litar as interrupções, pelo que estas devem ser programadas dentro da rotina de atendimento à interrupção ISR, depois de a informação ser recebida e validada. Lembre-se que o receptor está à espera que um sinal chegue.Quando é detectada uma transição ascendente, o programa salta para a ISR, onde as interrupções são desactivadas e a função de recepção é cha-mada: frame=mc_rx(frame);. Esta função está localizada no controlador do receptor e retorna a variável de 32 bits de trama. A beleza disto é a sua simplicidade! Um sinal chega, a função mc_rx é chamada, e a trama contém toda a informação que foi recebida.Sendo uma variável de 32 bits, a trama contém quatro bytes: endereço, dados, CRC e intervalo da trama recebida. Os bytes são extraídos da trama da seguinte forma. A trama de 32 bits é copiada para uma variável de 8 bits, pelo que apenas os 8 bits menos significativos (LSB) são copia-dos: halftime=frame;. Halftime contém agora o quarto byte da trama. Em seguida, deslocamos o conteúdo da trama em 8 posições para a direita e repetimos o processo de cópia para extrair o byte seguinte.Halftime contém a duração de meio bit, pelo que o bit rate pode ser calculado a partir daí. O resto das instruções mostram como usar as informa-ções recebidas de uma forma muito básica. Se existir um erro na trama recebida, a função vai retornar um zero, peo que HALFTIME vai ser zero. Isto é usado aqui para accionar a flag de erro.Se o endereço for 15 (conforme definido no trans-missor) e não existirem erros, então o conteúdo dos dados é usado para actuar o LED ON e OFF. O CRC não é utilizado neste pequeno exemplo.O LCD exibe continuamente a informação rece-bida (endereço, dados e CRC) depois das inter-rupções serem activadas. Se o receptor não rece-ber nenhuns dados, o LCD mostra Error e o bit de estado a L.

Melhorias e aplicaçõesEmbora a ligação seja totalmente funcional e tenha mostrado ser extremamente fiável durante os vários testes, existe muito espaço para melho-rias e algumas personalizações, como o envio de

Figura 4. Primeiro protótipo com LCD.

Page 38: Sound Home Lights Web Server

38 | Outubro 2013 | www.elektor-magazine.pt

Desenhar o esquemáticoA primeira coisa que temos que fazer é criar um ficheiro projecto para ligar o esquemático e a placa de circuito impresso usando o comando File->New. Em seguida, adicione um esquema ao projeto usando novamente o comando File-->New, mas certifique-se que selecciona o botão “Add To Open Project”. Neste ponto, pode tam-bém escolher o ficheiro de tecnologia para usar no esquemático. A Figura 1 mostra o esquema que será utilizado.A DesignSpark tem um tutorial em [1], que aborda como adicionar componentes e editar o esquemático.Movendo campos de componentes visíveis como designações de referência em torno de um esque-mático DesignSpark é diferente de alguns outros pacotes de software, porque todos os campos

são movimentados em bloco. Por exemplo, no esquemático de exemplo designador visível para a referência e tipo de cada transístor. Clicando em qualquer um dos dois vai seleccionar ambos os campos e podem ser arrastados para uma nova posição como um grupo. Isso pode cau-sar alguns problemas quando tentamos espelhar componentes, designado por flipping no DesignS-park, porque o texto pode ser incorretamente ali-nhado. Felizmente, o alinhamento do texto pode ser facilmente alterado com um clique no botão direito em cima do texto e seleccionando o menu Properties. Aí, na vista Text vai encontrar um campo de alinhamento que permite escolher um alinhamento à “esquerda”, “centro” ou “direita”.Não se esqueça ainda que os símbolos de ali-mentação e massa correspondem a componentes no DesignSpark. Por defeito estão na biblioteca schema do DesignSpark, mas pode também criar a sua própria biblioteca de símbolos a seu gosto. Note que se ligar um símbolo de alimentação a uma malha existente o DesignSpark vai emitir um aviso de que vai alterar o nome da malha mesmo que isso seja o que pretende.

O componente LEDPara os transístores e resistências utilizo alguns símbolos e footprints já existentes nas bibliote-cas do DesignSpark para o esquemático e PCI. No entanto, para o LED modifiquei um símbolo já existente no DesignSpark, e depois criei um footprint específico para a PCI.Criar footprints personalizados para a PCI é muito mais fácil quando utiliza o footprint wizard. Pode aceder ao assistente abrindo a biblioteca PCB

Neil Gruending (Canadá)

DesignSpark Dicas e TruquesDia #4: um projecto simples

Figura 1. Esquemático do controlador do LED bicolor.

Na última vez que falei sobre como configurar e utilizar bibliotecas. Hoje vamos fazer um controlador de um simples LED bicolor para aprender a usar o editor de esquemáticos e placas de circuito impresso. Existem várias maneiras de controlar um LED bicolor e hoje vamos usar uma versão com uma ponte em H, programada para desligar um dos LEDs.

Page 39: Sound Home Lights Web Server

Tips & Tricks

www.elektor-magazine.pt | Outubro 2013 | 39

onde pretende gravar o footprint com o gestor de bibliotecas e depois clicar no botão “Wizard…”. O footprint Wizard vai então fazer uma série de perguntas para criar o footprint e uma vez que é o mais genérico possível, é importante escolher um tipo o mais próximo possível para minimizar posteriores edições. No caso do meu LED usei um componente axial com 2,54 mm de espaça-mento entre terminais pelo que tudo o que pre-cisei de fazer foi editar o silkscreen e marcar a polaridade no pino 1.O DesignSpark também inclui um símbolo esque-mático semelhante e assistentes de componentes.

Prepare-se para o desenho da placaAgora estamos prontos para desenhar a nossa placa de circuito impresso criando um novo ficheiro PCB através do menu “Tools->Translate To PCB”, que inicia um novo assistente. Vamos criar um projeto no sistema métrico com duas camadas com um quadrado de 20 mm de lado. Se indicar ao assistente para colocar os compo-nentes fora da placa vai receber uma mensagem parecida com a Figura 2.Pessoalmente, gosto de colocar os componen-tes numa malha de 0,25 mm pelo que alterei a malha de trabalho para 0,25 mm, antes de colo-car os componentes na placa de circuito impresso para obter um arranjo como o apresentado na Figura 3.Antes de desenhar a placa quero falar sobre a malha de roteamento usada quando se colocam as pistas de cobre na placa de circuito impresso. O DesignSpark não tem um autorouter interactivo, o que significa que tem que definir a malha de roteamento para a largura da pista que pretende desenhar. Dessa forma, quando duas pistas se tocam o espaçamento é de 0 mm, e quando há uma distância entre as duas o espaçamento é de pelo menos a largura da pista. Isto funciona por-que a malha de encaminhamento é aplicada no centro da pista e não na extremidade da mesma. Portanto, se quiser desenhar pistas de 0,2 mm, então deve definir a malha de roteamento com o espaçamento de 0,2 mm para obter uma distância de 0,2 milímetros entre pistas. A desvantagem desta técnica é que a largura de todas as pistas tem que ser múltiplos da dimensão inferior. Por exemplo, 0,2 milímetros e 0,6 milímetros vai fun-cionar, mas 0,2 milímetros e 0,35 milímetros não!Além disso, certifique-se de criar um estilo para cada largura de pista que quiser usar nas con-figurações de tecnologia de projeto (Settings-

->Design Technology... e depois selecione a opção “TrackStyles”). Isto faz com que as diferentes larguras de pista sejam muito mais fáceis de gerir em projetos mais complexos, pois pode alterar a largura actual da pista mudando apenas o estilo da mesma. Pode mudar o estilo actual da pista com a tecla s, enquanto desenha a placa e em seguida escolher o novo estilo que quer.O mesmo também é válido para as vias e no DesignSpark configura o estilo das vias usando a secção “Pads Styles” na janela “Design Tech-nology”. Recomendo criar um estilo “SignalVia” e quaisquer outros estilos que possa precisar. Resolvi criar as vias de sinal para este projeto

Figura 2. Componentes colocados inicialmente fora da placa.

Figura 3. Os componentes estão agora dentro da placa com uma malha modificada para 0,25 mm.

Page 40: Sound Home Lights Web Server

40 | Outubro 2013 | www.elektor-magazine.pt

Rule Check) no menu de ferramentas que pode verificar todas as ligações da placa (Figura 5).Assim que clicar no botão Check o DesignSpark vai então verificar se o desenho da placa cum-pre todos os critérios de projecto seleccionados e gera um relatório resumindo todos os erros encontrados. Os erros são ainda assinalados no layout e se passar com o rato por cima deles, aparece a mensagem de erro. Todas as regras de afastamento são definidas nas configurações de tecnologia, na secção Spacing, onde temos uma tabela com a lista de todas as regras de afas-tamento entre os diferentes tipos de objectos.Para mais informações sobre como desenhar uma placa com o DesignSpark pode consultar o website [3].

ConclusãoHoje criámos uma simples placa de circuito impresso a partir de um esquemático e depois verificámos o projecto usando as ferramentas de verificação do DesignSpark. Da próxima vez vamos gerar uma lista de componentes BOM (Build Of Materiasl) e os ficheiros Gerber para que possamos construir o projecto.

(130230)

Internet

[1] www.designspark.com/eng/tutorial/schematics-entry

[2] www.designspark.com/tutorial/pcb-setup-placing-components

[3] www.designspark.com/tutorial/pcb-routing

com um furo de 0,45 mm e um terminal de 0,95 mm. Pode alterar o estilo actual usado para as vias com o botão direito enquanto está a dese-nhar a placa indo ao menu “Change Via Style” para escolher o estilo pretendido.O DesignSpark usa o menu “Settings->Defaults” para definir as pistas e vias por defeito, embora eu não tenha conseguido que o DesignSpark reco-nhece-se as novas configurações mesmo reini-ciando a aplicação.Mais informações estão disponíveis no site do DesignSpark sobre desenho de placas de circuito impresso [2].

LayoutAssim que tudo estiver configurado, é altura de desenhar a nossa placa de circuito impresso. O resultado é apresentado na Figura 4.Coloquei todas as pistas de sinal na face supe-rior da placa e utilizei um polígono para fazer um plano de massa para o botão. Quando está a desenhar a placa é importante certificar-se que dá um duplo clique com o ratona linha de interligação quando começar a desenhar a pista. À medida que vai desenhando as pistas pode mudar a maneira como o DesignSpark lida com os cantos clicando no botão direito do rato e escolher diferentes modos de segmento.Se olhar atentamente para o desenho vai pode ver uma linha entre Q4 e Q5 para a ligação à massa, o que significa que o DesignSpark acha que esses dois transistores não estão ligados à massa. Felizmente, o DesignSpark tem uma regra de verificação de desenho DRC (Design

Figura 4. Desenho final da placa. Figura 5. Usando a ferramenta de verificação DRC.

Page 41: Sound Home Lights Web Server
Page 42: Sound Home Lights Web Server

•Magazine

42 | Outubro 2013 | www.elektor-magazine.pt

Recentemente tive o prazer do construir o Pico C-Super da Elektor [1]. Fiquei impressionado com a gama de medição de capacidade disponível, com a exactidão, precisão, e a facilidade de medição; o contador de frequência e o gerador de sinais também são extras muito úteis. Quando estava a utilizar o Pico C-Super lembrei-me que tinha um velho verificador de condensadores da Heathkit algures na minha oficina de garagem. Depois de procurar encontrei o verificador de condensadores IT-28, cheio de pó e teias de aranha, mas ainda em boas condições, considerando que foi vítima de uma inundação provocada por uma tempestade que se abateu sobre o barracão onde estava. O manual de montagem estava em bom estado. O IT-28 e o Pico C-Super são apresentados na Figura 1.

Anos de glóriaNos anos 60 e 70 a Heathkit Company era uma boa fonte de kits de electrónica que cobriam com sucesso as áreas de dispositivos de con-sumo, rádio amador, e equipamentos de teste. A construção caseira de circuitos era muito popular nessa altura, e projectos como um transmissor/receptor de rádio amador eram dispendiosos e difíceis de construir apenas a partir de um esque-mático, e com componentes discretos comprados localmente. Em contraste, os kits vinham com manuais de construção muito detalhados, e todos os componentes electrónicos e mecânicos eram entregues por correio. E como a electrónica era montada à mão, os kits podiam ser vendidos a preços competitivos.

Dan Koellen (EUA)

Analisador de condensadores IT-28 da Heathkit

Figura 1. O IT-28 pesa 2,2 kg e necessita de ser ligado à rede eléctrica, enquanto o Pico C-Super, alimentado com uma bateria, é fisicamente um peso pluma, mas não o é em capacidade de medição. O olho mágico abre quando a ponte está equilibrada.

Tabela 1. Gamas de Medição do IT-28 e Standards para Capacidade e para Resistência Nota: µfd = µF; µµfd = pF; nfd = nF.

Capacidade Resistência

Selecção Standard Gama Selecção Standard Gama

C × 0,0001 200 µµfd (200 pfd) mica10 µµfd (10 pfd) a 0,005 µfd

R × 1 200 Ω 1% 5 Ω a 5000 Ω

C × 0,01 0,02 µfd (20 nfd) mylar 0,001µfd (1 nfd) a 0,5 µfd R × 100 20 kΩ 1% 500 Ω a 500 kΩ

C × 1 2 µfd mylar 0,1 µfd a 50 µfd R × 10 kΩ 2 MΩ 1% 50 kΩ a 50 MΩ

C extendido 2 µfd mylar + 9 kΩ 1% 20 µfd a 1000 µfd

Standard Externo

Relação máxima de 25:1 em relação ao standard conhecido externo

Standard Externo

Relação máxima de 25:1 em relação ao standard conhecido externo

Page 43: Sound Home Lights Web Server

www.elektor-magazine.pt | Outubro 2013 | 43

Do IT-11 ao IT-28A Heathkit introduziu o kit Verificador de Conden-sadores IT-11 em 1961. Foram feitas algumas pequenas alterações em 1968 o que originou o kit IT-28, que esteve disponível até 1977. As alte-rações incluíam um conector de alimentação com três terminais, uma mola no rectificador 6AX4, condensadores mais modernos, funcionamento a 120 V ou a 240 V, uma nova cor exterior, e outras alterações cosméticas.O dispositivo IT-28, de três válvulas, é uma ponte de medição AC, controlada por um sinal interno de 60 Hz proveniente de um transformador com relação de transformação 1:2, que está ligado aos terminais dos filamentos de 6,3 V AC (Figura 2). A ponte de medição também pode ser controlada por um sinal externo proveniente de um painel frontal. O IT-28 é mais versátil do que parece pelo seu simples nome, visto que também mede resis-tência, indutância, e relações de transformação de transformadores. A capacidade e a resistência são medidas em relação a componentes stan-dard internos, enquanto a indutância e a relação de transformação dependem de standards exter-nos. Um potenciómetro bobinado de precisão com 1 kΩ está ligado entre os restantes dois terminais da ponte, para a equilibrar. As gamas de medi-ção estão apresentadas na Tabela 1; note que cada gama é bastante larga, cobrindo 500x para a capacidade e 1000x para a resistência.A posição do potenciómetro de equilíbrio da ponte é a escala do painel frontal, a partir da qual se obtém o valor de capacidade, resistência ou rela-ção de transformação a testar. A tensão obtida na ponte é acoplada em corrente alternada à secção tríodo da válvula 6BN8, que funciona como ampli-ficador AC. As outras duas secções da válvula 6BN8 são díodos e fazem parte de um duplicador de tensão de meia onda que é alimentado pela saída do amplificador AC com o tríodo. A tensão DC resultante do duplicador de tensão de meia onda é injectada na grelha de controlo de uma válvula 6E5, do tipo olho mágico.A válvula do tipo olho mágico, também chamada de olho de gato ou olho de sintonização, foi utili-zada em receptores de rádio para indicar a ampli-tude do sinal. O “olho” fluorescente da válvula fecha à medida que a tensão aplicada à grelha de controlo se torna mais negativa. Para um indicador de amplitude de sinal de rádio, quanto mais fechado estiver o olho, isto é, quanto mais forte for o sinal, melhor. Mas nesta aplicação, o equilíbrio da ponte de medição é indicado pela

Figura 2. Circuito da ponte de medida como apresentado no manual de montagem. O valor desconhecido do componente corresponde à posição de R13 na escala do painel frontal. A ponte está equilibrada quando as reactâncias estão equilibradas: Xunknown =Xstandard x (R13A/R13B).

Figura 3. O circuito da válvula 6E5 do tipo olho mágico como está no manual de montagem. A secção tríodo da válvula 6BN8 funciona como amplificador AC, seguido por um duplicador de tensão de meia onda que utiliza as duas secções díodo da mesma válvula. Uma tensão negativa aplicada à grelha de controlo da válvula 6E5 faz fechar o olho.

Figura 4. Vista aproximada do painel frontal e do olho fechado.

Page 44: Sound Home Lights Web Server

•Magazine

44 | Outubro 2013 | www.elektor-magazine.pt

Inicialmente fiquei surpreendido pelo termo “min.’lytic” que assumi serem condensadores de pequeno valor. O manual de montagem da Heathkit esclareceu a dúvida:“NOTA: Um MIN. ‘Lytic (condensador electrolítico em miniatura) pode ser distinguido de um condensador electrolítico standard pela sua alta capacidade, baixa tensão de funcionamento e pelas pequenas dimensões. Os condensadores electrolíticos em miniatura têm habi-tualmente encapsulamentos em cerâmica ou em plástico e são completamente selados.”

Os tempos mudaram e, agora com as nossas bai-xas tensões de funcionamento, os condensadores “min.’lytic” são os mais utilizados. Quando este verificador de condensadores foi projectado, os equipamentos baseados em válvulas termoióni-cas necessitavam de tensões de alimentação de centenas de Volts, pelo que eram habitualmente utilizados condensadores electrolíticos para ten-sões muito elevadas e com capacidades de deze-nas de Farads.As fugas são medidas monitorizando a corrente de carga através de um condensador de teste. A corrente de carga flui para a massa através de uma resistência, e a tensão presente aos terminais dessa resistência é injectada na grelha de con-trolo da secção tríodo da válvula 6BN8. Durante o teste de fugas, a válvula 6BN8 é configurada como amplificador DC cuja saída é injectada na grelha de controlo da válvula 6E5; neste caso as secções díodo da válvula 6BN8 não estão em utilização. Inicialmente a corrente de carga é elevada, o que provoca o fecho do olho; quando o condensador estiver completamente carregado esta corrente é de 0 A, abrindo novamente o olho. Se o con-densador tiver fugas, a corrente que atravessa a resistência ligada à grelha da válvula 6BN8 vai continuar a circular, e o olho permanece fechado. O valor desta resistência é diferente para cada tipo de condensador, é escolhida no painel frontal, e fornece limiares de fugas diferentes.Também pode ser medido o factor de potência, que é basicamente uma medição da resistência série equivalente (ESR). A ESR tem de ser cal-culada utilizando a fórmula dada no manual de montagem.

O despertar do IT-28Depois de limpar a caixa metálica, olhei lá para dentro: estava surpreendentemente limpo – ver Figura 5. Todas as soldaduras pareciam em bom estado, não havia sinais de componentes partidos

maior área possível que estiver apagada, isto é, um “olho aberto”. O circuito de controlo da vál-vula 6E5 do IT-28 está apresentado na Figura 3. É um elemento proeminente do painel frontal do IT-28 – ver Figura 4.

Fugas em condensadores electrolíticosPara além de medir capacidade, este verificador também consegue determinar se um condensa-dor tem fugas quando se utilizam tensões entre 3 V e 600 V. Para além de verificar as fugas, o utilizador tem de escolher se está a ser medido um condensador electrolítico “min.’lytic” ou de papel/mica.

Figura 5. Vista do lado da caixa que contém as válvulas. A válvula 6E5 é o tubo que está na vertical, à esquerda. A válvula central é a 6BN8 e a válvula mais baixa é o rectificador de alta tensão 6AX4. Podem ser vistas algumas resistênciase condensadores standard na secção superior direita da válvula 6BN8.

Figura 6. Vista do lado da caixa que contem os componentes. O interruptor mais à esquerda é o interruptor Ponte/Descarga/Fuga. O interruptor central serve para seleccionar a tensão de trabalho. Os três potenciómetros na secção superior direita servem para ajustar o limiar de fugas para cada tipo de condensador.

Page 45: Sound Home Lights Web Server

menor a caixa metálica e os contactos do inter-ruptor. Depois desta segunda limpeza (Figura 6) já não apareceram arcos eléctricos e o funcio-namento foi mais consistente. Com as válvulas a funcionar bem e a válvula 6E5 a revelar um bonito olho fechado lembrei-me de um soneto:

Todos os filamentos estão estimuladosNão há grelhas fogosasNão há válvulas com brilhos arroxeados Agora tudo vai funcionar com possibilidades espantosas!

Foi interessante observar a abertura do olho mágico ao medir várias resistências e condensa-dores. Para os condensadores de valores peque-nos a abertura do olho pode passar despercebida. O manual sugere a utilização de um sinal externo de 1000 cps (1 kHz) para melhorar a abertura do olho para condensadores de pequeno valor. Isto não foi experimentado, mas fica em mente para futuras medições.

ou queimados ou de outros problemas óbvios. Os códigos relativos à data nos componentes eram do terceiro trimestre de 1972, pelo que parece que o verificador foi construído nessa altura ou em 1973. Um potencial problema que foi encon-trado foi um fusível queimado. Procurei por curto--circuitos, verifiquei as fugas dos condensadores electrolíticos utilizando um ohmímetro analógico, e verifiquei o valor das resistências utilizadas para descarregar a energia acumulada nos con-densadores quando se desliga o circuito. Os dois condensadores standard foram verificados com o Pico C-Super e estavam em bom estado. Também foi utilizado um multímetro digital para verificar as resistências e o condensador de 2 µF standard.Depois de substituir o fusível, liguei directamente a ficha à tomada, porque não tinha um autotrans-formador, e liguei o interruptor de alimentação. Felizmente não houve fumo, o fusível não se queimou, e as válvulas estavam acesas. Um arco eléctrico ocasional e um funcionamento errático do interruptor fizeram-me limpar com mais por-

Page 46: Sound Home Lights Web Server

•Magazine

46 | Outubro 2013 | www.elektor-magazine.pt

cias com o projecto SDR AVR, onde teria de deter-minar o valor de uma bobina, atingindo a resso-nância com um condensador com um valor conhe-cido que tinha sido medido com o Pico C-Super.

Reformar condensadoresO procedimento para verificar as fugas dos con-densadores é simplesmente ajustar, para cada tipo de condensador, o limiar de corrente que provoca o fecho do olho. Também verifiquei que as tensões de carga estavam todas dentro de uma variação de 10% do valor seleccionado. Para verificar a função de verificação de fugas consi-derei que um condensador electrolítico de papel NOS, com um código de data de 1962, e com um valor de 10 µF seria um bom candidato. Estava fascinado quando o olho mágico não abriu, o que significava que o condensador tinha fugas. Depois de repetir esta medição algumas vezes fiquei surpreendido, porque o condensador já não tinha fugas! Depois de alguma pesquisa na Internet concluí que tinha reformado o conden-sador. Para este procedimento é recomendado que se comece com uma tensão baixa e se vá subindo até ao valor nominal de trabalho, em vez de aplicar directamente o valor nominal. Esta é uma funcionalidade útil do IT-28 que lhe permite reformar o seu stock de condensadores antigos.

Os mais pequenos vencemDepois de adicionar o IT-28 à minha bancada de trabalho, vou continuar a utilizar o Pico C-Super para a maior parte das medições de capacidade. A aptidão do muito mais pequeno e mais leve Pico C-Super para medir capacidades abaixo de 1 pF, a soberba resolução, e a facilidade de leitura da apre-sentação digital tornam-o no instrumento preferido para medir capacidades abaixo de 500 nF. O Pico C-Super também é um útil medidor de frequência e período; e eu utilizo frequentemente o gerador de onda rectangular. Também vou continuar a utilizar o multímetro digital para medições de resistência e capacidade acima de 500 nF. Mas também vou ligar o IT-28 quando necessitar de determinar a indutância de uma bobina, determinar a relação de transformação de um transformador, verificar a fugas de condensadores, reformar condensadores electrolíticos antigos, ou apenas para ter o prazer de abrir e fechar o olho mágico. (130193)

Internet

[1] Pico C-Plus e Pico C-Super, www.elektor.com.pt/110687

Apresentamos o Pico CAgora que o dispositivo parece funcionar, é tempo de verificar as funcionalidades e a calibração. Para a calibração das medições de componentes, o kit contém uma resistência de 200 Ω, com 1% de pre-cisão. O procedimento consiste simplesmente em medir esta resistência e depois posicionar o pon-teiro ligado ao potenciómetro até que a escala apre-sente 200, assumindo que esta calibração serve para todas as gamas de medição e também para os condensadores. Verifiquei esta calibração com resistências e condensadores que já tinha medido com o multímetro digital e com o Pico C-Super. No centro da gama (e da escala) o desempenho foi bom (Tabela 2), mas o desempenho ia-se degra-dando à medida que as medições se aproximavam dos extremos da gama. Isto era esperado, visto que a medição corresponde à relação entre os valores de resistência presentes nos dois lados do cursor do potenciómetro de equilíbrio. Estes valores não são lineares, e variam rapidamente para zero ou para infinito nos extremos correspondentes, tornando a escala mais apinhada. As medições efectuadas longe do centro da gama são suficientemente boas para determinar se o componente está em bom estado, mas não fornecem umas boas exactidão ou precisão. Outra dificuldade tem a ver com a quantidade de escalas presentes no painel frontal, tendo a escala de capacidade direcção oposta às escalas de resistência e de relação de transforma-ção. Isto e a necessidade de utilizar interpolação, não tornam apenas o IT-28 mais difícil de utilizar do que o Pico C-Super ou um multímetro digital, mas tornam-no menos fiável em termos de reso-lução e de precisão das medições. Embora a espe-cificação para a capacidade mínima seja de 10 pF (10 pfd nos textos antigos) não se deve confiar nas medições perto deste extremo.Tinha algumas bobinas sem marcações que pude comparar com uma bobina “standard” nova. Isto teria sido muito útil se estivesse a fazer experiên-

Tabela 2. Resultado das medições perto das gamas centrais Nota: µfd = µF; µµfd = pF; nfd = nF.

GamaMultímetro

DigitalPico C-Super

da ElektorIT-28

da Heathkit

C × 0,0001 - 210 pF 205 µµfd

C × 0,01 - 20,8 nF 0,0205 µfd

C × 1 1,96 µF 2,1 µfd

R x 1 220 Ω 223 Ω

R × 100 22,6 kΩ 22700 Ω

R × 10 k 2,32 MΩ 2350 kΩ

Page 47: Sound Home Lights Web Server

BeagleBone Black

www.elektor-magazine.pt | Outubro 2013 | 47

Este computador embebido com 1 GHz, 512 MB de RAM, hardware aberto, e com memória flash eMMC interna de 2 GB é o sucessor do bem sucedido BeagleBone, o computador com Linux do tamanho de um cartão de crédito. Con-tém um processador Sitara AM3359AZCZ100, baseado no ARM Cortex-A8, com capacidade para 2000 MIPS, um motor gráfico SGX530 com capacidade para 20 Mpolígonos/s, 512 MB de SDRAM DDR3L que funciona a 800 MHz, Ethernet de 10/100 Mb, portos USB 2.0 host e cliente, conector para cartões µSD, µHDMI, 65 entradas digitais e 7 entradas analógicas, 8 saídas PWM, 4 temporizadores, 4 UARTs série, 2 portos I2C, 2 portos SPI, e ainda é mais barato do que o seu antecessor – a cerca de metade do preço do BeagleBone, o BeagleBone Black custa apenas 45 dólares (cerca de 45€ na Europa), o que é bastante competitivo em relação ao preço do Raspberry Pi, o concorrente mais próximo.

Foi confiscada uma televisão com uma entrada HDMI ao departamento de TI – uma KLD--32EX650. Foi encomendado um cabo µHDMI/HDMI e, juntamente com um rato, foi tudo inter-ligado. Convenientemente, a televisão utilizada estava equipada com um porto USB host, que foi utilizado para alimentar o BeagleBone Black.O BeagleBone Black vem com a distribuição Ångs-tröm do Linux pré-instalada na memória flash eMMC interna, e arranca directamente para GUI (Graphical User Interface). Logo à partida pode utilizá-lo em modo autónomo, ao contrário do Raspberry Pi que necessita de um cartão SD gravado com o sistema operativo.Claro, o BeagleBone Black pode ser ligado ao seu PC Windows para o desenvolvimento de aplica-ções embebidas. Este procedimento é muito sim-ples. Depois de ligar o BeagleBone Black a um porto USB livre, é aberto o Windows Autoplay. Seleccione View Files e abra START.htm e, como se lê na pequena nota dentro da janela, surge o

Thijs Beckers(Elektor)

Apresentamos o BeagleBone BlackConsegue dominar a concorrência?

Foi lançada mais uma plataforma para o público dos sistemas embebidos: o BeagleBone Black. Finalmente chegou um à nossa bancada de trabalho. Parece uma plataforma muito promissora com hardware poderoso e muito potencial. Será melhor que o Raspberry Pi?

Page 48: Sound Home Lights Web Server

•Projecto

48 | Outubro 2013 | www.elektor-magazine.pt

BeagleBone Black. É aberto um navegador de Internet, e os contro-ladores necessários para o BeagleBone Black são instalados a partir da página Web (off-line) aqui apresentada (1). Todos os ficheiros necessários estão dentro do BeagleBone Black, como numa pen USB, pelo que não é necessária nenhuma ligação à Internet. Apesar dos avisos de segurança (2) – apareceram quatro avisos! – tudo funcionou bem e os controladores foram instalados sem problemas (3). A página Web vai apresentando o progresso destes eventos (4). Agora já esta pronto para se ligar ao servidor Web do BeagleBone Black, localizado em 192.168.7.2 (utilize o Chrome ou o Firefox).Desenvolver a sua aplicação é “fácil”. O IDE Cloud9 (5), acessível introduzindo 192.168.7.2:3000 na barra de endereço do seu nave-gador de Internet ou clicando no link na “BBB Home page” (a página que é disponibilizada pelo servidor Web do BeagleBone Black), corre no seu navegador de Internet e não necessita de ser instalado no seu PC. O Cloud9 utiliza a biblioteca BoneScript em JavaScript, o que simplifica a aprendizagem de como efectuar tarefas de computação física no BeagleBone Black. Estão disponíveis vários exemplos para o encaminhar no desenvolvimento da sua própria aplicação. Embora a curva de aprendizagem seja bastante rápida, ajuda bastante se já programou anteriormente nas linguagens C ou Java.Estão disponíveis vários shields… desculpem!, Capes. Estes são basi-camente módulos de expansão que são ligados aos barramentos de expansão do BeagleBone Black, e que adicionam funcionalidades. Estes são alguns exemplos: impressora 3D, barramento CAN, LCD táctil, VGA, Parâmetros Atmosféricos, Câmara, Áudio, Radar, e muito mais. Muitos dos Capes “antigos”, projectados para o (primeiro) BeagleBone são compatíveis com o BeagleBone Black. Certifique--se se a distribuição do Linux para o BeagleBone Black necessita de uma actualização. Pretendia-se experimentar o Cape LCD7, revisão A2, para BeagleBone, que tinha vindo com o Kit de Demonstração de Câmara para BeagleBone. De acordo com [1] este devia ser compatível com o BeagleBone Black, mas tem de certificar-se se a sua versão do Ångström é de 20/06/2013 ou mais recente para evitar danificar o seu BeagleBone Black. O nosso tinha a data de 06/06/2013, pelo que era necessária uma actualização.É fácil fazer a actualização para a distribuição mais recente do Linux, mas existem algumas incertezas porque não há retorno de informação deste processo. O nosso BeagleBone Black foi utilizado utilizando o método do cartão microSD: descarregar a imagem mais recente em [2], utilizar o 7-zip [3] para extrair a imagem, utilizar o Diskimager [4] para escrever a imagem num cartão microSD (que tem de ter no mínimo 4 GB), alimentar o BeagleBone Black com uma fonte de alimentação de 5 V/1 A mantendo pressionado S2 até que um ou mais LEDs de Utilizador fiquem acesos (cartão microSD inserido e dispositivos Ethernet e USB desligados!). Se seguir exactamente(!) este procedimento, a memória eMMC interna recebe a imagem que está armazenada no cartão microSD. Não há nenhum retorno no mostrador (HDMI), e o LED de Utilizador pisca um pouco, mas tam-bém o faz quando o BeagleBone Blackestá ligado a um porto USB…Com a actualização efectuada (leva cerca de 40 minutos), o Bea-gleBone Black arrancou com a nova versão (6, sim: é o BeagleBone Black que está à frente!).

1

2

3

4

Page 49: Sound Home Lights Web Server

BeagleBone Black

www.elektor-magazine.pt | Outubro 2013 | 49

Depois foi ligado o BeagleBone Black ao Cape LCD7, foi alimentado, e devia ter aparecido o GUI… mas não apareceu. Não aconteceu nada no mostrador. O BeagleBone Black só arrancou depois de terem sido retirados do LCD os Capes para Câmara e para Parâmetros Atmos-féricos. Sem falhas! (7) E inclui uma sequência de calibração para o mostrador táctil. Ao procurar por Capes compatíveis, verificou-se que os Capes para Câmara e para Parâmetros Atmosféricos (ainda) não eram compatíveis com o BeagleBone Black. Oops! Felizmente nada se danificou, pelo que está tudo bem.O BeagleBone Black deixou uma impressão altamente positiva. Aquilo que se obtém por 45 dólares é espantoso. Sendo o Raspberry Pi mais adequado para construir o seu próprio sistema multimédia caseiro, o BeagleBone Black aparenta ser mais potente e fornece uma grande quantidade de ligações de E/S e toda a conectividade que poderia desejar (embora necessite de um hub USB se pretender ligar mais do que um dispositivo USB, por exemplo um teclado e um rato, por-que o BeagleBone Black só vem equipado com um porto USB host).Em resumo: O Raspberry Pi é para iniciados e tem a maior comuni-dade até esta altura, o BeagleBone Black é um sistema mais sério e é um pouco mais difícil de dominar, mas o seu hardware ultrapassa consideravelmente o do Raspberry Pi. E a sua comunidade de utiliza-dores [5] vai ajudá-lo se tiver problemas com o seu BeagleBone Black.Um aparte: estamos a trabalhar num módulo de expansão/Cape Gnublin, que vai poder ser ligado ao renovado módulo Linux Elektor. Isto deve manter as coisas a mexer!

(130279)

Internet

[1] http://beagleboardtoys.info[2] http://beagleboard.org/latest-images[3] www.7-zip.org[4] https://wiki.ubuntu.com/Win32DiskImager[5] http://beagleboard.org/Community

O que pode fazer com um BeagleBone Black?Pode construir um sistema multimédia, como muitos já construí-ram com o Raspberry Pi? Ou construir um módulo de desenvolvi-mento de sistemas embebidos pouco dispendioso? Ou um siste-ma de segurança para o seu carro ou – novamente – um sistema multimédia móvel? Ou talvez um simples monitor de temperatura e humidade para a sua horta – remotamente acessível, é claro, ou torná-lo no cérebro de um robô? Será que já desenvolveu a sua aplicação e gostaria de a partilhar com a nossa comunidade? Estamos actualmente à procura de autores que enalteçam o Beagle- Bone Black em detrimento do Raspberry Pi, pelo que se conside-ra que a sua aplicação para este mini computador de 45 dólares não é apenas do seu interesse, contacte-nos e com alguma sor-te o seu projecto para o BeagleBone Black vai ser rapidamente conhecido pelos mais de 250000 entusiastas de electrónica…

Local de partida: www.elektor-labs.com.

5

6

7

Page 50: Sound Home Lights Web Server

•Tech The Future

50 | Outubro 2013 | www.elektor-magazine.pt

Apesar da sua importância, existem poucos mecanismos de protecção para os denuncian-tes. Estes podem sofrer tratamento severo ou acusações na justiça, dos quais o caso de Bradley Manning é apenas um exemplo. Bradley Man-ning, que divulgou documentos diplomáticos e militares para provocar um debate público sobre as guerras no Iraque e Afeganistão, foi mantido numa cela isolada durante nove meses antes do julgamento. Foi recentemente acusado de 20 crimes e pode ser condenado a uma pena de até 90 anos de prisão. (A sentença ainda não tinha sido formulada à data de escrita deste artigo).Os jornalistas, autores de blogs e organiza-ções de meios de comunicação responsáveis

por disseminar informação também estão sob uma incrível pressão.Visto isto, este vai ser um tópico importante no OHM2013, o maior festival de hackers ao ar livre da Europa. Falámos com pessoas de várias organizações que encetaram iniciativas para construir uma melhor infra-estrutura para fazer denúncias. O Globaleaks fornece uma infra--estrutura técnica que torna possível a qualquer pessoa configurar a sua própria plataforma para fazer denúncias. A Associated Whistleblowing Press é uma plataforma descentralizada para fazer denúncias e o International Modern Media Institute está a criar leis para a protecção dos denunciantes em todo mundo.

Tessel Renzenbrink (Elektor)

Construção de uma infra-estrutura para fazer denúncias

As denúncias do antigo funcionário da NSA, Edward Snowden, revelam uma vasta actividade de colecta de informações relativas ao tráfego de Internet. Americanos, alemães, britânicos e outros serviços secretos foram expostos por participarem em programas de vigilância em larga esca-la desprovidos de transparência ou de princípios democráticos. A democracia não pode funcionar correctamente se os eleitores estiverem desinformados, pelo que fazer denúncias tem um papel central no processo democrático ao fornecer informação ao público.

Arturo Filastò.(Fotografia: Matteo G.P. Flora [5].

Licença CC: BY-NC-SA 3.0)

Page 51: Sound Home Lights Web Server

Uma infra-estrutura para fazer denúncias

www.elektor-magazine.pt | Outubro 2013 | 51

International Modern Media InstituteO International Modern Media Institute tem como objectivo proteger a liberdade de imprensa ao promover a adopção de um enquadramento legal protector [1]. Smári McCarthy, director executivo do International Modern Media Insti-tute (IMMI), disse: “O IMMI está a trabalhar na construção de uma jurisdição legal onde existam protecções legais para denunciantes e para jor-nalistas. Para atingir o nosso objectivo fazemos as actividades tradicionais: escrever relatórios, falar com membros do parlamento e mobilizar o público. Fizemos alguns progressos na Islân-dia neste aspecto. Existe um esboço de uma lei de protecção que foi entregue no ministério. É um trabalho lento – trabalhar com políticos é sempre assim.Estamos a tentar abrir portas globalmente para a legislação de informação. Falamos com partidos em diferentes jurisdições em países europeus e do norte de África. Mas os progressos que fizemos na Islândia são importantes. O nosso objectivo é criar um modelo de país; depois de haver um exemplo é mais fácil propagar a ideia”.

Tessel: Quais são os problemas legais relacio-nados com as denúncias?McCarthy: “Há muitas coisas diferentes. A maior parte dos países não tem legislação para a pro-tecção dos denunciantes. Existem alguns paí-ses que têm protecção de baixo nível, mas esta é contornada quando os governos pretendem. A condenação de Bradley Manning através da Lei da Espionagem é a prova disso.Também vimos tentativas para silenciar a imprensa. O jornalista de investigação Barret Brown é um bom exemplo. As empresas de segu-rança privada Stratfor e HBGary sofreram ata-ques da Anonymous e os dados retirados foram publicados na Internet. Barret Brown começou a utilizar essa base de dados como fonte de pesquisa sobre o estado da segurança nacio-nal. Está actualmente preso e a aguardar jul-gamento. Se for condenado pode receber uma sentença de até 105 anos de prisão. Ele não entrou no sistema mas retirou um conjunto de dados que estavam disponíveis na Internet e é isso que está a ser utilizado para a acusação”.

GlobaleaksArturo Filastò faz parte da equipa de desen-volvimento do Globaleaks [2]. “O Globaleaks é um software projectado para permitir que qual-

quer pessoa consiga facilmente configurar um site para fazer denúncias”, disse Arturo Filastò. “É um software de código fonte aberto, pelo que qualquer pessoa o pode descarregar e instalar, e assim configurar um site para fazer denúncias.

Nós fornecemos as infra-estruturas técnicas, mas não corremos nenhuma plataforma para fazer denúncias. A parte técnica é definitivamente apenas uma parte que contribui para se poder correr uma plataforma de sucesso. É necessário fazer campanha, rever os artigos e criar uma ou colaborar com uma plataforma de publica-ção. Nós contribuímos para este ecossistema permitindo a outras pessoas correr iniciativas de sucesso”.O interface gráfico do software fornece um inter-face com o utilizador directo para os denuncian-tes. Através de uma série de cliques no rato é possível enviar documentos, anonimamente e com segurança, para um ou mais destinatários à escolha. Os destinatários podem ser desde jornalistas a organizações de direitos humanos, que se mostraram disponíveis para essa plata-forma. Quando o denunciante decide incluir um destinatário em particular no envio, este recebe um e-mail com os documentos.

Pedro Noel. (Fotografia: Matteo G.P. Flora.

Licença CC: BY-NC-SA 3.0).

Page 52: Sound Home Lights Web Server

•Tech The Future

52 | Outubro 2013 | www.elektor-magazine.pt

sites para fazer denúncias. Muitos destes têm uma segurança muito fraca, e vimos muitos a falhar”. A caixa de correio para denúncias do Wall Street Journal, SafeHouse, por exem-plo, viu expostas estas vulnerabilidades ape-nas horas após ter ficado on-line. Filastò: “Nós vimos que existia uma base de utilizadores, mas os projectistas estavam a construí-la mal. Nós dissemos: “somos especialistas em segurança, podemos fazer isto melhor”. Há dois anos atrás construímos um protótipo avançado: o Glo-baleaks 0.1. Foi uma experiência inicial mas funcionou bastante bem. Depois refizemo-lo de raiz e já vamos na versão 2.24.O Globaleaks faz parte da organização sem fins lucrativos Hermes, o centro para a trans-parência e para os direitos humanos digitais [3]. Também estamos a trabalhar em outros projectos de software que promovem a liber-dade de expressão on-line”.

Associated Whistleblowing PressUma plataforma para fazer denúncias que corre no software Globaleaks é a Associated Whis-tleblowing Press (AWP) [4]. O co-fundador da AWP e activista de meios de comunicação na Internet, Pedro Noel, explica o que é esta pla-taforma. “A AWP é uma organização sem fins lucrativos que luta pela liberdade de expres-são e contra as violações dos direitos huma-nos, através de denúncias. O nosso objectivo é revelar material confidencial que pode provar más acções no geral, porque a transparência é a melhor arma contra a corrupção e contra a injustiça.A AWP está localizada na Bélgica, porque é um dos poucos países que fornece um enqua-dramento legal para a protecção das fontes. Não é uma protecção completa, porque se o conhecimento de uma fonte for um assunto de segurança nacional e não houver outra forma de encontrar essa fonte, [o governo belga] pode obrigar-nos a revelar a fonte. Foram assim colocados em prática mecanismos para man-ter desconhecida a identidade do denunciante até para nós próprios. Damos instruções para que as fontes não revelem a sua identidade e utilizamos software como o TOR e o Globaleaks para tornar seguras as comunicações.Somos uma plataforma descentralizada. Tra-balhamos com nós locais que correm os seus próprios sites para fazer denúncias. Estes têm autonomia e uma capacidade total de decisão

Tessel: Que medidas de segurança fornece a Globaleaks para proteger as pessoas envolvidas?Filastò: “O Globaleaks utiliza o TOR para for-necer o anonimato”. [O TOR é um software livre e uma rede aberta que torna anónimo o tráfego na Internet; nem o destinatário nem ninguém que intercepte os pacotes de dados conseguem descobrir a identidade do reme-tente. Isto é acompanhado por uma série de ligações encriptadas pertencentes a uma rede gerida por voluntários.] “O Globaleaks corre num serviço TOR oculto para assegurar o ano-nimato do denunciante e também da pessoa ou da organização que corre o servidor. A loca-lização do servidor é desconhecida, pelo que não pode ser invadida. O destinatário não é anónimo, porque ninguém vai enviar nada sem saber quem está a receber.Para além disso, o acto do envio é encriptado utilizando o PGP [Pretty Good Privacy: é um programa utilizado para encriptar e-mails]. O próprio ficheiro também é encriptado.

Tessel: Porque começou este projecto?“Depois do drama Wikileaks decidimos trabalhar nisto”. [Em 2010 a wikileaks iniciou uma liber-tação controlada das comunicações diplomáticas dos EUA. Em colaboração com parceiros dos meios de comunicação, os documentos foram redigidos omitindo informações sensíveis, tais como nomes. Depois de uma quebra de segu-rança toda a base de dados ficou disponível na Internet.] “Depois disto nasceram muitos

Smári McCarthy. (Fotografia: SHAREconference.

Licença CC: BY-SA 2.0).

Page 53: Sound Home Lights Web Server

Uma infra-estrutura para fazer denúncias

que é problemático contar com os meios de comunicação de massas. São companhias que pretendem obter lucros e não conseguem evitar agendas políticas e económicas. Mas pode haver colaborações para aumentar o impacto social.A estrutura legal centralizada da AWP fornece protecção aos jornalistas, porque a responsabi-lidade recai sobre a equipa editorial. Assim, se um jornalista escrever um artigo a responsabi-lidade é dos editores. Os editores, por seu lado, estão protegidos pelo enquadramento legal da Bélgica. Pelo menos, é isso que esperamos”.

(130192-I)

Internet

[1] https://immi.is/

[2] https://globaleaks.org/

[3] http://logioshermes.org/

[4] http://awp.is

[5] http://mgpf.it/2013/08/07/ shots-and-portraits-from-ohm.html

e de organização. Se quisermos que as pes-soas participem, temos de trabalhar num con-texto local. Alguém pode ter informações sobre descargas ilegais de resíduos num rio, mas se isto for revelado num site global de denúncias pode não receber importância global. Assim, localmente pode haver interesse imediato. Para além disso, as plataformas centralizadas não ganham escala. As pessoas que as gerem vão estar sobrecarregadas em termos de informa-ções recebidas, pressão política e psicológica.A única centralização da AWP é a estrutura legal, para que possamos funcionar como uma organização escudo para os nós internacionais”.

Tessel: De que modo a AWP é uma organiza-ção de imprensa?“A AWP também trabalha na análise do con-teúdo recebido. O objectivo é partilhar numa newsletter a análise destes materiais recebi-dos. Pretendemos criar uma ligação global de notícias que publique notícias independentes baseadas em jornalismo científico. Correr o nosso servidor de notícias é importante, por-

Page 54: Sound Home Lights Web Server

• Hardware & Software

54 | Outubro 2013 | www.elektor-magazine.pt

Embora no mercado dos smartphones e tablets exista um constante impulso para ecrãs maiores e com mais resolução, existem ainda muitos dispo-sitivos que só tem um simples e pequeno display de texto. Muitas impressoras, aparelhos de fax, servidores NAS e telemóveis oferecem menus baseados simplesmente em texto com navega-ção por botões para ajustar as configurações e ver informações de estado. Neste artigo vamos

dar um exemplo de como pode implemente algo semelhante nos seus próprios projetos.

Estrutura do menuA placa de extensão Linux Elektor [2] possui um mostrador com 2x16 caracteres, com três botões colocados imediatamente por baixo (Figura 1). Por isto, a placa é a plataforma de hardware ideal para o nosso exemplo.

Benedikt Sauter (Alemanha) [1]

Extensão para placa Linux ElektorImplementação de menus num display de textoMesmo num display pequeno, é possível mostrar uma surpreendente grande variedade de parâmetros e definições através da implementação de um sistema de menu bem concebido. Para uma facilidade de utilização os botões, de preferência, devem ficar colocados próximos do display, exactamente como fizemos na placa de extensão Linux. Neste artigo, vamos analisar o código necessário.

Figura 1. A placa de extensão Linux inclui um display alfanumérico e três botões estrategicamente posicionados.

Parte 2

Page 55: Sound Home Lights Web Server

Extensão para placa Linux Elektor

www.elektor-magazine.pt | Outubro 2013 | 55

Primeiro temos que fazer uma lista dos vários itens de menu que vamos querer ajustar ou ver através do interface com o utilizador. Um simples sistema de menu pode parecer-se com o seguinte:•Configuração

- Temperatura mínima - Temperatura máxima - Hora de início do dia - Duração máxima

•Configuração de rede - Endereço IP: estático ou dinâmico - Endereço IP - Endereço de rede - Gateway - Servidor DNS

•Estado - Temperatura actual - Carga do processador - Utilização de memória - Sistema de actualização

O menu de Configuração permite ajustar as principais configurações. Os valores máximo e mínimo podem ser configurados para controlar, por exemplo, o comportamento de comutação da unidade. Uma ligação de rede também requer alguns parâmetros de configuração. A primeira coisa a escolher é se o endereço IP para a liga-ção é dinâmico ou estático: se for escolhida a opção estático então os restantes parâmetros também têm de ser definidos. Um software bem concebido vai, naturalmente, verificar se todos os endereços IP têm o formato correcto.

Implementação do menuQuando implementa o menu pode encontrar inspiração a partir de alguns dispositivos que

já tenha visto: pode provavelmente pensar em alguns exemplos mais ou menos bem-sucedidos.

A Figura 2 mostra um esboço de como o menu que queremos implementar se possa parecer. Este não mostra todas as opções da lista acima, mas fornece uma amostra representativa.

Depois de decidir o que o utilizador vai ver em cada uma das fases precisa de decidir sobre a lógica que une os vários ecrãs de informação (incluindo os submenus) em conjunto com os tipos de operação suportados. Esses tipos de operação podem incluir:

•Saída estática•Escolha entre opções, com confirmação

da selecção•Definição de parâmetros numéricos

(contador cima/baixo)•Definição de parâmetros alfanuméricos•Saída dinâmica (barras de progresso, valores

em tempo-real, hora, data, etc.)

Os mais fáceis de implementar destes são a saída estática e a escolha simples (por exem-plo, entre endereçamento IP estático e dinâ-mico). Implementar configuração de parâme-tros e actualização contínua do display é mais difícil. A abordagem ingénua de começar ime-diatamente a escrever código resulta normal-mente num temível código tipo “esparguete”. A abordagem mais adequada é desenhar uma solução flexível e extensível, com o objectivo de facilitar a integração de novos itens de menu no código existente, sem ter que ficar profun-damente envolvido no software.

#$ '#

Figura 2. Exemplo da estrutura de menu.

Page 56: Sound Home Lights Web Server

• Hardware & Software

56 | Outubro 2013 | www.elektor-magazine.pt

Abordagem sugeridaTemos duas possíveis formas de conceber uma solução flexível e extensível. A primeira é uma biblioteca convencional que permite que o menu seja implementado ao longo das linhas de código do pseudocódigo apresentado na Listagem 1. As funções MainMenu() e submenu( ) permi-tem construir uma estrutura tipo árvore, sendo fácil ver como essa estrutura pode ser ampliada. Quando um novo nó é criado é retornada uma referência para ele, e essa referência pode ser depois usada para criar novos nós na árvore abaixo dele. A função RegisterMenu() permite associar uma função a um nó, de forma que essa função é chamada quando o item de menu é acedido.

Chegamos agora à implementação destas fun-ções. Quando um subitem no menu, como o ajuste de temperatura mínima, é selecionado deve aparecer um menu que permite ajustar um valor numérico. O pseudocódigo para isto é apre-sentado na Listagem 2. Por isto (e para qualquer outra função que permita definir parâmetros) precisamos de acesso de leitura e escrita a um ficheiro de configuração ou base de dados (Con-figRead() e ConfigWrite()). O botão premido é processado numa construção do tipo switch-case e o valor da temperatura actualizado é apresen-tado com uma chamada para Display().

A página de Internet dedicada a este artigo [3] inclui uma implementação exemplo em código C.

Abordagem alternativaUma forma alternativa e elegante de implementar um sistema de menus é usar o sistema de fichei-ros Linux. É criada uma árvore de diretorias que consiste no espelho da estrutura do menu pre-tendido. Cada diretoria pode conter um pequeno pedaço de código que implementa o item de menu em questão, e a saída desse código pode ser mostrada diretamente no display.

(130044)

Artigo original: Elektor Linux Board Extension (2)May 2013

Internet

[1] [email protected][2] www.elektor.com.pt/120596[3] www.elektor.com.pt/130044

Listagem 1. Pseudocódigo para construção do menu.

configuration = MainMenu("Configuration")network = MainMenu("Network")state = MainMenu("State")

//Menu Configurationmintemp = SubMenu(configuration,"Min Temp")maxtemp = SubMenu(configuration,"Max Temp")start = SubMenu(configuration,"Start Time")duration = SubMenu(configuration,"Duration")

//Menu Networkipchoose = SubMenu(network,"IP Address: Dyn/Static")ip = SubMenu(network,"IP Address")netaddress = SubMenu(network,"Network")gateway = SubMenu(network,"Gateway")dns = SubMenu(network,"DNS Server")

//Menu Statetemperature = SubMenu(state,"Temperature")cpu = SubMenu(state,"CPU")ram = SubMenu(state,"RAM")uptime = SubMenu(state,"Uptime")

...

RegisterMenu(mintemp,MinTemperature)

Listagem 2. Pseudocódigo para configuração dos parâmetros.

Function MinTemperature(){ mintemp = ConfigRead("mintemp") switch(button) { case "button_left": mintemp-- case "button_ok": Back() case "button_right": mintemp++ } ConfigWrite("mintemp",mintemp) Display("%s",mintemp)}

Page 57: Sound Home Lights Web Server

Placa Linux Elektor

www.elektor-magazine.pt | Outubro 2013 | 57

Muitos leitores têm utilizado a placa Linux Elektor para implementar soluções de registo de dados de temperatura e energia, e disponibilizar em seguida os resultados obtidos em rede. Por isso, é claro que um interface de rede integrado e um relógio em tempo-real seriam itens úteis para uma actualização da placa (Figura 1). Integrá-mos também outras sugestões feitas pelos uti-lizadores: por exemplo, os furos de fixação são maiores, de modo que a placa possa ser montada mais facilmente.

Um conjunto de chips diferentesO circuito básico da placa não mudou desde a primeira versão [2]. Juntamente com o proces-sador vemos uma RAM de 32 MB, um adaptador USB/Série baseado no CP2102, e o circuito de alimentação. Também familiar da primeira placa Linux Elektor é o conector de expansão de 14 vias, o que permite ligar uma grande variedade

[3][4] de placas de extensão (também disponíveis a partir da Elektor [5]). O diagrama do circuito e o layout da placa de circuito impresso podem ser descarregados a partir do site da Elektor em formato Eagle, no link [7] tem disponível um visualizador Eagle gratuito, e em [12] um bom livro sobre Eagle.O acesso à rede é fornecido por um dispositivo especial específico, uma vez que o processador LPC3131 não tem o seu próprio hardware Ether-net integrado. O circuito ENC28J60 da Microchip [8] é já conhecido de alguns leitores como um popular adaptador de rede para usar com pro-cessadores de 8 bits. É ligado usando uma porta SPI e um sinal de interrupção. Nos arquivos do kernel existe um controlador adequado para este dispositivo há já algum tempo.O dispositivo escolhido para o relógio em tempo--real (RTC) é o MCP7940 [9], que requer um cristal externo. Se for usada uma pilha do tipo

Placa Linux Elektor: nova e melhorada!Agora com LAN e relógio em tempo-real

A Placa Linux Elektor compacta e de baixo custo está disponível para compra há cerca de um ano e meio. Para além da sua

série de artigos publicados pela Elektor oferece

um fácil acesso ao mundo dos dispositivos Linux embebidos

até mesmo aos iniciantes.É agora altura de actualizarmos a placa

com base no feedback dado pela comunidade de utilizadores.

Benedikt Sauter [1]

Page 58: Sound Home Lights Web Server

•Projecto

58 | Outubro 2013 | www.elektor-magazine.pt

botão para fornecer alimentação de backup o relógio em tempo-real vai continuar a manter a hora, mesmo quando a placa está desligada.

Configuração da redeO primeiro passo para utilizar o dispositivo LAN ENC28J60 na placa é o seguinte comando:

modprobe enc28j60 irq_pin=12 cs_pin=19

que carrega o controlador. Assumindo que isto funciona, o comando

ifconfig -a

deve mostrar o dispositivo como interface ‘eth0’.Para que a placa receba um endereço IP a par-tir de um servidor DHCP noutro lugar da rede, utilize o comando:

dhclient eth0

Podemos agora testar o interface fazendo um ping em qualquer outra máquina da rede ou ser-vidor na Internet:

ping google.de

A saída deve ser idêntica ao que se mostra na Figura 2. Pare o programa de ping da maneira habitual, usando control-C.

Carregar o controlador automaticamenteSe quiser que o controlador do ENC28J60 seja carregado automaticamente quando o sistema é inicializado, adicione a linha

enc28j60 irq_pin=12 cs_pin=19

ao ficheiro “/etc/modules” no sistema de fichei-ros da placa. Isso é mais fácil se for feito a partir da consola. O comando

echo “enc28j60 irq_pin=12 cs_pin=19” >> /etc/modules

vai anexar (append) a linha indicada no final do ficheiro. Em alternativa, o ficheiro pode ser edi-tado usando o editor de texto nano:

nano /etc/modules

Usando um endereço MAC fixoSe a placa estiver a receber um endereço IP dife-rente do servidor DHCP de cada vez que é rei-niciada, a razão deverá ser que o dispositivo ENC28J60 não tem um endereço MAC fixo: cada vez que o controlador é carregado, é configurado com um endereço diferente. Um endereço MAC fixo pode ser especificado para contornar este pro-

ENC28J60BootoptionenUSB OTG

(Device/Host)

ExterneSpannung 7-12V

Masse innen!

GNDDC Out 3,3V

Arbeitsspeicher(32MB SDRAM)

LPC3131 ARM929180 MHz

IO15IO14IO11GPA1

RJ45 Buchse

USB PWR

USB OTG

RelaisAnschlussklemme

Relais

Console

Spannungs-VersorgungUSB/Extern

Gnublin Connector RTC & Batterie SD-Karte

Reset

Figura 1. A nova versão da placa inclui uma interface de rede e um relógio em tempo-real.

Page 59: Sound Home Lights Web Server

Placa Linux Elektor

www.elektor-magazine.pt | Outubro 2013 | 59

E finalmente, desactive o script hwclock da shell, pois isto pode causar alguns problemas com este tipo de dispositivo de relógio em tempo-real:

update-rc.d hwclock remove && update-rc.d hwclock.sh remove

Na próxima reinicialização a placa vai acertar a hora do sistema a partir do relógio em tempo--real. Mais informações sobre este assunto podem ser obtidas no Gnublin wiki [10].

FuturoUma nova versão do instalador Gnublin está dis-ponível na Internet [11], o que permite usar um PC Linux para criar um cartão SD com um boo-tloader, kernel e sistema de ficheiros. A nova versão permite a escolha entre uma imagem de 8 MB e uma imagem de 32 MB.Isto é acompanhado por uma mudança no sis-tema de ficheiros subjacente: é agora usado o EXT4, que é praticamente à prova de falhas em caso de perda de energia. Isto evita a necessi-dade de demoradas verificações ao sistema de ficheiros para “reparar”’ o cartão SD.Vamos abordar isto e muito mais num outro artigo na próxima edição.

(130214)

Internet

[1] [email protected][2] www.elektor.com.pt/120181[3] www.elektor.com.pt/120596[4] www.elektor.com.pt/130212[5] www.elektor.com.pt/gnublin[6] www.elektor.com.pt/130214[7] www.cadsoftusa.com/download-eagle/

freeware[8] http://ww1.microchip.com/downloads/en/

DeviceDoc/39662A.pdf[9] http://ww1.microchip.com/downloads/en/

DeviceDoc/22266D.pdf[10] http://en.gnublin.org/index.php/

RTC_DS1307[11] http://en.gnublin.org/index.php/

Gnublin_Installer[12] www.elektor.com.pt/eaglestarterguide

blema. Adicione a seguinte linha no ficheiro “/etc/network/interfaces”:

hwaddress ether MAC-ADDRESS

Uma possível escolha adequada pode ser a dada ao módulo LAN a primeira vez que o seu contro-lador é carregado. Isto pode ser definido usando o comando

ifconfig

onde o “HWaddr” é apresentado da seguinte forma:

eth0 Link encap:Ethernet HWaddr ba:07:1b:0c:64:00

Relógio em tempo-realPara acertar o relógio é suficiente um simples comando:

gnublin-rtc -s “2013/01/20 11:23:12”

Para ler de volta a hora do dispositivo, use o comando:

gnublin-rtc -g

Para acertar o relógio do sistema Linux a partir do RTC, use o comando:

gnublin-rtc -x

Para que o relógio do sistema Linux seja acertado automaticamente a partir do RTC em cada inicia-lização é preciso um pouco mais de esforço. Pri-meiro adicione o seguinte texto no ficheiro “/etc/rc.local”, mesmo antes da linha que diz ‘exit0’:

echo mcp7940 0x6f > /sys/bus/i2c/devices/i2c-1/new_deviceecho “Now setting the date and time.”sleep 1hwclock --hctosys

Em segundo lugar, adicione uma entrada ao ficheiro “/etc/modules”:

rtc-mcp7940

Figura 2. Resultados de um comando ping com sucesso: estamos na Internet!

Page 60: Sound Home Lights Web Server

• Hardware & Software

60 | Outubro 2013 | www.elektor-magazine.pt

No artigo anterior [4] utilizámos, de uma forma inicial e cautelosa, as linguagens de descrição de hardware VHDL e Verilog para testar uma apli-cação. Neste último artigo vamos utilizar as lin-guagens de descrição de hardware de forma mais extensiva – neste caso, para definir uma aplica-ção. Contudo, trabalhar com duas linguagens é demasiado difícil, pelo que tem de se escolher uma. Após muitas noites sem dormir e de con-sultar dúzias de especialistas, decidiu-se esco-lher a VHDL. Há várias razões que justificam esta escolha. Uma destas é que a VHDL necessita de menos tempo de simulação, porque é mais difícil de chegar a um projecto sintetizável. Esta pode-

ria ser uma razão para escolher a Verilog, mas reflecte o facto de que habitualmente a simula-ção leva mais tempo do que a síntese, e assim o tempo total utilizado é menor. Para fazer uma analogia com a programação de computadores (os fãs de Verilog podem pensar de forma dife-rente), em vez de construir um pedaço de código e depois utilizar o debugger para o tornar num algoritmo funcional, em primeiro lugar tem de se pensar bem acerca do algoritmo e só depois é que se utiliza o debugger para ter a certeza que o algoritmo funciona correctamente.A aplicação escolhida foi um descodificador DCF77. Talvez haja alguns comentários, mas há boas

Clemens Valens (Elektor)

Domina as FPGAsProgramar um array de 250k portas lógicas

Embora seja perfeitamente possível projectar aplicações com FPGAs utilizando diagramas com símbolos lógicos, na prática isto é feito com linguagens de descrição de hardware. Uma vantagem da última abordagem é que é mais fácil expressar funções complexas através de algoritmos do que através de esquemáticos. De acordo com isto, este artigo vai guiá-lo através do processo de programação de uma aplicação com uma FPGA.

5ª parte

Page 61: Sound Home Lights Web Server

Domina as FPGAs

www.elektor-magazine.pt | Outubro 2013 | 61

razões para esta escolha. O sinal DCF77, prove-niente de um relógio atómico, transmitido pela estação de radiodifusão perto de Frankfurt na Ale-manha, pode ser facilmente recebido virtualmente em toda a Europa com um módulo de hardware pouco dispendioso. A codificação do sinal é relati-vamente simples – consiste numa sequência de 59 impulsos (um por segundo), que podem ter dois comprimentos diferentes (100 ms para um “0” ou 200 ms para um “1”), que representa o conjunto de bits do código temporal. O final da sequên-cia de código é representado pela omissão do impulso final (n.º 60, correspondente ao bit 59). É enviado um novo código a cada minuto. A hora e a data estão representadas no formato BCD, e existem vários bits de verificação que podem ser utilizados para validar os dados. Este sinal é um bom ponto de partida para um projecto escrito em VHDL (ou Verilog), porque é muito fácil apresen-tar os resultados num mostrador de 7 segmentos utilizando lógica simples. Para quem não tem um receptor DCF77 e não consegue receber o sinal porque vive muito longe de Frankfurt, foi escrito um programa simulador de DCF77 para Arduino [5]. Assim todos podem participar!Vamos começar com um projecto funcional para um descodificador DCF77. Vamos utilizar uma abordagem “ingénua”, o que significa que vamos assumir que o sinal de entrada vai ser sempre detectável e vai estar sempre de acordo com as especificações. Devido a esta abordagem, o pro-jecto pode ser relativamente simples.Como referido anteriormente, o sinal de entrada consiste em impulsos com durações de 100 ms e de 200 ms, que representam zeros e uns, res-pectivamente. Se amostrarmos o sinal de entrada 150 ms após o flanco ascendente de cada impulso, vamos obter um “0” ou um “1” (Figura 1). Se medirmos o intervalo de tempo entre dois flan-cos ascendentes consecutivos, podemos detectar o impulso em falta e identificar assim o início do código temporal. Os bits que forem detectados

desta forma são injectados num registo de des-locamento. Depois as sequências BCD que codi-ficam as várias unidades de hora e data podem ser extraídas da sequência de bits, sendo depois apresentadas no mostrador de 7-segmentos. Em pseudocódigo baseado em linguagem C, isto pode ser aproximado assim:

do for each clock pulse{ counter = counter + 1 if (counter == 150ms) { shift _register = (shift_register << 1) + input_signal; } if (rising_edge(input_signal) == true) { if (counter >= 1750ms) { show_content(shift_register); } counter =; }}

O valor do contador é incrementado a cada impulso de relógio. Quando o contador atinge os 150 ms, o sinal de entrada é amostrado e a amostra é injectada no registo de deslocamento. Quando é detectado um flanco ascendente do sinal de entrada, verifica-se se o contador excedeu o valor máximo. Se sim, o registo de deslocamento está completo e o resultado pode ser apresentado. Depois disto o contador é reinicializado (valor 0). É só isto. Pode acrescentar mais coisas, tais como detecção de erros e mais robustez, mas estão fora do alcance deste exemplo introdutório.

Como fazer isto em VHDL?Fazer isto em VHDL é bastante simples, por-que traduzir o pseudocódigo em VHDL é directo.

Figura 1.Sinal DCF77 e pontosde amostragem.

Page 62: Sound Home Lights Web Server

• Hardware & Software

62 | Outubro 2013 | www.elektor-magazine.pt

tem de incluir a biblioteca numeric_std na lista de bibliotecas a utilizar (como descrito algures neste artigo).Na linha 5, o valor do contador é comparado com uma constante que corresponde a um intervalo de 150 ms com uma frequência de relógio de 8 MHz (o sinal de clock da FPGA). Se o contador atingiu os 150 ms, o valor actual da entrada é injectado no registo de deslocamento bits, na linha 6. Este valor é injectado na extremidade esquerda do registo de deslocamento, ao con-trário do que está no pseudocódigo, onde isto é feito pelo lado direito. Foi escolhida esta abor-dagem, porque o código temporal começa com o bit menos significativo, pelo que os bits são injectados no registo de deslocamento na ordem correcta para a nossa aplicação. Depois de 59 impulsos, o bit 0 está na posição 0. A operação de deslocamento parece um pouco estranha por causa da utilização da função de concatenação &. Esta função simplesmente junta as partes direita e esquerda da expressão. Aqui a parte direita con-siste em 58 bits, de 1 a 58 (em ordem inversa, sem o bit 0), que são deslocados para as posi-ções de 57 até 0. A parte esquerda é o sinal de entrada de 1 bit, que agora fica na posição 58. Os detalhes referentes ao que o ISE (o XST) faz com esta construção não são importantes aqui; o que interessa é que funciona.A linha 8 verifica se foi detectado um flanco ascendente do sinal de entrada. Como isto fun-ciona exactamente não é explícito a partir do frag-mento de código (vai ser explicado mais tarde), mas se for detectado um flanco ascendente, a linha 9 vai verificar se o valor do contador exce-deu o valor máximo de 1750 ms. Se isto aconte-cer, o conteúdo do registo de deslocamento vai ser copiado para o registo de dados para posterior processamento, que é feito em outro pedaço de código descrito mais abaixo.A linha 12 reinicializa o contador para o valor 0. Não é necessário limpar o registo de deslo-camento, porque este fica preenchido a cada minuto.As linhas de código que não foram mencionadas servem para completar as regras de sintaxe da linguagem VHDL.Para completar este fragmento de código, falta um detector de flancos, algumas instruções de ligação em VHDL, e as especificações dos sinais de entrada e de saída para este processo. Na versão final do projecto foram também incluídos alguns sinais que fazem piscar os LEDs do módulo

O resultado é o seguinte excerto de código:

1 process (clock) is 2 begin 3 if rising_edge(clock) then 4 counter <= counter + 1; 5 if (counter=t150ms) then 6 bits <= input & bits(58 downto 1); 7 end if; 8 if input_rise=’1’ then 9 if (counter>=t1750ms) then10 data <= bits;11 end if;12 counter <= 0;13 end if;14 end if;15 end process;

As definições e alguma sintaxe em VHDL estão em falta aqui, mas o algoritmo está lá. Foi adi-cionada a numeração das linhas, porque é mais fácil de explicar como funciona o código. Neste código, counter é auto explicativo e bits são os andares do registo de deslocamento de 59 bits. Vamos começar com a linha 1.Isto é um processo, o que significa que vai ser executado pela FPGA. Nada acontece sem um processo. Podem existir vários processos, e vão ser todos executados em simultâneo. Dentro de um processo a ordem de execução é normal-mente de cima para baixo. O nosso processo é independente do valor do sinal clock, o que sig-nifica que o processo só é executado quando o valor do sinal clock muda. O processo começa depois da linha 2 e corre até à linha 15. A linha 3 faz com que tudo o que esteja dentro do pro-cesso seja sincronizado com o flanco ascendente do sinal de relógio. Isto é possível utilizando a função rising_edge. Vai ver frequentemente a seguinte construção em VHDL:

if clock’event and clock=’1’ then ..end if;

Esta construção, mais antiga, faz o mesmo que a função rising_edge. Aqui vamos utilizar a fun-ção rising_edge. Também existe uma função chamada falling_edge.O valor do contador é incrementado de 1 na linha 4. Fácil, não é? Sim, mas deve ter cuidado, porque sempre que utilizar a função para incre-mentar valores, que é representada pelo sinal +,

Page 63: Sound Home Lights Web Server

Domina as FPGAs

www.elektor-magazine.pt | Outubro 2013 | 63

sinais com o sufixo out são as saídas.Depois do bloco entity está um bloco archi-tecture que define a função. Este último tem um nome (behavioral) e é a implementação de uma entidade já especificada (neste caso edge_detector). O nome behavioral é atribuído quando deixamos o ISE criar um módulo em VHDL. Outro nome habitual é rtl, que significa Register Transfer Level (o nível onde é compi-lado o código em VHDL), mas pode escolher um nome à sua escolha.

FPGA Elektor, para verificar que está realmente a acontecer algo dentro da FPGA.

Detecção de transiçõesO detector de flancos é a parte mais importante deste projecto. No início foi utilizado um esquema simples que comparava o valor actual do sinal de entrada com o valor presente durante o impulso de relógio anterior. Não era fiável e causava pro-blemas, resultando numa perda ocasional de sincronismo. A solução utilizada foi: em vez de comparar o valor actual com o valor anterior, compara-se o valor anterior com o valor que estava presente duas amostra atrás. Por outras palavras, em vez de comparar t=n com t=n-1, compara-se t=n-1 com t=n-2.Pode perguntar se poderia ter sido utilizada a função rising_edge para este efeito, mas infeliz-mente a resposta é que não funciona. Se tentar isto, o sintetizador XST vai considerar que está envolvido o sinal de relógio, mas como não é o caso, o XST não vai saber o que fazer e vai gerar uma mensagem de erro. O detector de flancos foi incluído no projecto como um módulo de software separado (uma função em VHDL; ver Listagem 1), mas não é obrigatório fazer desta forma. No entanto, tem a vantagem de poder utilizar facil-mente esta função em outro projecto.Este módulo de software começa com a instru-ção library, seguida por uma instrução use. O objectivo destas instruções é assegurar que o módulo de software consegue aceder às funções e sinais standard apropriados. Se necessário pode adicionar outras bibliotecas, tais como a nume-ric_std (para utilizar a função +, como descrito anteriormente). Ao contrário da maioria das lin-guagens de programação, estas instruções não são válidas na totalidade do ficheiro que as con-tém, mas apenas para o primeiro bloco entity e para o(s) bloco(s) architecture que aparecem a seguir a estas instruções. Isto significa que cada bloco entity é habitualmente precedido de ins-truções relacionadas com bibliotecas.Vamos agora analisar o bloco entity, que pode ser visto como um símbolo de um diagrama esquemático. É aqui que são definidas as entra-das e saídas do componente, na secção port. Aqui pode ver que todos os sinais são do tipo std_logic, presente na biblioteca std_logic_1164, o que significa que são sinais lógicos que podem assumir vários estados definidos na biblioteca, incluindo 0, 1, e outros. Os sinais com o prefixo in são as entradas do módulo de software, e os

Listagem 1. Módulo (de software) detector de transições, escrito em VHDL.

library ieee;use ieee.std_logic_1164.all;

entity edge_detector is port (input : in std_logic; clock : in std_logic; rise : out std_logic);end edge_detector;

architecture behavioral of edge_detector isbegin process (clock) variable history : std_logic_vector(1 to 3); begin if rising_edge(clock) then rise <= history(2) and not history(3); history := input & history(1 to 2); end if; end process;end behavioral;

Mais informações em www.elektor.com.pt/120099

O módulo de desenvolvimento FPGA Elektor já testado e montado está disponível no serviço Elektor!

Page 64: Sound Home Lights Web Server

• Hardware & Software

64 | Outubro 2013 | www.elektor-magazine.pt

O detector de flancos é implementado como um process que é dependente do sinal de relógio clock. As instruções no processo são executa-das de cada vez que o valor deste sinal muda.Depois da declaração do processo, está uma lista de variáveis que apenas são necessárias dentro do processo. Aqui temos apenas uma: history, que é um registo de deslocamento de 3 bits. Esta variável é um vector que é composto por vários bits. Note que aqui este vector está defi-nido como (1 to 3), enquanto o registo de des-locamento do descodificador DCF77 está definido como (58 downto 0). Ambas as definições são válidas, mas temos de ter cuidado para evitar que os bits se confundam acidentalmente quando se utilizam as duas definições em conjunto.O detector de transições só está activo depois do flanco ascendente do sinal de relógio. Quando este acontece, é determinado o valor do sinal de saída (rise) a partir dos bits 2 e 3 do registo de deslocamento history; e depois é injectado o valor do sinal de entrada no registo de deslo-camento da mesma forma que está definida no fragmento de código para o descodificador DCF77.Como pode ver, cada bloco termina com uma declaração end (ou end if), seguida possivel-mente pelo nome do bloco em questão, pelo que os seus dedos vão estar muito ocupados no teclado. Esta é uma das desvantagens da VHDL: necessita de muita escrita. A Figura 2 apresenta a versão do ISE para o diagrama esquemático do detector de transições. É algo estranha esta interpretação, talvez não estejamos a ver tudo. Digamos que o ISE não é o melhor projectista.Este módulo de software foi discutido com muito detalhe para ilustrar como é um módulo de sof-tware em VHDL. Todos os módulos de software seguem este padrão de biblioteca, entidade e arquitectura, incluindo o módulo de software para o descodificador DCF77.

Utilizar módulos de softwareSe pretender utilizar o detector de transições no descodificador DCF77, tem de alertar o XST da sua existência. Há muitas formas de fazer isso, como utilizar uma biblioteca, mas aqui vamos utilizar o método do componente. A Listagem 2 apresenta os detalhes de como isto funciona. Esta listagem também mostra o módulo de sof-tware completo para o descodificador DCF77, incluindo o bloco entity e o bloco arquitecture associado, os sinais de entrada e de saída, e as constantes e variáveis locais. Analise-o bem, leve

Listagem 2. Descodificador de códigos temporais DCF77 com detector de transições.

library ieee;use ieee.std_logic_1164.all;use ieee.numeric_std.all;

entity dcf77_decoder is port ( input : in std_logic; clock : in std_logic; data : out std_logic_vector (58 downto 0) );end dcf77_decoder;

architecture behavioral of dcf77_decoder is

component edge_detector is port (input : in std_logic; clock : in std_logic; rise : out std_logic); end component edge_detector;

constant t1750ms: integer := 14000000; -- 1750 ms @ 8 MHz constant t150ms: integer := 1200000; -- 150 ms @ 8 MHz signal counter : integer := 0; signal bits : std_logic_vector(58 downto 0) := (others => ‘0’); signal input_rise : std_logic := ‘0’;

begin edge_detect: edge_detector port map (input => input, clock => clock, rise => input_rise);

process (clock) is begin if rising_edge(clock) then counter <= counter + 1; if (counter=t150ms) then bits <= input & bits(58 downto 1); end if; if input_rise=’1’ then if (counter>=t1750ms) then data <= bits; -- Transfer data. end if; counter <= 0; -- Clear counter. end if; end if; end process;end behavioral;

Page 65: Sound Home Lights Web Server

Domina as FPGAs

www.elektor-magazine.pt | Outubro 2013 | 65

tor de flancos, à esquerda da pasta. Os sinais de relógio e de entrada já estão definidos, porque são entradas (portos) do descodificador DCF77, fazendo parte do bloco entity. Agora tem de adi-cionar um sinal local do mesmo tipo para o sinal de saída rise do detector de flancos. Foi dado aqui o nome input_rise. Agora já pode utilizar este sinal no seu processo. Este vai assumir o valor um durante um período de relógio quando for detectado um flanco ascendente no sinal DCF77.Se se esquecer de mapear um sinal de entrada para um componente, vai ver uma mensagem de erro algo desconcertante. Esta tenta explicar que o sinal esquecido não tem um valor por defeito

o seu tempo, e utilize a Internet para o ajudar, se necessário – não é muito difícil.

Podemos incluir o detector de flancos neste módulo de software declarando-o como componente, no topo do bloco arquitecture. Depois copia-se o bloco entity e substitui-se a palavra entity por component. O próximo passo é ligá-lo a este bloco, o que se faz antes do início do bloco arquitec-ture, gerando uma instância do bloco. Para este efeito, tem de especificar uma etiqueta e depois utilizar um port map para indicar que sinais (por-tos) do descodificador DCF77, à direita da pasta, têm de ser ligados aos sinais (portos) do detec-

Figura 2. Este bizarro esquemático é o resultado obtido se deixarmos a função RTL Viewer do ISE desenhar o esquemático do detector de flancos descrito neste artigo (separador Design, Synthesize – XST ➞ View RTL Schematic). A entrada do sinal não está ligada a nada, e o funcionamento deste circuito é um absoluto mistério para o autor. Será que se enganou?

Figura 3. Imagem do ISE que apresenta o código para o mostrador e a hierarquia de projecto, em conjunto com os sinais de visto verdes que provam que é possível compilar o projecto e gerar um ficheiro de bitstream.

Page 66: Sound Home Lights Web Server

• Hardware & Software

66 | Outubro 2013 | www.elektor-magazine.pt

Agora pode começar a adicionar ficheiros novos. Para isto, abra o menu Project ou clique com o botão direito do rato no separador Design e seleccione New Source…. Depois seleccione VHDL Module, introduza o nome do ficheiro (por exemplo top), verifique se Add to project está seleccionado, e clique em Next. Vai agora aparecer um formu-

e pode assim permanecer desligado. Não diga que não foi avisado.

MostradorOs artigos deste tipo ten-dem a ser longos, porque se tenta explicar tudo cor-rectamente, mas o meu editor não gosta especial-mente de artigos longos. Ainda assim, neste artigo pretende-se explicar como se pode produzir um pro-jecto funcional em VHDL, caso contrário a tarefa é um pouco frustrante. Como ainda há muito para expli-car, omite-se o código para o mostrador de 7-segmen-tos neste artigo. Foi utili-zado o mesmo mostrador de dois dígitos que foi uti-lizado no terceiro artigo desta série [3], com o descodificador BCD/7-seg-mentos aí descrito. É um exercício simples, pelo que não é necessário explicá-lo em detalhe. Analise o pro-jecto para este artigo [5] para ver como funciona. A Figura 3 também apre-senta alguns detalhes.

De volta ao topoComo no artigo anterior desta série, tudo se junta no nível top, mas agora o nível top é o módulo em VHDL em vez de um dia-grama esquemático. Este detalhe tem de ser comuni-cado ao ISE em Design Pro-perties. Em primeiro lugar crie um novo projecto base-ado no anterior, da mesma forma que foi descrito no início do terceiro artigo desta série [3]. Depois apague todos os esquemáticos, mas mantenha o ficheiro UCF. Em seguida, abra Design Proper-ties (por exemplo, no menu Project, em baixo) e configure o Top-Level Source Type para HDL e Preferred Language para VHDL.

Listagem 3. Nível top da versão final do descodificador DCF77.

library ieee;use ieee.std_logic_1164.all;

entity top is port ( dcf77_input : in std_logic; clk_in : in std_logic; hour_month : in std_logic; time_date : in std_logic; led1 : out std_logic; led2 : out std_logic; t_sample : out std_logic; digit1 : out std_logic_vector (6 downto 0); digit2 : out std_logic_vector (6 downto 0) );end top;

architecture behavioral of top is

component two_digit_display is port ( bcd1 : in std_logic_vector (3 downto 0); bcd2 : in std_logic_vector (3 downto 0); digit1 : out std_logic_vector (6 downto 0); digit2 : out std_logic_vector (6 downto 0) ); end component;

component dcf77_decoder is Port ( input : in std_logic; clock : in std_logic; tick : out std_logic; sync : out std_logic; data : out std_logic_vector (58 downto 0) ); end component;

signal data : std_logic_vector (58 downto 0); signal bcd1 : std_logic_vector (3 downto 0); signal bcd2 : std_logic_vector (3 downto 0); signal tick : std_logic;

begin display: two_digit_display port map (bcd1 => bcd1, bcd2 => bcd2,

Page 67: Sound Home Lights Web Server

Domina as FPGAs

www.elektor-magazine.pt | Outubro 2013 | 67

de software que preten-der gerar. Neste projecto existem cinco: top, desco-dificador DCF77, detector de flancos, descodificador BCD/7segmentos, e mos-trador de dois dígitos.O módulo de software top é apresentado na Lista-gem 3. Os nomes dos sinais de entrada e saída no módulo de software top, que são os sinais presen-tes no bloco entity deste módulo, têm de correspon-der aos nomes presentes no ficheiro UCF, porque é desta forma que se faz a ligação dos pinos da FPGA ao código em VHDL. Todos os sinais presentes no ficheiro UCF têm de apa-recer aqui, caso contrário o ISE queixa-se. São aqui utilizados vectores para os pinos ligados ao mostrador. Pode fazer isto no ficheiro UCF utilizando um índice em conjunto com o nome do vector – por exemplo, digit1(0) corresponde ao bit 0 do vector digit1 no módulo de software top.São chamados dois compo-nentes no bloco architec-ture presente no módulo de software top: two_digit_display e dcf77_decoder, e é utilizada uma instância de cada um des-tes. Com um mostrador maior, por exemplo, com seis dígitos, pode gerar e ligar três instâncias do componente two_digit_display, cada um com a

sua etiqueta. Para ligar os dois componentes foram definidos vários sinais adicionais que não são necessários fora do módulo de software top. Por exemplo, o sinal tick é utilizado para fazer piscar o LED1 de cada vez que for recebido um bit. Como este LED não está ligado a um pino no módulo FPGA Elektor, também está ligado ao

lário que pode preencher se souber que sinais de entrada e de saída necessita. Se não souber, deixe o formulário em branco. Quando acabar, clique em Next e depois em Finish. O ISE vai criar o ficheiro automaticamente, que contém o modelo no qual pode adicionar o seu próprio código em VHDL. Crie tantos ficheiros quantos os módulos

digit1 => digit1, digit2 => digit2);

dcf77: dcf77_decoder port map (input => dcf77_input, clock => clk_in, tick => tick, sync => led2, data => data);

process (clk_in) is begin t_sample <= tick; led1 <= tick; if rising_edge(clk_in) then if time_date=’1’ then -- Show time. if hour_month=’1’ then -- Show hours. bcd1 <= data(32 downto 29); bcd2 <= “00” & data(34 downto 33); else -- Show minutes. bcd1 <= data(24 downto 21); bcd2 <= “0” & data(27 downto 25); end if; else -- Show date. if hour_month=’1’ then -- Show month. bcd1 <= data(48 downto 45); bcd2 <= “000” & data(49 downto 49); else -- Show day of month. bcd1 <= data(39 downto 36); bcd2 <= “00” & data(41 downto 40); end if; end if; end if; end process;

end behavioral;

Page 68: Sound Home Lights Web Server

• Hardware & Software

68 | Outubro 2013 | www.elektor-magazine.pt

sinal t_sample, que por sua vez está ligado ao pino P86 do ficheiro UCF. Isto facilita a visualiza-ção dos pontos de amostragem relativos ao sinal de entrada DCF77 num osciloscópio.O processo presente no módulo de software top não faz nada de extraordinário. É apenas um mul-tiplexador que apresenta as horas, os minutos, o dia do mês ou o número do mês, no mostrador de 7-segmentos, dependendo dos níveis dos dois sinais de controlo time_date (P94) e hour_month (P95). Copiando e colando algumas vezes (com a função &), os bits correctos são extraídos do registo de deslocamento para formar fragmentos de código BCD de 4 bits, que podem ser conver-tidos em sinais para o mostrador de 7-segmentos utilizando os descodificadores BCD/7segmentos. Note que aqui não é necessário mapear explici-tamente os vectores bcd1 e bcd2 para o compo-nente relativo à visualização, porque isto é feito implicitamente pelo mapa de portos.Quando sintetizar este projecto, vai ver alguns avisos. Estes são provocados por alguns bits do registo de deslocamento DCF77 não serem utiliza-dos, e de o bit 3 do vector bcd2 ter sempre o valor zero porque este projecto não utiliza dados de oito bits (só o componente referente ao número do ano é que utiliza dados de oito bits, mas não é utilizado aqui). Também vai ver que foi gerada uma hierarquia perfeitamente ordenada no sepa-rador Design (Figura 3), como quando inseriu o projecto como esquemático. Tudo foi restaurado como estava anteriormente. Como foi mencionado anteriormente, o ISE tem um visualizador RTL que consegue converter (aproximadamente; ver Figura 2) o código VHDL num esquemático, que reforça a dualidade subjacente: um esquemático é o mesmo que o código em VHDL e vice-versa. Apesar dos esforços para resumir as coisas, foi uma longa jornada. A intenção foi transmitir toda a informação essencial, mas para construir por si próprio este projecto é provavelmente neces-sário um pouco de confiança e determinação. Boa sorte!

(130066)

Artigo original: Taming the Beast (5) – June 2013

Internet

[1] Parte 1: www.elektor.com.pt/120099 [2] Parte 2: www.elektor.com.pt/120630 [3] Parte 3: www.elektor.com.pt/120743 [4] Parte 4: www.elektor.com.pt/130065[5] Parte 5: www.elektor.com.pt/130066

Figura 4. O esquemático do descodificador DCF77 é virtualmente idêntico ao do terceiro artigo desta série [3]. Como a FPGA não está especialmente confortável com sinais de 5 V, é utilizado um díodo Zener para limitar a amplitude do sinal de entrada a aproximadamente 3 V.

Figura 5. Circuito de teste controlado por um Arduino a actuar como simulador de DCF77. O mostrador apresenta a informação simulada da hora (17). O módulo FPGA Elektor é alimentado a partir do módulo Arduino.

Page 69: Sound Home Lights Web Server
Page 70: Sound Home Lights Web Server

•Teste & Medida

70 | Outubro 2013 | www.elektor-magazine.pt

Agora estamos prontos para começar a cons-truir o medidor LCR de 500 ppm. A maior parte deste artigo vai descrever os dois módulos, mas antes necessitamos de ver outra vez o diagrama do circuito.

Inconsistências e precisãoForam notadas algumas diferenças entre o cir-cuito publicado na edição de Março/Abril de 2013 e a lista final de componentes apresentada neste artigo. Como habitualmente, se há dúvidas deve confiar-se na lista de componentes, mas como ainda não tinha sido publicada, ninguém notou!

Na Figura 3 do primeiro artigo desta série [1], o valor do cristal Y1 não estava presente: 24 MHz.

O valor correcto para C3 e para C9 é de 1 µF, e não 4,7 µF; isto ajuda a reduzir o ruído nas frequências muito baixas, atribuído ao funciona-mento do MAX7404 e revelado quando se medem condensadores de grande capacidade (1000 µF ou mais): no osciloscópio, olhando para o sinal proveniente do conversor A/D, a flutuação do valor médio da amplitude das baixas frequências aumenta com o aumento do valor de capacidade.

Para U2, necessitamos de um MAX7404CSA normal (a gama de temperatura estendida do MAX7404ESA não é necessária aqui). Para U10, necessitamos de um LM4040 (e não do LM4050 que foi utilizado, e que também serve). O ampop utilizado para U6 é um OPA365 e não um OPA354, que tem uma tensão de desvio dema-siado elevada. E finalmente, para U19, deve ser

Jean-Jacques Aubry (França)

Medidor LCR de 500 ppmPlacas de circuito impresso, listas de material, montagem, calibraçãoDepois da teoria, considerações de projecto e descrição do software nos dois primeiros artigos desta série, estamos prontos para os assuntos mais práticos.

3ª parte:

Page 71: Sound Home Lights Web Server

Medidor LCR de 500 ppm

www.elektor-magazine.pt | Outubro 2013 | 71

utilizado um FT232RL e não um FT235RL (foi uma gralha). Finalmente, foi observado que para facilitar um dos ajustes deve ser montada uma resistência de 10 Ω na localização de R17, incorrectamente mostrada no diagrama do circuito como não mon-tada (NC). Os outros componentes marcados com NC devem ser montados apenas se o procedi-mento de calibração o necessitar – vamos voltar a isto mais tarde.Antes de ligar o seu ferro de soldar, sugere--se que faça cuidadosamente estas correcções no seu circuito, correspondente ao do primeiro artigo desta série. Vai ser disponibilizada on-line [3] uma versão XL corrigida, em conjunto com o software e outros documentos, incluindo os desenhos das placas de circuito impresso.

ConstruçãoOs desenhos das duas placas de circuito impresso que compõem o medidor LCR são apresentados nas Figuras 1-3. Lembre-se que apenas neces-sita do módulo de expansão para a versão autónoma do dispositivo; caso contrário só é necessário o módulo principal. Se possuir as ferramentas correctas e boa experiência a soldar componentes SMD manualmente, pode soldá-los por si próprio. Vai ficar satisfeito com o resultado. Contudo, mesmo que não haja alguma dificuldade em especial, é um trabalho para especialistas que só deve fazer se souber o que está a fazer.

Siga escrupulosamente os valores e tolerâncias da lista de componentes. Para além das resistências de precisão, todas as outras têm uma tolerância standard de 1%. R50 é de facto uma resistência

de 0 Ω, que torna possível ligar as massas analó-gica e digital num único e preciso local; também pode utilizar uma ponte de solda! As tolerâncias dos vários condensadores estão apresentadas na lista de componentes. Certifique-se que utiliza os tipos de dieléctricos especificados, particular-mente para os condensadores NP0.Na placa de circuito impresso, em conjunto com o cristal de quartzo, vai ver um ponto marcado com XTAL CASE. Este ponto deve ser ligado ao encapsulamento do cristal utilizando um pequeno pedaço de fio, porque o encapsulamento metálico só é eficaz se estiver ligado à massa. Acima de tudo, não demore muito tempo com o ferro de soldar, para não danificar o cristal de quartzo. Atenção: se soldar os componentes por si pró-prio, o microcontrolador não vai estar progra-mado. Vai necessitar de programar o bootloader; para fazer isto, vai necessitar do USB DEBUG ADAPTER da Silicon Laboratories [3].

Se for construir a versão autónoma, preste aten-ção à referência completa de componentes tais como o conector HE10 para o cabo plano, que vai ser soldado directamente no módulo com o mostrador (Figura 4). A altura de um conector normal vai impedir a montagem do módulo na caixa recomendada. O mostrador gráfico é soldado utilizando uma fila de pinos mais finos, ladeados por dois pinos normais, mas isto não é suficiente para fixar o mostrador; para evitar que este fique levantado acidentalmente pode fixá-lo no lado oposto ao dos pinos com a ajuda de cola quente. Para evitar enganos na escolha dos componentes, a lista de materiais (BOM), que complementa a

EspecificaçõesO Medidor LCR de 500 ppm é uma ponte automática de medição de impedância. Os dois princípios seguidos durante o projecto desta unidade foram a máxima precisão de medição e a facilidade de construção. Este instrumento mede resistência, capacidade e indutância de componentes desde 1 mΩ a 1000 MΩ. As medições podem ser efectuadas em três frequências: 100 Hz ou 120 Hz (rede eléctrica AC de 50 Hz ou de 60 Hz), 1 kHz, e 10 kHz.São possíveis duas configurações:•Unidade básica, sem mostrador ou teclado. Funciona apenas quando ligado, via USB, a um com-

putador onde corre o interface com o utilizador. Este interface, desenvolvido a partir de bibliote-cas em linguagem Qt, foi testado em Windows XP, Windows 7, Linux (Ubuntu 11.04), e MacOSX (Snow Leopard, Lion, e Moutain Lion).

•Unidade básica + expansão com mostrador e teclado. Também funciona em modo autónomo (sem PC) com uma alimentação externa de 5 V, através do cabo USB (que também pode ser ligado ao um PC para retirar daí a alimentação).

Page 72: Sound Home Lights Web Server

•Teste & Medida

72 | Outubro 2013 | www.elektor-magazine.pt

particular aquela radiada pelas linhas de alimen-tação de 50 Hz ou de 60 Hz. Vai então necessitar de uma caixa metálica, por exemplo, a 1455L1601 da Hammond, que é perfeita para um módulo de 160x100 mm em conjunto com o módulo de expansão. As dimensões da caixa estão disponí-veis no site referente a este artigo [3].

PreparaçãoFazer os furos para os conectores BNC e para o LED D6 num dos lados da caixa não apresenta pro-blemas. Para o conector USB e para o comutador SW1, vai necessitar de uma ferramenta de corte quadrado… ou uma boa lima e algum jeito; de facto, para um trabalho bem feito, vai necessitar de pelo menos duas limas, uma plana e um limatão qua-drangular, e possivelmente um limatão triangular.

lista presente neste artigo, está disponível no site referente a este artigo [3]. As dimensões dos componentes e o passo vão determinar a ordem de soldadura. Não se esqueça dos com-ponentes a soldar na face inferior da placa de circuito impresso principal.Os componentes marcados com NC só vão ser montados (talvez) mais tarde, para a calibração.Contudo, se não se sentir seguro a soldar com-ponentes SMD, ou se não tiver tempo disponível, pode encomendar os módulos já montados em www.elektor.com.pt, o nosso serviço de produ-ção profissional: vai receber os módulos através do correio, e tudo o que tem a fazer é colocá-lo numa caixa antes de o calibrar.Como muitos dispositivos electrónicos, um medidor LCR é sensível à radiação electromagnética, em

Lista de componentesCircuito principal

Resistências(por defeito: SMD 0805 1%)R1,R16,R17,R28 = 10 ΩR2,R34 = 820 kΩR3,R5,R11,R13 = 8,2 kΩR4,R10,R47,R55,R56,R71,R72,R78,R81,R82,R94,R95 = 10 kΩR6, R58, R59 = 1,8 kΩR7,R100 = potenciómetro de 5 kΩ

(TS53YJ502MR10 da Vishay-Sfernice)R8, R60, R62 = 16 kΩR9,R23,R25,R35,R38,R39,R41,R52,R68,R69,R70,R87,R88,R96 = 56 ΩR12,R14 = 5,6 kΩR15,R97 = NC (não montada)R18 = 10 kΩ/0,05% 10ppm (ERA6ARW103V da Panasonic)R19 = 1 ΩR20 = 1 kΩ/0,05% 10 ppm (ERA6ARW102V da Panasonic)R21 = 100 Ω/0,05% 5ppm

(TNPU0805100RAZEN00 da Vishay-Dale)R22 = 100 kΩ/0,05% 10ppm (ERA6ARW104V da Panasonic)R24,R26,R27,R29,R33,R36,R37,R40,R44,R57,R64 = 100 ΩR30,R61,R76,R77,R80,R101 = 20 kΩR31 = 750 ΩR32,R42,R49,R66,R93 = 100 kΩR43,R84,R85,R86,R89 = 2,2 ΩR45,R73 = 39 kΩR46,R90,R91 = 680 ΩR48,R51,R74 = 4,7 kΩR50 = 0 ΩR53,R65 = 470 ΩR54 = 1 kΩR63,R98 = 1,6 kΩR67 = 62 ΩR75 = potenciómetro de 5 kΩ (3266W-1-502LF da Bourns)R79 = 4,3 kΩR81 = 7,5 kΩR83 = 30 kΩR92 = 430 ΩR99 = 2 kΩ

Condensadores(por defeito: SMD 0805)C1,C2,C4,C10,C11,C12,C20,C26,C27, C28,C29,C31,C33,C34,C35,C36,

C37,C40,C41,C43,C44,C45,C46, C47,C48,C49,C50,C51,C53,C54, C61,C63,C65,C78,C80,C86,C87,C88 = 100 nF/25 V, 10%, X7R

C3,C9,C62,C64,C90 = 1 μF/25 V, 10%, X7RC5,C13,C18 = 15 nF/50 V, 5%, NP0, SMD 1206C6, C7, C14, C15, C16, C56 = 47 nF/50 V, 5%, NP0, SMD 1206C8, C73, C89 = 1 nF/50 V, 5%, NP0C17,C21,C23,C55,C60 = NC (não montado)C19,C25 = 150 pF/50 V, 5%, NPOC22,C52,C58,C59 = 1,5 nF/50 V, 5%, NPOC24,C32,C69,C72,C74,C75,C81,C85 = 2,2 μF/16 V, 10%, X7RC30,C57 = 4,7 nF/50 V, 5%, NP0C38,C39,C83,C84 = 33 pF, 5%, NP0C42,C70 = 33 μF/6,3 V, tântalo encapsulamento A

(293D336X96R3A2TE3 da Vishay Sprague)C66,C71, C82 = 10 nF/50 V, 10%, X7RC67,C77, C79 = 4,7 μF/10 V, 10%, X5RC68,C76 = 470 μF/6,3 V, tântalo encapsulamento D

(T495D477K006ATE100 da Kemet)

BobinasL1 = 20 μH, duas bobinas acopladas (PM3602-20-RC da Bourns)L2, L3 = núcleo de ferrite, SMD 0805 (BLM21PG221SN1D da Murata)

Semicondutores(por defeito: SMD)D1,D2,D3,D4,D5 = BAV199 (SOT23)D6 = LED verde 3mm, montagem horizontal (551-0207F da Dialight)D7 = MBR0520 (SOD123)D8, D9 = LED vermelho SMD 0805 (KP-2012SURC da Kingbright)D10 = BAT54A (SOT23)U1 = OPA725AIDBV (SOT23-5) (Texas Instruments)U2 = MAX7404CSA (SOIC-8) (Maxim)U3 = 74HCT4052D (SOIC-16)U4, U20 = TLC2274AID (SOIC-14) (Texas Instruments)U5 = INA128U (SOIC-8) (TI)U6,U11,U14 = OPA365DBV (SOT23-5) (Texas Instruments)U7 = PGA103U (SOIC-8) (Texas Instruments)U8 = 74HCT4053D (SOIC-16)U9 = C8051F061-GQ (TQFP-64) (Silicon Laboratories)

Page 73: Sound Home Lights Web Server

Medidor LCR de 500 ppm

www.elektor-magazine.pt | Outubro 2013 | 73

lhas): 4 para fixar os quatro parafusos na caixa, 4 para configurar o espaçamento de 7 mm, e finalmente 4 para segurar o módulo de expansão.

Dois comentários acerca dos jumpers: nor-malmente o firmware é actualizado pelo programa principal no PC. Logo depois, o circuito começa a funcionar, mas se por qualquer razão o firmware não responder (por exemplo, devido a algum bug no fir-mware), vai ser necessário intervir ao nível do bootloader e ordenar-lhe que faça uma actualização incondicional. O jumper J17, acessível depois de remover o painel trasei-ro, é utilizado para fornecer esta informa-ção.O procedimento para actualização está des-crito na documentação on-line em [3].

Para fazer a ligação de massa entre o módulo principal e a caixa, vai necessitar de fazer um furo (3,2 mm de diâmetro) no fundo da caixa de alumínio, alinhado com o furo na placa de cir-cuito impresso que está junto a J16; utilize um parafuso M3 de 12 mm com anilha e porca, em conjunto com um espaçador de 5,5 mm.Para acomodar o módulo de expansão com mos-trador e teclado, a parte saliente da caixa de alu-mínio tem de ser maquinada e marcada (dese-nhada ou gravada) com as funções dos botões de pressão (Figura 5). Depois utilize quatro parafu-sos M3 (12 mm) com anilhas e porcas, e quatro espaçadores de 7 mm.

Nota: para fixar o módulo de expansão na ausên-cia de espaçadores, pode utilizar porcas (e ani-

U10 = LM4040D25IDBZ (SOT23) (Texas Instruments)U12 = DAC8811CDGK (MSOP-8) (Texas Instruments)U13 = SN74LVC2G53DCT (SM-8) (Texas Instruments)U15 = REG102GA-A (SOT223-5) (Texas Instruments)U16 = LT1611CS5 (SOT23-5) (Linear Technologies)U17 = TPS72325DBV (SOT23-5) (Texas Instruments)U18 = TLV70030DDC (SOT23-5) (Texas Instruments)U19 = FT232RL (SSOP-28) (FTDI)

DiversosY1 = cristal de quartzo de 24MHz, frequência fundamental (p.ex. 24.000MHz HC49/4H/30/50/40+85/18pF/ATF da Euroquartz)SW1 = comutador lateral (4US1R1020M6RNS da RS Components,

código 734-6934)

J1,J2,J3,J6,J7,J8,J17,J21,J22 = barra de pinos 2 vias, passo 2.54mmJ4,J5,J14 = pino 1 via, dobrado (ver texto)J10,J11, J12,J13 = conector BNC, montagem horizontal, isolado

(p.ex. 1-1337543-0 da TE Connectivity)J15 = barra de pinos 10 vias, HE10 (p.ex. MC9A12-1034 da Multicomp)J16 = barra de pinos 14 vias, HE10 (p.ex. MC9A12-1434 da Multicomp)J17 = barra de pinos 2 vias, passo 2.54 mm, dobrado (ver texto)J19 = conector USB, tipo B, horizontal (p.ex. 292304-1 da TE

Connectivity)K1 = botão de pressão (série B3F-10xx da Omron)

Placa de circuito impresso, Serviço Elektor Ref.ª 110758-1Alternativa: módulo já montado Serviço Elektor Ref.ª 110758-91Caixa (1455L1601 da Hammond + maquinagem + letras)Parafusos, porcas, espaçadores, materiais diversos

Figura 1. Placa principal do Medidor LCR, de dupla face; face dos componentes (a). Lembre-se dos componentes a soldar na face das soldaduras (b). A ausência da camada silk screen na face das soldaduras é intencional.

a b

Page 74: Sound Home Lights Web Server

•Teste & Medida

74 | Outubro 2013 | www.elektor-magazine.pt

Ajuste semi-automáticoAo contrário do que se possa pensar, devido à extraordinária precisão deste dispositivo, o pro-cedimento de ajuste não requer equipamento ou competências especiais. Para além do multíme-tro para verificar a tensão de alimentação, não

Para ter a certeza que as pontas de medição estão ligadas firmemente aos pinos dos pontos de medição J4, J5, e J14, pode dobrá-los um pouco.

As funções de todos os outros jumpers estão definidas na documentação on-line.

Lista de componentesMódulo Mostrador/TecladoResistências (SMD 0805 1%)R1,R2,R3,R4,R10,R11 = 4,7 kΩR5,R6,R7,R9 = 56 ΩR8 = 1 kΩ

Condensadores(SMD 0805)C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 = 1 μF/25 V, 10%, X7R

Semicondutores D1,D2,D3,D4 = BAT54A (SOT23)D5 = LED verde 3mm (L-424GDT da Kingbright)Q1,Q2 = MOSFET de canal N (SOT23) (FDV303N da Fairchild)

DiversosU1 = Display gráfico 64128M-FC-BW-3 (Displaytech)J1 = Conector HE10 de 14 vias, altura máxima 5,4 mm

(09 18 114 9622 da Harting)K1,K2,K3,K4,K5 = Botão de pressão (TS0B22 da Multicomp)

Conector de 14 vias para cabo plano (MC6FD014-30P1 da Multicomp)Cabo plano de 14 vias, comprimento 10 cm (3365-14 da 3M)

Placa de circuito impresso # 110758-2Módulo montado e testado Ref.ª 110758-92

Figura 2. Fotografia do protótipo.

Figura 3. Desenho da placa de circuito impresso, de dupla face, para o módulo de expansão com o mostrador (opcional).

Page 75: Sound Home Lights Web Server

Medidor LCR de 500 ppm

www.elektor-magazine.pt | Outubro 2013 | 75

é necessário nenhum equipamento de medição! O software assume a calibração semi-automá-tica. O utilizador tem apenas de efectuar alguns ajustes nos quais é guiado passo-a-passo pelo programa, que faz todas as medições. O pro-cedimento é cuidadosamente descrito na docu-mentação on-line [3], incluindo a montagem dos componentes marcados com NC, quando neces-sário, e a configuração dos jumpers. Tudo o que necessita é de uma pequena chave de fendas, um pouco de jeito, e de paciência, porque neces-sita de ler totalmente a documentação e seguir as instruções à letra, sem saltar nenhum passo.

No primeiro artigo desta série, vimos a impor-tância dos cabos de medição e o seu efeito na precisão. Assim, dependendo da aplicação para que vai utilizar o medidor LCR, pode utilizar as ligações Kelvin (Figura 7a) e/ou o aparato de medição com quatro conectores BNC, como o TH26001A, “aparato de teste com quatro termi-nais”, da TONGHUI (Figura 7b). Estes são fáceis de encontrar na Internet (palavras chave: LCR test clip, Kelvin clip, TH26001A).

Depois de construir o módulo, pode alimentá-lo utilizando uma alimentação USB e verificar as tensões de alimentação. Como o microcontrola-dor não está programado, todos os portos estão no estado de alta impedância e não vão fazer nada! Assim não há sinais para medir. Pode ligar brevemente o módulo ao PC e ver que os díodos D8 e D9 vão acender: é o FT232R (U19) a comu-

61.95

37

45.00

(160.0)

61.86

10.97

22.57

61.40

80.83

(91.8

)

75.20 88.53 101.87 115.20

70

4 x 6) depth 1.43.2 mill 90º (

=

==

=

132.01

110758 - 16

5 x 10.2

3.2 R = 2

Figura 4a. Preste atenção ao tipo exacto de conector HE10 para o módulo de expansão com o mostrador.

Figura 4b. Parte de baixo do módulo de expansão.

Figura 5. Dimensões da caixa.

(103)

22

43.18

10.39

9

R = 1R = 1

13

6.5031.75

11.61 22

2.03

1.16

8.03

3.975.0

110758 - 17

4 x 14

3.5

1.48

(30.5

)=

= =

=

Page 76: Sound Home Lights Web Server

•Teste & Medida

76 | Outubro 2013 | www.elektor-magazine.pt

se seguem estão descritas detalhadamente na documentação on-line.O programa AU2011 instalado no PC vai então estabelecer uma ligação por software abrindo o porto; está a funcionar? Estão está no caminho

nicar com o PC. Depois de programar o bootlo-ader no microcontrolador através do programa FlashUtil, utilizando o módulo DEBUG ADAPTER USB (Figura 8) ligado a J15, o microcontrolador está operacional. Esta operação e aquelas que

S/P/A

Q–D

– +

LCRmeter

Figura 6. Sugestão para o painel frontal, para ser gravadoou impresso

Figura 7a. Este conjunto de ligações Kelvin com fichas BNC pode ser obtido por 10 dólares.

Page 77: Sound Home Lights Web Server

Medidor LCR de 500 ppm

www.elektor-magazine.pt | Outubro 2013 | 77

- Desenhos mecânicos (versão autónoma com expansão)

- Painel frontal (só versão autónoma)- Documentos com instruções de configuração

e de funcionamento

certo! Tudo o que resta é carregar o firmware a partir do PC, através do menu de actualização Tools/Program do programa AU2011.Depois disto, quando reinicializar o medidor LCR, vai ver os ajustes de desvio (semi)automáticos a decorrer como descrito no manual de configura-ção [3]. Se isto acontecer, tem 95% de hipóteses de estar tudo em ordem. Depois pode iniciar as medições clicando no menu Start no PC. Se a janela com os parâmetros de um circuito aberto aparecer antes de TRIM, tem quase 100% de certeza de sucesso!

(130093)

Artigo original: 500 ppm LCR Meter (3) – May 2013

Internet

[1] www.elektor.com.pt/110758[2] www.elektor.com.pt/130022[3] www.elektor.com.pt/130093

Documentação on-line

- Software (bootloader, firmware, e programa principal)

- Desenhos das placas de circuito impresso 1 e 2- Desenho da implantação dos componentes,

face superior 1 e 2- Desenho da implantação dos componentes,

face inferior 1 e 2- Lista de materiais completa- Diagrama do circuito em versão XL

Figura 7b. Este aparato de teste, que está fixado directamente ao medidor LCR, pode ser encontrado por cerca de 50 dólares.

Figura 8. Para programar o microcontrolador vai necessitar deste acessório.

Figura 9. Se esta janela com os parâmetros de um circuito aberto aparecer antes de TRIM, está confirmado o correcto funcionamento do circuito.

Page 78: Sound Home Lights Web Server

• Curso

78 | Outubro 2013 | www.elektor-magazine.pt

Aqui estamos nós, com uma missão e uma série de ferramentas à nossa disposição. Decidimos colocar os nossos chapéus de inventor e cons-truir um dispositivo que tira uma foto de quem abrir a caixa das bolachas.

ComponentesDesta vez, a lista de componentes para replicar este projecto é bastante simples:•Placa Arduino Uno•Um computador com o Processing

e o Arduino IDE instalado•Webcam•Cabo USB•Breadboard

•1 resistência de 1 MΩ•Fios para pontes de ligação•Módulo TinkerKit: Ultra Bright White LED +

TinkerKit Wire

ConceitoVamos criar uma armadilha, onde um brinquedo de fabrico caseiro (foto acima) está constante-mente a guardar a nossa caixa das bolachas. Se alguém tocar na caixa, uma câmara escondida dentro do brinquedo tira uma fotografia do rosto do nosso ladrão.A captura de imagem é feita com um programa escrito em Processing, que vai estar a tirar foto-grafias através da câmara escondida dentro do brinquedo. Vamos então activar a câmara a partir de uma placa Arduino que detecta efetivamente quando alguém toca nas nossas bolachas. Isto é possível utilizando as funcionalidades de detec-ção capacitiva implementadas em todos os chips Atmega.O conceito parece muito simples e a integração dos vários componentes também é muito fácil. Primeiro vamos criar um sketch em Processing que seja capaz de disparar uma fotografia usando o Arduino através da porta série do computador.

Instalação do ProcessingFaça o download do Processing na Internet [1]. Se não tem acompanhado a minha série de arti-gos sobre o curso Arduino, deve ficar a saber que o Processing é uma plataforma de ambiente de desenvolvimento de software dedicada à criação de programas em Java, Android e Javascript. Tem como objectivo que as pessoas possam aprender a criar programas e fazer coisas complicadas de forma simples.Vamos usar uma webcam, pelo que deve verifi-car se a sua câmara funciona com o Processing. Se estiver em ambiente Windows ou Mac, pode ler o artigo [2] se não estiver a trabalhar, e se

David Cuartielles (Espanha) e Bobbie Cuartielles (Suécia)

Curso ArduínoParte 5: Ladrão de bolachas apanhado!Descobrimos que alguém anda a comer as bolachas da caixa da cozinha! Discutimos o assunto e decidimos criar uma armadilha para apanhar o ladrão! Não se assuste, não queremos fazer mal a ninguém, só queremos saber quem foi e ter provas do crime.

Page 79: Sound Home Lights Web Server

Curso Arduíno

www.elektor-magazine.pt | Outubro 2013 | 79

por acaso estiver em ambiente Linux (como eu) veja antes o site [3], onde se explica quais os pacotes que precisa de instalar para que o Pro-cessing possa controlar a sua webcam.Vamos usar as bibliotecas Video e Serial do Pro-cessing, e ambas vêm incluídas de base com o IDE, por defeito. Portanto, não precisa de se preocupar em encontrar e instalar bibliotecas extras neste caso.

Capturar uma imagem com a webcamA versão mais recente do Processing implementa a sua biblioteca Video usando a Gstreamer [4], uma suite de ferramentas de software capazes de aceder a vários dispositivos de vídeo liga-dos ao seu computador, cria pipes para os stre-ams, implementa codecs, etc. Pode aceder a um stream de vídeo proveniente de uma câmara ligada ao computador através de um handler para um ficheiro. Por exemplo, em máquinas baseadas em *nix (como o Linux ou Mac OSX), todos os seus dispositivos de vídeo estão listados no ficheiro /dev/videoXX, onde XX representa um número diferente de identificação das dife-rentes câmaras. Para este projeto, como estou a programar a partir do meu portátil, /dev/video0 representa a câmara que vem integrada com o computador, enquanto que /dev/video1 cor-responde à câmara que coloquei no brinquedo.A primeira coisa que precisa de ter em conta é que a mesma câmara pode ter diferentes confi-gurações em termos de resolução e velocidade de captura de imagem. Portanto, deve executar o programa que apresentamos na Listagem 1, e verificar as diferentes câmaras e configurações possíveis no seu computador, como vão sendo impressas na consola do Processing IDE. O pro-grama processa um determinado código para fazer um levantamento das câmaras disponíveis no seu computador.

Vai ficar surpreendido com a longa resposta pro-veniente desse programa; no meu caso, listar apenas as configurações possíveis para a câmara integrada no meu computador, obtive a lista que se apresenta na Tabela 1 (lista cortada).Em seguida, decida a configuração da câmara de acordo com o tamanho que quer que o seu sketch tenha. No meu caso, queria ter uma con-figuração com 640 x 480 pixels, ou seja, índice número na Tabela 1.Note que podem haver configurações com os mesmos valores no resultado gerado; deve verifi-

Listagem 1

/** * Check cameras in Processing */ import processing.video.*;

Capture cam;

void setup() {

String[] cameras = Capture.list(); if (cameras.length == 0) { println(“There are no cameras available for capture.”); exit(); } else { println(“Available cameras:”); for (int i = 0; i < cameras.length; i++) { println(“[“+i+”] “+cameras[i]); } } }

void draw() {}

Tabela 1.

Índice Nome Dimensão fps

[0] /dev/video0 1280x720 10

[1] /dev/video0 960x540 10

[2] /dev/video0 800x448 15

[3] /dev/video0 640x480 30

...

[86] /dev/video0 320x240 15

Listagem 2

if (cameras.length == 0) { println(“There are no cameras available for capture.”); exit(); } else { println(“Available cameras:”); for (int i = 0; i < cameras.length; i++) { println(“[“+i+”] “+cameras[i]); } // The camera can be initialized directly using an element // from the array returned by list(): cam = new Capture(this, cameras[3]); cam.start(); }

Page 80: Sound Home Lights Web Server

• Curso

80 | Outubro 2013 | www.elektor-magazine.pt

e teste algo como usar o teclado para tirar uma foto. Basta modificar o código da Listagem 2 com o código apresentado na Listagem 3, e a câmara vai guardar uma imagem sempre que pressionar as teclas p ou P.

Olhe para a linha destacada:saveFrame(“pic-######.png”) — este é o método que armazena uma imagem na pasta sketch com o nome “pic-######” no formato PNG, com essa extensão. A sequência de carac-teres ###### representa o número da imagem. Imagens diferentes terão números diferentes.

Note que saveFrame() armazena apenas a infor-mação contida dentro da estrutura da aplicação – e não o resto do desktop.

Colocar data e hora na imagem!Como saveFrame() grava uma cópia pixel por pixel da sua aplicação num ficheiro, é possível adicionar uma camada de informação na parte superior da imagem. No nosso caso, estamos interessados em saber quando é que a caixa foi aberta e o seu precioso conteúdo roubado! Numa linguagem de detectives: o crime deve ser evidenciado em termos temporais. Vamos então adicionar a data e hora à nossa imagem capturada pela câmara, como se mostra na Listagem 4. Isso vai também imprimir uma nota para o STDOUT.

Uma foto experimental, mas bem-sucedida, é apresentada na Figura 1. A baixa resolução é, obviamente, devido à webcam, mas qualquer detetive ficará feliz.O próximo passo é escrever algum código no Arduino para determinar se alguém tocou na caixa, e retornar imediatamente um comando para o computador.

Detecção de toque com o Arduino: Biblioteca CapacitiveSensorDentro do ficheiro 120745-11.zip criado para este artigo vai encontrar uma pasta com o nome “Arduino” que contém uma subpasta com o nome “libraries”. O ficheiro pode ser descarregado gra-tuitamente a partir do site [6] na Internet. Deve copiar o conteúdo dessa pasta para dentro da pasta libraries do seu Arduino. Este último está localizado dentro da pasta sketchbook do Arduino, normalmente armazenada em “My Documents/Arduino” em computadores Windows, ou “Docu-ments/Arduino” em máquinas Mac e Linux.

car qual delas melhor se adapta ao que pretende.A selecção da câmara tem que ser feita dentro da configuração do programa – basta modificar a instrução condicional dentro da configuração para conter o código apresentado na Listagem 2, isto activa efectivamente a câmara selecionada.

Utilizar o teclado no ProcessingQueremos capturar uma imagem quando alguém toca na caixa, e é bom testar essa funcionali-dade logo de antemão. Sugiro que implemente

Listagem 4

void draw() { if (cam.available() == true) { cam.read(); } image(cam, 0, 0); String timeStamp = String.format(“%02d”, hour()); timeStamp += “:” + String.format(“%02d”, minute()); timeStamp += “:” + String.format(“%02d”, second()); timeStamp += “ “ + year(); timeStamp += “/” + String.format(“%02d”, month()); timeStamp += “/” + String.format(“%02d”, day()); text(timeStamp, 10, height-10); // superimpose text on image // for the keyboard detection to work, you need to have // clicked on the application window first (aka focus) if(keyPressed) { if (key == ‘p’ || key == ‘P’) { saveFrame(“pic-######.png”); println(“capturing Frame at: “ + timeStamp); // report to the console } }}

Listagem 3

void draw() { if (cam.available() == true) { cam.read(); } image(cam, 0, 0); // for the keyboard detection to work, you need to have // clicked on the application window first (aka focus) if(keyPressed) { if (key == ‘p’ || key == ‘P’) { saveFrame(“pic-######.png”); } } }

Page 81: Sound Home Lights Web Server

Curso Arduíno

www.elektor-magazine.pt | Outubro 2013 | 81

de configurar a constante THRESHOLD para atender às suas circunstâncias específicas. Se analisar a Figura 3 vai verificar que cortámos uma antena de folha de alumínio para colocar por baixo do nossa caixa das bolachas. A forma e o tamanho dessa antena determinam os tem-pos medidos pela biblioteca. Vai ter que confi-gurar o valor da constante THRESHOLD para que o programa funcione correctamente. Siga os seguintes passos:

•Ligue o circuito à folha de alumínio.•Medir o valor por defeito, dependendo

da quantidade de folha que tem este valor deve estar na gama dos 200.

•Toque na área sensível e observe a medição no Serial Monitor.

•Faça THRESHOLD = (MAX_VALUE + DEFAULT_VALUE) / 2 e altere-o no código.

A biblioteca CapacitiveSensor foi originalmente criada em 2008 por Paul Badger [5] e vem acom-panhada com um único exemplo, mas bastante claro. Recomendo que dê uma vista de olhos na página de Internet sobre o Arduino referen-ciada em [5]; vai encontrar lá tudo o que pre-cisa saber sobre como os sensores capacitivos funcionam. Essencialmente, a biblioteca utiliza dois pinos digitais: um para enviar um pulso, e outro para ler esse pulso. Ambos os pinos são ligados através de uma resistência de um deter-minado valor (nosso caso, 1 MΩ) e deixa o pino de recepção em aberto com um fio ou pedaço de metal condutor que irá funcionar como um condensador em aberto. A simples presença do corpo humano vai alterar o valor da capacidade e, desse modo, variar o tempo que leva a que o sinal no pino de recepção atinja um valor que possa ser percebido como um valor lógico Alto. A biblioteca CapacitiveSensor mede esse tempo – se for suficientemente longo, o mais provável é que um ser humano esteja a interagir com o pino de abertura da caixa e estamos em posição para fotografar o culpado em flagrante delito.

Os sensores capacitivos estão literalmente em toda parte das nossas vidas digitais. Estes dis-positivos são tão sensíveis que podem ser escon-didas por detrás de plásticos, madeira, e quais-quer outros tipos de material não condutores. Ao mesmo tempo, ampliar a cobertura de um sensor de toque é tão fácil como adicionar mais metal e configurar um par de componentes passivos (resistências e condensadores).

O circuito que vamos adicionar ao Arduino resume-se a uma única resistência de 1 MΩ e um par de fios. Para além disso, se conside-rarmos que o nosso guarda pode ter que tirar uma fotografar à noite, adicionámos ainda uma placa Ultrabright LED da TinkerKit para iluminar o cenário. Fizemos a boca do nosso guarda com material acrílico translúcido (plexiglass) para a luz passar sobre o mesmo. Verifique o esquemá-tico na Figura 2 para obter mais detalhes sobre a construção. De volta ao software, o código necessário para o Arduino realizar todas estas operações é bastante simples, como pode ver na Listagem 5.

Para aqueles que têm alguma experiência com o Arduino, repararam que destaquei as linhas que pertencem à nova biblioteca. Vai precisar

Figura 1. Detalhe da imagem capturada com hora e data.

Figura 2. Diagrama de ligações ao Arduino para este projecto.

Page 82: Sound Home Lights Web Server

• Curso

82 | Outubro 2013 | www.elektor-magazine.pt

ler os dados sempre que estes cheguem através da porta como se mostra na Listagem 6.

Montagem da armadilhaO nosso amigo Pham Tien desenhou um mons- truoso Guarda Bolachas, que foi cortado a laser na FabLab, uma empresa local. Tien usou habil-mente as propriedades mecânicas da nossa web-cam para fazer o pescoço do nosso Guarda Bola-chas. O sensor da câmara está escondido por trás do único olho do monstro, e o LED ultra-brilhante está por detrás da boca. Há espaço suficiente por trás do corpo do monstro para esconder a placa Arduino e a pequena breadboard que usámos. A Figura 4 mostra a construção de Tien. Como explicámos anteriormente, fizemos o sensor de toque a partir de um pedaço de folha de alumí-nio. A sua forma é parecida com a letra ‘i’, mas com um ponto colossal. O ponto é a antena onde colocamos a nossa caixa. A folha de alumínio é colada com fita adesiva ao fio que vai para a breadboard para o pino número 5.

Note que foi usada uma caixa metálica, o pro-jeto também deve trabalhar com outros tipos de materiais, mas poderá ter que fazer com que o sensor seja mais sensível, aumentando o valor da resistência de 1 MΩ para, digamos, 10 MΩ.

ConclusãoEste foi um projeto divertido para se fazer durante um fim-de-semana, quando reparámos que alguém tinha comido as nossas bolachas. Fomos capazes de construirtudo usando pequenos componentes que sobra-ram de outros projetos. Existe muito espaço para melhorar este projeto: pode começar por soldar todos os componentes numa placa para protóti-pos, procurar um material melhor para construir o sensor, construir um suporte para o sensor, etc. Por agora, o resultado é apresentado na Figura 5.

No entanto, o que eu queria era mostrar que para construir uma pequena prova do conceito precisa apenas de muito pouco, mesmo quando estamos a tratar de circuitos electrónicos digitais.Se conseguir ter mais tempo, vou modificar o código em Processing para publicar as fotos direc-tamente num servidor web, disponibilizando a informação remotamente num instante.

(120745)

Artigo original: Arduino on Course (5) – April 2013

Quando o programa detecta um valor vindo deste sensor que esteja acima do THRESHOLD, vai retornar o carácter ‘p’ para a aplicação em Pro-cessing através da porta série. As únicas duas coisas que faltam agora são: alterar o programa em Processing para accionar a câmara através de uma comunicação série com o Arduino, e mon-tar a armadilha.

Accionar a câmara com o ArduinoBasicamente, precisa de modificar a sua aplicação em Processing para incluir a biblioteca Serial, e

Listagem 5

#include <CapacitiveSensor.h>

#define THRESHOLD 500 // Note you have to configure this value

// declare the pins to be used// 1M resistor between pins 4 & 5// ultrabright LED on pin 7CapacitiveSensor cs_4_5 = CapacitiveSensor(4,5); int ledPin = 7;

void setup() { // uncomment to turn off autocalibrate on channel 1 //cs_4_5.set_CS_AutocaL_Millis(0xFFFFFFFF);

// configure the serial port Serial.begin(9600); // configure the pin for the LED pinMode(ledPin, OUTPUT);}

void loop() { long sensorReading = cs_4_5.capacitiveSensor(30);

if (sensorReading > THRESHOLD) { // turn on the light digitalWrite(ledPin, HIGH); // tell the computer to take a picture Serial.write(‘p’);

// wait and then turn the light off delay(2000); digitalWrite(ledPin, LOW); } else { // uncomment these lines for configuring your system // Serial.println(sensorReading); // delay(200); }}

Page 83: Sound Home Lights Web Server

Curso Arduíno

www.elektor-magazine.pt | Outubro 2013 | 83

AgradecimentosQueremos agradecer a Paul Badger pela sua bi-blioteca para sensores capacitivos para o Arduino, criada em 2008; a Paul Stoffregen, que reviu todo o código original para trabalhar com o IDE Ardui-no v1 e seguintes; e a Pham Tien, do FabLab em Malmö, por modelar o no circuito de guarda às bolachas com câmara integrada.

Referências

[1] Projecto em Processing: http://processing.org[2] Problemas quando se utilizam webcams

com o Processing: http://wiki.processing.org/ w/Video_Issues

[3] Lista de packages para o GStreamer para Linux para utilizar webcams com o Processing: http://forum.processing.org/ topic/how-is-video-on-linux-handled# 25080000001764427

[4] Site oficial do Gstreamer: http://gstreamer.freedesktop.org/

[5] Biblioteca para sensores capacitivos para o Arduino de Paul Badger: http://playground.arduino.cc/Main/CapacitiveSensor

[6] Software para o projecto: www.elektor.com.pt/120745

Listagem 6

import processing.video.*;import processing.serial.*;

Capture cam;Serial myPort; // The serial port

void setup() { […]

// we don’t need the camera at full blast frameRate(1);

// List all the available serial ports println(Serial.list()); // Open the port you are using at the rate you want: myPort = new Serial(this, Serial.list()[0], 9600);}

void draw() { […] if (myPort.available() > 0) { int inByte = myPort.read(); if(inByte == ‘p’) { saveFrame(“pic-######.png”); println(“capturing Frame at: “ + timeStamp); } } }

Figura 3. Sensores capacitivo de construção caseira.

Figura 4. Detalhe de construção do pescoço do circuito de guarda às bolachas.

Figura 5. Apanhado! Quem está a roubar as bolachas?

Page 84: Sound Home Lights Web Server

•Labs

84 | Outubro 2013 | www.elektor-magazine.pt

Numa das minhas recentes visitas a casa dos meus sogros verifiquei que a campainha eléctrica da porta de casa deles tinha deixado de funcionar. Era uma daquelas campainhas sem fios que eu próprio tinha insta-

lado há cerca de dois anos na entrada lateral, a qual nem sequer é muito usada. A curiosidade é que eu me recordo perfeitamente de ter substi- tuído as pilhas há apenas dois meses atrás.O meu sogro, como sempre, optou pela aborda-gem pragmática e sugeriu simplesmente que eu mudasse as pilhas. No entanto, ele subestima a minha determinação em ir até ao fundo destas coisas – e onde existe uma anomalia tenho que encontrar uma solução. “Por acaso não tem por aí um multímetro?” perguntei-lhe.Ele tinha e já nem me lembrava de ter usado um destes multímetros analógicos de agulha. Gra-vado na caixa de plástico estava escrito “Testador de Baterias” e percebi logo que o instrumento me iria servir perfeitamente desde que estivesse ainda a funcionar.Com as duas partes da campainha à minha frente em cima da mesa e na ausência de equipamento de teste mais sofisticado, assumi com confiança que a luz LED a piscar era prova de que o botão funcionava quando premido e transmitia correc-tamente para a outra metade do equipamento.Com o receptor da campainha agora mesmo ao lado do transmissor, tornava-se claro que não era uma questão de transmissão. A minha sus-peita começou assim a apontar para a unidade receptora, a qual não mostrava qualquer tipo de actividade, seja em termos de indicador LED ou na tentativa de tocar a campainha Big Ben.À medida que ia ponderando no problema, uma lista de possíveis causas começou a formar-se no ecrã imaginário que qualquer técnico de elec-trónica tem na sua cabeça. Neste caso era algo parecido com isto:

1. Estaria o meu sogro a pregar-me uma par-tida? (possível mas pouco provável)

2. Seria um mau conjunto de pilhas? (como dizia o meu sogro - bolas)

3. Falha electrónica? (sempre possível)4. Qualquer outra coisa? (nunca podemos des-

cartar essa possibilidade)

Com o compartimento das pilhas aberto, observei as três pilhas AA que eu próprio tinha instalado há menos de dois meses ainda em posição... Sim, e antes que perguntem... estavam todas na posição correcta.Com o testador de bateria ajustado para uma escala de 4,5V, toquei nas extremidades dos condutores das pilhas ligadas e medi uns meros... 1,5V.Assim, a hipótese #2 parecia a mais provável. O meu sogro começava a olhar para mim com um ar vitorioso. Retirei as três pilhas, ajustei o medidor para uma gama de 1,5V e medi cada uma das pilhas individualmente. A primeira indi-cava 1,5 V... Curioso, será que isso queria dizer que as outras duas estavam totalmente descar-regadas? A segunda pilha media também 1,5V e comecei a ficar confuso. “Estranho”, observei. As duas pilhas mediam exactamente 1,5V mas a tensão total das três era de apenas 1,5V!Medi então a terceira pilha e vi a agulha a pen-der para o lado contrário!Ou seja, esta pilha parecia estar a gerar uma tensão negativa. Mudei as pontas de teste com a vermelha para o terminal negativo e a preta para o positivo e obtive uma leitura de 1,5V.

1,5 V + 1,5 V – 1,5 V = 1,5 V. Não admira!

O problema ficou resolvido simplesmente subs-tituindo a pilha defeituosa e os meus sogros vol-taram a ouvir o Big Ben a tocar na porta. Mas a dúvida continuou a persistir na minha cabeça. Seria possível uma pilha inverter a sua polari-dade? Bem... não. A química das células define a direcção em que a corrente flui.Levei a pilha defeituosa para minha casa para analisar com mais atenção. Na manhã seguinte ainda apresentava uma tensão negativa mas o meu sistema de multímetro digital indicava agora apenas -35,9 mV depois de a pilha ter estado desligada do circuito cerca de oito horas.A explicação simples é que a pilha defeituosa tivesse provavelmente um defeito de fabrico, deixando-a com uma capacidade extremamente baixa. Uma vez inserida em conjunto com as outras duas no receptor (o qual permanece sempre com tensão), esta gastou-se rapidamente. Posteriormente, o fluxo de corrente de 3V produzido pelas duas outras pilhas boas acabou por inverter a polaridade da pilha defeituosa. (130108)

Dr. Thomas Scherer(Alemanha)

Energia negativa

Page 85: Sound Home Lights Web Server

OsciloscópiosA NOVA SÉRIE HMO 3000300 MHz | 400 MHz | 500 MHz

ROHDE & SCHWARZ Portugal | Tel. 21 415 57 00 | [email protected]

A nova série de HMO3000 da HAMEG Instruments oferece um excelente desempenho a um preço atractivo.

A funcionalidade MSO permite analisar todos os canais analógi-cos, mais um adicional de 16 canais digitais.

Os seis modelos diferentes estão disponíveis numa largura de banda de 300 MHz a 500 MHz com 2 ou 4 canais.

NOVO!! SÉRIE HMO3000

Largura de banda até 500 MHZ

a qualquer horaTempo real 4 GSa /s, Conversor A/D Flash Baixo Ruído

Memória 8 MPts, Zoom até 200,000:1

MSO: Opção Sinal Misto HO3508 [HO3516]com Canais Lógicos 8 [16]

Sensibilidade Vertical 1 mV/div., Controlo Offset ±0.2…±20 V

Page 86: Sound Home Lights Web Server

O nome e logo Microchip, os logos Microchip, dsPIC, MPLAB e PIC são marcas registadas da Microchip Technology Incorporated nos E.U.A. e outros países. Todas as restantes marcas são propriedade dos respectivos donos. ©2013 Microchip Technology Inc. Todos os direitos reservados. ME1023BPor/08.13

A Microchip oferece suporte para uma grande variedade de protocolos de comunicação com e sem fios, incluindo dispositivos periféricos e soluções integradas com um Microcontrolador (MCU) PIC® ou um Controlador Digital de Sinal (DSC) dsPIC®.

As Soluções da Microchip incluem:

ANTES DE INICIAR O SEU PRÓXIMO PROJECTO COM OU SEM FIOS:1. Descarregue as bibliotecas de software gratuitas2. Escolha uma das ferramentas de desenvolvimento de baixo custo3. Encomende amostras

www.microchip.com/usbwww.microchip.com/ethernetwww.microchip.com/canwww.microchip.com/linwww.microchip.com/wireless

Acrescente Conectividade aos Seus Projectos

USBMCUs USB de 8-, 16- e 32-bit para aplicações básicas e de baixo custo até às mais complexas e sistemas com elevado nível de integração, juntamente com bibliotecas de software grátis, incluindo suporte para dispositivos USB em modos host e On-The-Go.

EthernetMCUs PIC com conectividade Ethernet MAC 10/100 integrada, controladores Ethernet autónomos e chips com endereços MAC EUI - 48™/EUI - 64™.

CANMCUs a 8-, 16- e 32-bit e DSCs a 16-bit com conectividade CAN integrada, controladores CAN autónomos, expansores de E/S CAN e transceivers CAN.

LINPontos de rede LIN Bus Master assim como LIN Bus Slave para MCUs PIC a 8-, 16- e 32-bit e DSCs dsPIC a 16-bit. A ligação de camada física é suportada por transceivers CAN e LIN.

Wi-Fi® Chips e módulos wireless inovadores que suportam uma vasta de gama de dispositivos para ligação à Internet. Módulos transceptores Wi-Fi Embedded IEEE Std 802.11 e stacks TCP/IP gratuitas.

ZigBee®Plataforma certificada ZigBee Compliant (ZCP) para stacks de protocolo ZigBee PRO, ZigBee RF4CE e ZigBee 2006. As soluções da Microchip consistem em soluções transceptoras, famílias MCU PIC18, PIC24 e PIC32 e DSC dsPIC, assim como stacks de protocolo com firmware certificado.

MiWiTM

MiWi e MiWi P2P são stacks gratuitas de protocolo proprietário desenvolvidas pela Microchip para aplicações de redes sem fio de curta distância baseadas na especificação WPAN IEEE 802.15.4™.

www.microchip.com/wireless

Placa de demonstração Wi-Fi G Demo Board (DV102412)