Elektor_340_2013

102
A Melhor Revista de Electrónica Prática do Mundo Amplificador de potência para áudio Q-Watt Elektorcardiograma Android (2) l Ligação RF modular usando código Manchester (1) Placas de extensão Gnublin Curso Arduíno (4) Extensão para placa Linux Elektor (1) l Domina as FPGAs (4) Biblioteca de firmware embebida l Placa controladora Wi-Fi www.elektor-magazine.pt Setembro 2013 magazine

Transcript of Elektor_340_2013

Page 1: Elektor_340_2013

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

Amplificador de potência para áudio Q-Watt

Elektorcardiograma Android (2) l Ligação RF modular usando código

Manchester (1) Placas de extensão Gnublin Curso Arduíno (4) Extensão para placa Linux Elektor (1) l Domina as FPGAs (4)

Biblioteca de firmware embebida l Placa controladora Wi-Fi

www.elektor-magazine.pt

Setembro 2013

magazine

Page 2: Elektor_340_2013

www.elektor-projects.com

Sharing Electronics Projects

Join or Create a Project at www.elektor-labs.com

Elektor.LABS is an online community for people passionate about electronics. Here you can share your projects and partici-pate in those created by others. It’s a place where you can discuss project development and electronics.

Elektor’s team of editors and engineers assist you to bring your projects to a good end. They can help you write an article to be published in Elektor.MAGAZINE or even develop a complete product that you can sell in Elektor.STORE!

Sharing Electronics Projects Sharing Electronics Projects

Join or Create a Project at www.elektor-labs.com

GETELEKTORIZED

elektor labs

Adv Elektor labs 121101 UK.indd 1 05-11-12 14:15

Page 3: Elektor_340_2013

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

Edição 340, Setembro 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

EditorialUma rede ElektorA Elektor está preparada para o futuro e continua a preparar uma série de novida-des de que, estamos certos, os leitores da Elektor Portugal irão gostar bastante. Os nossos sólidos alicerces vão permitir manter o nível de qualidade e a reputação que a equipa alcançou ao longo dos anos por tudo aquilo que tem produzido.Os nossos leitores, visitantes do site e clientes podem continuar a contar com o serviço, a confiança e a experiência. A Elektor mantém a sua posição como um dos portais líderes, plataformas e fóruns para técnicos de electrónica de todo o mundo. Os meios para chegar de formas ainda mais inovadoras aos nossos leitores, assim como a acessibilidade dos nossos serviços, estão a ser constantemente renovados para atender às suas actuais e futuras necessidades.Alguns membros da comunidade Elektor estão connosco há mais de 25 anos, outros apenas há alguns meses. Ao longo do tempo os serviços Elektor tiveram uma grande expansão, reflectindo os pedidos mais populares ou simplesmente impulsionados pela evolução da tecnologia.Entretanto, a indústria electrónica já descobriu o que a Elektor tem estado a cozi-nhar e são cada vez mais os conteúdos que a própria Elektor produz para outras empresas, nomeadamente algumas das maiores marcas de distribuição global de electrónica. Uma rede de quase um milhão de pessoas que têm um gosto especial pela electrónica, espalhadas por 80 países é assim complementada, cada vez mais, por muitos outros milhões de leitores ocasionais.Essa é também a razão porque o nosso novo website, onde se torna possível deixar propostas para projectos, participar, colaborar e acompanhar a evolução do seu ou de qualquer projecto de electrónica se está a tornar cada vez mais importante. O novo serviço Elektor.LABS permite apresentar projectos ainda em desenvolvi-mento, ou produtos testados e experimentados, abrindo um mundo de conheci-mento a toda a comunidade Elektor.Basta ir a www.elektor-projects.comRecordamos também que a Elektor tem agora um site novo, exclusivamente para descarregar a revista em digital e onde se pode fazer pesquisas no arquivo, por palavras-chave, temas, projectos, edição, etc.Para a Elektor Portugal visite o site: www.elektor-magazine.ptE já agora, associe-se a nós no facebook: www.facebook.com/ElektorportugalOnde poderá ficar a par de todas as novidades que tencionamos promover.

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

•Comunidade

Page 4: Elektor_340_2013

mag

azin

e

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

Setembro 2013•Índice No. 340

60 Extensão para placa Linux Elektor (1)

66 Biblioteca de firmware embebida

74 Placa controladora Wi-Fi

82 Domina as FPGAs (4)

Hardware & Software Curso

31 Curso Arduíno (4)

Doméstico

48 7-uP: Relógio com alarme/interruptor temporal (2)

Microcontroladores

98 Placas de extensão Gnublin

Projecto

12 Amplificador de potência para áudio Q-Watt

38 Elektorcardi grama Android (2)

54 Placa protótipo Raspberry Pi

90 Ligação RF modular usando código Manchester (1)

Teste & Medida

22 Medidor LCR de 500 ppm (2)

Page 5: Elektor_340_2013

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 | Setembro 2013 | 5

Page 6: Elektor_340_2013

• Indústria

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

Fontes de alimentação TDK com novos modelos de saída de baixa tensão

A TDK acaba de anunciar a ampliação da sua série de fontes de alimentação TDK-Lambda GWS500 com dois novos modelos de saída de baixa tensão. Ao combinarem a eficiência, densi-dade de potência e características de baixo consumo em standby, estas fontes de 5 e 7,5 V estão especialmente indicadas para integração em sistemas de rack 1U.Em muitas aplicações industriais tal como no teste automático de equipamentos, instalações de sistemas de televisão e comu-nicações, instrumentação e teste e medida, estes novos mode-los destacam-se por usarem fontes de alimentação de 500 watts com transformação AC-DC e arrefecimento a ventoinha. Todos os modelos têm apenas 105 por 218 mm e uma altura de apenas 41 mm o que significa uma densidade de até 8,7 watts por pole-gada cúbica.Complementando os modelos existentes neste série de 12, 24, 36 e 48 V, os novos modelos de 5 e 7,5 V oferecem saídas de 80 e 67 A respectivamente. É também possível usar potenciómetros atenu-adores ou fontes de alimentação externas para ajustar as saídas.Cada modelo nesta série aceita alimentação de sector entre 85 até 260 Vac com um factor de correcção de potência que assegura a conformidade com as normas EN61000-3-2, tendo protecção con-tra sobretensão, aquecimento excessivo e picos de corrente em todos os modelos. Além disso estas fontes de alimentação respei-tam todas as normas e directivas mais recentes.www.tdk-components.de/en/home/index.php

Circuitos Impressos

Novo serviço online promove a colaboração em projectos de código aberto

A RS Components anunciou o lançamento do seu “Centro de Desenho de Código Aberto”, um guia completo e gratuito para projectos de electró-nica baseados em código open-source disponível agora como expansão do serviço designspark.com.

Este centro de projectos reúne num único ponto de referência de fácil acesso todos os elementos ine-rentes ao desen-volvimento base-ado em código

aberto e proporciona informação fiável sobre questões como as regras de licenças de código aberto ou assessoria sobre hardware e software. O objectivo é o de auxiliar quem trabalha em projectos baseados em open source, ajudar e fomentar a participação activa neste tipo de iniciativas.Este centro de suporte do designspark foi desenvolvido em colaboração com Andrew Back, especialista e fundador do Open Source Hardware User Group (OSHUG), criado no Reino Unido em 2010.“A crescente popularidade do hardware de código aberto no último ano tem sido evidente com o lançamento de novas versões das placas de desenvolvimento de baixo custo, como Arduino e BeagleBone, e o lança-mento da Raspberry Pi que gerou uma procura extraordinária em todo mundo”, explica David Tarrant, Head of Community Development da RS Components.www.rs-components.comwww.designspark.com

Novos osciloscópios digitais Iso-Tech da RS ComponentsNovidade na oferta de marca própria da RS Componentes, os novos osciloscópios digi-tais compactos de dois canais, IDS-6000A-U da Iso-Tech, permitem realizar medições de forma rápida e intuitiva em diferentes âmbi-tos de formação, assistência técnica, manu-tenção e aplicações de produção.Com larguras de banda que vão desde os 70 aos 150 MHz, a série IDS6000A-U dispõe de um ecrã LCD TFT a cores de 5,7 polegadas para

melhorar e simplificar as medições e melhorar a experiência do utilizador. Com um desenho compacto e ergonómico e um peso de apenas 2,5 kg, a série IDS6000A-U dispõe de modos de amostragem duplos, registo de 4000 pon-tos, velocidade de amostragem em tempo real de 250 MSa/s, uma velocidade de amostragem em tempo equivalente de 25 GSa/s que oferece ao utilizador flexibilidade de processamento de sinais. Diversos modos de aquisição e um máximo de 27 funções de medidas automáti-

cas permitem medir com exactidão as propriedades exactas das diferentes formas de onda.A série IDS-6000A-U proporciona um controlo remoto completo ou captura

de dados através de um host USB e das interfaces do dispositivo, sendo compa-

tível PictBridge para impressão através de USB. Esta gama de osciloscópios está desenhada para optimizar o rendimento entre o registo e a velocidade de amostragem. A tecnologia MemoryPrime permite obter 2M de pontos de dados de forma de onda, optimizando o equi-líbrio do rendimento entre a memória e a velo-cidade de amostragem. Para tirar o máximo partido desta tecnologia, utilizam-se as funcio-nalidades de página horizontal, ou “Horizontal Page Skip” e ajuste de tempo “Set Time”.Através da integração de uma estrutura de menus em árvores, a série IDS-6000A-U per-mite a sua utilização em aplicações tal como laboratórios e centros de formação, até teste de produtos e controlo de qualidade, serviços técnicos e desenvolvimento.http://www.rs-components.com/index.html

Page 7: Elektor_340_2013

notícias

Farnell element14 apresenta expansão PiRack para Raspberry Pi

A PiRack é uma placa de expansão que permite ligar múltiplas placas de Entradas/Saídas a uma Raspberry Pi – incluindo as plataformas Embedded Pi e PiFace Digital recentemente lançadas.

A PiRack permite ligar até quatro placas de expansão mas pode também ser enca-deada para criar expansões ainda maio-res. Isso torna-a ideal para aulas e permite uma enorme flexibilidade em projectos de desenvolvimento, permitindo nomeada-mente ligar o popular módulo da câmara Pi Camera em paralelo com outras pla-cas de expansão que controlam motores e sensores.Esta é assim seguramente uma das expan-sões mais prometedoras para a plataforma Raspberry Pi, cada vez mais adoptada em todo o tipo de projectos de electrónica. Este projecto PiRack foi patrocinado directa-mente pela element14 em colaboração com o Dr. Andrew Robinson, o criador da PiFace Digital. A capacidade da PiRack de ligar até quatro placas de expansão ao porto GPIO

da Raspberry Pi vem abrir caminho tam-bém a toda uma nova série de acessórios que estão previstos para este ano, sendo de destacar o baixo custo e enorme flexi-bilidade desta solução. A possibilidade de trabalhar com múltiplas placas irá permi-tir, por exemplo, aos professores expan-dir enormemente o campo das experiên-cias com esta plataforma, permitindo que os alunos possam progredir das experiên-cias simples para projectos avançados e de nível intermédio, com aplicações ao sabor apenas da sua imaginação.A PiRack pode ser usada com a grande maioria das placas de expansão de E/S compatíveis com a Raspberry Pi, sendo possível aos utilizadores seleccionarem as placas que querem interligar, podendo a própria PiRack ser alimentada separada-mente com a correcta selecção de jumpers, evitando assim sobrecarregar o consumo da Raspberry Pi.www.element14.com

Element14 disponibiliza novos recursos online para Raspberry Pi

Reunindo milhares de projectos dife-rentes existentes para a Raspberry Pi, o novo centro de recursos online Raspberry Pi Projects agora criado pela element14 permite consultar o já vasto repositório de criações existente. Este novo serviço inclui tutoriais passo-a-passo simples de acompanhar para quem está a criar os primeiros projectos em Raspberry Pi, sendo um recurso ideal para quem está a começar a aprender o potencial desta plataforma.Para os utilizadores mais avançados e profissionais, a nova “biblioteca online” Raspberry Pi Projects ajuda a acelerar o desenvolvimento de projectos que se baseiam em coisas que já foram feitas e a melhorar ainda mais os projectos existentes.Entre os projectos já disponibilizados neste repositório estão os guias passo-a-passo de como transformar uma Raspberry Pi num computador laptop funcional e uma introdução de como controlar uma Pi com um controlador de uma Xbox 360.Para utilizadores com mais experiência, existe um tutorial ilustrado que ajuda a criar um medidor de fluxo para medir o consumo de água e um projecto de sof-tware para uma lanterna baseada em LED que responde ao som e pode ser contro-lada através da web. http://www.element14.com/community/community/raspberrypi_projects

Circuitos Impressos

Page 8: Elektor_340_2013

• Indústria

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

Durante a NIWeek 2013National Instruments anuncia LabVIEW 2013

A NIWeek 2013 (5 a 8 de Agosto) foi um evento que superou todas as expectativas para os organizadores e para quem parti-cipou. Com uma audiência recorde de 4000 engenheiros, cientistas, professores, estu-dantes e simples entusiastas da tecnologia, a NIWeek 2013 permitiu ficar a conhecer alguns dos produtos mais espectaculares de sempre apresentados pela marca.O Austin Convention Center foi pequeno para receber a NIWeek 2013, a 19ª edição desta conferência anual sobre desenho de sistemas baseados nas soluções de interface gráfico da National Instruments. Não só foi a maior edição de sempre da NIWeek como também foi uma das que maior audiência reuniu nas emissões em live streaming durante as inter-venções keynote, alcançando muitos milhares de pessoas mais por todo o globo.Ray Almgren, responsável de marketing da NI e Leland Melvin, responsável de educação e astronauta da NASA foram alguns dos orado-res em destaque, tendo feito a apresentação de novos produtos, incluindo o controlador NI cRIO-9068, tendo sido destacado já o caso de estudo da LocalGrid, uma iniciativa que está a revolucionar a aplicação de redes de energia inteligentes no Canadá.Outro destaque foi o chassis NI cDAQ-9188XT que a equipa do projecto North American Eagle está a usar para recolha de dados em condições ambientais extremas, na sua ten-tativa de quebrar mais uma vez o recorde de velocidade em terra.Por outro lado, o sistema NI myRIO foi demons-trado pela empresa Quanser a controlar

o voo de um quadcóptero telecomandado que voou pelo palco.Finalmente o novo LabVIEW 2013 foi apresen-tado em contexto pela equipa da Google Lunar XPrize que está a desenvolver um veículo de exploração lunar para ser enviado daqui a dois anos.Tudo formas práticas de explicar os princi-pais benefícios dos novos sistemas e soluções da National Instruments, ajudando a inspirar novos utilizadores.

Os lançamentosEm destaque, naturalmente, esteve o lança-mento da versão 2013 do ambiente de dese-nho e desenvolvimento LabVIEW, agora com capacidade melhorada de escrita de código e novos interfaces para sistemas operativos para tablets.O pacote de software inclui uma grande quan-tidade de melhorias em termos de produtivi-dade, incluindo documentação e ferramentas de comentário juntamente com melhores fer-ramentas de depuração.O Data Dashboard 2.1 permite agora um interface com dispositivos a correr sistema operativo Apple iOS ou Google Android para controlo e supervisão remota, enquanto o VI Package Manager passa a estar incluído e permite o acesso a apps de outros fabrican-tes e a add-ons de desenvolvimento directa-mente nas ferramentas labVIEW.A janela de acesso directo à LabVIEW Tools Network, a comunidade de add-ons para Lab-VIEW que ultrapassou recentemente mais de 2000 soluções, passou a estar directamente acessível no ambiente da aplicação.

O controlador industrial associado Compac-tRIO sofreu uma importante renovação, pas-sando agora a usar um processador ARM de duplo núcleo como parte do sistema hardware “system on a chip” ZynQ da Xilinx, totalmente programável usando os mais recentes siste-mas lógicos 7-series. O sistema passa tam-bém a correr sistema operativo Linux em substituição da versão licenciada do RTOS VxWorks da Wind River.Acima de tudo, o labVIEW 2013 acrescenta mais de 100 novas funcionalidades e melho-rias no seu editor, directamente resultante das solicitações dos utilizadores.Os recursos online de suporte foram também expandidos com muitos mais exemplos de aplicação e tutoriais que cada um pode acom-panhar ao seu próprio ritmo, ideal para uti-lizadores iniciados no sistema. Novos exem-plos de programação FPGA e programação orientada por objectos são apenas alguns dos aspectos reforçados.Tak como explica Ray Almgren da National Instruments, “os técnicos de electrónica e os cientistas vão continuar a mudar o nosso mundo e estamos a cumprir a nossa pro-messa de fornecer-lhes todas as ferramentas de que estes precisam para o fazer”.Pelo seu lado, Jack Dunaway, fundador da Wirebird Labs acrescenta que “a experiência dos serviços do LabVIEW 2013 justifica só por si a adopção da nova versão. Posso contar

com todas as ferramentas que já criei com o LabVIEW e os melhoramentos intro-duzidos tornam a criação de sistemas complexos baseados sobre a Web mais intuitiva que nunca. As capacidades da nova API permitem-me acrescentar um valor significativo na Wirebird Labs. Há muitos anos que o LabVIEW tem vindo a apresentar melhorias significativas consecutivas. Mas este ano, acho que as

mudanças são revolucionárias”.www.ni.com

O controlador NI cRIO-9068 e o novo LabVIEW 2013 foram os destaques nesta edição da NIWeek 2013

O Austin Convention Center foi pequeno para receber a NIWeek 2013, a 19ª edição desta conferência anual e a maior de sempre

Page 9: Elektor_340_2013

notícias

Os painéis solares não têm que ser todos em pretoCobrir um telhado ou uma parede com os tradicionais painéis solares altera comple-tamente a estética de um edifício - e nem sempre para melhor. Arquitectos e constru-tores reclamavam por uma solução para as actuais duas escolhas possíveis de cores para os painéis solares: preto e cinzento grafite. Agora, investigadores do Instituto Fraunhofer de Óptica Aplicada e Engenharia de Precisão (IOF) em Jena (Alemanha) criaram um novo projecto que tem como objectivo criar dese-nhos de painéis solares de diferentes cores e formatos que ofereçam maior liberdade estética.A equipa está actualmente a trabalhar nos aspectos fundamentais de como tornar as células solares coloridas, directamente a par-tir de novas estruturas de silício finas como papel, as quais seriam particularmente ade-quadas a aplicações nas fachadas e telhados de edifícios particulares. A ideia básica é a de variar a espessura ou o índice refractivo da camada de óxido conductivo transparente

(TCO) na superfície do silício, melhorando a captura de fotões e o contacto eléctrico. Os módulos solares baseados nestas camadas e as células solares orgânicas flexíveis prome-tem também oferecer uma maior flexibilidade no formato destas estruturas. Até agora, a equipa de investigadores con-seguiu combinar as estruturas de silício com processos directamente importados de estru-turas fotovoltaicas de películas extremamente finas. Estão também a investigar a utilização de revestimentos com materiais inovado-res. O óxido de índio estanho é o material mais comum utilizado actualmente, sendo no entanto bastante caro. O laboratório IOF do Instituto Fraunfhofer está a trabalhar em for-mas de utilizar óxido de zinco que é bastante mais barato, combinando-o com alumínio.A equipa do IOF planeia utilizar soldaduras ópticas baseadas em laser para associar as células individuais entre si, uma vez que esse processo tem uma precisão de um micróme-tro e não danifica os materiais circundantes.

Estão também a desenvolver um processo de jacto de tinta para ligação da camada TCO com as camadas de silício. Desta forma, a produção destes painéis solares de nova gera-ção promete também tornar-se mais rápida e irá permitir maior liberdade no seu desenho.www.iof.fraunhofer.de/en.htmlwww.efficientdesign.de

Page 10: Elektor_340_2013

Um novo condensador eficiente acima de 200 graus centígradosAVX, Vishay, Kemet, são algumas das marcas que anunciam há algum tempo condensadores capazes de funcionar até aos 200 graus centí-grados mas que usam materiais que, atingindo estas temperaturas extremas já perderam mais de 85% da sua capacitância. No entanto, o tra-balho recente dos cientistas do National Physi-cal Laboratory (NPL) no Reino Unido permitiu agora produzir condensadores cerâmicos livres de chumbo para ambientes com temperaturas muito elevadas, até 200 graus ou mais...O calor é produzido sempre que um nível ele-vado de carga eléctrica atravessa o condensa-dor. Os sistemas de arrefecimento são por vezes essenciais para assegurar a operação de con-densadores convencionais no âmbito de espe-cificações desejado, tendo no entanto o incon-veniente de acrescentarem peso e de reduzirem drasticamente a eficiência e a fiabilidade dos sistemas dependentes do arrefecimento.A investigação que permitiu chegar a este novo condensador cerâmico de alta temperatura foi financiada pelo programa Low Carbon Vehicles do NPL e pelo National Measurement Office do

Reino Unido, depois de se ter identificado que este tipo de componente seria um elemento crucial para tornar os veículos eléctricos e híbridos mais eficientes e fiáveis.Este novo condensador cerâmico emprega a nova tecnologia HITECA de materiais dieléc-tricos de elevada densidade de carga, a qual assegura características de condensador está-veis a temperaturas de 200°C e superiores.Para além de poder ser um componente essen-cial no desenho de sistemas de controlo de motores eléctricos, os condensadores HITECA podem também ser usados com vantagem em ambientes de temperatura elevada, tal como

na indústria aeroespacial e nos sistemas de produção de energia. É também uma tecno-logia adequada para aplicações de armazena-mento de energia de alta potência.O trabalho desenvolvido pelo equipa do NPL foi liderado pela investigadora portuguesa Tatiana Correia, formada em física pela Universidade do Porto, com mestrado em Ciência e Enge-nharia de Materiais da Universidade de Aveiro e um doutoramento em física na Cranfield Uni-versity. Actual cientista investigadora em Mate-riais Functionais do NPL, Tatiana Correia afirma que “a electrónica industrial tem que ser capaz de assegurar níveis de desempenho eficientes nos ambientes mais extremos. A capacidade dos condensadores HITECA de funcionarem a temperaturas mais elevadas dos que os con-densadores existentes vem ajudar a tornar os sistemas electrónicos mais robustos e a remo-ver barreiras para tecnologias como a dos veí-culos eléctricos que delas dependem”.O projecto contou ainda com a colaboração de outras entidades académicas e empresas.www.npl.co.uk

Microchip apresenta plataforma de desenvolvimento para aplicações de iluminação em redes DMX ou DALIA Microchip Technology acaba de lançar a sua nova Lighting Communications Development Platform, uma solução completa para o desen-volvimento de aplicações na indústria de ilu-minação com base numa integração avançada de periféricos com os seus microcontroladores PIC. Esta solução, oferece todos os compo-nentes que se podem tornar necessários para criar dispositivos que funcionam integra-dos numa rede de iluminação com base nas normas DMX512A ou DALI – dependendo se forem aplicações mais orientadas a ambien-tes profissionais e de entretenimento ou ins-talações comerciais e residenciais. Esta solu-

ção completa permite desenhar sistemas de controlo de iluminação inteligentes com base nos microcontroladores PIC da Microchip a 8, 16 e 32-bit, em conjunto com interfaces ana-lógicos ou sem fios e com fácil integração de soluções de controlo de ecrãs tácteis, painéis de hardware dedicados e respectivo desenho de interfaces com o utilizador.O Starter Kit desta nova plataforma inclui duas placas principais, dois interfaces de adaptação para ligações DALI ou DMX512A, uma placa de protótipo e todos os cabos e fonte de alimen-tação necessários. Segundo a Microchip con-firma, esta solução foi desenhada para tornar

mais fácil desenhar novos sistemas de controlo de iluminação. A plataforma utiliza um único MCU PIC a 8-bit, de baixo custo, para a parte de interface com o utilizador, controlo de sis-temas LED e comunicações.O desenvolvimento de software baseia-se nas bibliotecas que a própria Microchip fornece gra-tuitamente para aplicações DALI e DMX512A, escritas em C e que podem ser portadas para qualquer MCU PIC. Além disso, o kit inclui um conjunto de LED Cree XLamp MC-E Color de alta potência, juntamente com um colimador óptico LEDnLIGHT LLC19N com suporte da Gag-gione para mistura de cor de alta qualidade e controlo preciso do feixe gerado. Estão ainda incluídos conectores padrão para redes de ilu-minação e todos os dispositivos de isolamento.Uma plataforma que a Microchip acredita irá ajudar a reduzir significativamente os custos de desenvolvimento de novas soluções de ilu-minação e acelerar o seu lançamento novo mercado. Esta nova solução já está disponível no mercado.http://www.microchip.com/get/4NG7

• Indústria

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

Page 11: Elektor_340_2013
Page 12: Elektor_340_2013

•Projecto

12 | Setembro 2013 | www.elektor-magazine.pt www.elektor-magazine.pt | Setembro 2013 | 13

A Elektor já tem um grande historial de amplifi-cadores de áudio de potência. Alguns exemplos das nossas “relíquias douradas” são os amplifi-cadores Edwin, Elkin e Crescendo, dos anos 70, que muitos entusiastas do áudio construíram. Nos anos mais recentes as coisas têm sido mais calmas nesta área, o que não indica falta de inte-resse. É exactamente o oposto – muitas pessoas

estão a redescobrir o prazer de soldar circuitos e montar amplificadores de excelência com uma qualidade de som excepcional.Como é quase impossível inventar algo origi-nal no universo dos amplificadores de áudio de potência construídos com componentes discretos (excepto ligar em paralelo algumas dúzias de ampops NE5532…), foi decidido ir pelo caminho

Ton Giesberts(Elektor)

Boas notícias para todos os entusiastas do áudio: orgulhamo-nos de apresentar mais outro circuito totalmente analógico, desenvolvido totalmente de raiz. Apesar do projecto simples deste amplificador de áudio de potência, com apenas um par de transístores no andar de saída, o Q-Watt consegue fornecer mais de 200 W sobre 4 Ω, com qualidade e com uma distorção excepcionalmente reduzida, devido à utilização de um circuito integrado controlador de áudio especial.

Medições de Desempenho do Q-Watt(Medições efectuadas com uma fonte de alimentação que consiste num transformador de potência de 500 VA com dois secundários de 40 V (tipo 0500P1-2-040 da Nuvotem) e quatro condensadores externos de 10000 µF/100 V)

• Sensibilidade de entrada: 0,88 V (137 W / 8 Ω, THD+N = 0,1%) 0,91 V (145 W / 8 Ω, THD+N = 1%)• Impedância de entrada: 15 kΩ• Potência de saída contínua: 137 W sobre 8 Ω (THD+N = 0,1%) 145 W sobre 8 Ω (THD+N = 1%) 220 W sobre 4 Ω (THD+N = 0,1%) 233 W sobre 4 Ω (THD+N = 1%)• Potência musical de pico: 218 W sobre 8 Ω (THD+N = 10%) (Tensão de alimentação DC ±56,8 V) 175 W (8 Ω, THD + N = 1%) 165 W (8 Ω, THD + N = 0,1%) 395 W (4 Ω, THD + N = 10%) 316 W (4 Ω, THD + N = 1%) 299 W (4 Ω, THD + N = 0,1%)• Largura de banda de potência: 2,1 Hz a 125 kHz (50 W / 8 Ω)• Taxa de subida: 26,7 V/µs• Tempo de subida: 2,4 µs• Relação sinal/ruído: > 94 dB (linear, B = 22 Hz a 22 kHz) (referência 1 W/8 Ω) > 97 dBA• Distorção harmonica + ruído: 0,0033% (1 kHz, 1 W / 8 Ω) (B = 80 kHz) 0,0006% (1 kHz, 50 W / 8 Ω)

Amplificador de potência para áudio Q-WattMuita potência com baixa distorção

Page 13: Elektor_340_2013

Amplificador de Áudio de Potência Q-Watt

12 | Setembro 2013 | www.elektor-magazine.pt www.elektor-magazine.pt | Setembro 2013 | 13

Medições de Desempenho do Q-Watt

0,006% (20 kHz, 50 W / 8 Ω) 0,0047% (1 kHz, 1 W / 4 Ω) 0,0009% (1 kHz, 100 W / 4 Ω) 0,009% (20 kHz, 100 W / 4 Ω)• Distorção de intermodulação: 0,002% (1 W / 8 Ω) (50 Hz : 7 kHz = 4 : 1) 0,0009% (50 W / 8 Ω) 0,003% (1 W / 4 Ω) 0,0026% (100 W / 4 Ω)• Distorção de IM dinâmica: 0,0033% (1 W / 8 Ω) ((Onda rectangular de 3,15 kHz) + 0,0022% (50 W / 8 Ω) Onda sinusoidal de 15 kHz:) 0,0045% (1 W / 4 Ω) 0,0027% (100 W / 4 Ω)• Factor de amortecimento: 560 (1 kHz / 8 Ω) 311 (20 kHz / 8 Ω)

• Eficiência: 70,6% (8 Ω, THD+N = 0,1%) (alimentação DC) 72,5% (8 Ω, THD+N = 1%) 68,5% (4 Ω, THD+N = 0,1%) 70,5% (4 Ω, THD+N = 1%)• Protecção DC: +0,55 V / -0,86 V• Tensão DC de desvio de saída: 0,2 mV (máximo 0,6 mV)• Atraso de arranque: 6 s

Page 14: Elektor_340_2013

•Projecto

14 | Setembro 2013 | www.elektor-magazine.pt www.elektor-magazine.pt | Setembro 2013 | 15

Origem Tudo começou com o Filtro de Medição para Amplificadores classe D que foi publicado na edição de Julho/Agosto de 2012 [1]. Este filtro foi desenvolvido no laboratório da Elektor para que fosse possível medir as tensões de saída

semi-discreto. Isto tem como vantagem a faci-lidade de construção, e tem como resultado um projecto muito compacto. Escolhendo cuidado-samente os componentes, com esta abordagem é possível criar um amplificador de potência com especificações e qualidade de som excepcionais.

T1

BD139

T4

MG6330-R

T5

MG9410-R

T3

MJE15033

P1

470R

R10

0R2

R7

220R

R6

1k2

5

4

2

10 313

1415 6

IC1

LME49811

T2

MJE15032

R9

100R

R8

100R

L1

C4

100n

C6

100n

C7

100n

100V

C8

4700u

R415k

R3

390R

R2

15k

R5

8k2

R1390R

C2

1n

+V

-V

R1715k

R1815k

0W5

D1

15V

+V

-V

0W5

D2

15V

1

2

K1

RE1B

RE1A

LS1

C1

4u7

+15V

100V

C12

10u

100V

C13

10u

3

26

8

1

74

IC2

OPA177

C10

2u2

R14220k

R16

10M

R1510M

C11

33n

R123R9

R11

0R2

R29

1k

+V

T10

D5

1N4148

R28

1k2

R26

820k

R25

820k

T9

R27

68k

100V

C16

10u

5 x 2N5550

16V

C15

220u

R23

15k

T7

T8

R24

1M

RE1=RT314048

+15V

-15V

R30

15k

D6

D3K7

D4

250V

C14

1u

0

R19

27k

R20

1k2

1N4004

1

2 4

5

6IC3

4N25

40V

40V

56V

56V

T6

T6 ... T10 =

R21

470k

R22

15k

C5

47n

R13

3R9

C3

5-57p

12

K2

12

K3

12

K5

12

K4

12

K6

LS+

LS-

100V

C9

4700u

2 x

110656 - 11

Figura 1. Esquemático do amplificador de áudio de potência Q-Watt da Elektor. Apesar da simplicidade do projecto, as especificações deste amplificador são verdadeiramente excelentes.

Page 15: Elektor_340_2013

Amplificador de Áudio de Potência Q-Watt

14 | Setembro 2013 | www.elektor-magazine.pt www.elektor-magazine.pt | Setembro 2013 | 15

a máxima amplitude na saída. Isto permite confi-gurar o amplificador para um funcionamento em classe AB com uma região em classe A relativa-mente grande. O ganho DC destes transístores de potência é relativamente linear até alguns A (ligeiramente menos com a versão PNP), o que se traduz num bom ponto de partida para um andar de saída linear. Aplicam-se especificações semelhantes aos transístores de controlo (T2 e T3). Foram seleccionados os MJE15032 (NPN) e MJE15033 (PNP), que são adequados para tensões até 250 V, sendo a característica de ganho DC relativamente linear. Os transístores de controlo e de potência têm frequências de transição rela-tivamente elevadas: 30 MHz para os dispositivos MJE, 60 MHz para o MG6330-R e 35 MHz para o MG9410-R. Um simples BD139 encarrega-se da corrente do ponto de funcionamento em repouso.

Versão de áudioQuando um dos editores estrangeiros viu o pro-jecto, questionou-se se este podia ser adaptado para ser utilizado como um amplificador “normal”. Isto iria atrair uma maior audiência do que um amplificador de medida para tensões de saída ele-vadas. A resposta foi que era possível, e não eram necessárias muitas alterações ao projecto inicial. Tinham de ser ajustados os valores de alguns com-ponentes, e a tensão de alimentação teria de ser reduzida. O resultado final é o diagrama esquemá-tico apresentado na Figura 1. Com uma tensão de alimentação mais baixa (±56 V, fornecidos por um transformador com dois enrolamentos secundários de 40 V AC), o amplificador de potência consegue fornecer bastante potência com apenas um par de transístores de saída complementares – mais de 300 W de potência musical sobre 4 Ω.Em conjunto com o LME49811 (IC1), o amplifica-dor de potência consiste em quatro transístores (T2-T5), uma malha de controlo da corrente no ponto de funcionamento em repouso com um transístor (T1), e outros componentes discretos.A malha de realimentação negativa R4/R3 foi dimensionada para fornecer uma sensibilidade de entrada de aproximadamente 1 Vrms para uma amplitude máxima de saída de ±55 V, com uma tensão de alimentação de ±60 V. Esta tensão de entrada pode facilmente ser fornecida por qual-quer pré-amplificador moderno. Os valores das resistências foram escolhidos para assegurar que a dissipação de potência de R4 permaneça ime-diatamente abaixo 0,25 W à máxima potência de saída. Os valores das resistências R1 e R2 são

de amplificadores de classe D até 70 Vrms. Con-tudo, este filtro nunca foi testado com estas ten-sões devido à falta de amplificadores de potência adequados. Quando há um problema, podemos confiar sempre nos projectistas da Elektor para encontrar uma solução, pelo que eles começa-ram a projectar um amplificador de alta tensão com 23 transístores de alta tensão (MJE340, MJE350, MPSA42 e MPSA92), que se pretendia que funcionasse com uma alimentação simétrica de ±110 V. O projecto revelou-se extremamente complicado, e as coisas descontrolaram-se um pouco. Embora tivesse sido construída uma placa de circuito impresso para um protótipo inicial, perguntou-se se valia a pena despender tanto esforço apenas para testar um filtro.As especificações do projecto para o amplifica-dor eram verdadeiramente impressionantes. Este tinha de fornecer um sinal de saída de 70 Vrms até 20 kHz, com uma distorção extremamente reduzida. A impedância mínima do filtro de medi-ção é de 1 kΩ, o que resulta numa especificação de 100 mA (de preferência até mais) para a cor-rente de pico de saída.De acordo com isto decidiu-se utilizar uma alter-nativa mais simples, tal como um circuito inte-grado que conseguisse fornecer uma tensão de saída dessa magnitude e com uma potência sufi-ciente. A pesquisa revelou o LME49811 da Texas Instruments. O título da folha de características, “Série de Amplificadores de Áudio de Potência – Andar de Saída de um Amplificador de Potên-cia de Alta-fidelidade, de 200 V, com Desliga-mento”, pareceu promissor. As especificações eram excelentes, mas não era claro se as figuras de desempenho medidas foram obtidas com ou sem o andar de potência externo. No entanto, pareceu valer a pena desenvolver um amplifica-dor baseado neste circuito integrado.

Escolher os transístores correctosO passo seguinte foi seleccionar os transístores de potência (T4 e T5) para o amplificador de potência. Uma das características principais dos transístores de potência utilizados em amplifi-cadores de áudio é a grande área de funciona-mento seguro (SOA). Existem uns dispositivos muito interessantes na Semelab: o MG6330-R (NPN) e o seu complementar MG9410-R. Estes dispositivos conseguem suportar uma corrente de colector de mais de 600 mA, com uma ten-são colector-emissor de 200 V. Esta condição ocorre quando o amplificador, sem carga, fornece

Page 16: Elektor_340_2013

•Projecto

16 | Setembro 2013 | www.elektor-magazine.pt www.elektor-magazine.pt | Setembro 2013 | 17

entrada inversora, que é largamente dependente do valor de R3 (apenas 390 Ω). O tempo de res-posta é de algumas centenas de ms. Foi esco-lhido um OPA177 para o amplificador de controlo devido às suas especificações DC (corrente de polarização máxima de 1,8 nA, tensão de desvio máxima de 0,6 µV). A tensão de desvio teórica máxima resultante na saída do amplificador de potência é de 0,6 mV, que é desprezável para os altifalantes utilizados. A tensão de desvio de saída do protótipo foi de apenas 0,2 mV.O ampop pertencente ao circuito de correcção DC tem as suas próprias tensões de alimentação de ±15 V, produzidas a partir dos barramentos de alimentação principais com a ajuda de alguns díodos Zener e resistências (R17, R18, D1 e D2). Os valores de R17 e de R18 têm de ser ajustados se for utilizada uma fonte de alimentação com valores mais baixos. Nesta ligação tem de se ter em conta a corrente adicional de 1,5 mA retirada do barramento de +15 V pelo pino 2 de IC1.É incluída uma rede de Zobel (R13-C5) na saída do amplificador. Esta assegura a estabilidade do amplificador com cargas indutivas, ou sem carga. A bobina L1 fornece uma protecção adi-cional contra cargas capacitivas, e a resistên-cia R12 atenua quaisquer oscilações ou tensões excessivas. Na placa de circuito impresso, R12 é montada no interior de L1 para poupar espaço. A placa de circuito impresso também está equi-pada com dois grandes condensadores (4700 µF cada) com a função de reservatório, tendo estes

iguais aos das resistências R3 e R4, para man-ter o melhor factor de rejeição em modo comum possível na entrada do LME49811. A impedância de entrada resultante é de aproximadamente 15 kΩ. A largura de banda do sinal de entrada está limitada na frequência de corte inferior pelo condensador C1 (com uma frequência teórica de 2,2 Hz) e na frequência de corte superior por C2. Para além de eliminar qualquer ruído de HF que esteja presente, isto limita a taxa de subida para prevenir que o amplificador tenha problemas com sinais de entrada demasiado abruptos. É apenas necessário um condensador (C3) para a compen-sação de frequência do circuito integrado. Para facilitar as experiências dos utilizadores, foi uti-lizado um condensador variável com dieléctrico de PTFE (Teflon) para este propósito (o Teflon é uma excelente escolha para circuitos de áudio). A placa de circuito impresso também é adequada para condensadores de mica prateada com um passo de 5,9 mm. Durante os testes, os melhores resultados de medição foram obtidos regulando o condensador para um terço do valor máximo (aproximadamente 18 pF).A malha de realimentação construída em torno de IC2 estabiliza a tensão de saída DC do amplifica-dor. Esta compara a tensão de saída com o valor de referência (terra) e corrige-a injectando uma corrente muita baixa na entrada não inversora do LME49811 (pino 4). A entrada não inversora é utilizada para esta correcção, porque a impe-dância neste ponto é mais elevada do que a da

Linhas de alimentaçãoNos amplificadores de potência ocorrem picos de corrente de amplitude muito elevada. Para filtrar a tensão de alimentação, são montados dois condensadores com uma baixa ESR junto aos transístores de saída, na placa de circuito impresso, para além dos condensadores externos da fonte de alimentação.Num amplificador de áudio é essencial que as linhas de alimentação para e na placa de circuito impresso não causem interferências electromagnéticas, que podem aumentar a distorção ao induzir correntes na malha de realimentação negativa, e em outras partes do amplificador. Uma forma de suprimir este efeito indesejável é colocar as linhas de alimentação o mais juntas possível e desacoplá-las o mais perto possível do andar de saída. Devido à configuração em classe AB deste amplificador, só há circulação de correntes unidireccionais nas linhas de alimentação da placa de circuito impresso. Juntar o mais possível as pistas das linhas de alimentação positiva e negativa, faz com que o campo magnético resultante seja quase sinusoidal, causando menos distorção. Com uma placa de dupla face, estas duas pistas podem ser colocadas em lados opostos, alinhadas exactamente uma com a outra.Estas considerações de projecto são muito importantes para amplificadores de potência com figuras de distorção muito reduzidas. Fazer a ligação de massa em apenas um ponto também é muito importante para este aspecto. Aqui o ponto de massa está localizado perto de C5. As linhas de massa da entrada, da realimentação negativa, da rede de Zobel, da saída para o altifalante, e da fonte de alimentação juntam-se todas neste ponto.A placa de circuito impresso foi especialmente desenhada para ser utilizada como um amplificador mono. Para um amplificador estéreo pode simplesmente construir dois destes módulos e montá-los numa caixa juntamente com a fonte de alimentação. Preferencialmente deve utilizar duas fontes de alimentação separadas (uma para cada canal).

Page 17: Elektor_340_2013

Amplificador de Áudio de Potência Q-Watt

16 | Setembro 2013 | www.elektor-magazine.pt www.elektor-magazine.pt | Setembro 2013 | 17

almente indispensável em qualquer amplificador de áudio de potência.Depois de ser ligado, o amplificador necessita de alguns segundos para que a tensão DC presente na saída estabilize. Como habitualmente, o altifa-lante é ligado à saída através de um relé. Este relé pode ser ligado quando estiver presente a tensão de alimentação do amplificador, e quando não existir uma tensão DC na saída do amplificador. Neste projecto, é apenas monitorizada a tensão de alimentação positiva, utilizando-a para alimen-tar o circuito de protecção construído em torno dos transístores T6-T10. Se não estiver presente nenhuma tensão de alimentação, é simplesmente impossível ligar o relé. A protecção DC é fornecida por um par de transístores e por um filtro passa--baixo (R23/C15) com uma constante de tempo de 3,3 s. Pode parecer muito tempo, mas o tempo necessário para que T7 e T8 comecem a conduzir e descarreguem C16 diminui com a diminuição da tensão DC presente na saída. Se estiver presente um desvio de tensão DC positivo maior do que 0,55 V na saída, T8 vai conduzir e faz desligar o relé através dos transístores T9/T10. O transís-tor T7 responde de forma semelhante se o desvio de tensão DC for negativo e menor que -0,85 V.Mais, ambas as tensões dos secundários do trans-formador são monitorizadas para que o relé possa ser desligado imediatamente quando o trans-formador de potência for desligado, ou quando um fusível actua. Para evitar anéis de massa, as tensões dos secundários do transformador são

uma baixa resistência série equivalente (ESR). Este circuito também necessita de uma fonte de alimentação externa, de um rectificador em ponte, e quatro condensadores para a fonte de alimentação com 10000 µF/100 V, cada.Foi escolhido um transformador com dois enro-lamentos secundários de 40 V. Para o protótipo construído no laboratório da Elektor foi utilizado um transformador de 500 W de baixo custo, tendo como resultado a grande diminuição da tensão de saída com cargas elevadas. É possí-vel obter uma maior potência na saída do que referido nas especificações se for utilizado um transformador com uma melhor estabilidade de tensão.

ProtecçãoÉ esperado que o amplificador funcione sempre correctamente, mas qualquer circuito electrónico pode falhar (especialmente os amplificadores de áudio, como a nossa experiência nos diz). Quando a saída está à potência máxima, a temperatura dos transístores de saída pode subir abrupta-mente (acima de 70 ºC), o que pode reduzir dramaticamente o tempo de vida destes dispo-sitivos semicondutores. A nossa experiência diz--nos que quando um transístor falha, fá-lo com um curto-circuito. Neste caso, se um fusível não actuar algures, vai aparecer uma grande tensão DC na saída do amplificador, o que não é a forma mais correcta de tratar os nossos preciosos alti-falantes. Por esta razão, a protecção DC é actu-

ArrefecimentoDeve ser fornecido um arrefecimento adequado aos transístores de controlo, aos transístores de saída e a IC1. Para IC1 isto consiste numa chapa de alumínio de 2 mm de espessura, com 2,5x8 mm, que é montada em IC1 com um par de parafusos e porcas. Este dissipador de calor é suficiente para que o circuito integrado suporte aproximadamente 2 W, com uma tensão de alimentação de aproximadamente ±56 V.Escolher o dissipador de calor para os transístores de saída envolve um compromisso entre as dimensões do dissipador e a potência de saída média estimada do amplificador. Vai ser necessário um dissipador de grandes dimensões ou arrefecimento forçado para suportar uma potência de saída máxima em contínuo, mas isto raramente ocorre na prática. Foi então decidido utilizar um dissipador de calor que é suficientemente grande para suportar uma potência de saída máxima durante pouco tempo (alguns minutos). Foi encontrado um dissipador adequado na Fischer Elektronik, na Alemanha. Não é pequeno, mas não há como contornar uma baixa resistência térmica se quiser evitar sobreaquecimentos com uma potência de saída elevada. O dissipador seleccionado tem 10 cm de altura e uma resistência térmica de 0,7 ºK/W. Para ter uma ideia: com uma fonte de alimentação regulada de ±56,8 V, o amplificador consegue fornecer quase 300 W a uma carga de 4 Ω, com 0,1% de distorção. Com uma eficiência de 68,5% dissipa cerca de 137 W. Com um sinal sinusoidal contínuo, à potência de saída máxima, a temperatura sobe mais de 90 ºC acima da temperatura ambiente. As resistências de emissor R10 e R11 (de 5 W) estão mesmo no limite neste ponto. Contudo, como foi mencionado, isto nunca acontece numa utilização normal com sinais de música. Já agora, não há virtualmente nenhum fabricante de amplificadores de áudio que dimensione os seus dissipadores de calor para uma potência máxima contínua.

Page 18: Elektor_340_2013

•Projecto

18 | Setembro 2013 | www.elektor-magazine.pt www.elektor-magazine.pt | Setembro 2013 | 19

LISTA DE COMPONENTESResistências(5%, 0,25W, a não ser que seja indicado o contrário)R1,R3 = 390 ΩR2,R4,R17,R18,R22,R23,R30 = 15 kΩR5 = 8,2 kΩR6,R20,R28 = 1,2 kΩR7 = 220 ΩR8,R9 = 100 ΩR10,R11 = 0,2 Ω/5 W, 1%, baixa indutância

(LVR05R2000FE73 da Vishay Dale)R12,R13 = 3,9 Ω/5 W, 5%R14 = 220 kΩR15,R16 = 10 MΩR19 = 27 kΩR21 = 470 kΩR24 = 1 MΩR25,R26 = 820 kΩR27 = 68 kΩR29 = 1 kΩP1 = potenciómetro 470 Ω, horizontal

CondensadoresC1 = 4,7 μF/63 V, MKT (metal/polyester), passo 5mm

ou 7,5mmC2 = 1 nF/400 V, MKT (metal/polyester), passo 5mm

ou 7,5mmC3 = condensador variável 5-57 pF/250 V, horizontal

(BFC280908003 da Vishay BCcomponents)C4,C6,C7 = 100 nF/100 V, passo 5 mm ou 7,5 mmC5 = 47 nF/400 V, passo 5 mm ou 7,5 mmC8,C9 = 4700 µF/100 V, passo 10 mm, snap-in, 30

mm diâmetro (ECOS2AP472DA da Panasonic)C10 = 2,2 µFC/63 V, passo 5 mm ou 7,5 mmC11 = 33 nF/63 V, passo 5 mm ou 7,5 mmC12,C13,C16 = 10 µF/100 V, passo 2,5 mm, 6,3 mm

diâmetroC14 = 1 µF/250 V, passo 2, 5mm, 6,3 mm diâmetroC15 = 22 0µF/16 V bipolar, passo 5 mm, 10 mm diâmetro

BobinasL1 = 450 nH: 13 espiras fio de cobre envernizado

14AWG (1,5 mm), diâmetro interior 7 mm

SemicondutoresD1,D2 = díodo zener 15 V/0,5 W D3,D4 = 1N4004D5 = 1N4148D6 = LED vermelho, 3mmT1 = BD139T2 = MJE15032T3 = MJE15033T4 = MG6330-RT5 = MG9410-RT6–T10 = 2N5550IC1 = LME49811TB/NOPBIC2 = OPA177GPG4IC3 = 4N25

DiversosK1 = barra de terminais 2 viasK2–K6 = conector do tipo Faston (lâmina), PCI,

passo 5,08 mmK7 = bloco de terminais de aperto de 3 vias para PCI,

passo 5 mmRE1 = relé, PCI, SPCO, 16 A, bobina de 4 8V, 5,52 kΩ

(tipo RT314048 da TE Connectivity/Schrack)Isolador TO-220 para T1, T2, T3, película Kapton MT,

0,15 mm, 6 kVIsolador TO-3P para T4,T5, película Kapton MT,

0,15 mm, 6 kVIsolador TO-220 3-mm para T2,T3Dissipador de calor, 0,7 K/W (por exemplo SK 47/100

SA da Fischer)Dissipador para IC1, 25x80 mm, alumínio

com 2 mm de espessuraPlaca de circuito impresso # 110656-1, ver

www.elektor.com.pt/110656

Fonte de Alimentação (para um amplificador)Transformador de potência: secundário 2x40 V, 500

VA (por exemplo 0500P1-2-040 para 230 VAC da Nuvotem)

Ponte rectificadora: 200 V/35 A (por exemplo GBPC3502) (Fairchild)

Quatro condensadores electrolíticos de 10000 μF/100 V (2 em paralelo com cada barramento de alimentação)

Figura 2. A placa de circuito impresso contém todo o amplificador de potência, incluindo os condensadores de reservatório e circuitos de protecção.

Page 19: Elektor_340_2013

Amplificador de Áudio de Potência Q-Watt

18 | Setembro 2013 | www.elektor-magazine.pt www.elektor-magazine.pt | Setembro 2013 | 19

dentes ilhas da placa de circuito impresso. Monte estes dois componentes na placa ao mesmo tempo e, quando os soldar, asse-gure-se que a bobina fica um pouco levantada em relação à placa, e que a resistência fica locali-zada no centro da bobina (Figura 3).Antes de avançar mais, necessita de saber que tipo de caixa vai utilizar para que possa determinar como fixar nesta o dissipa-dor de calor e a placa de circuito impresso. A solução mais conveniente é utilizar dois pedaços de alumínio em C para fixar a placa de circuito impresso. Desta forma ainda consegue manipular a placa de circuito impresso depois de montar os transístores no dissipador de calor.A placa de circuito impresso tem de ser montada no dissipador de calor para que os terminais dos transístores estejam o mais perto possível das cor-respondentes ilhas na placa. Utilizando um alicate de pontas, dobre os terminais dos transístores T1-T5 em forma de S para que enfiem nas ilhas da placa sem stress mecânico. Faça a primeira dobra o mais perto possível do encapsulamento. Nunca dobre os terminais directamente; coloque sempre uma pequena chapa metálica contra os pinos, perto do encapsulamento, para prevenir a formação de micro-fissuras no encapsulamento. Faça a segunda dobra ao nível das ilhas da placa. A Figura 4 apresenta o resultado final desejado. Os isoladores podem ser colocados temporaria-mente entre os transísto-res e o dissipador de calor para determinar a posição exacta da segunda dobra. Isto não é crítico a não ser que utilize isoladores cerâ-micos. Fixe bem os tran-sístores ao dissipador de calor (com os isoladores no lugar) antes de soldar os terminais destes à placa.A seguir vem IC1. Comece por fixar uma chapa dis-

monitorizadas utilizando o optoacoplador IC3, que injecta o seu sinal de saída em T6, no cir-cuito de protecção. Os díodos D3 e D4, em com-binação com o condensador C14, actuam como um rectificador de onda completa para o LED presente no optoacoplador. O divisor de tensão R4/R3 foi dimensionado para que o LED se apa-gue imediatamente se qualquer das tensões do transformador cair.O condensador C16, em conjunto com as resis-tências R25 e R26, determina o atraso temporal para ligar o relé depois de a tensão de alimen-tação ser ligada (aproximadamente 6 s). O relé aqui utilizado tem uma bobina de 48 V. É ligada ao barramento de alimentação de 56 V através de uma resistência de 1 kΩ em série (R29). Se tiver dificuldades em encontrar um relé de 48 V, pode utilizar um relé de 24 V. Nesse caso, R29 tem de ser de 2,2 kΩ/1 W.O circuito de protecção foi dimensionado para uma fonte de alimentação de ±56 V. Se utilizar uma fonte de alimentação de menor valor, têm de ser alterados os valores de algumas resistências. Isto também se aplica às resistências na malha de realimentação negativa, se pretender manter uma sensibilidade de entrada de cerca de 1 V. Tenha em conta que o ganho do LME49811 tem de ser de 20 (26 dB), pelo menos.

ConstruçãoA Figura 2 apresenta a placa de circuito impresso desenhada para este amplificador. Como pro-metido no título deste artigo, tudo foi mantido bastante compacto.Construir este amplificador não é difícil, mas exis-tem alguns pontos que requerem mais atenção. A maior parte dos componentes podem ser sol-dados directamente na placa, com a excepção de T1-T5, IC1 e os condensadores de fonte de alimentação C8 e C9. São soldados conectores em lâmina (6,3x0,8 mm do tipo Faston) à placa de circuito impresso para ligar a tensão de ali-mentação e o altifalante.A bobina L1 consiste em 13 espiras de fio de cobre envernizado 14AWG (aproximadamente 1,5 mm), enroladas em torno de uma broca de 7 mm. Deixe os terminais suficientemente compridos para permitir montar a bobina a uma pequena distância da placa. Os terminais da bobina devem ser dobrados para apontar para fora directamente do meio da bobina. Coloque a resistência R12 no interior da bobina L1 e dobre os seus terminais para que estes se alinhem com as correspon-

Figura 3. Detalhe da bobina de saída L1 com a resistência de potência R12 montada coaxialmente.

Figura 4. Os terminais de todos os transístores montados no dissipador de calor sofrem duas dobragens para que caibam precisamente nas ilhas correspondentes da placa de circuito impresso sem stress mecânico.

Page 20: Elektor_340_2013

•Projecto

20 | Setembro 2013 | www.elektor-magazine.pt www.elektor-magazine.pt | Setembro 2013 | 21

têm uma fonte de alimen-tação deste tipo para ±56 V. Ligue um amperímetro em série com o terminal positivo da fonte de ali-mentação. Antes de ligar a alimentação, regule P1 completamente no sentido contrário ao dos ponteiros do relógio, e lembre-se de ligar os enrolamentos secundários do transfor-mador ao bloco de termi-nais K7, na placa de cir-cuito impresso. Depois de ligar a alimentação, a cor-rente debitada pelo termi-nal positivo da fonte deve ser de aproximadamente

30 mA, quando o relé de saída estiver ligado. Regule lentamente P1 no sentido dos ponteiros do relógio até a corrente atingir os 60 mA. Esta relativamente pequena corrente de funciona-mento em repouso é mais que adequada. Esta vai aumentar ligeiramente com o aumento da temperatura do dissipador de calor. No entanto, esta corrente permanece abaixo dos 90 mA. Com potências de saída muito elevadas, as tempera-turas das junções dos dois transístores de saída vão subir mais rapidamente do que a temperatura do dissipador, pelo que o transístor que controla a corrente de funcionamento em repouso não vai conseguir compensar este aumento. Isto provoca um breve incremento na corrente de funciona-mento em repouso para várias centenas de mA, mas quando a temperatura cai novamente a cor-rente cai rapidamente. Esta é uma característica extra interessante deste amplificador, porque a gama de classe A do amplificador de potência é efectivamente incrementada com o aumento do nível de potência de saída.

(110656)

Mais detalhes sobre este amplificador de potência emwww.elektor-labs.com/node/3247

Internet

[1] Filtro de Medição para Amplificadores classe D, Julho/Agosto 2012, www.elektor.com.pt/100540

sipadora de calor, que consiste numa chapa de alumínio com 2,5x8 mm, ao circuito integrado com um par de parafusos e porcas. Monte o dissipador de calor para que esteja um pouco acima da placa quando o circuito integrado for montado, para evitar que faça contacto com R1, R4 e R5. Cuidado: a superfície metálica traseira deste componente está ligada à tensão de ali-mentação negativa. Isto significa que se não uti-lizar um isolador, o dissipador de calor vai estar ao potencial negativo da fonte de alimentação. Por segurança, recomenda-se a utilização de um isolador neste caso. Depois solde o circuito inte-grado à placa de circuito impresso com espaço suficiente para que o dissipador não toque em nada na placa (Figura 5). Afaste ligeiramente L1 do dissipador.A última tarefa é montar os dois grandes con-densadores C8 e C9. Assim não atrapalham as operações anteriores.

Ajustar o Q-WattAntes de ligar o seu amplificador Q-Watt directa-mente à fonte de alimentação, tem de ajustar a corrente de funcionamento em repouso do andar de saída. Para isto, em primeiro lugar, ligue duas resistências de potência de 47 Ω/5 W, em série com os terminais positivo e negativo da fonte de alimentação. Isto previne que o circuito seja danificado se algo correr mal, como por exemplo um curto-circuito algures. O pior que pode acon-tecer é as resistências de potência se queimarem. Outra opção é utilizar uma fonte de alimentação regulada com limite de corrente, mas nem todos

Figura 5. O dissipador de calor a montar em IC1 cabe mesmo à conta na placa de circuito impresso.

Page 21: Elektor_340_2013

Amplificador de Áudio de Potência Q-Watt

20 | Setembro 2013 | www.elektor-magazine.pt www.elektor-magazine.pt | Setembro 2013 | 21

Curvas Características Medidas no Q-Watt

Equipamento de teste: Audio Precision System Two Cascade Plus 2722 Dual Domain

Curva ATHD+N a uma potência de saída de 1W/8Ω e 50W/8Ω, B=80kHz. A curva de 1 W consiste principalmente em ruído (THD+N=0,0034%). A distorção não é maior do que o ruído até cerca de 20 kHz (THD+N=0,0052%). A 50 W (que corresponde exactamente a 20 V, para que os resultados possam ser comparados directamente com as figuras de desempenho presentes na folha de características do LME49811) o nível de ruído é muito menor em relação à tensão de saída. Aqui pode ver que a distorção começa a aumentar mais cedo a frequências mais altas. A 1 W a distorção ainda está abaixo do ruído. A distorção acima de 10 kHz é semelhante à da curva de 1 W. a curva de 100 W não é apresentada aqui, porque é virtualmente igual à curva de 50 W. A distorção é muito baixa em todas as potências de saída até ao nível de saturação de amplitude.

Curva BTHD+N em ordem à potência de saída (1kHz/8Ω, B=22kHz). A largura de banda de medição foi aqui reduzida para melhorar a visibilidade no ponto onde a distorção aumenta. Aqui, novamente, pode ver que a distorção continua a ser muito baixa, enquanto o nível de ruído diminui com o aumento da tensão de saída. O ponto de saturação de amplitude é atingido a 127 W, e a distorção cresce rapidamente para além deste ponto. A 137 W a THD+N atinge 0,1%, o que ainda é um nível utilizável para uma boa qualidade sonora. Note que com o transformador de potência de baixo custo utilizado no protótipo, a tensão de alimentação cai significativamente à potência máxima (com uma THD de 10% cai para ±51,5 V). É possível obter ainda mais potência com um transformador que forneça uma tensão de alimentação mais estável.

Curva CFFT de um sinal de 1 kHz a 50W/8Ω (20 V rms). Os níveis das harmónicas residuais da tensão de alimentação e as harmónicas do sinal de 1 kHz têm um nível muito baixo e, na prática, são inaudíveis. A terceira harmónica tem um nível de -113 dB, equivalente a apenas 0,0002%. A THD+N a este nível de potência é de 0,0006% (B=80kHz).

0.0006

1

0.001

0.002

0.005

0.01

0.02

0.05

0.1

0.2

0.5

%

20 20k 50 100 200 500 1k 2k 5k 10k Hz 110656 - 12

0.0003

10

0.001

0.002

0.005

0.01

0.02

0.05

0.1

0.2

0.5

1

2

5

%

1m 300 2m 5m 10m 20m 50m 100m 200m 500m 1 2 5

110656 - 13

10 20 50 100

W

-160

+0

-150

-140

-130

-120

-110

-100

-90

-80

-70

-60

-50

-40

-30

-20

-10

d B r A

10 100k 20 50 100 200 500 1k 2k 5k 10k 20k 50k Hz 110656 - 14

A

B

C

Page 22: Elektor_340_2013

•Teste & Medida

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

Devido à falta de espaço no primeiro artigo [1], não apresentámos ainda o segundo módulo (opcional) para o medidor LCR, que pode ser utilizado como um dispositivo autónomo. Como não é muito grande, vamos conseguir analisá-lo completamente.

Expansão para mostrador e tecladoInicialmente, este medidor LCR só funcionava ligado a um PC. As opiniões dividem-se sobre as restrições dessa abordagem: com alguns a favor de um instrumento autónomo e outros que não se importam de ficar dependentes de um PC, para agradar a todos foi adicionado um módulo de expansão a pedido do laboratório da Elektor. A tarefa foi (relativamente) fácil, porque a versão

anterior, alimentada pela rede eléctrica, já utilizava um mostrador gráfico de 128x64 pixels, e tam-bém porque o código para gerir este mostrador e o mini teclado associado era reutilizável a 90%.A reduzida quantidade de pinos de portos dispo-níveis (5 em vez de 13 na versão anterior) obri-garam à utilização de comunicação série com o mostrador, em detrimento da comunicação para-lelo. Para além disso, foi necessário que o medi-dor LCR detectasse automaticamente a presença do módulo de expansão e o tipo de alimentação (a partir da ligação USB ou de uma fonte de ali-mentação externa).O diagrama do circuito para o módulo de expansão é modesto (Figura 1). O mostrador LCD gráfico de 128x64 pixels U1 (Displaytech) é gerido interna-

Jean-Jacques Aubry (França)

Medidor LCR de 500 ppmUtilização autónoma, funcionalidades, menus e software

Neste segundo artigo, vamos descobrir: o circuito de expansão para o mostrador e teclado, para utilizar o dispositivo sem PC; as funções do dispositivo através dos menus e mostrador; o software, ou pelo menos os aspectos mais marcantes, já que é impossível explicar todos os seus pormenores (a descrição, código fonte e os ficheiros executáveis estão disponíveis no site da Elektor para este projecto [1]). Para aproveitar ao máximo este segundo artigo, espera-se que já tenha lido o primeiro artigo e tenha à mão o diagrama do circuito.

2ª parte:

Page 23: Elektor_340_2013

Medidor LCR de 500 ppm

www.elektor-magazine.pt | Setembro 2013 | 23

mente por um controlador ST7565R da Sitronix. Os condensadores C1-C9 são utilizados para conver-ter a tensão de controlo do LCD. A iluminação de fundo é controlada através do transístor Q1, que é activado apenas no modo autónomo. O estado do pino 6 de J16 (LCD_RES/) indica a presença (0) ou a ausência (1) do módulo de expansão.

O LED D5, controlado pelo transístor Q2, é apenas um clone do LED D6 presente no módulo princi-pal: pisca no final de cada sequência de medição.O mini teclado contém os cinco botões de pressão K1-K5 e os díodos que fornecem a matriz D1-D4. Três pinos de um porto fornecem oito códigos diferentes, dos quais apenas sete são utilizáveis se excluirmos o código 111 (sem botões pressio-nados). Não é muito, mas o firmware do medidor LCR distingue um toque curto de um toque longo, o que aumenta o número de combinações possíveis.A ligação à placa de circuito impresso principal (via J16) é feita com um cabo plano com um conector fêmea numa extremidade, mas com o conector J1 soldado na outra extremidade, que é um conector de transição soldado na placa de circuito impresso para reduzir o espaço livre na vertical. As funções dos botões de pressão, das quais vamos falar mais tarde, são:

Toque curto Toque longo

K1 S/P/A Menus

K2 Parâmetro Q-D

K3 Freq- Triagem

K4 RT

K5 Freq+ Calibração

Esta é a descrição do hardware. Agora é a altura de descobrir como funciona o mostrador LCD do medidor LCR, estando ou não associado a um PC. Os procedimentos para configuração e alinhamento são cobertos em dois documentos adicionais, ilustrados, que pode descarregar a partir do site da Elektor [3]. Não vamos entrar em detalhes sobre todos os ajustes e menus, mas vamos falar do suficiente para que os lei-tores queiram aventurar-se na construção deste instrumento de medida “sem rival”.

Modo PCSe o módulo de medição (do qual foi publicado o diagrama do circuito na edição anterior) for ligado a um PC através de uma ligação USB, o modo PC é seleccionado por defeito. O ambiente

gráfico do programa AU2011 [1] instalado no PC host está em inglês por defeito, mas suporta ficheiros de tradução.Como o dispositivo está equipado com o circuito integrado para comunicação USB/UART (FT232R) da FTDI, é necessário instalar o controlador ade-quado. Esta operação está descrita no documento Medidor LCR | Configuração, onde está descrito em detalhe todo o processo de calibração.

Execução do programa e menusLigue o medidor LCR ao PC, corra o programa para o utilizador e ligue a alimentação do medi-dor LCR, e depois siga as instruções do guia de configuração. Depois vêm os menus Preferen-ces, Tools, Sort (Figura 2), os quais não vamos discutir aqui em detalhe. Em vez disso vamos dar mais atenção ao interface com o utilizador (Figura 3). A janela principal do programa apre-

1 23 45 67 89 10

11 1213 14

J1

BKL_CLCD_CS

LCD_SI

L2

LCD_RESLCD_SCL

L1L4

C5

1uC3

1uC2

1uC4

1uC1

1u

C6

1u

C8

1u

C7

1u

C9

1u

K1 K2 K3 K4 K5

BAT54-AD1 BAT54-AD2 BAT54-AD3 BAT54-AD4

R1

4k7

R2

4k7

R3

4k7

R7

56R

R10

4k7

Q1

FDV303N

R6

56R

R5

56RQ2

FDV303N

R9

56R

R11

4k7

R9

56RD5

MÓDULO LCDS64128M

U1

CAP3

P

CAP1

N

CAP1

P

CAP2

P

CAP2

N

VOUT

RES

VDD

VSS P/SC86

V1

22V4

16

17

CS

25

A0WRRDD0D1D2D3D4

10

D511

D612

D713

14

15 2827

23V3

24V2

26V0

18 19 20 21

3029

123456789

CA

LEDLCD_A0

VDD

+5VA

110758 - 12

R4

4k7

C10

1u

S/P/A Param Freq- Freq+

Figura 1. O módulo de expansão inclui cinco botões em matriz e um mostrador gráfico.

Figura 2a. Tem de começar pelas escolhas obrigatórias em Preferences.

Page 24: Elektor_340_2013

•Teste & Medida

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

No início, o botão Open the port inicia um pro-cedimento para a ligação ao porto série definido (e memorizado) em Preferences. Depois de ser estabelecida a comunicação, o botão fica inactivo. Daí para a frente, este procedimento é automá-tico e esse botão já não está visível.Como os nomes indicam, os botões Start e Stop iniciam ou param as medições.Botão TRIMExecuta a calibração CIRCUITO ABERTO – CURTO-CIRCUITO.A calibração, que envolve a medição dos parâme-tros do dispositivo a medir (incluindo fios e cro-codilos), é efectuada para todas as frequências. Se houver algum erro, esse valor não é utilizado. Uma calibração não efectuada é assinalada por um símbolo vermelho.

O botão Sort inicia o procedimento de triagem. O valor de referência aparece à esquerda na barra situada abaixo da janela principal. A diferença entre o valor de referência e o valor do compo-nente é apresentada a verde se o componente testado estiver dentro da tolerância, ou a ver-melho caso contrário.

Os botões Mode permitem-lhe seleccionar o modo para representar o dispositivo a testar:Auto: a selecção entre série e paralelo é efectu-ada automaticamente dependendo da impedância do dispositivo a testar.Series: força a representação em série.Parallel: força a representação em paralelo.A frequência de teste é seleccionada utilizando os botões Frequency. A frequência mais baixa é o dobro da frequência da rede AC seleccionada em Preferences.O primeiro campo (Gain) indica a gama de medi-ção: verde para as gamas 3-6 onde o erro devido ao amplificador principal é zero; magenta para as gamas 2-7 (erro devido ao amplificador prin-cipal ±0,02%); vermelho para as gamas 1 e 8 (erro devido ao amplificador principal ±0,04%).Os outros dois campos apresentam os valores, entre 0 e F, dos passos do conversor D/A para as medições de tensão e de corrente.Se a caixa de verificação Max estiver visível (aqui não está), o erro de ganho é calculado utilizando valores típicos ou utilizando o valor Max (para o PGA103), dependendo se a caixa de verificação está ou não seleccionada.Os menus Settings permitem-lhe efectuar algu-mas configurações internas: desvios, calibrações,

senta os resultados das medições, e alguns botões permitem-lhe modificar parâmetros específicos ou iniciar acções específicas. Em cima à esquerda, é apresentado o diagrama do circuito equivalente do dispositivo a testar.Quando o ponteiro do rato passa por cima de um campo de visualização, aparece a informação sobre o que está a ser visualizado.

Figura 2b. A função Sort necessita de configuração antecipada.

Figura 3. Janela principal, onde pode fazer a triagem de uma resistência (o valor configurado é apresentado em baixo à esquerda).

Figura 4. Um sensor de platina permite medir com precisão a temperatura numa gama entre -80 ºC e +600 ºC.

Figura 5. Botões de pressão e mostrador no modo autónomo.

Page 25: Elektor_340_2013

Medidor LCR de 500 ppm

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

impedância |Z| e ângulo de fase Φ; resistên-cia equivalente série Rs e reactância equivalente série Xs; tensão rms Vx e corrente rms Ix do dis-positivo a testar; Freq− e Freq+: Seleccionar a frequência de medição.

Funções secundáriasMenus: Mantenha pressionado este botão para entrar no modo Menu.Q_D: Pressionar este botão comuta entre a apre-sentação automática de Quality � Dissipation ou Dissipation � Quality. Sorting: Tem de definir primeiro os parâmetros de triagem através do menu Sorting Parameters.Manter pressionado este botão permite-lhe habi-litar ou desabilitar o modo Sort.O valor do componente a ser triado é apresentado em conjunto com o símbolo respectivo. (Figura 6).Os parâmetros de triagem são apresentados pela ordem inversa.Pressionar o botão [GO] inicia a comparação, com apresentação momentânea da tolerância actual e do resultado (OK ou BAD!).Trim: Manter pressionado este botão permite--lhe correr a calibração (CIRCUITO ABERTO –

etc. Não necessita de analisar os primeiros três. Veja o documento Medidor LCR | Configuração.

Medição de um sensor PT100 de platinaExistem muitos dispositivos que fornecem uma medição de temperatura, mas apenas com uma precisão de alguns graus, pelo que seria inte-ressante ter uma referência de precisão. Assim, um sensor de platina permite-nos medir tem-peraturas numa gama entre -80ºC e +600 ºC com uma precisão de ±0,3 ºC (classe B) ou de ±0,1 ºC (classe A). Quando o valor da resistência estiver compreendido entre 70 Ω e 300 Ω, a fre-quência for ≤ 1 kHz, e o parâmetro Q (factor de qualidade) for praticamente zero, é apresentada uma caixa de verificação com a legenda PT100 à esquerda da segunda caixa de texto (Figura 4).

Se seleccionar esta, é apresentado o valor de temperatura correspondente ao valor de resis-tência medido para um sensor PT100 de platina. O símbolo existente é substituído pelo símbolo de um termístor. Com a gama de medição utilizada (-75 ºC a +557 ºC), a precisão da conversão resistência/temperatura é < 0,05 ºC.

Modo autónomoEquipado com módulo de expansão Mostrador/Teclado, o nosso medidor LCR torna-se autó-nomo. Não é necessário um PC (excepto para as configurações preliminares, que não podem ser efectuadas em modo autónomo). Neste modo, todos os textos são apresentados em inglês.Os cinco botões de pressão (Figura 5) permitem--lhe seleccionar as funções do dispositivo e confi-gurar alguns parâmetros. Os botões têm funções diferentes, dependendo se é utilizado um toque curto ou um toque longo durante mais de dois segundos (indicado pelo LED verde). As funções primárias estão a preto (acima dos botões no protótipo do autor), enquanto as funções secun-dárias (toque longo) estão a azul. Nos menus, as funções (variáveis) dos botões de pressão são indicadas em baixo no LCD.Funções primáriasS/P/A: Escolha entre os circuitos equivalentes série ou paralelo para o cálculo dos parâmetros, ou o modo automático.Param.: Opções de visualização: módulo da

Figura 6. Função Sort.

Figura 7. Função Trim (calibração).

O que pode ser mais satisfatório do que construir as suas próprias ferramentas?

Page 26: Elektor_340_2013

•Teste & Medida

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

novamente as calibrações inválidas (Figura 8).

Botão sem legenda: a função referente a este botão está explicada no documento Medidor LCR | Instruções de funcionamento [3].Menus (Figura 9)A navegação é efectuada pelos botões � e � . O símbolo > indica que menu vai ser seleccionado pelo botão [ok].Pressionar o botão [eX] (exit) abandona o modo menu.

Parâmetros de triagemEste menu permite-lhe seleccionar os parâmetros (tolerância e valor) utilizados para a triagem de componentes. O valor proposto corresponde ao valor do parâmetro principal do componente de referência ligado antes de entrar no modo menu.O primeiro passo permite-lhe seleccionar a tole-rância utilizando os botões [-] e [+], confir-mando depois com [ok] (Figura 10).O próximo passo permite-lhe ajustar o valor que vai ser utilizado para a triagem, a come-çar pelo parâmetro principal do componente que está ligado.Utilize novamente os botões [-] e [+], e con-firme com [ok] (Figura 10).

Nas instruções de funcionamento online, vai encontrar outras funções que não vamos descre-ver aqui em detalhe: Averaging, Display Range, Adjust Contrast, Back Light, Line freq. 60/50 Hz. Veja também neste documento o parágrafo Medição de um sensor PT100 de platina, na secção sobre o modo PC – esta função tam-bém está disponível no modo autónomo.

ProgramasO desempenho geral do medidor LCR (precisão das medições, facilidade de utilização) é muito depen-dente da qualidade dos três programas utilizados:O bootloader, assume o comando assim que o medidor LCR estiver alimentado.O firmware, a parte mais importante do programa interno do microcontrolador, efectua todo o traba-lho de aquisição de medições, cálculo da DFT, etc. Também controla o mostrador no modo autónomo.O programa externo AU2011, a correr no PC host, no modo PC torna possível apresentar os resultados, executar comandos, etc. Este dialoga com o bootloader, e também com o firmware, enviando e recebendo mensagens compostas por sequências de caracteres pré-definidas.

Figura 8. Calibração falhada.

Efectuar ambas as calibraçõesCIRCUITO ABERTO CURTO-CIRCUITO

Efectuar a calibraçãoCIRCUITO ABERTO

Efectuar a calibraçãoCURTO-CIRCUITO

Figura 9. Opções dos menus.

Figura 10. Triagem utilizando a tolerância e parâmetro principal de triagem.

CURTO-CIRCUITO) (Figura 7). As calibrações são efectuadas para cada frequência. Se |Z| < 10 Ω, é efectuada a calibração de CURTO-CIRCUITO.Se |Z| > 100 k Ω é efectuada a calibração de CIRCUITO ABERTO.Se uma ou ambas as calibrações forem inválidas, é apresentado um símbolo a piscar em frente ao valor do parâmetro principal. Tem de fazer

Page 27: Elektor_340_2013

Medidor LCR de 500 ppm

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

lização se o medidor LCR estiver no modo PC.O primeiro passo é apagar a memória de pro-grama (todos os bytes ficam com o valor 0xFF), depois é recebido o ficheiro em formato IntelHex através da ligação USB. Depois de verificar que esta operação foi completada correctamente, o novo firmware é executado com a ajuda de um ponteiro para uma função, que aponta para o endereço de início do firmware:

((void (code *) (void)) PROG_BEGIN_FLASH_ADDR) () // -> jump to application code

BootloaderO bootloader, que corre automaticamente aquando do arranque, está permanentemente programado na memória a partir do endereço 0x0000. A sua função principal é actualizar o firmware:Se o jumper J17 estiver colocado (actualização incondicional, se o firmware bloquear); durante uma reinicialização por software, quando o uti-lizador pede a actualização; se a verificação de integridade, presente na EEPROM, do código do firmware for negativa.O programa AU2011 só pode efectuar esta actua-

Listagem 1

void UART0_ISR(void) interrupt INTERRUPT_UART0{ char SFRPAGE_SAVE = SFRPAGE; SFRPAGE = UART0_PAGE; if (RI0 == 1) // if receive flag set, put the byte in UART_InputBuffer { RI0 = 0; Byte = SBUF0; // Read a character from UART0 if ((Byte == ‘\0’) || (Byte == ‘\n’) || (Byte == ‘\r’)) { RX_Ready = 1; // Reception complete } else if (UART_InputBuffer_Size < UART_IN_BUFFERSIZE - 1) // room needed for string terminal ‘\0’ { UART_InputBuffer[UART_InputBuffer_Size] = Byte; UART_InputBuffer_Size++; // Update array’s size } } if (TI0 == 1) // if transmit flag set, send UART_OutputBuffer datas { TI0 = 0; if (UART_OutputBuffer_Size > 0) // If buffer not empty { Byte = UART_OutputBuffer[UART_Output_First]; SBUF0 = Byte; // Transmit to UART0 UART_Output_First++; // Update counter UART_OutputBuffer_Size--; // Decrease array size } else { UART_Output_First = 0; TX_Ready = 1; // Transmission complete } } SFRPAGE = SFRPAGE_SAVE; // restore SFRPAGE }

Page 28: Elektor_340_2013

•Teste & Medida

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

Aqui só são descritas pequenas secções do código; o código fonte completo e bem docu-mentado pode ser obtido no site da Elektor [1].No modo PC, o diálogo com o programa AU2011 ocorre por troca de mensagens. As sequências de caracteres recebidas ou enviadas são mani-puladas pela UART0.

Uma das mais úteis características do microcon-trolador escolhido é o armazenamento dos dados obtidos a partir do ADC0 e do ADC1 directamente na XRAM (com Acesso Directo à Memória). O interface DMA é programado, entre outras coi-sas, para escrever dados provenientes de uma determinada localização num endereço da XRAM, e para repetir um determinado número de vezes a aquisição desses dados. Esta programação é efectuada apenas uma vez através de algumas instruções em alguns dos registos. Tudo o que resta é enviar o comando de início e esperar pelo

A parte da actualização do firmware vem direc-tamente da nota de aplicação AN112 da Silicon Labs, mas com uma modificação que é neces-sária para a soma de verificação da memória ocupada pelo firmware recentemente instalado. De facto, como podem existir “buracos” (com o valor 0xFF) no espaço de memória que se acabou de gravar, isto pode levar a diferenças entre o tamanho real do código e o cálculo (endereço_final – endereço_de_início_de_escrita)!Para as outras tarefas efectuadas pelo bootloa-der, tem de analisar o código fonte completo, que pode descarregar do site da Elektor [1].

FirmwareEste é o cérebro do medidor LCR. Está gravado na memória a partir do endereço 0x2000. Efectua as medições, responde aos comandos do utilizador, e até apresenta os resultados (no modo autónomo) ou envia-os através da ligação USB (em modo PC).

Listagem 2

void TIMER2_ISR(void) interrupt INTERRUPT_TIMER2{ char SFRPAGE_SAVE = SFRPAGE; SFRPAGE = TMR2_PAGE; TF2 = 0; // Immediately reset Interrupt flag if (TMR2CF & 0x04) // if state of the output = 1 { ET2 = 0; // Disable Timer2 Interrupt SFRPAGE = DMA0_PAGE; // Switch to DMA0 Page DMA0EN = 1; // Begin Executing DMA Ops (which will enable ADC0) } SFRPAGE = SFRPAGE_SAVE; // restore SFRPAGE}void DMA0_Acquire_Samples (void){ char SFRPAGE_SAVE = SFRPAGE; // --- reset TF2 flag just prior enabling Timer2 interrupt SFRPAGE = TMR2_PAGE; TF2 = 0; ET2 = 1; // Enable Timer2 Interrupt SFRPAGE = DMA0_PAGE; // Switch to DMA0 Page // --- Timer2 interrupt enable DMA-ADC operation while (!DMA0INT); // wait for DMA operations are complete DMA0EN = 0; // Stop Executing DMA Ops DMA0INT = 0; // Clear DMAOINT bit SFRPAGE = SFRPAGE_SAVE; // restore SFRPAGE}

Page 29: Elektor_340_2013

Medidor LCR de 500 ppm

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

Medidor LCR | instruções de funcionamento, que pode descarregar gratuitamente [3].

Programa AU2011O software AU2011corre num PC e foi escrito em linguagem C++, utilizando bibliotecas Qt e qse-rialdevice/AbstractSerial para obter um ficheiro executável para PCs Windows, Mac OSX ou Linux, dependendo do sistema alvo da compilação. O código fonte e um conjunto de ficheiros executá-veis estão disponíveis no site da Elektor [1]. Se quiser modificar e/ou compilar o código fonte, o IDE adequado é o Qt Creator. As opções de com-pilação condicional (#ifdef) presentes no código fonte permitem-lhe gerir os vários alvos directa-mente. O interface com o utilizador é ligeiramente diferente dependendo do sistema alvo da compi-lação, devido, entre outras coisas, às diferenças entre as fontes dos caracteres; cada sistema alvo tem o seu próprio ficheiro AU2011_mainwindow.ui.

O núcleo do interface com o utilizador está em inglês, mas foi projectado para poder utilizar ficheiros de tradução. Já existe a versão francesa (AU2011_fr.qm). Este ficheiro está localizado na mesma pasta do que o programa AU2011, em conjunto com o ficheiro qt_fr.qm (ficheiro de tra-dução específico para a linguagem Qt, que está localizado na pasta QtSDK/Desktop/Qt/4.8.0/gcc/translations em conjunto com os ficheiros para outras línguas), o que permite ter todas as men-sagens e interface com o utilizador em francês para um sistema francês.Para um sistema que utilize outro idioma, tem de: modificar (no ficheiro AU2011_Projet.pro) a direc-

sinal de conclusão: todo o trabalho de aquisição de dados e transferência destes para a memó-ria é automático e optimizado, tornando possí-vel uma velocidade de aquisição de dados de 1 MAquisições/s (dados de 16 bits = 2 palavras de 8 bits) utilizando um sinal de relógio de 24 MHz!Este processo é organizado por interrupções pedidas por:•Temporizador Timer2 (frequência do sinal

sinusoidal) � inicia uma sequência de N aquisições configurando a flag DMA0ENable para o nível lógico 1.

•N = número de amostras por ciclo do Timer2 x número de ciclos do Timer2.

•Temporizador Timer3 (Frequência do Timer2 x número de amostras por ciclo do Timer2 / 2) � inicia automaticamente uma aquisição; o coeficiente 2 é utilizado devido ao facto de existirem duas interrupções por ciclo do Timer3.

O final da sequência é indicado pela comutação da flag DMA0INT para o nível lógico um. Tudo o que resta é ler a XRAM e utilizar os dados.

No primeiro artigo vimos que era necessário compensar as tensões de desvio dos ampops U6 (input_offset) e U1 (sine_offset). Como temos dois conversores D/A de 12 bits disponíveis, estes ajustes podem ser automatizados. Só é neces-sário desligar os cabos de medição para que o processo não seja perturbado por sinais parasitas (entre outros, das linhas da rede eléctrica). Como para os outros ajustes do medidor LCR, estes só podem ser efectuados no modo PC através do programa AU2011. São descritos no documento

Comparação das medições com as de uma ponte de medida profissionalTon Giesberts (Elektor)

Medir a indutância de uma bobina é uma ciência por si só. As folhas de características das bobinas fornecem habitualmen-te a corrente e a frequência na qual é especificado o valor da indutância. Por exemplo, se fizer a medição a 1 kHz em vez de 10 kHz como especifica o fabricante, e com um valor de corrente diferente, vai obter um valor de indutância considera-velmente diferente. Não é um desastre, já que as bobinas têm uma tolerância de ±20%. No laboratório da Elektor, compa-rei o comportamento do nosso novo medidor LCR, projectado por Jean-Jacques Aubry, com o de um grande instrumento de laboratório que custa mais de 2000 dólares: o Programmable LCR Bridge 8118 da Hameg. A corrente de medida neste ins-trumento de referência é ajustável; durante uma medição ini-cial, a corrente utilizada foi dez vezes maior do que a do nosso

pequeno medidor LCR. Dependendo do material da bobina, isto pode levar a diferenças consideráveis. Mas permaneceu confortavelmente dentro da gama de ±20%.Uma primeira medição efectuada com o instrumento da Ha-meg a uma bobina de 100 µH/5 A obteve-se um resultado de 108,7 µH. Ao reduzir a corrente de medição (e fazendo uma nova calibração), o mesmo instrumento indicou 97,6 µH. Deve estar agora a pensar qual foi o resultado obtido com o novo medidor LCR da Elektor: 96.8 µH. Nada mau, hã?

Page 30: Elektor_340_2013

•Teste & Medida

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

formada utilizando os valores de:“Rs Xs Freq gamas Vpp Ipp ADC_Vpp ADC_Ipp”Seguida do caracter “C” ou “Z” dependendo se o dispositivo a medir for ou não capacitivo.

Quando esta sequência de caracteres for rece-bida, é lida pela rotina de atendimento à inter-rupção slotRead(), desmontada pela rotina Par-seInputString(), e as funções de apresentação Display_xxx() preenchem os campos relevan-tes. Uma rotina importante, entre outras, é a rotina Convert_Value_to_String(), que converte um valor representado em vírgula flutuante, com mantissa e expoente, numa sequência de carac-teres que corresponde a um sufixo standard, por exemplo, apresenta 12.05 nF para um conden-sador com um valor de 1,205x10-8 F.

Quase podemos cheirar a solda (finalmente!)No próximo artigo desta série, vamos apresentar--lhe os dois módulos, que vão estar disponíveis já testados e prontos a utilizar. Por muito menos de 200 euros, vai poder utilizar uma maravilha da precisão que nunca mais vai sair da sua bancada de teste! Não há nada mais satisfatório do que construir as suas próprias ferramentas! Até lá, está convidado a ler a documentação online, que lhe vai proporcionar uma visão geral e também muito detalhada da nossa ponte automática de medição de impedância.

(130022)

Artigo original: 500 ppm LCR Meter (2) – April 2013

Internet

[1] Software para download (bootloader, firmware e programa para PC): www.elektor.com.pt/110758

[2] Qt Linguist: http://goo.gl/fIYQh ou http://qt-project.org/doc/qt-4.8/ linguist-translators.html

[3] Documentação on-line “Medidor LCR | Configuração” e “Medidor LCR | Instruções de funcionamento”: www.elektor.com.pt/110758

tiva TRANSLATIONS += AU2011_fr.ts to AU2011_xx.ts, onde xx é o símbolo para a língua utilizada (de, da, cs, etc.) e compilar novamente este ficheiro; ou duplicar o ficheiro AU2011_fr.ts e dar outro nome à cópia AU2011_xx.ts.Depois necessita de utilizar o programa Linguist para traduzir todas as sequências de caracteres, e por último executar o comando irelease para produzir o ficheiro AU2011_xx.qm.Para mais detalhes pode ver a documentação para o programa Qt Linguist em [2].Acreditamos que os nossos leitores disponibili-zem gradualmente novos ficheiros de tradução!

O diálogo entre o software AU2011 e o medidor LCR ocorre através da ligação USB, emulando uma ligação série utilizando o controlador já dis-ponibilizado pela FTDI (115200 baud, 8 bits de dados, sem bit de paridade, 1 bit de paragem, sem controlo de fluxo). Os comandos enviados/recebidos pelo medidor LCR são sequências de caracteres definidas no ficheiro de cabeçalho AU2011_mainwindow.h [1].

Depois de abrir o porto de comunicação e de enviar o comando para sincronização do bootlo-ader, o software espera até receber a primeira sequência de caracteres contendo a versão do firmware, disponibilizando-a na barra de título da janela do programa. De seguida recebe uma sequência de caracteres formada pelos parâme-tros de inicialização:Frequência da rede AC 50 Hz ou 60 Hz (L5 ou L6)Frequência de teste (F1 ou F2 ou F3) para 100/120 Hz ou 1 kHz ou 10 kHzCalibração de curto-circuito efectuada ou não (S1 ou S0)Calibração de circuito aberto efectuada ou não (O1 ou O0)Média (A1 a A9)

De seguida o firmware entra no ciclo de análise de eventos e espera que chegue um comando à UART (rotina de interrupção). Se for recebido um pedido para efectuar uma medição, os parâ-metros resultantes são enviados para o software na forma de uma longa sequência de caracteres

A maior vantagem do microcontrolador escolhido é a capacidade de armazenamento dos dados obtidos a partir do ADC0 e do ADC1

directamente na XRAM (acesso directo à memória)

Page 31: Elektor_340_2013

Curso Arduíno

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

Quando voltei para casa comecei a pensar em todos aqueles componentes esquecidos que estão lá por casa. Tenho bastantes coisas que compro durante as fases de teste dos projectos que nunca fizeram parte do protótipo final. Abri uma dessas caixas e encontrei um display de matriz e alguns botões. Pensei que seria interessante construir algum tipo de relógio com aqueles componen-tes. Assim, comprei um dispositivo de relógio em tempo-real (RTC) e liguei tudo. O resultado final é a figura acima, e está descrito em seguida.

MateriaisOs componentes para este projecto são:

•Placa Arduino Uno•Placa para protótipos•Barras de terminais (macho)•Cabo USB•Dois botões de pressão•Display de matriz de pontos, com controla-

dor HT1632; utilizei o de 32x16 da Sure•RTC DS1302•Cristal de quartzo 32 kHz•Suporte para bateria CR2032•Conector para pilha de 9 V

•Pilha de 9 V (para Arduino) + bateria CR2032 (para RTC)

•Uma caixa para montar tudo

Nota: construí este projecto numa caixa de car-tão, mas reconheço que devem existir muitas outras caixas, mais criativas, para instalar este projecto, desde uma simples lancheira até uma caixa de plástico bastante profissional… tudo vale!

Resumo do projecto: fazer algo útilPerdi algum tempo a pensar no que deveria fazer com os meus componentes velhos. Vivo num apartamento e tenho algumas plantas que par-tilho com os meus vizinhos nas escadas do edi-fício. Um dos moradores de um dos apartamen-tos costuma colocar água de uma forma pouco sistemática nessas plantas, pelo que ninguém nunca sabe se as plantas estão bem no que diz respeito à água. A verdade é que a maioria das plantas que aparecem na escadaria acabam por secar ao fim de algum tempo.Gostaria de acreditar que as pessoas não regam as plantas porque pensam que alguém já fez isso, e não porque simplesmente não querem saber. Assim, tive a ideia de criar um dispositivo

David Cuartielles (Espanha)

Curso ArduínoParte 4: Um sistema de supervisão de fornecimento de água para planta de uso comum

Numa das reuniões da Elektor “gastámos” um dia inteiro a discutir como fazemos os nossos projectos, ou quais serão os tópicos mais importantes que pensamos que a Elektor deve abordar num futuro próximo. Durante uma das sessões, o editor Jan começou subitamente a deitar montes de pequenos componentes em cima das nossas mesas fazendo a seguinte pergunta: “Imaginem isto! Um certo fim-de-semana, começa a remexer na sua caixa da tralha e depara-se com estes componentes. O que faria com eles?”

Page 32: Elektor_340_2013

• Curso

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

para contar o tempo entre cada rega, com uma indicação visual da última vez as plantas foram regadas por alguém.Não quis que o projecto ficasse muito complexo, pelo que decidi que apenas me deveria preocupar com os aspectos humanos no que diz respeito à rega das plantas e que não deveria efectuar medidas de humidade da terra onde se encon-tra a planta ou qualquer outra condição ambien-tal em redor da mesma. Nem queria fazer nada para ligar o dispositivo à Internet para me indi-

car quando deveria regar a planta (o projecto Botanicalls [1] faz precisamente isso, envia uma mensagem quando a planta está mesmo neces-sitada de água).Queria apenas um dispositivo que indicasse aos meus vizinhos quando foi a última vez que alguém regou as plantas. Assim, acabei por me basear no paradigma do relógio de xadrez: os jogadores têm que pressionar um botão no relógio quando terminam uma jogada para passar a vez para o seu adversário. A minha ideia foi criar um relógio que fornecesse essa mesma interacção. Assim que alguém regue a planta, pressiona um botão e passa a responsabilidade para outra pessoa. Se pressionar ainda um outro botão, o dispositivo vai indicar há quanto tempo a planta não é regada.Nesta altura, juntei todos os componentes que achei que iria precisar (Figura 1).

Controlo do display de matriz de pontosExiste algum em fazer piscar alguns LEDs que fas-cina as pessoas. É muito simples fazer a ligação entre o controlar um único LED de 5 mm como aquele que todos costumamos utilizar nos nos-sos pequenos projectos e um grande display num espaço público. Poderia apostar que, assim que colocar o seu primeiro LED a piscar, a hipótese de juntar mais alguns para que pisquem todos em simultâneo vai começar a moer a sua cabeça.Existe um limite no número de pinos num micro-controlador, e outro limite na quantidade de cor-rente que cada um consegue processar. Um dis-play de matriz de pontos consiste numa unidade de plástico na qual os LEDs têm o ânodo ou cátodo ligado em modo comum, o que facilita o controlo de todo o display. Por vezes, os circuitos integrados controladores são incluídos como parte da definição do display de matriz de pontos. Para o nosso projecto os diferentes componentes estão ligados da forma como se mostra na Figura 2.Tenho alguns displays da marca Sure. Obtive--os na Arduino Store para algumas experiências que fiz no ano passado. Tenho quase a certeza de que consegue obter o mesmo display de um outro fabricante.Este display controla 16x32 LEDs R/G. Por outras palavras, o display tem 512 LEDs bicolo-res. Podem acender com a cor vermelha, verde ou as duas em simultâneo (o que dá laranja). É também muito fácil ligar vários em cadeia e já li alguns projectos que controlam até quatro des-tes displays seguidos, num total de 2048 LEDs!

Figura 1. Componentes usados no circuito de supervisão de fornecimento de água para plantas.

Figura 2. Diagrama geral do projecto.

Page 33: Elektor_340_2013

Curso Arduíno

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

peitar o estilo da biblioteca Arduino, e adicionei um par de exemplos muito simples. A biblioteca é compatível com as versões 1.0 e seguintes do IDE. Está tudo pensado na utilização de uma uni-dade de relógio em tempo-real RTC, construída na placa para protótipos do Arduino (Figura 3).

Vai precisar de descarregar a biblioteca do site da Elektor [4] e instalá-la. Lembre-se que para adicionar uma nova biblioteca ao IDE é necessá-

Para este projecto utilizo apenas um dos LEDs uma vez que não preciso de mostrar assim tanta informação, apenas quero mostrar quanto tempo já passou. Mas pode querer fazer mais alguma coisa, pelo que vamos dar uma vista de olhos ao que o leitor pode fazer com este display.

Instalação da biblioteca para o displayCriei uma biblioteca que utiliza código de vários autores, apenas reformatei o código para res-

Listagem 1.

#include <fonts.h>#include <HT1632c.h>#include <images.h>

HT1632c display(6, 5, 3, 4);

void setup() { display.setup();}

void loop() { display.text(“Hej”, 5, 5);}

Listagem 3.

#include <fonts.h>#include <HT1632c.h>#include <images.h>

#define heart_icon_width 17#define heart_icon_height 16

unsigned char PROGMEM heart_icon[] = { 0x00, 0x1e, 0x00, 0x3f, 0x80, 0x7f, 0xc0, 0x7f, 0xe0, 0x7f, 0xf0, 0x7f, 0xf8, 0x3f, 0xfc, 0x1f, 0xfe, 0x0f, 0xfc, 0x1f, 0xf8, 0x3f, 0xf0, 0x7f, 0xe0, 0x7f, 0xc0, 0x7f, 0x80, 0x7f, 0x00, 0x3f, 0x00, 0x1e }; HT1632c display(3, 4, 5, 6);

void setup() { display.setup();}

void loop() { display.image(heart_icon, 0, 0, heart_icon_width, heart_icon_height);}

Listagem 2.

#include <fonts.h>#include <HT1632c.h>#include <images.h>

HT1632c display(6, 5, 3, 4);

void setup() { display.setup();}

void loop() { display.image(Arduino_logo, 0, 0, 32, 16);}

Page 34: Elektor_340_2013

• Curso

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

É fácil aceder aos exemplos, basta navegar no menu através de: File / Examples / HT1632c.Sempre que quiser usar a biblioteca, vai precisar de incluir três ficheiros de cabeçalho: fonts.h, HT1632c.h e images.h. Quando efectuar a cha-mada do construtor vai precisar de especificar os pinos onde ligou o display. Estes têm a seguinte ordem: Data, Write Clock, Chip Select e Clock.

Configuração do display Neste projecto, o display está ligado nos pinos digitais 3, 4, 5 e 6. A biblioteca permite configu-rar qualquer pino digital para enviar dados para os LEDs. Pode também ligar vários displays em sequência. Apenas tenho dois para testar, mas tenho confiança de que funcionará sem qual-quer problema com mais. O display é alimentado directamente a partir do regulador do Arduino; durante os meus testes não me pareceu que pre-cisasse significativamente de mais corrente do que aquela que a bateria era capaz de fornecer. Se estiver a planear ligar muitos displays como parte de um único projecto deve ter em conta a quantidade de corrente que vai precisar para que todo o sistema funcione sem problemas.Agora, a Listagem 1 configura o display para o exemplo Simple_text que vem com a biblioteca. Por defeito, o modo de texto utiliza a cor laranja para mostrar o texto no display. Um quarto parâ-metro determina a cor, pode usar as seguintes constantes: BLACK, GREEN, RED e ORANGE.

Mostrar uma simples imagemÉ possível mostrar uma imagem de baixa reso-lução num destes displays. Vai precisar de ter a imagem armazenada na memória de programa no formato de array como na Listagem 2, utili-zando o exemplo Simple_image, carregando um ícone por defeito.A Figura 4 mostra o resultado de carregar o exemplo Simple_image no display de matriz de pontos, ou será ecrã? Neste caso, consiste no logótipo do Arduino que armazenei na biblioteca como exemplo. Se quiser mostrar uma imagem sua, pode gerar imagens usando o Gimp que consiste numa suite de edição de imagens gra-tuita que corre em todos os sistemas operativos principais. Vai precisar de:

•Abrir a imagem e redimensioná-la para caber no ecrã (32 colunas por 16 linhas).

•Rodar a imagem 90 graus, no sentido dos ponteiros do relógio.

rio criar uma pasta com o nome libraries dentro do seu sketchbook e depois descompactar para dentro da mesma o ficheiro que descarregar da Internet. Depois disso, deve reiniciar o Arduino IDE e a biblioteca aparece então disponível no menu mencionado anteriormente.

Nota: O IDE do Arduino vai incluir um sistema para instalar as bibliotecas automaticamente a partir dos ficheiros compactados que descarrega da Internet. Contudo, na altura em que este pro-jecto foi realizado essa funcionalidade ainda não estava disponível.

Com a biblioteca vai instalar uma série de exem-plos que são bastante educacionais se os seguir em detalhe, mesmo que não queira reprodu-zir o seu hardware em detalhe. Os exemplos permitem:

•Testar se o display está a funcionar correctamente.

•Mostram simples mensagens de texto.•Deslizar texto no display.•Carregar imagens

Figura 3. Placa do protótipo Arduino com os componentes soldados.

Figura 4. O nosso display com o logótipo do Arduino.

Page 35: Elektor_340_2013

Curso Arduíno

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

Até agora apenas usámos quatro pinos para ligar o display à placa Arduino Uno; o relógio RTC pre-cisa de três pinos, pelo que optei por escolher o 7, 8 e 9. A Figura 6 mostra o RTC, onde ligar o cristal de 32 kHz e a alimentação, assim como os pinos onde ligar o dispositivo à placa Arduino.

Instalação da biblioteca RTC, configuração da horaPode obter uma cópia da biblioteca RTC no site da Elektor [4] ou no projecto github [3] (autor). Instale a biblioteca descompactando o ficheiro dentro da pasta libraries, tal como se explicou anteriormente para a biblioteca HT1632c, e veri-fique os exemplos.Precisa de executar o exemplo set_clock.pde assim que estiver preparado para configurar a hora no seu relógio RTC. Desde que o relógio RTC esteja ligado à sua própria bateria, não precisará de executar este código novamente. Certifique--se que modifica a linha dentro da configuração

•Exportar a imagem como XbitMap.•Abrir o ficheiro xbm e copiar o array

resultante.•Colar o array no seu programa como unsig-

ned char PROGMEM, por outras palavras, colocá-lo no espaço de memória para pro-grama, sem alterar a RAM.

A Figura 5 mostra um exemplo, que consiste numa imagem de um coração; a sua importação para o código do programa vai-se parecer com o que está na Listagem 3.Nota: a forma como o ficheiro xbm é construí- do é ligeiramente diferente da forma com que é construído no ecrã. Assim, precisa de mudar a largura para a altura quando quiser carregar o seu próprio ícone. No meu caso, o ícone tinha uma dimensão de 16x17, mas introduzi os dados como sendo 17x16 (largura x altura).Dica: pode adicionar múltiplos ícones/imagens ao seu programa, basta apenas dar diferentes nomes para que possa chamá-los a partir de qualquer lugar no seu código. Existem muitas coisas que podem ser feitas com a biblioteca de controlo do display, mas com a finalidade de implementar apenas este projecto, apenas pre-cisamos de apresentar algum texto e possivel-mente algumas imagens muito simples. Sinta--se livre para explorar a biblioteca dado que é gratuita, e as funções existentes ma mesma são muito auto-explicativas. Vamos então avançar um pouco mais e explorar a utilização do relógio em tempo-real.

Relógio em tempo-realGraças a um cristal externo de 32 kHz os dis-positivos RTC podem medir o tempo com uma grande precisão. Como os RTC precisam de estar constantemente a contar o tempo, não podem ser desligados, pelo que têm que ser alimentados com uma bateria própria. Por outro lado, conso-mem muito pouca potência pelo que podem fun-cionar com baterias de 3,3 V durante um grande período de tempo bastante longo, por vezes até mesmo anos.O circuito integrado seleccionado foi o DS1302 da Maxim, um relógio RTC muito usado e ampla-mente documentado na comunidade Arduino. Está disponível para leitura um documento do utiliza-dor Krodal [2] em conjunto com algum código a explorar as capacidades deste dispositivo. Con-tudo, pela simplicidade, decidi usar a biblioteca de Matt Sparks [3].

Figura 5. Imagem de um coração a processar para incluir no sketch Arduino.

Figura 6. Diagrama do RTC ligado ao Arduino.

Page 36: Elektor_340_2013

• Curso

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

Em seguida, precisamos de dotar o nosso pro-grama com capacidade de calcular a diferença de tempo entre a hora armazenada em memória e a hora que podemos obter a qualquer altura, uma vez que queremos mostrar no display há quantos dias a planta não é regada. A Listagem 5 mostra como armazenar dados na EEPROM.

Botão para armazenar a horaUm botão fornece o sinal de disparo que sinaliza que a hora deve ser armazenada na memória. Quando o botão é pressionado, a hora corrente tem de ser lida do relógio RTC, e armazenada na EEPROM. Associei ao botão o pino 12, no meu código (Listagem 6) vou certificar-me que esse pino está configurado como INPUT_PULLUP para economizar algum tempo quando soldar os componentes.Depois de armazenar a hora, vai aparecer a men-sagem “nice!”. Outras operações estão bloque-adas até o programa ser reiniciado. Penso que esta é uma boa forma de evitar que as pessoas estejam muito frequentemente a escrever e ler da EEPROM.

que configura a hora do relógio, a Listagem 4 mostra a parte do código set_clock.pde que precisa de configurar manualmente.

Utilize a EEPROM para armazenar a hora correnteO ATMega328 na placa Arduino Uno possui uma EEPROM de 512 bytes, ou memória não volátil, para armazenar alguns dados quando o sistema

está desligado. Esta parte da memória é frequente-mente usada por projec-tistas de sistemas embe-bidos para armazenar as configurações básicas dos dispositivos.No nosso caso, vamos usar a EEPROM para armazenar a data em que alguém regou as plantas pela última vez (e pres-sionou o botão). No total, precisamos de armazenar três bytes: ano, mês e dia.

Listagem 5.

#include <EEPROM.h>

int val;

void setup() {}

void loop() { val = analogRead(A0); EEPROM.write(0, val);}

Listagem 4.

[…]

void setup() { Serial.begin(9600);

/* Initialize a new chip by turning off write protection and clearing the clock halt flag. These methods needn’t always be called. See the DS1302 datasheet for details. */ rtc.write_protect(false); rtc.halt(false);

/* Make a new time object to set the date and time */ /* Tuesday, May 19, 2009 at 21:16:37. */ Time t(2009, 5, 19, 21, 16, 37, 3);

/* Set the time and date on the chip */ rtc.time(t);}

[…]

Um projecto construído com coisas que encontrei na minha caixa da tralha

Page 37: Elektor_340_2013

Curso Arduíno

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

AgradecimentosAo pessoal do Arduino Store, que gentilmente me cederam o display que usei neste projecto.

Botão para controlar tudoProvavelmente, a parte mais importante deste projecto é a forma como o consumo da bateria é controlado. Decidi que a melhor forma de econo-mizar o consumo da bateria seria o sistema não estar sempre ligado. Como já deve ter notado, na lista de material para este projecto existem dois botões. E até agora no código apenas usámos um.O segundo botão tem o objectivo de cortar o consumo de potência da bateria; a não ser que o pressione, o sistema não vai ser alimentado. Os microcontroladores são dispositivos que “acor-dam” rapidamente; neste caso, a primeira coisa que vai ver no display é o logótipo Arduino e, pas-sados alguns segundos, vai indicar-lhe o número de dias que passaram desde que a planta foi regada pela última vez.Este botão significa também que, para o sistema armazenar a nova hora de rega, vai precisar de pressionar ambos os botões ao mesmo tempo. Um vai ligar o sistema, enquanto que o outro vai armazenar a hora corrente que está no RTC na EEPROM (Figura 7).

ConclusãoCom a desculpa de construir qualquer coisa com os componentes que houvessem, tivemos a hipó-tese de realizar testes com controladores capazes de controlar centenas de LEDs, assim como tem-porizadores. O próximo passo vai ser confirmar se o meu protótipo se ajusta ao propósito para o qual foi construído. Vou colocar este dispositivo na escada do meu prédio e ver se as plantas lá existentes adquirem uma vida melhor.Tenho a certeza que consegue arranjar múlti-plas utilizações para uma caixa com um display e dois botões, para além da descrita aqui neste artigo: desde relógios para jogos, até outra coisa qualquer. Adicione um besouro e mais alguns botões e transforme o projecto numa pequena consola de jogos.

(120714)

Artigo original: Arduino on Course (4) - Jan./Feb. 2013

Referências

[1] Projecto Botanicalls: http://botanicalls.com[2] Explicação de Krodal sobre o RTC DS1302:

http://arduino.cc/playground/Main/DS1302[3] Biblioteca RTC de Mark Sparks:

https://github.com/msparks/arduino-ds1302[4] Programa e bibliotecas:

www.elektor.com.pt/120174

Listagem 6.

[…]

int saveTimePin = 12;int saveTimeButton = LOW, saveTimeButtonOld = LOW;

void setup() { […] pinMode(saveTimePin, INPUT_PULLUP);}

void loop() { […] saveTimeButton = digitalRead(saveTimePin); if(saveTimeButton == LOW && saveTimeButtonOld == HIGH) { // we will use the Time stored in t to save the time EEPROM.write(0, t.yr); // position 0 – year EEPROM.write(1, t.mon); // position 1 – month EEPROM.write(2, t.date); // position 2 – day // clear the display display.cls(); // show a thank you text display.text(“nice!”, 2, 5); // stay here while(true) {}; } saveTimeButtonOld = saveTimeButton;}

Figura 7. “Hey, já passaram três dias desde a última vez que tive alguma água”.

Page 38: Elektor_340_2013

•Projecto

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

Wireless, sem botões: Bluetooth e touch screen

Elektorcardi♥gramaAndroid

Na sequência da descrição do hardware para a nossa nova interface ECG em tablets ou smartphones Android na edição passada, estamos agora de volta para falar sobre as funções do PIC e como o programa é executado, antes de analisarmos a aplicação Android. Sem entrar em muitos detalhes, vamos apenas falar o suficiente para incentivar os leitores a entrarem no código e começar a desenvolver aplicações Android.

2ª Parte

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

O que faz o PIC24?

Aquisição e transmissão das amostras (Figura 5)Aqui, são usados três módulos de hardware incluídos dentro do microcontrolador:

•O conversor A/D de 10 bits com o seu mul-tiplexador analógico.nnnnn

•A UART (Universal Asynchronous Receiver Transmitter) para comunicar com o módulo Bluetooth.

•O temporizador Timer1 para gerar os sinais P2HZ e CAL.

O PIC24 usados apenas tem um conversor A/D, mas este é precedido de um multiplexador ana-lógico que nos permite converter as três entra-das analógicas DI, DII e BATT_LEV. Este último

sinal é produzido por um divi-sor resistivo (R16/R17) que está mais ou menos a ½ da tensão da bateria.

O conversor A/D está confi-gurado no modo de auto-con-

versão com auto-scan: efec-tua a selecção, amostragem, e

conversão das três entradas sem envolver o processador.

A frequência de amostragem de 2 kHz é mais do que suficiente para

sinais de ECG.Os resultados das conversões são

armazenados em três variáveis de 16 bits: Chan_DI, Chan_DII e Vbatt.É gerada uma interrupção cada vez que termina as três conver-sões, ou seja, com uma fre-

quência de 2 kHz. A função de

Page 39: Elektor_340_2013

Electrocardi♥grama

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

atendimento de interrupção associada (_ADC1In-terrupt) efectua o seguinte processamento:•A cada 8 amostras, isto é, a uma frequência de

250 Hz: calcula os valores médios AvgSam-pleDI, AvgSampleDII e AvgVbatt. Este pro-cessamento permite reduzir o efeito de inter-ferência ocasional.

•Construção e transmissão da sequência de dados série assíncrona para o módulo Bluetooth.

A Figura 6 mostra o formato adoptado para esta sequência de 8 bytes. Os dados são delimitados pelos bytes 0xAA e 0x55. Estes serão usados no terminal Android para executar a sincroni-zação da sequência e assim identificar e ler as

amostras. O valor das amostras situa-se entre 0x0000 e 0x03FF (conversão de 10 bits em biná-rio natural), pelo que é impossível ter uma falha de sincronização.

Seleccionar as constantes de tempo do auto-zero (Figura 7)Esta função de software adapta constantemente a velocidade de alinhamento do sinal DI e DII (veja a secção sobre a parte analógica no pri-meiro artigo) para estabilizar cada ECG no ecrã tão rápido quanto possível.Para alcançar isto, a função MovingAverage-Calc() calcula a média móvel dos sinais digi-tais AvgSampleDI e AvgSampleDII sobre um período de 4 s. Os resultados de DI_Average e

Elektorcardi♥gramaAndroid

Nota: A numeração das ilustrações e os links seguem o esquema da primeira parte desta série de artigos.

calculatingaverage

across 8 samples

startChannel_DI

16

AvgSampleDI

ECG_Run

38,400 baud

250 HzFE = 2000 Hz

16

calculatingaverage

across 8 samples

startChannel_DII

16

AvgSampleDII

16

calculatingaverage

across 8 samples

startVbatt

VbattBATT_LEV

DII

DIADC

10 bits

constructingUARTdata

sequence

rate =250 timesper sec.

16

AvgVbatt

16

x 12

UART

120107 - 15

TX

8••

circular bufferfor 4 s of sampling

250 Hz

AvgSampleDI16

BufferDI_Average

BufferDII_Average

16

DII_Average16

circular bufferfor 4 s of sampling

calculatingmoving average

over final 4 seconds

MovingAverageCalc( )

MovingAverageCalc( )

calculatingmoving average

over final 4 secondsAvgSampleDII16

DI_Average

250 × 4 x 16-bit samples

selectingauto-zero

time constant

SetTimeAZ_DI

AI

BI

AII

BII

SetTimeAZ_DII

selectingauto-zero

time constant

120107 - 17

AvgSampleDI 0xAA

Natural binary Natural binary Natural binary 0x55

AvgSampleDII AvgVbatt

120107 - 16

Figura 5. Aquisição e transmissão das amostras DI e DII.

Figura 7. Selecção das constantes de tempo para o auto-zero.

Figura 6. Formato de dados para a UART.

Corações são trunfos – o que é apenas um PIC

Page 40: Elektor_340_2013

•Projecto

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

O módulo UART trata da conversão série/paralelo para cada byte da mensagem recebida. As fun-ções de recepção de bytes disponibilizadas nas bibliotecas da Microchip não usam interrupções. Assim, para evitar ciclos de espera nessas fun-ções, que gastaria algum tempo do processador desnecessariamente, estamos a usar a interrup-ção de recepção da UART. A função _U2RXIn-terrupt associada armazena os caracteres rece-bidos num buffer de dimensão suficiente (256 bytes). Estes caracteres são lidos prontamente pela função ReadMsgRXD2().A variável AnswerRN42 do tipo string é pre-enchida assim que uma mensagem completa é recebida (fim de sequência = CR-LF). A função TestMessageRX_BT() compara então esta com um dos comandos esperados.

De acordo com a mensagem detectada, ajusta o indicador ECG_Run, que valida a transmissão das sequências de dados (Figura 5), o sinal /PowerOff, ou o indicador Calib, que confirma a geração do sinal de calibração.

Geração do sinal de calibração (Figura 9)Os sinais P2HZ e CAL actuam no multiplexa-dor analógico IC9 (Figura 3, F2) para substi-tuir periodicamente as tensões captadas pelos eléctrodos com um sinal de calibração com uma amplitude de 1 mV. A frequência do sinal P2HZ é de 2 Hz com um ciclo de trabalho de 20% - ambos próximos dos valores de um sinal de ECG. O sinal produzido pelo microcontrolador é atenuado pela malha R21/R22/R65 de modo a obter uma ampli-tude de 1 mV e um valor médio de zero.O sinal CAL vai para o nível alto durante 10 s a cada minuto se o utilizador o tiver habilitado a partir de um tablet ou smartphone.

DII_Average são comparados com os valores esperados em repouso de modo a seleccionar, através de AI e BI ou AII e BII, uma constante de tempo para o auto-zero que seja mais rápida quando a diferença é maior.Recordemos o que queremos dizer quando fala-mos em “média móvel”. As amostras AvgSam-pleDI e AvgSampleDII são armazenadas num buffer circular de 4 s, isto é, neste caso, 4×250 = 1.000 palavras de 16 bits. A função Movin-gAverageCalc() calcula então a média aritmé-tica das últimas 1.000 amostras do buffer a uma velocidade suficiente.A última amostra corresponde ao momento do cálculo e dessa forma “move-se” com o passar do tempo.

Recepção de comandos vindosdo terminal (Figura 8)Existem apenas alguns comandos enviados de volta ao utilizador a partir do terminal:

•Comando Run/Stop para permitir ou bloquear a transmissão da sequência de dados.

•Função para desligar o interface. Tenha em atenção que o interface apenas pode ser des-ligado através do seu botão On/Off.

Comandos CAL0 e CAL1 para controlar a saída dos sinais de calibração.

commandreception 32 characters

AnswerRN42UART

ReadMsgRXD2( )

RXcomparison

with expectedmessages

TestMessageRX_BT( )

ECG_Run

PowerOff

Calib

settingECG_Runindicator

Calibindicatorsetting

"RUN"

"STOP"

"OFF""CAL1" "CAL2"

120107 - 18

producing theECG calibration

messages

_T1Interrupt( )

P2HZ

CAL

1 kHz

4 MHzCPU clock

Calib

4000••

120107 - 19

Figura 8. Recepção de comandos a partir de um smartphone Android ou tablet.

Figura 9. Geração dos sinaisde calibração.

Page 41: Elektor_340_2013

Electrocardi♥grama

www.elektor-magazine.pt | Setembro 2013 | 41

• Chamada MovingAverageCalc(): calcula média móvel DI_Average.

• Chamada SetTimeAZ_DI(): selecciona as constantes de tempo para auto-zero para o canal DI.

• Chamada MovingAverageCalc() e SetTi-meAZ_DII() para o canal DII.

Note que as funções de cálculo do valor da média são colocadas dentro do ciclo infinito, uma vez que o tempo necessário para as executar é bastante longo (26.800 ciclos de CPU, isto é, 6,7 ms). Em conformidade com as boas regras de programação, devemos evitar utilizar funções de interrupção para realizar processamentos longos. Por outro lado, as funções de interrupção não prioritárias não devem ser executadas durante este tempo porque podem levar a erros.A frequência de processamento do ciclo infinito é de cerca de 75 Hz, normalmente suficiente para calcular as médias móveis e seleccionar as constantes de tempo para auto-zero.

Interface homem / máquinaÉ muito difícil encontrar um terminal MMI mais user-friendly (e mais barato) do que um terminal Android (ou iPhone). A Elektor já publicou mui-tos artigos sobre este assunto e até mesmo um livro, cujo sucesso confirma a sua grande pro-cura: AndroidApps Programming Step by Step, de Stephan Schwark [4]. Convidamos os leitores interessados neste tema para explorar, melhorar e até mesmo criticar o código do Elektorcardio-grama disponível no site da Elektor [3]. É impos-sível descrever as 1.900 linhas de código em apenas algumas páginas, vamos dar aqui apenas algumas informações suficientes para incentivar os nossos leitores a mergulhar no código fonte e

Estes sinais são produzidos por um sequenciador embutido no microcontrolador:

•Um divisor de frequência (÷4.000) obtido usando uma estrutura de hardware (Timer1).

Uma função de interrupção _T1Interrupt acti-vada 1000 vezes por segundo. Se o indicador Calib estiver activo, as variáveis de contagem são incrementadas e comparadas com constan-tes para gerar os sinais P2HZ e CAL.

Monitorização do estado da ligação Bluetooth (Figura 10)Se não existir ligação Bluetooth, não existe nenhum interesse em converter e transmitir os sinais de ECG. O sinal STATUS (ESTADO) gerado pelo módulo Bluetooth fornece esta informação: ligação Ligada (1) ou Desligada (0).A função _CNInterrupt é activada sempre que o estado do sinal STATUS mude activando o indi-cador ECG_Run (Figura 5) e o bit de validação do conversor A/D ADON correspondentemente. A decisão de usar uma função de interrupção evita a necessidade de interrogar periodicamente o sinal STATUS poupando assim algum tempo de processamento.

Execução do firmwareO programa tem uma arquitectura convencional (contrariamente à aplicação Android, como vamos ver). Depois de inicializado, são efectuadas as seguintes operações:

•Inicializaçãodasvariáveis,portosdeentrada/saída, Timer1 para gerar os sinais de calibra-ção e a UART2 para comunicar com o módulo Bluetooth.

•ConfiguraçãodomóduloBluetoothpara38.400baud.

•InicializaçãodoconversorA/Dde10bits:fre-quência de amostragem para 2 kHz, auto--conversão e auto-scan para as três entradas analógicas.

•ValidaçãodainterrupçãoCN.•Oprogramaentraentãonumcicloinfinito:

• Chamada TestMessageRX_BT(): ler e pro-cessar qualquer ordem recebida do terminal.

Bluetoothlink statusdetection

_CNInterrupt

ECG_Run

ADONSTATUS

120107 - 20Figura 10. Detecção do estado da ligação Bluetooth.

Grave e visualize o seu próprio electrocardiograma no seu smartphone ou tablet!

Page 42: Elektor_340_2013

•Projecto

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

encontrar as funções descritas. Os programadores mais experientes serão capazes de fazer algu-mas modificações ou melhorias que pretendam. E talvez também incentive outros a começar a desenvolver aplicações Android.Como o gráfico dinâmico deslizante exige veloci-dade, mas o desempenho gráfico de aplicações desenvolvidas com o AppInventor é apenas medío- cre, pelo que tive que desistir da ideia de usar este ambiente de desenvolvimento gratuito. Mas recomendo-o para outras aplicações mais sim-ples, por exemplo, controlar um robô Mindstorm através de um módulo BT, ou para qualquer um dos nossos leitores que queiram começar a pro-gramar neste ambiente.Para este projecto, usei o Android SDK da Google, também gratuito. As ferramentas do SDK (para PC, Mac ou Linux) estão incluídas no popular IDE gratuito Eclipse. Demora algum tempo a efectuar uma instalação completa deste ambiente, mas é bastante simples se seguir o procedimento des-crito pela Google.É preciso estar bastante familiarizados com a linguagem Java e orientada por objetos (como o C++). Os leitores que já saibam escrever pro-gramas em C serão capazes de aprender esta lin-guagem se forem curiosos e não se importarem de despender de algum esforço. Existem alguns excelentes exemplos disponíveis na Internet [5], e também na minha página pessoal [6].

Desenvolver aplicações para AndroidDesenvolver uma aplicação para um sistema ope-rativo embebido como o Android exige um bom conhecimento da sua arquitetura (Figura 11). Os utilizadores finais apenas acedem directa-mente às aplicações instaladas no seu terminal (a camada superior na ilustração).Os projectistas podem usar estas aplicações para criar a sua própria aplicação, mas acima de tudo têm acesso a uma vasta colecção de APIs (Appli-cation Programming Interface) escritas em Java por forma a poder explorar os recursos do tablet. Estes são agrupados na aplicação. Essas APIs utilizam bibliotecas (em C e C++) que também assentam sobre um núcleo Linux.A originalidade do Android consiste no seu meca-nismo de execução, baseado numa máquina vir-tual Dalvik VM (VM). O princípio é muito próximo do da máquina virtual Java (JVM) usada nos PCs e Macs: o compilador Java gera ficheiros execu-táveis em bytecode independentes do tipo de processador utilizado. A Virtual Machine (VM),

Figura 11. Arquitectura do sistema Android (esta imagem, reproduzida aqui a uma escala reduzida apenas para informação do leitor, pode ser descarregada como um ficheiro de alta resolução).

Figura 12. Tudo o que precisa de fazer é o drag-and-drop dos elementos seleccionados na biblioteca de componentes gráfica na paleta (à esquerda) para o ecrã (à direita).

Page 43: Elektor_340_2013

Electrocardi♥grama

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

•Activa: actualmente em execução.•Suspensa: pausa após um evento de maior

prioridade (por exemplo, para apresentar uma mensagem de texto).

•Parada: em mudança para outra atividade. O sistema recorda-se do seu estado para que possa retornar à mesma actividade mais tarde, mas pode acontecer que termine a aplicação para liberar a memória do sistema.

A Figura 13 ilustra o ciclo de vida de uma acti-vidade, tipicamente num sistema multitarefa.A nossa aplicação ANDROECG possui três actividades:

•MainActivity inicia a execução da aplicação. Mostra o ecrã principal e os botões de controlo (ver imagens) e configura os serviços que a aplicação necessita.

•BtListActivity é executada a pedido e mostra uma lista com os periféricos BT emparelhados e selecciona o que pretendemos para o nosso interface.

•FileListActivity é executado quando se soli-cita a gravação ou leitura de dados ECG. Mos-tra uma lista com os ficheiros existentes, em conjunto com uma janela de edição para criar um ficheiro.

específica para cada tipo de dispositivo, executa em seguida o bytecode da aplicação que se irá comportar da mesma forma, independentemente do computador alvo.Também em Android, o bytecode gerado pelo compilador pode ser executado em todos os ter-minais, qualquer que seja o processador usado.Cada aplicação Android executa o seu pró-prio processo, com a sua própria instância da máquina virtual. O Dalvik foi escrito de forma que um dispositivo consegue executar várias VMs eficientemente.

Compor ecrãsCriar ecrãs para aplicações com a ajuda do SDK Android antes mesmo de ter escrito qualquer linha de código – que passo gratificante! Os progra-madores têm acesso a uma biblioteca de compo-nentes gráficos que apenas precisam de ordenar no ecrã da forma que pretenderem (Figura 12). As setas representam alguns exemplos drag-and--drop entre a paleta de componentes e o ecrã. O ecrã já tem a sua aparência final, mas não existe qualquer actividade ainda, uma vez que nesta altura ainda não foi gerada uma única linha de código!

EventosUma aplicação em C tem sempre uma função main() seguida por um ciclo infinito que chama à vez as principais funções a serem processadas, enquanto que a arquitetura de uma aplicação Android é baseada em eventos. Em Java sobre o Android, as funções são sempre executados após um evento (tocar no ecrã, a recepção de uma mensagem de texto, etc.) e nunca possuem ciclos infinitos. Até mesmo a função de inicializa-ção, quando a aplicação é executada, termina no final do seu processamento e devolve os recur-sos ao Android. O mecanismo de execução é então capaz de processar as outras aplicações em execução. Os eventos são geridos pelo sistema operativo e são fáceis de usar num ambiente de desenvolvimento.

ActividadesUma aplicação Android tem tantas actividades como os diferentes ecrãs que existem quando está a ser executada. Cada um desses ecrãs é formado a partir de botões, textos, gráficos e o processamento associado para o qual faz parte da atividade. Como o Android é um sistema mul-titarefa, uma actividade pode ter vários estados:

User navigatesto the activity

Apps with higher priorityneed memory

The activity isno longer visible

The activity is finishing orbeing destroyed by the system

User navigatesto the activity

User returnsto the activity

Another activity comesinto the foreground

Activitylaunched

Activityshut down

App processkilled

onCreate()

onRestart()

onResume()

onStop()

onDestroy()

onStart()

onPause()

Activityrunning

Figura 13. Ciclo de vida de uma actividade.

Page 44: Elektor_340_2013

•Projecto

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

serviço. Quando uma aplicação está a correr, o Android gera a thread UI (User interface) com a tarefa de detectar todos os eventos usados pela actividade (por exemplo, botões pressionados) e actua em conformidade.Cada actividade ou serviço pode criar novas thre-ads, a fim de realizar algum processamento espe-cífico nas mesmas.A nossa aplicação ANDROECG possui as seguin-tes threads adicionais:•ThreadGrapheYT trata da função de desli-

zamento dos dados de ECG no ecrã. Para um deslizar suave no ecrã é atribuída uma prio-ridade elevada.

•ConnectThread estabelece a ligação com o módulo BT remoto.

•ConnectedThread faz a gestão da actual ligação BT, em particular a recepção e trans-missão dos dados.

OrganizaçãodaaplicaçãoANDROIDECGA organização das actividades, serviços e threads na nossa aplicação, em conjunto com as ligações entre os mesmos (Intents) é menos complicada do que se poderia temer à primeira vista (Figura 14). Consulte também as imagens (Figura 15).MainActivity: O Android cria esta actividade quando a aplicação é executada e corre o método onCreate() (Figura 13). Este executa todas as

ServiçosEstes correspondem a tarefas executadas em plano de fundo que não necessitem de um ecrã ou de qualquer acção por parte do utilizador. Os serviços podem comunicar com as actividades através de Intents.Na aplicação ANDROECG, por exemplo, o ser-viço BluetoothService é responsável por gerir o módulo BT: estabelecer a ligação, enviar e receber os dados e fechar a ligação. O serviço Timer-1Service corresponde a uma tarefa periódica que é responsável por mostrar a tensão da bateria a cada segundo.Em Parameters no seu terminal Android, o menu Applications fornece uma lista dos serviços que estão a ser executados a cada momento.

ThreadsA thread, ou tarefa, é a base da programação concorrente, que consiste no desenvolvimento de uma aplicação em que as tarefas, do ponto de vista do utilizador, estão a correr em simul-tâneo. Cada tarefa reage a eventos (clicar sobre o ecrã, recepção de uma mensagem BT, etc.) independentemente das outras e realiza as ope-rações associadas.Cada thread inclui um método run() (função) que funciona um pouco como a função main() em C, excepto em programação concorrente onde existem tantos métodos run() como threads num

"MainActivity" • View "main" screen

Initializations • Management buttons

and menu • Managing messages

Selecting the Bluetooth device (already

matched or newly discovered)

"Timer1Service" Display

battery voltage every second

Bluetooth adapter tablet and

associated objects

"BluetoothService" BT module

management methods

"ConnectThread" Remote BT module

connection management

"ConnectedThread" Management

Bluetooth during connection

Memory : 6 samples table : DI, DII, DIII, aVR, aVL, and aVFBattery voltage

"GrapheYT"

Methods for drawing three ECG

waveforms from data memory and

time grid

"ThreadGrapheYT" "onDraw" method

from class "GrapheYT" calls

Screen touched

Device identifier

Activation

Adapter states

Messages to be transmitted :

"Run" or "Stop" Create

Start

Menu

Create and Start

Messages to be transmitted :

"Run" or "Stop"

Start

Stop

Bytes received from remote BT module Create

Create

ECG display graphs data

Start "onDraw" calls

Activation

Bytes received from remote BT

module and sorted

Bytes to be transmitted to

remote BT module

vBatt

"connect" call

Connection State

DiscoveryBroadcastReceiver

message

"FileListActivity" Selecting an existing file or edit the name of the new file in the folder

"/ datasECG"

Start

Name and file path

Discovery

New

Devices

Content of the 6 tables

Screen touched

Screen touched

"BtListActivity"

Figura 14. Organização das actividades, serviços e threads na nossa aplicação.

Page 45: Elektor_340_2013

Electrocardi♥grama

www.elektor-magazine.pt | Setembro 2013 | 45

inicializações necessárias e cria, entre outras coi-sas, os serviços BluetoothService e Timer1Ser-vice. Os outros métodos (ou funções) da acti-vidade tratam das ações dos botões de toque e funções de menu. Os últimos dois métodos tra-tam das mensagens enviadas quando as outras actividades são fechadas e pelos serviços, de modo a reagir/informar o utilizador (por exem-plo, perda de ligação BT).

BtListActivity: Esta actividade é criada quando pressiona o botão “Paired BT Devices” no menu (Figura 15). Abre uma nova janela, questiona o adaptador de terminal BT, e apresenta uma lista de periféricos emparelhados (Figura 16). Existe um botão que permite iniciar uma nova procura por novos dispositivos. A janela e a actividade fecham quando o periférico é seleccionado, sendo enviada uma mensagem com o seu identificador para a actividade principal. A actividade princi-pal inicia depois o serviço BluetoothService para estabelecer a ligação com o nosso interface ECG.

BluetoothService: Este serviço é criado pela actividade principal assim que o adaptador BT é activado. É responsável por estabelecer a liga-ção e fazer a sua gestão. Para isso, cria algu-mas threads:

•ConnectThreadé iniciada assim que o perifé-rico é seleccionado. Esta thread precisa que o adaptador BT estabeleça uma ligação usando o perfil SPP. Quando isto é feito (o que pode demorar alguns segundos), esta thread é ter-minada antes de iniciar a próxima.

•ConnectedThreadpermanece activa durante todo o tempo em que ligação com o interface ECG está aberta. Esta é responsável em par-ticular por executar os métodos write e run para, respectivamente, processar a transmissão e recepção dos dados a trocar pelo interface BT. O método run detecta cada sequência de amostras no fluxo de dados recebido, trans-mitidos pelo interface a uma velocidade de 250 Hz (Figura6) de modo a atribuir e em tempo--real cada uma das seis tabelas de amostras. A dimensão de cada uma destas tabelas per-mite gravar até 10 minutos de actividade car-díaca. A thread é terminada se a ligação se perder ou quando a aplicação for fechada.

GrapheYT: instanciado na actividade principal, esta classe compreende as declarações de vari-

Figura 15. Funções do menu: ligação B, sair, gravar e carregar ECGs, apagar ECG.

Figura 16. A BtListActivity faz o display da lista de periféricos já emparelhados, e se for preciso faz a procura de outros periféricos que estejam no alcance do dispositivo.

Page 46: Elektor_340_2013

•Projecto

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

Algoritmo de actualização do gráfico de ECGDe modo a entender correctamente o algoritmo, precisa de ter firmado na sua mente o modo como as tabelas que armazenam os últimos 10 minutos de actividade cardíaca são utilizadas:•Cada uma das derivações DI, DII, DIII, aVR, aVL e aVF possui a sua própria tabela com 10 minutos de amostras.•Cada uma destas é atribuída a uma nova amostra ECG para cada sequência de dados recebida pelo módulo BT, ou seja,

250 vezes por segundo.•Em funcionamento normal (cursor à direita), a última amostra adquirida tem que ser sempre exibida na extremidade direita

do ecrã.•Para obter um gráfico

deslizante dinâmico, a função de display (onDraw) representa as últimas amostras me-morizadas nas tabelas, começando pela mais recente. De certa forma, é como voltar atrás no tempo.

Assim, a velocidade de deslocamento é de 250 pixels por segundo (Zoom ×1).

Que trabalho é que o processador do terminal Android precisa de fazer para conseguir fazer o display deslizante de um ECG? Neste exemplo, a dimensão do gráfico de ECG é de 722x403 pixels. Com estas condições, cada vez que o método onDraw é chamado, precisamos de:•apagar todo o ecrã,

isto é, os 722×403 = 290.966 pixels,

• fazer o display dos nomes das diferentes derivações;

• fazer o display dos eixos que se movem com as curvas;

• fazer o display de até três sinais de ECG, ou seja, para cada um dos 722 segmentos;• calcular o ritmo cardíaco, e apresenta-lo!

E é tudo... O número de instruções executadas pelo processador, auxiliado em muitos casos pelo seu coprocessador gráfico, é gigantesco. Além disso, para se obter um deslizamento suave, a frequência com que o método onDraw é chamado tem que ser significativamente maior do que 10 Hz! Apenas há alguns anos atrás, um potente PC de escritório não teria sido capaz de conse-guir suportar essa velocidade de trabalho. Hoje, uma dessas pequenas maravilhas que cabem no seu bolso consegue facilmente fazer isso, tratando ainda de todas as outras aplicações activas...

onDraw

Análise da janelaAtribuição de “indexSample”: indíce na tabela ECG do canto superior direitoLimpa todo o ecrãApresenta os nomes das derivações no canto superior direitoCálculo das coordenadas para os pontos iniciais do ECG do lado direito da janelaPara todos os pixels do ecrã, da direita para a esquerda

indexSample = indexSample – zoom: indíce na tabela ECG da próxima amostraCálculo de coordenadas para os pixels correspondentes no ecrãDesenha eixos: linhas contínuas a cada segundo, e linhas interrompidas a cada 200 msDesenha linhas de ligação entre duas amostras de cada ECG

Tabela de amostra ECG

Indíce mais recente de amostra ECG

Figura 17. Algoritmo de refrescamento do gráfico.

Page 47: Elektor_340_2013

Electrocardi♥grama

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

partir do Serviço Elektor já montada, na forma de um módulo pronto a usar [7]. Os ajustes não requerem nenhuma capacidade especial, mas vamos prestar uma especial atenção sobre todos os eléctrodos. O propósito deste sofisticado dis-positivo é na verdade colocar ao alcance de todos a possibilidade de poder realizar um ECG.

(130227)

Internet

[3] www.elektor.com.pt/120107 e www.elektor.com.pt/130227

[4] Android Apps | programming step by step, Stephan Schwark www.elektor.com.pt/android

[5] Le Site du Zéro http://www.siteduzero.com/informatique/ tutoriels/apprenez-a-programmer-en-java ou http://goo.gl/OVZQY (em francês)

[6] Página do autor: http://electronique.marcel.free.fr/

[7] www.elektorpcbservice.com/ (check this website link with .pt or without .pt)

áveis e métodos necessários para fazer o display do ECG. Podemos mencionar em particular:

•As 6 tabelas usadas para armazenar os 10 minutos do ECG.

•O método onDraw() é chamado periodicamente pela thread ThreadGrapheYT, responsável por fazer o display do ECG seleccionado, junta-mente com os eixos (Figura 17).

ThreadGrapheYT é iniciada quando a classe GrapheYT é criada, quando a aplicação é lan-çada. No seu método run, inclui a chamada ao método onDraw mencionado acima. É atribuída uma prioridade elevada para garantir um movi-mento suave do ECG. No entanto, a velocidade de execução do seu método run é determinada pelo sistema Android. Se existirem outras threads a fazer grandes pedidos sobre o CPU do termi-nal, os traços do ECG podem mover-se de forma brusca no display.

Timer1Service: Esta classe cria um serviço que executa uma tarefa relativamente simples a cada segundo: fazer o display da tensão da bateria no interface de forma digital e gráfica (parte supe-rior do ecrã).

FileListActivity: Esta actividade é criada quando o utilizador escolhe gravar ou carregar relatórios de ECG a partir do menu. Mostra uma lista de ficheiros existentes, juntamente com uma janela de edição para editar o nome de um novo ficheiro (Figura 18). A janela e a actividade são termina-das quando o ficheiro é seleccionado, depois de enviar uma mensagem com o nome e natureza da operação (gravar ou carregar) para a activi-dade principal. A actividade principal executa em seguida a operação solicitada.

O meu coração faz boom-boomSem querer de alguma forma esgotar o assunto, chegamos ao fim da descrição do nosso Elektor-cardiograma. Na próxima edição, vamos final-mente passar ao lado prático com a construção, ajustes e algumas instruções. Para o interface, isto vai ser muito rápido, uma vez que a placa de circuito impresso finalizada está disponível a

Figura 18. Selecção do ficheiro para gravar ou carregar relatórios de ECG.

Um projecto para o seu coração

Page 48: Elektor_340_2013

•Doméstico

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

O esquemático do circuito do módulo principal, apresentado na Figura 3, parece um controlador industrial muito simples com um mínimo de liga-ções de E/S externas. Uma excepção notável é o circuito gerador de áudio, que é mais complexo do que poderia esperar, por exemplo, num con-trolador programável de utilização geral.

A escolha do microcontrolador foi explicada na introdução técnica. O AT89C5131 provém da famí-lia 8051da Intel e consequentemente tem as carac-terísticas do núcleo 8051, incluindo as configura-ções bizarras, e inexplicáveis, dos portos de E/S. O porto 0, por exemplo, é em colector aberto, necessitando por isso de resistências de pull-up

Parte 2

Michael J. Bauer (Austrália)

7-uP: Relógio com alarme/ interruptor temporal

Y1

24MHzC09

22p

C10

22p

TP4

R03

2k2

S2

ISP

R01

100R

C07

10n

C06

2n2

C08

1u

R04

1k5

R05

27R

R06

22R

J2

D–

GND

D+

VBUS

23

4

1

5 6

D1

1N5817

+5V

P1.5/CEX2/KIN5/MISO

P1.7/CEX4/KIN7/MOSIP1.6/CEX3/KIN6/SCK

P1.1/T2EX/KIN1/SS

AT89C5131A-S3SUM

P3.3/INT1/LED0

P1.3/CEX0/KIN3P1.4/CEX1/KIN4

P1.2/ECI/KIN2

P3.5/T1/LED1P3.6/WR/LED2P3.7/RD/LED3

P1.0/T2/KIN0

PLCC-52 SKT

P3.2/INT0P3.1/TXD

P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7

P2.2/A10P2.3/A11P2.4/A12P2.5/A13

P2.7/A15

P0.0/AD0

P2.6/A14

P4.0/SCLP4.1/SDA

P3.0/RXD

P3.4/T0

P2.0/A8P2.1/A9

USB D+USB D–

XTAL2 XTAL1

U1

AVDD

AVSS

VREF

UVSS

UCAP

PLLFPSEN

VDD ALE

VSS

RST

45

29

12 1319

16 17

EA

26

303132333539

27

444240383736

24

2322

25

1011

15

47

52

48495051

14

18

20

2128

41

43NC34

NC 46

1239

456

78

R02

10k

TP5H1

“ESTADO USB”

R16

10k

R17

10k

RXDTXDINT0DE/RECANCEL

XTAL

2

ENCAENCB

SSDISPSSEXT1SSEXT2FREQ0FREQ1FREQ2ALMOUTDOUTA

SCLSDA

CMPIN1CMPIN2CMPIN3DOUT1DOUT2DOUT3DOUT4

PWRONVBUSDMUTEPWM0PWM1MISOSCK

MOSI

RESET

+5V

USB-B

S1

RESET

R07

10k

+5V

C11

100nRESET

VBUS

C04

100n

+5V

CMPIN1CMPIN2CMPIN3DOUT1DOUT2DOUT3DOUT4

P1

1011 1213 1415 1617 1819 20

1 23 45 67 89

DIL-20

XTAL2PWM1SCKSSEXT1FREQ0FREQ2TXDSCL

MISOMOSI

SSEXT2FREQ1

RXDINT0SDA

+5V

(P1.4)(P1.6)(P2.1)(P2.3)(P2.5)(P3.1)(P4.0)

RESET(P1.5)(P1.7)(P2.2)(P2.4)(P3.0)(P3.2)(P4.1)

+VIN

P212345678

MÓDULO DO MOSTRADORSIL-8

MÓDULO DE EXPANSÃO

MISOSCK

PWM0

MOSISSDISPSENSOR

(CEX0)(P1.5)(P1.6)(P1.7)(P2.0)

J1

3

2

1

9V DC

F1

500mA

+VEX

D2

1N5817 +5V

C12

10n

R08

4k7

P51234

R09

100R

+5V

J3123456

+VEX

SIL-4

C01

220u

D3

1N5817

+VIN

TP1

(+VIN)

L1

100uH

C02

100n

C03

220u25V 16V

R15

3k0C05

4n7

R14

1k0

TP3+5V

TP2GND 0V

+5V

Q1

BC547R11

10k

D5

4V7

R10

10kC13

100n

+VEX

Q2

BC547R13

10k

R12

47kC14

100n

P61234

SIL-4

S3Ligar/Desligar D4

1N5817

+5V

BT1

3V6...4V5

(3x AA)

SN75176

U3

VCC

GND

RE

DE

5

43

7

6

8

21 R

D

A

B

LM2594N-ADJU2

OUT

GND

VIN

EN FB

NC NC NC

6

7 8

5 4

1 2 3

TLC7555

U7

DIS

THR

OUT

GND

VCC

TRCV

2

7

6

4R

3

5

8

1

+5V

C22

100n

C23

100n

R28

100k

C24

6n8

R27

300k

R29

200kU8.A

13

2

1

U8.B

5

3

4

C25

6n8

U8.D

12

1011

U8.C

6

9

8

D7

1N4148

R30

4k7

+5V

Q4

BC547

Q6

BD

Q5

BC557

R31

10k

R32

2k2

+5V

R33

330R

R34

2k2

D6

1N5817139

R36

10R

1W

P812

ALTIFALANTESIL-2

R35

330R

C27

220u25V

C26

100n

+VIN

U814

7U5

9

8

+5V +VEX

J5 1

2

6

345

123

4 56

DIN6

DISPOSITIVO

J4 6

7

12345

1245

6

3 7

DIN7

DISPOSITIVO INTERRUPTOR

TEMPORAL

U4.A1

21

U5.A1

161

U4.B3

41

U5.B2

151

U4.C5

61

U5.C3

141

U4.D9

81

U5.D4

131

U4.E11

101

U5.E5

121

U4.F13

121

U5.F6

111R24

4k7

R25

22k

Q3

BD140

D8

1N58174

52 U6.A

6

71 U6.B

8

914 U6.C

10

1113 U6.D

R20

47k

R22

47k

C19

100n

R21

47k

C20

100n

R23

47k

R19

10k

R18

22k

+5V

C17

100n

C18

10u 16V

C21

10n

+VIN

U63

12

C15

100n

U6 = LM339

+VEX

DOUTA

DOUT1

DOUT2

DOUT3

DOUT4

ALMOUT

+VBATT

+VBATT

CMPIN1

SENSOR

R26100kPWM1

CMPIN3

CMPIN2

U5 = ULN2003U4 = 74HC04

U414

7

C16

100n

ALARME

(P2.7)

(P0.4)

(P0.5)

(P0.6)

(P0.7)

(P2.6)

(P0.1)

(P0.0)

(CEX1)

(P0.3)

(P0.2)(1V6)

RA1

8x 22k

123456789

FREQ1

P3123

SIL-3CODIFICADOR

ROTATIVO

ENCA

ENCB

P412

BOTÃO SNOOZE/CANCELARSIL-2

CANCEL

PWRO

N

VBUS

PWRON

VBUSD

DE/RE

TXDRXD

FREQ0

FREQ2

PWM1

MUTE

(P2.3)

(P2.4)

(P2.5)

(CEX1)

(P1.2)

CMPIN0

CMPIN0

CMPIN0

MOD-6P4C

RS422/485Barramento Série

INTERFACE SÉRIE(INTERNO)

100149 - 11

ALE

AUXOUT

(TSW.OUT1)

(TSW.OUT2)

(TSW.OUT3)

(TSW.OUT4)

(GP.IN1)

(GP.IN2)

Figura 3. Diagrama do circuito do módulo principal.

Page 49: Elektor_340_2013

Relógio com alarme/interruptor temporal

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

ligadas aos pinos quando estes funcionarem como saídas. Outros portos têm resistências de pull--up internas “fracas” (~25 kΩ) que não fornecem corrente suficiente para a maioria das aplicações.Mesmo assim, o AT89C5131 tem bastantes fun-cionalidades interessantes, incluindo um núcleo de processamento muito rápido. Com um cristal de 24 MHz e utilizando o modo de relógio X2, o microcontrolador funciona a 48 MHz! Este disposi-tivo contém muitos periféricos extra, por exemplo, USB, temporizador Timer2, PCA (utilizado para saí-das PWM), SPI e TWI (I2C). O AT89C5131 fornece um bloco de memória flash separado (4 kB) para

um bootloader. O microcontrolador já vem com um bootloader USB pré-programado no bloco de memória extra, permitindo ao utilizador programar o seu código na memória flash principal (32 kB) através de um porto USB, isto é, sem hardware de programação adicional. Se o microcontrolador foi reinicializado quando o pino PSEN# estiver no nível baixo (utilizando o botão ISP), é inicializado o bootloader em vez do código da aplicação.Os sinais TX e RX da UART estão disponíveis no conector de expansão (P1), e também na barra de pinos de 4 vias, caso o utilizador pretenda ligar um adaptador para interface série RS232. Os sinais da UART também estão disponíveis atra-vés de um transmissor/receptor RS422/485 (U3 = SN75176) para fornecer suporte a acessórios externos através do barramento série. A primeira versão do firmware que foi disponibilizada não inclui nenhuma funcionalidade que utilize o barra-mento série RS422/485, pelo que o transmissor/receptor (U3) e o conector do porto do barramento (J3) podem ser omitidos até essas funcionalidades serem implementadas.É fornecido um circuito para monitorizar a tensão de alimentação DC. Se esta cair abaixo de 6 V, o transístor Q1 fica ao corte, levando o sinal lógico PWRON# ao nível lógico alto através da resistência de pull-up do pino do microcontrolador. O firm- ware monitoriza este sinal e faz ligar um aviso (PF) se a tensão de alimentação cair abaixo do valor mínimo necessário. O sinal PWRON# também está ligado ao pino EN# do regulador de tensão comutado de 5 V (U2 = LM2594). Se a fonte de alimentação externa de 9 V for removida, o regu-lador de tensão de 5 V é desligado, permitindo ao barramento de 5 V ser alimentado a partir da ligação USB ou a partir da bateria.A linha USB Vbus é analisada pelo circuito que con-tém o transístor Q2. Se a alimentação USB não estiver presente, Q2 fica ao corte, levando o sinal VBUSD# ao nível alto (flutuante). O firmware lê este sinal e adapta o seu funcionamento de acordo com este estado. O estado do sinal USB Vbus tam-bém pode ser utilizado pelo firmware para controlar uma (ou mais) saídas de controlo de dispositivos.

Entradas e saídas lógicas para dispositivosSão fornecidas seis saídas lógicas, nos conectores J4 e J5. Quatro saídas dos interruptores temporais são sinais de controlo activados por nível baixo, que podem absorver até 50 mA cada. A intenção é controlar optoacopladores pertencentes a um módulo AC de potência, com entradas isoladas.

Y1

24MHzC09

22p

C10

22p

TP4

R03

2k2

S2

ISP

R01

100R

C07

10n

C06

2n2

C08

1u

R04

1k5

R05

27R

R06

22R

J2

D–

GND

D+

VBUS

23

4

1

5 6

D1

1N5817

+5V

P1.5/CEX2/KIN5/MISO

P1.7/CEX4/KIN7/MOSIP1.6/CEX3/KIN6/SCK

P1.1/T2EX/KIN1/SS

AT89C5131A-S3SUM

P3.3/INT1/LED0

P1.3/CEX0/KIN3P1.4/CEX1/KIN4

P1.2/ECI/KIN2

P3.5/T1/LED1P3.6/WR/LED2P3.7/RD/LED3

P1.0/T2/KIN0

PLCC-52 SKT

P3.2/INT0P3.1/TXD

P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7

P2.2/A10P2.3/A11P2.4/A12P2.5/A13

P2.7/A15

P0.0/AD0

P2.6/A14

P4.0/SCLP4.1/SDA

P3.0/RXD

P3.4/T0

P2.0/A8P2.1/A9

USB D+USB D–

XTAL2 XTAL1

U1

AVDD

AVSS

VREF

UVSS

UCAP

PLLFPSEN

VDD ALE

VSS

RST

45

29

12 1319

16 17

EA

26

303132333539

27

444240383736

24

2322

25

1011

15

47

52

48495051

14

18

20

2128

41

43NC34

NC 46

1239

456

78

R02

10k

TP5H1

“ESTADO USB”

R16

10k

R17

10k

RXDTXDINT0DE/RECANCEL

XTAL

2

ENCAENCB

SSDISPSSEXT1SSEXT2FREQ0FREQ1FREQ2ALMOUTDOUTA

SCLSDA

CMPIN1CMPIN2CMPIN3DOUT1DOUT2DOUT3DOUT4

PWRONVBUSDMUTEPWM0PWM1MISOSCK

MOSI

RESET

+5V

USB-B

S1

RESET

R07

10k

+5V

C11

100nRESET

VBUS

C04

100n

+5V

CMPIN1CMPIN2CMPIN3DOUT1DOUT2DOUT3DOUT4

P1

1011 1213 1415 1617 1819 20

1 23 45 67 89

DIL-20

XTAL2PWM1SCKSSEXT1FREQ0FREQ2TXDSCL

MISOMOSI

SSEXT2FREQ1

RXDINT0SDA

+5V

(P1.4)(P1.6)(P2.1)(P2.3)(P2.5)(P3.1)(P4.0)

RESET(P1.5)(P1.7)(P2.2)(P2.4)(P3.0)(P3.2)(P4.1)

+VIN

P212345678

MÓDULO DO MOSTRADORSIL-8

MÓDULO DE EXPANSÃO

MISOSCK

PWM0

MOSISSDISPSENSOR

(CEX0)(P1.5)(P1.6)(P1.7)(P2.0)

J1

3

2

1

9V DC

F1

500mA

+VEX

D2

1N5817 +5V

C12

10n

R08

4k7

P51234

R09

100R

+5V

J3123456

+VEX

SIL-4

C01

220u

D3

1N5817

+VIN

TP1

(+VIN)

L1

100uH

C02

100n

C03

220u25V 16V

R15

3k0C05

4n7

R14

1k0

TP3+5V

TP2GND 0V

+5V

Q1

BC547R11

10k

D5

4V7

R10

10kC13

100n

+VEX

Q2

BC547R13

10k

R12

47kC14

100n

P61234

SIL-4

S3Ligar/Desligar D4

1N5817

+5V

BT1

3V6...4V5

(3x AA)

SN75176

U3

VCC

GND

RE

DE

5

43

7

6

8

21 R

D

A

B

LM2594N-ADJU2

OUT

GND

VIN

EN FB

NC NC NC

6

7 8

5 4

1 2 3

TLC7555

U7

DIS

THR

OUT

GND

VCC

TRCV

2

7

6

4R

3

5

8

1

+5V

C22

100n

C23

100n

R28

100k

C24

6n8

R27

300k

R29

200kU8.A

13

2

1

U8.B

5

3

4

C25

6n8

U8.D

12

1011

U8.C

6

9

8

D7

1N4148

R30

4k7

+5V

Q4

BC547

Q6

BD

Q5

BC557

R31

10k

R32

2k2

+5V

R33

330R

R34

2k2

D6

1N5817139

R36

10R

1W

P812

ALTIFALANTESIL-2

R35

330R

C27

220u25V

C26

100n

+VIN

U814

7U5

9

8

+5V +VEX

J5 1

2

6

345

123

4 56

DIN6

DISPOSITIVO

J4 6

7

12345

1245

6

3 7

DIN7

DISPOSITIVO INTERRUPTOR

TEMPORAL

U4.A1

21

U5.A1

161

U4.B3

41

U5.B2

151

U4.C5

61

U5.C3

141

U4.D9

81

U5.D4

131

U4.E11

101

U5.E5

121

U4.F13

121

U5.F6

111R24

4k7

R25

22k

Q3

BD140

D8

1N58174

52 U6.A

6

71 U6.B

8

914 U6.C

10

1113 U6.D

R20

47k

R22

47k

C19

100n

R21

47k

C20

100n

R23

47k

R19

10k

R18

22k

+5V

C17

100n

C18

10u 16V

C21

10n

+VIN

U63

12

C15

100n

U6 = LM339

+VEX

DOUTA

DOUT1

DOUT2

DOUT3

DOUT4

ALMOUT

+VBATT

+VBATT

CMPIN1

SENSOR

R26100kPWM1

CMPIN3

CMPIN2

U5 = ULN2003U4 = 74HC04

U414

7

C16

100n

ALARME

(P2.7)

(P0.4)

(P0.5)

(P0.6)

(P0.7)

(P2.6)

(P0.1)

(P0.0)

(CEX1)

(P0.3)

(P0.2)(1V6)

RA1

8x 22k

123456789

FREQ1

P3123

SIL-3CODIFICADOR

ROTATIVO

ENCA

ENCB

P412

BOTÃO SNOOZE/CANCELARSIL-2

CANCEL

PWRO

N

VBUS

PWRON

VBUSD

DE/RE

TXDRXD

FREQ0

FREQ2

PWM1

MUTE

(P2.3)

(P2.4)

(P2.5)

(CEX1)

(P1.2)

CMPIN0

CMPIN0

CMPIN0

MOD-6P4C

RS422/485Barramento Série

INTERFACE SÉRIE(INTERNO)

100149 - 11

ALE

AUXOUT

(TSW.OUT1)

(TSW.OUT2)

(TSW.OUT3)

(TSW.OUT4)

(GP.IN1)

(GP.IN2)

Page 50: Elektor_340_2013

•Doméstico

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

trolador para fornecer uma tensão de referência variável. Um filtro passa-baixo (R26, C21) remove as componentes AC (47 kHz) do sinal PWM, para que o nível DC resultante possa ser controlado pelo ciclo de trabalho. A tensão de referência PWM é injectada nas entradas inversoras (-) dos dois comparadores U6A e U6B. As tensões analógicas a serem medidas são injectadas nas entradas não inversoras (+) dos mesmos comparadores. Ao variar a tensão de referência a intervalos regula-res, o firmware consegue determinar o valor das tensões de entrada. A precisão das conversões é determinada pela resolução (pela linearidade e pelo ruído) da tensão de referência gerada a par-tir do sinal PWM. O melhor que podemos esperar é um erro de 1%. Devido à constante de tempo do filtro, o tempo de estabilização da tensão de referência, depois de uma variação no ciclo de trabalho do sinal PWM, é de alguns milissegun-dos. Consequentemente, o tempo de conversão é bastante lento em relação ao de um conversor A/D em hardware. Felizmente, nesta aplicação a velocidade não é importante.

A saída de 9 V activada por alarme é activada ao nível alto e pode fornecer até 500 mA (limitados pelo fusível rearmável F1). Os correspondentes pinos do porto de saída do microcontrolador são auxiliados por um inversor CMOS (U4), porque estes pinos não conseguem fornecer corrente sufi-ciente para controlar as entradas do controlador de periféricos U5 (ULN2003A).As duas entradas lógicas são implementadas pelos comparadores U6C e U6D. O limiar de comutação é configurado para +1,6 V. As entradas externas são filtradas por malhas RC para proteger os pinos de entrada do microcontrolador contra transitórios externos (por exemplo, descargas electrostáticas).

Entradas analógicasO microcontrolador AT89C5131 não tem entradas analógicas (conversor A/D). A aplicação do desper-tador necessita de duas entradas analógicas para monitorizar o sensor de luminosidade ambiente e a tensão da bateria de segurança. As conversões A/D são implementadas por um algoritmo no firm- ware, que utiliza uma saída PWM do microcon-

HDSP-523E

HD1

CC1 CC2

DP2

DP1

16

14 13

B1A1

15

C1 D1 E1 F1

18 17

G1

11

A2 B2

10

C2 D2 E2 F2

12

G2

93 2 1 4 8 6 5 7

HDSP-523E

HD2

CC1 CC2

DP2

DP1

16

14 13

B1A1

15

C1 D1 E1 F1

18 17

G1

11

A2 B2

10

C2 D2 E2 F2

12

G2

93 2 1 4 8 6 5 7

74HC595

U3

LCLKSCLK

RST

VCC

GND

SDI

SQHOE

QA

14

15

13

10

QDQC

QE

QH

QB

QFQG

1112

16

65

1

7

4

23

8

9

74HC595

U4

LCLKSCLK

RST

VCC

GND

SDI

SQHOE

QA

14

15

13

10

QDQC

QE

QH

QB

QFQG

1112

16

65

1

7

4

23

8

9

ULN2003

U5

GND

COM

10111213141516I1

I2I3I4I5I6I7

O1O2O3O4O5O6O7

9

123

67

45

8

+5V

+5V

H01"MO"

H02"TU"

H03"WE"

H04"TH"

H05"FR"

H06"SA"

H07"SU"

H08"PF"

H09"sec"

H10"24h"

H11"PM"

H12"OFF"

H13"ON"

H14"AL"

H15 Ponto

H16 Ponto

H17"A1"

H18"A2"

H19"A3"

H20"A4"

H21"S1"

H22"S2"

H23"S3"

H24"S4"

1

2

ASEG0

ASEG1

ASEG2

ASEG3

ASEG4

ASEG5

ASEG6

ASEG7

ASEG0

ASEG1

ASEG2

ASEG3

ASEG4

ASEG5

ASEG6

ASEG7

ASEG0

ASEG1

ASEG2

ASEG3

ASEG4

ASEG5

ASEG6

ASEG7

ASEG0ASEG1ASEG2ASEG3ASEG4ASEG5ASEG6ASEG7

C3

100n

C4

100n

74HC165

CLK INH

SH/LD

U1 CLK

SER

VCC

GND

16

11121314 QH

QH

1015

ABCDEFGH

8

1

3456

2

97

+5V

C1

100n

RA1

8x 22k

1

23456789

+5V

S5

MENUSAIR

S1

TEMPORIZADORRELÓGIO

S6

CONFIGURAROK

S2

VERIFICAÇÃODE ALARME

S7

(–)<<

S3

LIGAR/DESLIGAR

S8

(+)>>

S4

INTERRUPTORTEMPORAL

12345678

P1

TP1 +5V

Q1

BPW85C

+5V

R1

100k

U2.A

EN

2 3

1R2

3k3

+5V

+5VU2.B

EN5 6

4

R3

3k3

U2.C

EN

98

10

U2.D

EN

12 11

13U214

7

C2

100n

+5V

+5VPWM0MISOSCKMOSISSDISPSENSOR

(CEX0)

SW8SW7SW6SW5SW4SW3SW2SW1

S9

P2123

A

B

SIL-3

SIL-8

U2 = 74HC125

SENSOR DE LUMINOSIDADE AMBIENTE CODIFICADOR

ROTATIVO

SCK

PWM0

SSDISPMOSI

100149 - 12

MODU

LO P

RINC

IPAL

De/P

ara

Figura 4. Diagrama do circuito do módulo de visualização.

Page 51: Elektor_340_2013

Relógio com alarme/interruptor temporal

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

no firmware. O controlador presente no firmware é capaz de sintetizar uma envolvente de amplitude para os sons de alarme. Os parâmetros definíveis pelo utilizador determinam o início (inclinação), a sustentação (tempo), a paragem (inclinação), e período de espera (tempo), de forma semelhante aos sintetizadores dos anos 70 (pelos quais o autor sente nostalgia). O período de espera determina o intervalo de silêncio entre sucessivos toques de um som de alarme (que não é o mesmo que o intervalo de snooze, que é configurável indepen-dentemente deste).Para além disso, o firmware fornece um meio de modular, em amplitude e/ou em frequência, a amplitude do sinal de áudio através de sinais modulantes (virtuais), cujo período pode ser con-figurado em múltiplos inteiros de dois milissegun-dos (por exemplo, 2, 4, 6, 8… ms), até 500 ms. Resumindo, um simples circuito gerador de áudio de baixo custo, em conjunto com uma rotina de controlo inteligente em firmware, fornece uma apelativa e diversa gama de efeitos sonoros (e alguns não tão apelativos!).

Descrição do circuito – módulo de visualizaçãoO tipo de mostrador utilizado contém 4 dígitos de 7-segmentos, porque que é considerada uma solu-ção de baixo custo fornecendo uma visualização adequada, e porque que esta tecnologia permite um controlo variável do brilho. Um LCD gráfico iluminado com luz branca ou multicolor teria sido mais estético, mas os custos extra foram consi-derados injustificados, e a continuidade do forne-cimento de painéis LCD pode ser um problema.Na Figura 4 pode ver que o mostrador numérico é implementado a partir de dois dispositivos de dois dígitos cada (HDSP-523X da Avago), dispo-níveis em três cores: vermelho, verde ou ama-relo. Estão disponíveis mostradores, compatíveis pino a pino, de outros fabricantes. Os indicado-res com iluminação de fundo são realizados por 24 LEDs discretos de 5 mm (redondos), com lente de difusão e de várias cores.Os mostradores de 7-segmentos e os indicadores LED são multiplexados em cátodo comum numa matriz de 7x8. Os cátodos são controlados (acti-vados ao nível baixo) por um controlador periférico de 7 elementos (U5 = ULN2003A), que é apenas um conjunto de sete transístores Darlington com entradas compatíveis com as famílias lógicas TTL/CMOS. As linhas de controlo dos ânodos são con-troladas por um registo de deslocamento CMOS.

Gerador de áudio e amplificador de potênciaFoi construído um oscilador de onda rectangular a partir de um circuito integrado temporizador CMOS (U7 = TLC555). A frequência do sinal de saída do temporizador de áudio é controlada comu-tando a resistência e o condensador da malha de temporização. Através dos sinais de saída lógicos FREQ2, FREQ1, e FREQ0 do microcontrolador, são seleccionáveis oito frequências, entre 500 Hz e 2 kHz (aproximadamente). É utilizado um interrup-tor analógico CMOS quádruplo (U8 = CD4066B) para ligar/desligar as resistências R27 e R29, e o condensador C25. As frequências escolhidas são harmonicamente relacionadas. A amplitude do sinal de áudio é controlada por um sinal PWM gerado pelo microcontrolador (CEX1), injectado na entrada de controlo do interruptor analógico U8D, que corta pedaços do sinal de áudio com formato rectangular. O ciclo de trabalho deste sinal PWM determina o nível efectivo presente na saída de áudio. A frequência do sinal PWM é de cerca de 47 kHz; bem afastada da gama de frequências audível pelos humanos, e também fora da gama de frequências do altifalante (o próprio altifalante actua como um filtro, removendo o sinal de 47 kHz presente no sinal PWM). O ciclo de trabalho do sinal PWM é variável numa gama de 256:1, utilizando o registo de trabalho de 8 bits do microcontrola-dor. Esta é uma gama dinâmica adequada para esta aplicação, mas uma resolução de 10 bits (ou mais) teria sido muito melhor.O sinal de áudio permanece uma onda rectangu-lar (comutada a 47 kHz), imediatamente antes do transístor Q6, sendo que o amplificador de potência é de classe D. O transístor Q5 é necessário para produzir a corrente de base necessária para ligar o transístor Q6, porque o interruptor analógico PWM (U8D) não é capaz de fornecer correntes maiores que 2 mA. Utilizar um amplificador de potência de classe D não só fornece um maior nível de potên-cia na saída de áudio, como tem outra vantagem importante nesta aplicação: quando o gerador de áudio está desligado (pelo firmware, colocando o sinal MUTE no nível alto), o interruptor PWM U8D está desligado e coloca o transístor Q6 ao corte, pelo que nenhuma corrente atravessa o altifalante; e não é relevante a quantidade de ruído presente no barramento de alimentação +VIN. Isto é uma consideração muito importante para um disposi-tivo que vai ficar a um metro dos seus ouvidos quando está a tentar adormecer.O nível de áudio é actualizado a cada dois milisse-gundos pela rotina de controlo sound sinthesizer

Page 52: Elektor_340_2013

•Doméstico

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

deslocamento são (quase) directamente compa-tíveis com o porto SPI do microcontrolador. Com alguma lógica, implementada com um buffer de três estados quádruplo (U2 = 74HC125), os registos de saída para a visualização (U3, U4 = 74HC595) e o registo de entrada para os botões de pressão (U1 = 74HC165) são facilmente ligados ao barramento SPI. Note que os buffers U2A e U2B são configura-dos como inversores ligando resistências de pull--down às suas saídas de três estados. Inverter a polaridade do sinal de relógio SPI (SCK) ligado aos registos de visualização permite utilizar o mesmo modo de relógio SPI para ler (slave input) e para escrever (slave output) simultaneamente.Utilizar o barramento SPI minimiza a quantidade necessária de sinais para ligar o módulo de visu-alização ao módulo principal. Os registos para a visualização e para os botões de pressão parti-lham o sinal de selecção de dispositivo SPI slave (SSDISP#). No mesmo ciclo de transferência de dados SPI de 2 bytes são actualizados os registos para a visualização e é lido o estado dos botões de pressão. Como o registo de entrada para os botões de pressão só tem um byte, o segundo byte dos dados recebidos é ignorado pelo firmware. O sinal de selecção de dispositivo slave, SSDISP#, é invertido para obter o sinal SH/LD#, para deslocar/carregar. Enquanto o porto de entrada não estiver seleccionado (SSDISP# no nível alto), são aceites dados em paralelo no registo de entrada. Durante a transferência de dados SPI, o sinal SSDISP# é ligado ao nível baixo, o sinal SH/LD# é levado ao nível alto, pelo que o registo de entrada está desa-bilitado e o sinal de relógio da ligação série está habilitado; isto é, os dados que entraram são reti-dos enquanto são deslocados em série para a saída.Os registos de saída (74HC595) são compostos internamente por um registo de deslocamento de 8 bits com entrada série e saída paralelo, com um registo de 8 bits composto por flip-flops do tipo D. Os pinos de saída são controlados pelos bits per-tencentes ao registo de saída. Sempre que ocor-rer um impulso de relógio (LCLK) para o registo de saída, o flanco ascendente deste sinal provoca a transferência dos 8 bits, que estão armazena-dos no registo de deslocamento, para o registo de saída. Enquanto o sinal LCLK permanecer no nível alto, os bits armazenados no registo de saída não são alterados. Os bits presentes no interior do registo de deslocamento mudam sempre que um ciclo de transferência SPI (ler ou escrever) seja executado, independentemente se o sinal de selecção de dispositivo slave estiver ou não

Ao observar o esque-mático do módulo de visualização, os leito-res mais atentos vão reparar que não exis-tem resistências em série com as linhas de controlo dos âno-dos, para limitar a corrente. O projecto baseia-se na resistên-cia de fonte das saí-das CMOS (aproxima-damente 60 Ω) para limitar a corrente que atravessa os LEDs. As

saídas do ULN2003A têm uma tensão de nível baixo mínima próxima de 1 V, devido à configuração Darlington. A queda de tensão directa dos LEDs é de cerca de 2 V. A soma dá 3 V, que subtraídos da tensão de alimentação de 5 V, deixam 2 V aos terminais das resistências equivalentes das saídas CMOS (60 Ω). A corrente de pico dos LEDs é assim limitada em 2 V/60 Ω = 33 mA.Note que os LEDS são multiplexados a 8:1, e comutados utilizando PWM, pelo que a corrente de pico está próxima das especificações máxi-mas para os LEDs. A corrente média está muito abaixo disto – cerca de 2 mA em condições de visualização normais. A variação do brilho é obtida aplicando um sinal PWM de 47 kHz, com ciclo de trabalho variável, à entrada Output Enable (OE#) do registo de controlo dos cátodos dos LEDs (U4). A gama de variação do ciclo de trabalho, e conse-quente variação do brilho, é de 256:1. Com o ciclo de trabalho mínimo (1/256), o mostrador ainda apresenta um brilho suficiente para ser legível em condições de fraca iluminação.Já agora, não ceda à tentação de montar LEDs azuis ou brancos em nenhum dos indicadores. Estes têm uma tensão de condução demasiado elevada (tipi-camente 4 V) para serem utilizados neste projecto.O mostrador LED necessita de dois portos de saída de 8 bits, e os botões de pressão necessitam de

um porto de entrada de 8 bits. O porto de expan-são de E/S do microcon-trolador é realizado com registos de deslocamento CMOS de 8 bits, com car-regamento paralelo e lógica para transferência de dados em série. Os registos de

Figura 5. Vista superior do módulo principal já construído.

Figura 6. Vista superior do módulo de visualização já construído.

Page 53: Elektor_340_2013

Relógio com alarme/interruptor temporal

www.elektor-magazine.pt | Setembro 2013 | 53

visualização (Figura 6), dos conectores do pai-nel traseiro (Figura 7), e de como o módulo de visualização é montado na vertical (Figura 8).

ConviteO firmware está muito bem documentado, e pode servir como exemplo a estudantes de engenha-ria electrónica (IT), e de tecnologias embebidas, que estejam a desenvolver projectos de firmware embebido em tempo real, estejam ou não a cons-truir o despertador 7-uP.Este projecto tem o potencial para ser a base de outros projectos, não apenas acessórios para o despertador 7-uP, mas que possam ser utilizados de forma independente. Exemplos: módulo AC de potência com quatro saídas com relés de estado sólido (TRIAC); lâmpada de mesa-de-cabeceira LED de baixa tensão e com luminosidade variável; interface IV para controlo remoto (para TV/Vídeo); módulo de expansão para efeitos sonoros PCM/MP3 (com ligação SPI a um microcontrolador). Os últimos três destes exemplos necessitam de actualização do firmware para serem utilizados com o despertador 7-uP.Os leitores da Elektor que sejam activos na comu-nidade ElektorLabs [2] estão expressamente con-vidados a desenvolver uma aplicação de um inter-face gráfico para Windows, para utilizar com este despertador, por exemplo, para editar, gravar e restaurar calendários para alarmes e para inter-ruptores temporais; configurar parâmetros, etc.

Nota: o despertador funciona de forma autónoma – não é dependente do software para Windows.

(100149)

Artigo original: The 7-up Alarm Clock/Time-Switch (2) March 2013

Internet

[1] www.elektor.com.pt/ 100149

[2] www.elektor-labs.com

activado. Por outras palavras, os dados presentes no registo de deslocamento vão mudar quando outros dispositivos ligados ao barramento SPI forem seleccionados e receberem dados. Isto não é importante, desde que o sinal LCLK permaneça estático quando existirem dados não importan-tes no registo de deslocamento interno. Ligar o sinal LCLK ao sinal de selecção de dispositivo slave SSDISP# do mostrador, assegura o com-portamento desejado. O módulo de visualização contém um fototransístor (Q1 = BPW85C) que é sensível ao nível de luminosidade ambiente. A corrente que percorre a resistência de emissor, e consequentemente a queda de tensão produzida, aumenta com o aumento da luminosidade que incide na junção do transístor. A tensão de emis-sor é monitorizada por um comparador, presente no módulo principal, que utiliza a técnica primi-tiva de conversão A/D mencionada anteriormente. Foram tomadas medidas para montar o codificador rotativo (S9) no módulo de visualização. Quem, ao construir este projecto, decidir desviar-se do desenho standard da caixa pode querer colocar o codificador rotativo em outra localização. Isto pode ser feito facilmente dividindo o módulo de visualização em duas partes, separando a pequena parte que contém o codificador rotativo. Por esta razão, as ligações eléctricas a este componente foram separadas das outras ligações do módulo de visualização (cabo plano de 8 vias).Internamente, o codificador rotativo tem dois con-juntos de contactos que são ligados e desligados à medida que o eixo roda. Utilizando resistências de pull-up, ligadas ao barramento de 5 V, as duas saídas referentes aos interruptores (A e B) geram sequências de impulsos rectangulares em quadra-tura (desfasamento de 90º entre elas). Cada saída produz 24 impulsos por revolução, mas as fases relativas dos impulsos gerados pelas duas saídas é diferente (em 180º) dependendo da direcção de rotação. Existe uma rotina no firmware que remove o ruído destes sinais e está atenta às variações de posição do eixo do codificador rotativo.

MontagemA montagem do despertador está descrita em detalhe num documento chamado Assembly Ins-tructions, que pode ser descarregado gratuita-mente a partir do site da Elektor [1]. O pacote da documentação também contém a lista e o orçamento dos materiais. Devido a limitações de espaço, foram apenas apresentadas fotografias do módulo principal (Figura 5), do módulo de

ENTRADA9V DC

BATT.LIGAR/

DESLIGAR

RESET LED USB ISPRS422 DISPOSITIVOALARME

DISPOSITIVOINTERRUPTOR

TEMPORAL

Figura 7. Existe uma impressionante quantidade de conectores no painel traseiro do despertador 7-uP.

Figura 8. Fixação do módulo de visualização na caixa CM6-225 da Pactec.

Page 54: Elektor_340_2013

•Projecto

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

O Raspberry Pi (RPi) é um excitante e arrojado desenvolvimento da Fundação Raspberry Pi, sede-ada em Cambridge no Reino Unido. A fundação Raspberry Pi [1] pretende fazer chegar pequenos e pouco dispendiosos computadores às crianças dos nossos dias, com a intenção de reacender o seu interesse na programação de computadores e nos assuntos técnicos em geral.

A Fundação apreciou o enorme interesse, apoio e ajuda dos institutos educacionais (como a Univer-sidade de Cambridge), companhias de electrónica (RS e Farnell) e das comunidades de desenvol-vimento de software e hardware.O Pi (pronuncia-se pai) foi considerado “o beeb” (BBC Micro) da era da Internet. A Elektor foi rápida a apontar, não só o potencial do RPi, mas também um dos seus construtores, Eben Upton, cuja entrevista pode ler em [2].

Descrição do circuitoO Módulo de protótipos RPi é um simples módulo, projectado para utilizar os sinais de expansão do módulo Raspberry Pi e fornecer alimentação a qualquer circuito presente na área de protóti-pos. O seu simples esquemático é apresentado na Figura 1.A primeira coisa que o Módulo de protótipos RPi fornece é uma fonte de alimentação adicional DC de 3,3 V. Os 3,3 V provenientes do conector de expansão do RPi só conseguem fornecer cerca de 50 mA, pelo que se pretender construir circuitos que necessitem de mais do que 50 mA, vai ser necessária uma fonte de alimentação adicional de 3,3 V.No módulo de protótipos RPi, esta é fornecida por IC1, um regulador de tensão linear LD1117 de 3,3 V. Este pode ser alimentado por uma fonte de ali-mentação DC externa ou interna, dependendo da selecção feita no jumper JP1. O LD1117 consegue fornecer até 800 mA se necessário, necessitando de ser ligado a um dissipador de calor adequado.

Tony Dixon(Reino Unido)

Placa protótipo Raspberry PiFaça o RPi construir coisas… As suas coisas!Um dos aspectos mais interessantes do Raspberry Pi, ao contrário da maioria dos computadores pessoais, é ter um pequeno e simples conector de expansão ao qual os utilizadores podem ligar os seus próprios interfaces e circuitos. Para dar uma ajuda, este artigo apresenta um módulo para protótipos que pode ser utilizado para construir os seus próprios interfaces e circuitos para utilizar com o Raspberry Pi.

1 23 45 67 89 10

11 1213 1415 1617 1819 2021 2223 2425 26

K2

1 3

2

IC1LF33CV

C2

100n

C1

100n16V

C3

10u

JP1 JP2

3.3V

3.3V

3.3V_RPI

3.3V

3.3V_RPI 5V

5VD1

1N4001

SDASCLGPIO4

GPIO17GPIO27GPIO22

GPIO24

GPIO25MOSIMISOSCK

CE1

TxDRxD

1 23 45 67 89 10

11 1213 1415 1617 1819 2021 2223 2425 26

K33.3V_RPI 5V

SDASCLGPIO4

GPIO17GPIO18 GPIO18GPIO27GPIO22GPIO23 GPIO23

GPIO24

GPIO25MOSIMISOSCKCE0 CE0

CE1

TxDRxD

K1

GERTNITXE INT

120483 - 11

3.3V

+

Figura 1. Não é grande circuito, mas essencial para um protótipo a sério com o seu Raspberry Pi.

Page 55: Elektor_340_2013

Placa protótipo Raspberry Pi

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

Se o jumper JP1 for configurado para INT (interna), IC1 vai ser alimentado a partir da linha de 5 V que vem do módulo Raspberry Pi.Se JP1 for configurado para EXT (externa), IC1 vai ser alimentado a partir de um adaptador de tensão de 9-12 V através de um conector Jack de 2,1 mm (pino central – positivo; pino exterior – 0 V) e do díodo D1. Neste caso é necessário configurar o jumper JP2 para REG (regulador). Os condensadores C1 e C2 fazem o desacoplamento de ruído para IC1, e C3 actua como reservatório.A segunda coisa que o Módulo de protótipos RPi fornece é um acesso fácil aos sinais presentes no conector de expansão do Raspberry Pi. O segundo conector, K2, disponibiliza os sinais do Raspberry Pi, permitindo ao projecto do utiliza-dor aceder a estes sinais.Uma nota final sobre o circuito: se um pequeno circuito protótipo não necessitar de retirar mais do que 50 mA da alimentação de 3,3 V, o jum-per JP2 permite a alimentação do barramento de 3,3 V do protótipo a partir do Raspberry Pi. Para isto configure JP2 para INT.

MontagemA montagem do Módulo de protótipos RPi é sim-ples. Utilizando o desenho da placa de circuito impresso apresentada na Figura 2, solde pri-meiro os componentes mais pequenos: D1, C1, C2, JP1 e JP2. Em seguida solde K1 e C3. Com os condensadores e o conector de alimentação já soldados, solde de seguida IC1. Finalmente solde

o conector K2. Este necessita de ser soldado na face das soldaduras da placa de circuito impresso para permitir ligar o Módulo de protótipos RPi a um Raspberry Pi. K3 não é um conector, é um conjunto de ilhas onde pode ligar os sinais que necessitar para o seu circuito experimental. Pode soldar pinos nas ilhas que necessitar.

Placa protótipo Raspberry PiFaça o RPi construir coisas… As suas coisas!

Figura 2. Um módulo de protótipos é como um campo de ténis: só está à espera de ser utilizado.

Page 56: Elektor_340_2013

•Projecto

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

Utilizar o módulo – generalidadesAlgumas coisas a lembrar acerca do conector de expansão do Raspberry Pi são: em primeiro lugar, os sinais do conector de expansão Raspberry Pi são de 3,3 V, e não são compatíveis com 5 V, pelo que tem de ter cuidado com o que liga a este conector. Em segundo lugar, a corrente que os sinais provenientes do Raspberry Pi podem fornecer é pequena, cerca de 8 mA, pelo que, novamente, tenha cuidado com o que liga a este conector, não ligue nada que necessite de muita corrente porque não a vai conseguir obter. Se necessitar de absorver ou fornecer mais corrente, utilize um andar tampão como o 74LVC245 para fornecer/absorver essa corrente, ou apenas para ser compatível com 5 V.

Exemplo para o RPi: fazer piscar um LEDSempre que a Elektor publica artigos sobre módu-los com microcontroladores, os leitores parecem dividir-se em dois campos. Um membro típico do campo 1 diz: “Eu sou tecnicamente mais apto, mas nunca publiquei nada. Não quero exemplos de aplicação”. Do campo 2 podemos ouvir: “Eu não construo nem compro nada sem uma expli-cação totalmente ilustrada, por isso: sim, mos-trem-me como é”. Para complicar as coisas os membros dos campos 1 e 2 escolhem a) não dizer a ninguém, b) dizer apenas aos seus pares, ou c) disseminar as suas opiniões em fóruns, tweets, etc. Se adicionarmos variáveis como linguagem, imprimir, online, 16 anos ou 66 anos – ficamos com uma matriz interessante.

O exemplo seguinte é para todos aqueles que pretendem aprender a controlar coisas com um Raspberry Pi, sejam alguns LEDs como apresen-tado na Figura 4, ou um mini bar de uma limu-sina, com seguimento por GPS. A sua imaginação é o único factor restritivo. Porquê? Porque o que está a ser desenvolvido é o software.Este projecto consiste num ULN2803, que contém 8 andares de saída Darlington, a controlar um conjunto de LEDs. Assim como é tradição escrever o primeiro programa em software a apresentar “Hello World”, é também tradição fazer piscar LEDs num novo projecto de hardware para ver se este funciona. Para manter a tradição, a Lis-tagem 1 apresenta um simples programa, em linguagem Python, para controlar os LEDs.

Este programa utiliza uma biblioteca Python GPIO para permitir aceder aos pinos GPIO. Se ainda não

A escolha de K2 é importante. O Raspberry Pi é um módulo muito compacto e tem alguns com-ponentes altos, por exemplo o conector Ether-net RJ45 (altura=13mm), o conector de Vídeo Composto RCA (altura=13mm) e um conector USB duplo (altura=17mm), que podem interfe-rir mecanicamente com os módulos de expan-são ligados ao Raspberry Pi. Assim, para que o Módulo de protótipos RPi possa ser ligado com sucesso a um Raspberry Pi, o conector K2 deve ter uma altura mínima de 10 mm. O conector especificado para K2 tem uma altura de 10,8 mm e, em conjunto com as barras de pinos standard de 2,54 mm do Raspberry Pi, forma uma altura mínima de 13 mm. Isto é suficiente para evitar os conectores RJ45 e RCA do Raspberry Pi. O Módulo de protótipos RPi tem um corte rectan-gular para evitar interferências mecânicas com o conector USB duplo do Raspberry Pi.Está tudo soldado? Compare então o seu traba-lho com o protótipo da Figura 3.

Figura 3. Construção impecável. Cortesia do Luc, do Laboratório da Elektor. Note que a camada silkscreen da placa de circuito impresso respeita à revisão 2 do Rpi.

ULN2803

IC1

VEE

+VS

1112131415161718

10

123

678

45

9

R1R2R3R4R5R6R7R8

8x 330R

D1D2D3D4D5D6D7D8

3.3V

120483 - 12

GPIO17GPIO18GPIO22GPIO23GPIO24GPIO25GPIO27GPIO4

Figura 4. Diagrama do circuito de demonstração para o RPi para fazer piscar LEDs.

Page 57: Elektor_340_2013

Placa protótipo Raspberry Pi

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

Depois disto, já está instalada a biblioteca Python GPIO. No seu Raspberry Pi, utilizando o IDLE ou um editor de texto, escreva o programa da Lis-tagem 1. Neste programa, Setmode define os números utilizados para aceder aos pinos indi-viduais. A instrução GPIO.setmode(GPIO.BCM)

descarregou as ferramentas de desenvolvimento ou a biblioteca Python GPIO então, utilizando um terminal LX no seu Raspberry Pi, vamos introdu-zir os seguintes comandos. Em primeiro lugar, contudo, vamos descarregar as ferramentas de desenvolvimento Python introduzindo

sudo apt-get install python-dev

Para aceder ao porto GPIO do Rasbberry Pi é necessário descarregar e instalar o pacote GPIO. Introduza o seguinte:

wget http://pypi.python.org/packages/source/R/RPi.GPIO/RPi.GPIO-0.4.1a.tar.gz

Depois de descarregar o pacote, é necessário extrair os ficheiros.Introduza

tar -zxf RPi.GPIO-0.4.1a.tar.gz

A extracção vai criar uma nova pasta com os ficheiros Python. Agora introduza

cd RPi.GPIO-0.4.1a

Vamos agora instalar o pacote introduzindo

sudo python setup.py install

Eben Upton, co-criador e profeta do Raspberry Pi, responde

P: Porquê este nome?A: Queríamos um computador especialmente para a linguagem Python, e há uma grande tradição de dar nomes de frutos: como Apricot (damasco),

Acorn (bolota), e até nos nossos dias há computadores com nomes de fru-tos. Assim Raspberry (framboesa) segue uma longa tradição do Pi, e sim,

quisemos esta ligação à linguagem Python. É daí que vem o Pi.

P: O Raspberry Pi é uma motherboard; sem teclado, sem disco, sem ecrã… como é que este produto teve sucesso?R: Basicamente, não há razão para um computador custar mais que 50 euros. Os periféricos, tais como um ecrã, um teclado, armazenamento, vão aumentar o preço, mas com o Raspberry Pi fomos por outro caminho – uma vulgar TV pode ser utilizada como ecrã. Combine isto com um teclado de uma loja chinesa, que custa alguns euros, e fica com um sistema totalmente fun-cional. O Raspberry está especificamente direccionado para os jovens que querem aprender a programar.

Listagem 1: Blinky.py

# !/usr/bin/pythonimport timeimport RPi.GPIO as GPIO

# Configure Pi’s GPIO pinsGPIO.setmode(GPIO.BCM)

pins = [17,18,22,23,24,25,21,4]

for pin in pins: GPIO.setup(pin,GPIO.OUT)

# Program loopwhile True: for pin in pins GPIO.output(pin, True) time.sleep(0.01) GPIO.output(pin, False) time.sleep(0.01)

Page 58: Elektor_340_2013

•Projecto

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

ção segue a Revisão 1 da placa de circuito impresso do Raspberry Pi. Aqui, a etiqueta GPIO27 do esquemático está indicada como 21, ou seja, a numeração de E/S antiga.

Depois, a instrução GPIO.setmode(GPIO.BOARD) configura uma ligação directa entre as linhas de E/S e a numeração física do conector de expan-são presente no Raspberry Pi. Utilizando esta configuração, o array de pinos tem este aspecto para atingir o mesmo efeito nos LEDs:pins = [11,12,15,16,18,22,13,7]

Depois de ter escrito o programa, grave-o como Blinky.py, mude para um terminal LX e introduza o seguinte comando para tornar este ficheiro num executável:

chmod +x blinky.py

utiliza os nomes simbólicos atribuídos às linhas de E/S do Ras-pberry Pi. Neste caso, os oito pinos seguintes estão presentes no array chamado pins: GPIO17, GPIO18, e GPIO22-GPIO24. Note que a aloca-

Conector de expansão do Raspberry Pi

Em relação a K2 no esquemático, o interface de expansão do Raspberry Pi é fornecido por um conector formado por duas barras de pinos com um passo de 2,54 mm, fornecendo ao computador uma expansão para 26 sinais.Estes sinais pertencem a uma de três categorias:

Nome do pino Função do pino Alternativo

P1-02 5,0 V -

P1-04 5,0 V -

P1-06 GND -

P1-08 GPIO14 UART0_TXD

P1-10 GPIO15 UART0_RXD

P1-121 GPIO18 PWM0

P1-14 GND -

P1-16 GPIO23

P1-18 GPIO24

P1-20 GND -

P1-22 GPIO25

P1-24 GPIO8 SPI0_CE0_N

P1-26 GPIO7 SPI0_CE1_N

Nome do pino

Módulo versão 1 Módulo versão 2

Função do pino Alternativo Função do pino Alternativo

P1-01 3,3 V - 3,3 V -

P1-032 GPIO0 I2C0_SDA GPIO2 I2C1_SDA

P1-052 GPIO1 I2C0_SCL GPIO3 I2C1_SCL

P1-07 GPIO4 GPCLK0 GPIO4 GPCLK0

P1-09 GND - GND -

P1-11 GPIO17 RTS0 GPIO17 RTS0

P1-13 GPIO21 GPIO27

P1-15 GPIO22 GPIO22

P1-17 3,3 V - 3,3 V -

P1-19 GPIO10 SPI0_MOSI GPIO10 SPI0_MOSI

P1-21 GPIO9 SPI0_MISO GPIO9 SPI0_MISO

P1-23 GPIO11 SPI0_SCLK GPIO11 SPI0_SCLK

P1-25 GND - GND -

Notas: 1. GPIO18 (pino 12) suporta saída PWM 2. I2C0_SDA0 e I2C0_SCL0 (GPIO0 e GPIO1) têm resistências de pull-up de 1,8kΩ ligadas a 3,3 V.

Tabela 1. Disposição dos pinos do conector de expansão

Mais circuitos e aplicações para o RPi na newslwtter Elektor.POST

Page 59: Elektor_340_2013

Placa protótipo Raspberry Pi

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

Internet

[1] Página do Raspberry Pi: www.raspberrypi.org

[2] Entrevista com Eben Upton: “What are you Doing?”

www.elektor-magazine.com/120228

[3] www.elektor.com.pt/120483

Depois disto pode correr o seu programa intro-duzindo o seguinte comando:

sudo ./blinky.py

Com um pouco mais de código podemos, com a mesma facilidade, apresentar a temperatura do CPU ou a actividade de rede nos LEDs.

ConclusãoO computador Raspberry Pi fornece um enorme potencial de programação e de desenvolvimento de software a um baixo custo. O módulo de pro-tótipos descrito neste artigo permite ao entu-siasta mais orientado para o hardware utilizar o Raspberry Pi para fazer coisas úteis no mundo real. Se desenvolver uma aplicação para o Ras-pberry Pi que seja útil a toda a gente, não hesite e publique-a em www.elektor-labs.com. E não se esqueça de descarregar o poster gratuito do Raspberry Pi de www.elektor.com/poster.

(120483)Artigo original: Raspberry Pi Prototyping BoardMarch 2013

Conector de expansão do Raspberry PiAlimentação: +5 V DC e 3,3 V DC* assim como 0 VEntrada/Saída: Sinais de E/S de utilização geral (GPIO)Interfaces de Comunicação: UART série, SPI e I2C

* Nota: O barramento de 3,3 V consegue fornecer apenas uma corrente de cerca de 50 mA.

Existem 17 sinais de E/S de uso geral (GPIO) no conector de expansão. A maior parte deste podem efectuar uma função alternativa. Estas funções alternativas fornecem os interfaces UART, SPI e I2C.Cada pino GPIO consegue fornecer entre 2 mA e 16 mA dependendo da configuração do respectivo andar de saída. Esta corrente é configurada num registo de configuração e, por defeito,

depois de uma reinicialização, a corrente disponível fica configurada para 8 mA.

Para além do Conector de Expansão P1, a versão 2 do Raspberry Pi introduziu um segundo, e mais pequeno, conector de expansão designado por P5 (ver Tabela 2). Isto adiciona mais quatro sinais GPIO, mas o mais importante é que permite o acesso ao interface de áudio PCM do circuito integrado 2835 da Broadcom. Mais, os sinais do Conector de Expansão P1 foram ligeiramente alterados nos módulos da versão 2: ver Tabela 1. Notavelmente, o interface I2C0 foi substituído pelo I2C1, que é uma pequena mas importante alteração para ter em conta se estiver a planear comunicar com dispositivos I2C.

Tabela 2. Conector P5 (só módulos de versão 2)

Nome do pino Função do pino Alternativo

P5-01 5,0 V

P5-02 3,3 V

P5-03 GPIO28 PCM_CLK

P5-04 GPIO29 PCM_FS

P5-05 GPIO30 PCM_DIN

P5-06 GPIO31 PCM_DOUT

P5-07 GND

P5-08 GND

Figura 5. Circuito experimental montado na área para protótipos, e ligado ao RPi através do conector de expansão K2.

Page 60: Elektor_340_2013

• Hardware & Software

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

A placa de extensão Linux inclui tudo o que é preciso para disponibilizar um interface de uti-lizador para uma grande variedade de projec-tos. Os botões (Figura 1) fornecem a entrada do sistema e um display alfanumérico de 2x16

caracteres mostra as saídas. Os botões estão localizados directamente debaixo do display sendo assim possível implementar um simples sistema de menu. A placa tem ainda um pequeno besouro para uma indicação sonora, um relógio

Benedikt Sauter (Alemanha) [1]

Extensão para placa Linux ElektorDisplay, botões, relógio tempo-real, besouro e 16 E/S de uso geral (GPIO)

Já vimos como implementar um interface com o utilizador para uma aplicação na placa Linux Elektor usando tecnologias de rede modernas. No entanto, pode acontecer que queiramos controlar a placa e não tenhamos acesso a um PC e browser. Numa situação destas é mais do que suficiente ter um par de botões e um display para mostrar e ajustar os parâmetros de sistema mais importantes, e este artigo mostra como: um módulo de extensão para a placa Linux Elektor.

Figura 1. Placa de extensão Linux.

Parte 1

Page 61: Elektor_340_2013

Extensão para placa Linux Elektor

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

em tempo-real (RTC) com bateria para reten-ção de dados, e um circuito de expansão de portos com 16 linhas extra de entrada e saída digitais. Existe ainda uma área destinada a pro-tótipos com 15x60 mm para colocar o seu pró-prio circuito.O conector J5 [2] na placa Linux Elektor consiste numa barra de terminais de 14 vias (2x7 pinos) projectado para permitir a expansão do circuito (Figura 2). O mesmo conector está presente na placa de extensão, pelo que as duas podem ser ligadas através de um cabo plano de 14 vias. O cabo leva a alimentação de 3,3 V para a placa de extensão assim como os sinais de dados.A Tabela 1 mostra a disposição dos pinos no conector e suas funções. A placa de extensão pode ser usada em muitos outros projectos.A placa de extensão Linux é disponibilizada pelo Serviço Elektor com os componentes SMD já soldados e testada. Tudo o que falta fazer é soldar o LCD e mais alguns componentes [3].

Diagrama do circuitoO diagrama do circuito é apresentado na Figu- ra 3. A ligação à placa Linux Elektor é efec-tuada através do conector K1. Como apenas está disponível uma tensão de alimentação de 3,3 V, todos os componentes da placa foram seleccionados de forma que pudessem funcionar com esse nível de tensão. Quando estávamos a seleccionar o display analisámos se o mesmo poderia ser controlado via interface I2C ou SPI (a maioria dos mostradores LCD alfanuméricas apenas podem ser controlados no modo de qua-tro ou oito bits paralelo). Acabámos por optar

pelo DOGM162LA [4] da Electronic Assembly, com um interface SPI.Temos três entradas analógicas (GPA0, GPA1 e GPA3) no conector de expansão na placa Linux Elektor mas que não são precisos para a maior parte das funcionalidades da placa de extensão. Por essa razão, simplesmente ligámos botões nessas entradas. Uma alternativa seria ligar um interruptor rotativo com um divisor de tensão resistivo para permitir determinar a posição. Com os botões existem apenas duas possibili-dades: o nível lógico Alto (o conversor A/D lê o valor máximo de tensão) e o valor lógico Baixo (o conversor A/D lê o valor zero), a última con-dição corresponde ao estado do botão quando este é pressionado.O besouro está ligado ao FET T1, que por sua vez é controlado por uma saída PWM do LPC3131. Isto permite gerar simples tons de frequência constante. Uma vez que o besouro é controlado

Figura 2. A placa Linux Elektor é ligada à placa de extensão usando um conector de 14 vias.

Tabela 1. Sinais do conector de 14 vias.

Pino Nome Uso Uso Nome Pino

1 GPA0 Botão esquerda Botão meio GPA1 2

3 GPA3 Botão direita Besouro PWm 4

5 SCL (I2C)RTC e expansão de portos

RTC e expansão de portos

SDA (I2C) 6

7 MOSI (SPI) Display Display MISO (SPI) 8

9 System Clock - Display SCK (SPI) 10

11 GPIO14 Display Display GPIO11 12

13 3,3V Alimentação Alimentação GND 14

Page 62: Elektor_340_2013

• Hardware & Software

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

bateria para retenção de dados em forma de uma pequena moeda, pelo que deste modo a hora e data são mantidas até mesmo quando o dispositivo está desligado.Finalmente, temos o circuito de expansão de portos IC1 (PCA9555) [7], que fornece até 16

com níveis de tensão de 3,3 V, o volume não é assim tão alto como podia ser: para se obter o volume máximo precisaríamos de uma tensão de alimentação de 8 V a 15 V [5].Temos ainda um relógio em tempo-real IC2 (MCP79401) [6]. Este está equipado com uma

+3V3

C2

100n

1 23 45 67 89 10

11 1213 14

K1

+3V3

I/O0.0I/O0.1I/O0.2I/O0.3I/O0.4I/O0.5I/O0.6I/O0.7

I/O1.0I/O1.1I/O1.2I/O1.3I/O1.4I/O1.5I/O1.6I/O1.7

R15

10k

A0A1A2INT

+3V3

GND

K2

1011121314151617

18192021

22

1

23456789

PCA9555D

I/O0.0I/O0.1I/O0.2I/O0.3I/O0.4I/O0.5I/O0.6I/O0.7

I/O1.0I/O1.1I/O1.2I/O1.3I/O1.4I/O1.5I/O1.6I/O1.7

IC1

VSS

VDD

SDASCL

INT

24

12

1011

1617181920

131415

2322

A021

A1A2

456789

23

1

C1

2u2

SCLSDA

120596 - 13B

GPA0GPA3SCLMOSISYSCLKGPIO14

GPA1PWMSDA

MISOSCK

GPIO11

MCP79410

IC2 VBAT

SOIC GNDSDA

VCC

SCLMFP

X1 X2

3

*

8

45

1 2

67

X1

32.768kHz

C4

7-12p

C3

7-12p

C5

100n

C6

2u2

+3V3

BT2

CH25-2032LF

BT1

CH25-2032LF

R2

10k

R3

2k2

R4

2k2

R5

10k

S1

R6

10k

S2

R7

10k

S3

GPA0GPA1GPA3

SCLSDA

C7

2u2

R1

10k

BZ1

T1

BSS123

PWM

+3V3 +3V3

C8

2u2

C9

2u2

MOSISCKGPIO11GPIO14

R12

10k

R10

10k

R11

10k

R13

10k

R14

10k

LC DISPLAY 2 x 16

LCD1

10 11 12 13 14 15 16 17 18 19 201 2 3 4 5 6 7 8 9

+3V3+3V3

PortExpander

RTC

BUZZER

ELEKTOR LINUX BOARD

K4K3

+3V3

K5 K6

R8

27R

R9

27R

+3V3

LED1(Optional)(Optional)

LED2

D.N.P.D.N.P.

Figura 3. Diagrama do circuito da placa de extensão Linux.

Page 63: Elektor_340_2013

Extensão para placa Linux Elektor

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

linha tem um offset de 128, e o primeiro seg-mento na segunda linha tem um offset de 192. O seguinte comando vai escrever na segunda linha do display:

dog-app -o “192” -w “Hello 2”

BotõesOs botões estão ligados às entradas analógicas do conversor A/D do LPC3131. Num outro artigo da placa Linux Elektor descrevemos como uti-lizar o conversor A/D.O seguinte comando dá acesso ao botão mais à esquerda:

echo 0 > /dev/lpc313x_adc

Se agora ler o ficheiro /dev/lpc313x_adc (por exemplo, usando o comando cat) deve ver um valor grande (em torno de 1023) se o botão não estiver pressionado:

root@gnublin:~# cat /dev/lpc313x_adc

0x3ff

Se o botão estiver pressionado, o resultado deve ser zero:

root@gnublin:~# cat /dev/lpc313x_adc

0x000

Para seleccionar a leitura do botão do meio, utilize o comando

echo 1 > /dev/lpc313x_adc

linhas adicionais de entrada/saída digitais con-troladas através do barramento I2C. Estas entra-das e saídas podem ser usadas para ligar LEDs indicadores de estado ou botões extra, ou até mesmo um teclado em forma de matriz.

MostradorPara facilitar o desenvolvimento dos programas do leitor desenvolvemos um pequeno programa em C com linhas de comando. O código pode ser descarregado na forma de código fonte ou já compilado e pronto a executar numa memó-ria pen SD. A maneira mais fácil para fazer isto é com a ajuda de uma pen USB. Primeiro des-carregue o ficheiro [8] para o PC de desenvolvi-mento (certifique-se que o endereço URL é intro-duzido em linha sem qualquer tipo de fractura) e depois copie-o para a pen USB. Em seguida introduza a pena USB na placa Linux (Figura 4). A consola deve apresentar uma mensagem quando a pen é inserida. Configure a pen USB no sistema de ficheiros:

mount /dev/sda1 /mnt/

Desta forma pode usar o programa sempre que quiser (e não apenas quando a pen USB está presente), copie-o para o sistema de ficheiros local no cartão SD:

cp /mnt/dog-app /usr/local/Bin

Para um teste rápido do programa execute-o a partir da consola. O comando

dog -app -h

deve mostrar texto de ajuda relativo ao programa.Agora ligue a placa de extensão à placa Linux Elektor usando o cabo plano. Certifique-se que a marca vermelha no cabo está na extremidade correcta nos dois lados (GPA0 e GPA1). Pode escrever texto no display com o comando

dog-app -n -w “Hello Elektor”

usando simplesmente as aspas como marcador de texto. O texto “Hello Elektor” deve aparecer no display.

Para escrever na segunda linha do display é necessário saber um pouco como funciona o próprio display. Cada linha do display consiste num número de segmentos, e o cursor pode ser posicionado em qualquer segmento que se pretenda. O primeiro segmento na primeira

Figura 4. Placa Linux Elektor com memória USB.

Page 64: Elektor_340_2013

• Hardware & Software

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

feito da seguinte forma:

echo mcp7940 0x6f > /sys/bus/i2c/devices/i2c-1/new_device

A seguir precisamos de verificar qual foi o número que o kernel atribuiu ao dispositivo para que possamos configurar o ficheiro de disposi-tivo correctamente.

cat /proc/devices

Normalmente, o número maior atribuído é 251. Assim, para configurar o ficheiro de dispositivo:

mknod /dev/rtc0 c 251 0

Agora, configuramos manualmente a data e hora do sistema. O formato é [MMDDhhmm[[CC]YY]], assim, por exemplo

date 122014342012

que dá o seguinte resultado:

Thu Dec 20 14:34:00 UTC 2012

Para copiar a hora do sistema para o relógio do hardware, utilize o comando

hwclock -w

e para copiar a hora do relógio de hardware para o sistema, utilize

hwclock -r

e para o botão mais à direita

echo 3 > /dev/lpc313x_adc

BesouroÉ muito simples gerar um tom através do sis-tema de ficheiros:

echo ff > /dev/lpc313x_pwm

Para o desligar:

echo 00 > /dev/lpc313x_pwm

Podem ser gerados breves beeps usando os comandos acima combinados com o comando usleep, que fornece um determinado atraso de duração específica.

Relógio em tempo-realO relógio RTC requer o seu próprio controlador. Este já está disponível no sistema de fichei-ros standard e pode ser carregado usando o comando:

modprobe rtc-mcp7940

Para que o controlador seja carregado automa-ticamente quando o sistema é iniciado, adicione a seguinte linha ao ficheiro /etc/modules:

rtc-mcp7940

O kernel deve ser informado sobre o endereço do dispositivo RTC no barramento I2C. Isso é

Figura 5. Configuração da hora e data do sistema do relógio em tempo-real (RTC) no arranque.

Figura 6. Usando o módulo kernel pca953x torna-se fácil controlar os pinos do circuito de expansão de portos GPIO.

Tabela 2. Valores necessários para controlar os pinos do PCA9555 usando /sys/class/gpio/export.

Pin

o

Valo

r p

ara

/sy

s/cl

ass

/g

pio

/exp

ort

IO0_0 98

IO0_1 99

IO0_2 100

IO0_3 101

IO0_4 102

IO0_5 103

IO0_6 104

IO0_7 105

IO1_0 106

IO1_1 107

IO1_2 108

IO1_3 109

IO1_4 110

IO1_5 111

IO1_6 112

IO1_7 113

Page 65: Elektor_340_2013

Extensão para placa Linux Elektor

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

Numa próxima edição vamos ver como criar uma simples aplicação que utilize a placa de exten-são. Vamos usar os botões e o LCD para criar um menu que pode, como é óbvio, ser adaptado às suas próprias aplicações.

(120596)

Artigo original: Elektor Linux Board Extension April 2013

Internet

[1] [email protected]

[2] www.elektor.com.pt/120181

[3] www.elektor.com.pt/120596

[4] www.lcd-module.de/fileadmin/eng/pdf/doma/dog-me.pdf

[5] www.reichelt.de/index.html?ARTICLE=35919

[6] http://ww1.microchip.com/downloads/en/DeviceDoc/22266D.pdf

[7] www.ti.com/lit/ds/symlink/pca9555.pdf

[8] http://gnublin.googlecode.com/git/lpc3131/gnublin_package/src/gnublin-dogm/usr/bin/gnublin-dogm

[9] www.elektor.com.pt/120518

[10] www.elektor.com.pt/120146

que dá a seguinte resposta

Thu Dec 20 14:34:17 2012 0.000000 seconds

Se tivermos a bateria de retenção de dados do RTC instalada o relógio em tempo-real guarda a hora enquanto o dispositivo estiver desligado. O suporte para a bateria pode ser montado no topo da face inferior da placa (ver diagrama do circuito).Para assegurar que a hora do sistema é ajus-tada a partir do relógio RTC durante o arranque altere o ficheiro /etc/init.d/hwclock.sh como se mostra na Figura 5. Certifique-se também que o módulo rtc-mcp7940 está incluído em /etc/modules.

Expansão de portosNo sétimo artigo da placa Linux Elektor [9] vimos como controlar um circuito de expansão de por-tos usando a linguagem C e as ferramentas para o barramento I2C.O núcleo do módulo pca953x faz com que seja tão fácil usar um circuito de expansão de portos GPIO assim como usar as entradas/saídas GPIO do LPC3131 [10]. A Figura 6 mostra quais os comandos necessários, e a Tabela 2 mostra os valores que precisam de ser usados para ende-reçar os vários pinos.

Lista de componentes Resistências:R1;R2;R5;R6;R7;R10;R11;R12;R13;

R14;R15= 10 kΩR3;R4= 2,2 kΩR8;R9= 27 Ω (opcional)

Condensadores:C1;C6a C9= 2,2 µFC2;C5= 100 nFC3;C4= trimmer 7-12 pF

Semicondutores:T1= BSS123IC1= PCA9555D (SO24)IC2= MCP7940 (SOIC8)

Diversos:X1= Cristal de quartzo 32 kHzK1= Barra de terminais de 14 vias (2x7)K2= Barra de terminais de 3 vias

(ou 22 pinos opcional)

K3;K4= Barra de terminais de 3 viasK5;K6= Barra de terminais de 2 vias

(opcional)BT1 ou BT2= Suporte de bateria

CH25-2032LFBZ1= BesouroS1;S2;S3= Botão de pressão

(tipo 9314 SMD)LCD1= Módulo LCD de 2x16

caracteres, Electronic Assembly DOGM162L-A

PCI (Refª 120596-1), disponível na Guimocircuito(www.guimocircuito.com) [3].

Módulo/Kit (refª 120596-91), placa com os componentes SMD montados e testada (componentes LCD1, X1, K1-K4, BZ1, BT1 têm que ser montados).

1412

12

34

12

34

12

34

LCD

GND

INT

A2

A1

A0

IO1.7

IO1.6

IO1.5

IO1.4

IO0.7

IO0.6

IO0.5

IO0.4

IO0.3

IO0.2

IO0.1

IO0.0

+3V3

IO1.3

IO1.2

IO1.1

IO1.0

+3V3

K1

IC1

BT1

BZ1

S1S2

S3

C1

IC2

K7

T1X1

R1

C2

R2 R3

R4

C3

C4

C5C6

K2

R5

R6

R7

C7

K6K5

C8

C9

R8

R9

R10

R11

R12

R13

R14

R15

Page 66: Elektor_340_2013

• Hardware & Software

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

Em 2012 apresentámos uma biblioteca em lin-guagem C para o Elektor Bus [1]. Uma das carac-terísticas distintivas é a separação entre a parte específica do hardware e a parte do código res-ponsável pela implementação dos protocolos. Isto facilita a adaptação da biblioteca a outros tipos de microcontroladores ou a outros módulos de hardware: só a parte relativa ao hardware é que necessita de ser modificada, enquanto tudo o resto permanece igual.Contudo, há mais numa aplicação típica para barramento do que compor, enviar e receber mensagens: há LEDs e relés para ligar ou desli-gar, valores analógicos para ler, e motores para controlar. Para além disso, seria desejável que o microcontrolador simplesmente comunicasse com outros dispositivos, tais como módulos

Jens Nickel (Elektor)

Biblioteca de firmware embebida

A biblioteca ELF (Embedded Firmware Library) modular não é apenas mais uma

biblioteca para desenvolvimento de aplicações. Esta permite-lhe escrever aplicações e

módulos de código que são independentes do hardware utilizado, pelo que podem ser

facilmente transferidas de um módulo de hardware para outro. Isto significa que já não

vai ficar limitado a um fabricante de microcontroladores. Vai apenas escrever código

para Linux embebido no geral. Devido à sua vasta gama de funções de interface que

cobre conversores A/D, geradores PWM, mostradores, TCP/IP, cartões SD e muito

mais, esta biblioteca é ideal para os iniciados na programação (em linguagem C).

Características da Biblioteca Embebida para firmware

•Transferível, em princípio, para qualquer microcontrolador para o qual exista um compilador ANSI C

•Recomendados 32 kB de memória flash e 2 kB de memória RAM•Aplicação bem documentada•Microcontroladores suportados actualmente: ATmega328

e ATxmega256A3; ATmega32 em preparação•Módulos de hardware suportados actualmente: nó experimental para

ElektorBus, módulo servidor Web XMEGA [9], módulo de expansão Linux [8]; mais módulos de hardware em preparação

•Transferível facilmente para novos módulos de hardware•Bibliotecas de alto nível suportadas actualmente: LEDs e botões

de pressão, conversor A/D, motor passo-a-passo, Elektor Bus, mostrador, módulo de hardware para interface TCP/IP da WIZnet, cartão SD (dados em bruto)

•Licença de código fonte aberto LGPL

Construa mais rapidamente projectos com microcontroladores

Page 67: Elektor_340_2013

Biblioteca de firmware embebida

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

de hardware para interface TCP/IP ou um car-tão SD.

Programação em paraleloNo decorrer da programação da biblioteca, o conceito desenvolveu-se mais, e passo-a-passo tornou-se mais flexível e potente, com capacida-des muito para além daquelas necessárias para o Elektor Bus. Felizmente, encontrei um leitor, Michael Busser (membro do grupo Google Elektor Bus), um co-projectista que contribuiu com mui-tos módulos de código, funções e ideias inteli-gentes. Assim pudemos trabalhar em paralelo no código, nos tempos livres, e carregámo-lo no bem conhecido site de projectos SourceForge [2] sob o nome Embedded Firmware Library (EFL). O SourceForge é dedicado a projectos de código fonte aberto, o que encaixa bem na filosofia da Elektor: foi escolhida a licença LGPL [3]. A carac-terística mais importante da plataforma Sour-ceForge é o sistema de controlo de versão inte-grado [4], compatível com SVN, que pode ser utilizado em Windows com, por exemplo, o Tor-toiseSVN [5]. Um clique de rato é tudo o que é necessário para carregar (commit) as alterações efectuadas ou para descarregar a versão mais recente do código (update). Ao longo do tempo foi sendo construído um considerável conjunto de funções, pelo que se decidiu utilizar um sis-tema de documentação automático. Adicionando simplesmente ao código fonte comentários num formato predefinido, podemos utilizar o programa Doxygen [6], em código fonte aberto, para gerar automaticamente documentação bem organizada para todas as funções. A documentação está em HTML, pelo que pode ser visualizada num nave-gador de Internet (Figura 1). A documentação do projecto, gerada pelo Doxygen, pode ser des-carregada do site do projecto [7].

Blocos de construçãoA EFL foi projectada como um conjunto de blo-cos de construção, sendo os vários módulos de código de cada camada permutáveis uns com os outros. Existem três camadas distintas: o código do microcontrolador reside na camada inferior; acima desta fica a camada de módulo de hard- ware e finalmente temos a camada de expansão (Figura 2). As camadas correspondem à estru-tura de um projecto real: podem ser utilizados diferentes microcontroladores (compatíveis pino a pino) no mesmo módulo de hardware, ou o mesmo microcontrolador pode ser utilizado em

módulos de hardware diferentes. Um bom exem-plo é o ATmega328, que é utilizado numa vasta gama de módulos de hardware da Elektor, assim como no Arduino Uno.Se definirmos um conector de expansão e res-pectiva disposição dos pinos, podemos combi-nar facilmente módulos de hardware principais diferentes com módulos de expansão de hard- ware diferentes. Um exemplo disto é o módulo de expansão Linux descrito algures nesta edição [8]. Este módulo de hardware pode ser utilizado, não apenas em conjunto com o módulo Linux Elektor, mas também com o módulo servidor

APLICAÇÃO

MOSTRADOR LED BOTÕES ELEKTORBUSUART UDP/TCP/IP

CAMADA DE

MÓDULO CAMADA DE

HARDWARE

BIBLIOTECAS

EFLEXPANSÃOMÓDULO

MICROCONTROLADOR

COMU

M

HARDWARE120668 - 15

Figura 1. A ferramenta Doxygen ajuda a produzir documentação clara para as funções.

Figura 2. Devido à camada dependente do hardware claramente separada, um projecto baseado na EFL pode rapidamente ser transferido para uma nova plataforma. Isto é muito útil quando são necessárias mudanças de hardware durante o projecto de um protótipo.

Page 68: Elektor_340_2013

• Hardware & Software

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

carregar em [11] está organizado em diferentes subpastas, cujos nomes correspondem aos vários microcontroladores e módulos de hardware. Pode encontrar mais informações na documentação adicional, também disponível em [7].

Princípio da caixa negraNo caso ideal, os três módulos de código pode-riam ser desenvolvidos por três projectistas independentes: o projectista do código para o microcontrolador não necessita de saber em que módulo de hardware este vai ser montado, e o projectista do código para o módulo de hardware não necessita de estar informado de que módulos de expansão de hardware podem estar presentes.O mesmo funciona no sentido inverso, do nível mais alto para o mais baixo: o projectista de uma aplicação não necessita de se preocupar com os detalhes do código existente no nível imediata-mente abaixo. Assim como o projectista do código para o módulo de hardware com o microcontro-lador só necessita do diagrama do circuito desse módulo, uma descrição dos pinos dos portos do microcontrolador e as suas funções, não necessita de conhecer o funcionamento interno do micro-controlador (Figura 3), tratando-o assim como uma caixa negra (Figura 4). O projectista de um módulo de expansão de hardware só necessita de estar concentrado nos pinos do conector de expansão através dos quais vai comunicar com o módulo de hardware que contém o microcontro-lador; sem se preocupar com os sinais que estão ligados aos pinos do microcontrolador (Figura 5).

Bibliotecas de alto nívelAcima da camada de hardware estão os módu-los de código que fornecem as funções de alto nível, a que chamamos bibliotecas. Exemplos disto são: o módulo de código incluído no código base actual, que controla os painéis LCD alfanu-méricos compatíveis com HD44780; um contro-lador para o módulo de hardware para ligação TCP/IP da WIZnet; um controlador simples para motores passo-a-passo; e um módulo de software para ler/escrever dados em bruto de/para um cartão SD. O princípio da caixa negra estende--se também a estes módulos de software: se pretender modificar ou expandir a biblioteca do mostrador, este (ou mais precisamente o con-trolador do mostrador) pode ser simplesmente ser tratado como um bloco (Figura 6). Não há necessidade de saber quais os pinos do mostrador que estão ligados aos pinos do microcontrolador;

Web XMEGA [9], que vai ser descrito numa pró-xima edição da Elektor. A EFL também pode ser utilizada num sistema composto por um módulo principal de hardware que contém vários periféri-cos, nos quais podem ser ligados vários módulos de hardware contendo microcontroladores dife-rentes. Existem três tipos de módulos de código, correspondentes ao microcontrolador, ao módulo de hardware com microcontrolador e ao módulo de hardware de expansão. Cada módulo de código contém um ficheiro de cabeçalho .h e um ficheiro de código .c. É assim necessário adicionar os ficheiros ControllerEFL.h/.c, BoardEFL.h/.c, e ExtensionEFL.h/.c ao seu projecto. Os nomes dos ficheiros são os mesmos para todos os dife-rentes tipos de microcontroladores e módulos de hardware suportados pela EFL. Para evitar conflitos com os nomes, o código que pode des-

GPIO

PC0

PC1

PC2

PC3

PC4

PC5

PB3

PB4

PB5

GPIO

PD0

PD1

PD2

PD3

PD4

120668 - 11

PD5

PD6

PD7

FLASH

TIMER / COUNTERTIMER / COUNTERTIMER / COUNTER

SRAM

UART SPI

I2C

ADC

CPU

ADC/2.0

ADC/2.1

ADC/2.2

ADC/2.3

ADC/SDA/2.4

ADC/SCL/2.5

MOSI/1.3

MISO/1.4

SCK/1.5

3.0/RXDRS485

3.1/TXD

3.2

3.3

3.4

120668 - 12

3.5

3.6

3.7

RO

DIDE

RE

Figura 3. Diagrama de blocos muito simplificado de um microcontrolador típico (ATmega328).

Figura 4. O projectista de código para um módulo de hardware pode considerar o microcontrolador como uma caixa negra: só é necessário conhecer as ligações dos pinos.

Page 69: Elektor_340_2013

Biblioteca de firmware embebida

www.elektor-magazine.pt | Setembro 2013 | 69

botão de pressão, um relé ou outro dispositivo digital de E/S estiver ligado através de um cir-cuito integrado de expansão de portos, em vez de estar ligado directamente a um pino do micro-controlador, podem ser utilizadas as mesmas fun-ções da biblioteca para esta ligação. Os botões de pressão ligados a entradas analógicas, como no módulo de expansão Linux, também podem ser tratados como botões de pressão digitais.

Conjunto consistente de funções Só temos aqui espaço para descrever o funcio-namento interno da biblioteca em termos gerais. Pode ver mais informações sobre a camada de hardware em [7]: esta documentação é útil para aqueles que necessitem de modificar a camada de hardware para suportar um módulo de hard- ware diferente.

e para o projectista da biblioteca do mostrador não é importante se o controlador do mostrador está ligado em modo de quatro bits ou através de SPI, podendo concentrar-se nos comandos HD44780 e nas sequências de dados.

Código da aplicaçãoO projectista de aplicações tem um acesso fácil a todos os blocos do módulo de hardware, e só necessita de saber que blocos estão disponíveis. Se estiverem disponíveis blocos LED no módulo de hardware que contém o microcontrolador e no módulo de expansão de hardware, talvez com dois e quatro LEDs respectivamente (Figura 6), o projectista pode escrever código que comuta o estado do primeiro LED do bloco 0 e do terceiro LED do bloco 1, sem se preocupar com a loca-lização física dos LEDs. Mesmo se um LED, um

(+0) IO/ADC(+1) IO/ADC(+2) IO/ADC(+3) IO/ADC(+4) IO/ADC(+5) IO/ADC

120668 - 13

SENSOR

SENSOR

120668 - 14

SENSOR

SENSOR RS485

µC

#0

#0

#1

#1

Figure 6. O projectista da aplicação só necessita de conhecer o diagrama de blocos do sistema, e não necessita de conhecer os detalhes das ligações dos módulos de hardware. Os dois grupos de LEDs são endereçados através dos números de bloco respectivos, 0 e 1.

Figura 5. O projectista do código para um módulo de expansão de hardware só necessita de conhecer as ligações do conector de expansão e as suas possíveis utilizações.

Page 70: Elektor_340_2013

• Hardware & Software

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

com as várias unidades funcionais individuais, como o mostrador e o controlador para motores passo-a-passo. Estas funções são necessárias para encapsular as várias combinações possí-veis de ligações eléctricas e de protocolos, como um mostrador utilizar o interface em paralelo de quatro bits ou o barramento SPI. As bibliotecas de alto nível acedem a estas funções de baixo nível para fornecer um interface consistente ao código ao nível da aplicação.

Exemplo: mostradorComo exemplo vamos ver como podemos contro-lar um LCD alfanumérico. O código da aplicação vai apresentar um simples cumprimento ao utili-zador na primeira linha do mostrador, chamando as seguintes funções da biblioteca do mostrador:

Display_LibrarySetup();Display_WriteString(0, 0, “Welcome!”);

O primeiro zero corresponde à posição do mos-trador a ser acedido (como convenção na lingua-gem C, conta-se a partir de zero na EFL). Para executar o comando de escrita, a biblioteca faz várias chamadas à função

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

no nível de módulo, para enviar dados ou bytes de comando ao controlador do mostrador.No caso do módulo servidor Web XMEGA o mos-trador é controlado através de um barramento SPI. Nesta implementação a função no nível do microcontrolador

uint8 SPIMaster_TransceiveByte(int8 Handle, uint8 Databyte)

é utilizada para enviar um byte ao mostrador. As entradas CS e RS do mostrador também neces-sitam de ser controladas adequadamente.

Download do firmwareO pacote disponível para download no site deste artigo [7] inclui uma aplicação de exemplo. É um projecto semelhante ao [1]: o nó experimental Elektor Bus [10] é ligado a um módulo de expan-são de hardware que contém dois sensores e qua-tro LEDs extra (Figura 7). Estes são construídos em metade de um módulo universal para protóti-

O princípio subjacente a esta biblioteca expõe um conjunto consistente de funções (API) de uma camada à camada acima desta. O API do micro-controlador fornece sempre o mesmo conjunto de funções (ou pelo menos as funções que são suportadas pelo microcontrolador em questão). Este contém principalmente funções de iniciali-zação das unidades periféricas integradas, tais como o conversor A/D, interfaces SPI e UART, contadores/temporizadores, etc., contém também funções para configurar parâmetros associados a estas unidades (como a taxa de transferência da UART), e finalmente funções para operar a unidade: fazer medições utilizando o conversor A/D, enviar e receber bytes através da UART ou SPI, etc. Para mais detalhes consulte a Tabela.Nos níveis de módulo e de módulo de expansão existem funções de baixo nível para comunicar

Tabela: Funções do microcontrolador (versão de Fevereiro de 2013, omitindo as funções de configuração e de alteração de parâmetros; para actualizações veja [11])

Função ATxmega256A3 ATmega328

Habilitar/desabilitar interrupções X X

Esperar… (atraso temporal) X X

Definir valor de pino X X

Ler valor de pino X X

Ler resultado da conversão A/D X X

Iniciar conversão A/D X X

Definir valor de saída do conversor D/A X -

Enviar dados através da UART (controlado por interrupção)

X X

Receber numa memória circular X X

Master SPI (enviar/receber byte) X *

Master I2C

Ler/Escrever bytes (combinado) X *

Iniciar/parar temporizador X X

Contar impulsos injectados num pino X *

Funções temporais:

- incrementar X X

- chamar função X X

- comutar estado de pino X X

- comutar a velocidade variável X X

- medir frequência X *

Saída PWM X *

PWM via software * *

x: implementado *: planeado -: não disponível

Page 71: Elektor_340_2013

Biblioteca de firmware embebida

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

um molde básico para uma aplicação baseada na EFL. Também é possível ver que funções são necessárias chamar quando o programa arranca. A função ApplicationSetup() fornece todos os dados de configuração para o barramento (já não são necessários os ficheiros de configuração especiais ElektorBusNode.h/.c). Depois temos as funções de configuração para os vários módulos

pos Elektor (UPBS => ELEX), e este pacote tam-bém inclui um ficheiro LochMaster que apresenta a disposição dos componentes.Quando se abre o firmware no AtmelStudio 6, os ficheiros de código aparecem em pastas (vir-tuais) chamadas Hardware, Common e Libraries (Figura 8). Também pode ver o ficheiro principal do código (ExperimentalNodeEFL.c) que fornece

Figura 7. Nó experimental Elektor Bus com o módulo de expansão de hardware (dois sensores e quatro LEDs). A disposição deste módulo é facilmente adaptável a outros módulos, como o módulo de interface para motores passo-a-passo.

Uma análise mais detalhada da EFL

Pinos dos portosAs funções associadas às E/S digitais (por exemplo, para con-figurar o nível de saída de um pino) são chamadas introdu-zindo um parâmetro chamado Portpin: uma variável do tipo unsigned integer com dois bytes (uint16);

void IO_SetPinLevel(uint16 Portpin, uint8 PinLevel)

O primeiro byte do parâmetro Portpin diz respeito ao porto (ou grupo de pinos de E/S): no caso de um microcontrola-dor AVR, zero corresponde ao porto A, um ao porto B, etc. Isto permite à função funcionar com registos que vão ser afectados pela chamada à função. O segundo byte do pa-râmetro especifica o pino do porto: num microcontrolador de 8 bit típico isto corresponde aos valores de 0 a 7. Os pinos do porto podem receber etiquetas 0.0, 0.1, …, 1.0, 1.1, etc., no diagrama do circuito (Figura 4).

Funcionalidades, unidades e handlersAs várias funções periféricas fornecidas por um microcontro-lador (tais como conversores A/D, UARTs, interfaces SPI e temporizadores/contadores) são chamadas funcionalidades na EFL. Para cada funcionalidade podem existir várias unidades: por exemplo, no ATxmega256A3 existem três unidades SPI, que fornecem a funcionalidade SPI. Cada unidade está asso-ciada a um conjunto particular de pinos no microcontrolador,

como especificado na folha de características do microcon-trolador. O código do módulo de hardware, no entanto, não conhece nada acerca da numeração interna das unidades ou dos registos que controlam as unidades. Assim, quando uma unidade é configurada, a identidade de um dos pinos do porto que forma parte do interface é passada à função no nível do microcontrolador. Por exemplo, no caso de uma unidade SPI, a função de configuração tem a seguinte forma:

int8 SPIMaster_Setup(uint16 Portpin)

A função de configuração no código do microcontrolador de-termina o número da unidade do interface SPI a ser utilizada, a partir do pino do porto especificado. A partir disto podemos determinar que registos necessitam de ser inicializados. Para acesso posterior ao porto, o número da unidade e o pino do porto são armazenados num array chamado Map: a função SPIMaster_Setup retorna uma posição deste array (incremen-tal, a partir de zero) como um handler.O código do módulo de hardware pode agora utilizar o hand-ler para especificar a unidade do interface SPI quando envia ou recebe dados:

uint8 SPIMaster_TransceiveByte(int8 Handle, uint8 Databyte)

As outras funcionalidades funcionam da mesma forma.

Page 72: Elektor_340_2013

• Hardware & Software

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

Pinos de módulo e blocosOs pinos individuais dos portos do microcontrolador são ligados a várias unidades no módulo de hardware, tais como LEDs, bo-tões de pressão, ou um controlador RS-485. O código ao nível do módulo de hardware, quando este é inicializado, armazena num array os pinos dos por-tos que correspondem a es-tes blocos. As posições deste array são chamadas Pinos de módulo.Por exemplo, os pinos de mó-dulo (0) e (1) são atribuídos ao bloco LED apresentado na Figura 4; os pinos de módu-lo (2) e (3) são atribuídos ao bloco dos botões de pressão; e os pinos de módulo (4) e (9) são atribuídos ao conector de expansão.

A função Extension_Init(), presente no código do módulo de expansão de hardware, reserva os pinos de módulo (12) a (15) para os LEDs extra no módulo de hardware (Figura 5). Os correspondentes pinos de porto 2.2 a 2.5 são determina-dos indirectamente através dos pinos de módulo (6) a (9) do conector de expansão:

(12) 2.2 // = (6)(13) 2.3 // = (7)(14) 2.4 // = (8)(15) 2.5 // = (9)

O array dos pinos de módulo contém agora dois blocos para os LEDs: (0) a (1), e (12) a (15). Estas gamas (ou mais pre-cisamente o primeiro pino de módulo pertencente à gama e a quantidade de pinos que a gama contém) são armazenadas num array chamado Block, isto para cada bloco, acompanhado por uma constante que indica o tipo de bloco:

Se uma biblioteca de LEDs pretender controlar um LED num bloco em particular, chama simplesmente a função:

void SwitchDigitalOutput(uint8 BlockIndex, uint8 Po-sition, uint8 ON_OFF)

no nível do módulo.

A função SwitchDigitalOutput() determina o pino de módulo a partir do parâmetro BlockIndex e a posição do LED dentro do bloco, e a partir destes determina o pino de porto envolvido ao nível do hardware.O array Block também armazena o nível lógico que é necessário para controlar o pino de porto em hardware que vai ligar o LED, porque isto pode diferir em diferentes módulos de hardware.

RecursosA grande flexibilidade da EFL vem com um preço: esta bi-blioteca ocupa não apenas memória flash necessária para o código, mas também ocupa RAM (ajustável de poucos bytes a muitas centenas de bytes). A velocidade de exe-cução também é afectada, em particular em programas que necessitam de comutar rapidamente o estado dos pi-nos de saída. Por esta razão foram implementadas funções especiais para comutar saídas digitais com o controlo de temporizadores, removendo a necessidade de configurar os pinos para os níveis alto ou baixo utilizando muitas chama-das a funções. Mesmo assim, o desempenho é suficiente para tarefas tais como controlar o brilho de vários LEDs.

Pino de módulo

Pino de porto

(0) 3.4

(1) 3.6

(2) 3.5

(3) 3.7

(4) 2.0

(5) 2.1

(6) 2.2

(9) 2.5

Índice de bloco

Tipo de bloco

Primeiro elemento

Contagem

[0] BLOCKTYPE_LED

0 2

[1] BLOCKTYPE_LED

12 4

[2] BLOCKTYPE_BUTTON

2 2

120668 - 16

SENSOR

SENSOR

ADC/2.0

ADC/2.1

ADC/2.2

ADC/2.3

ADC/SDA/2.4

ADC/SCL/2.5

MOSI/1.3

MISO/1.4

SCK/1.5

3.0/RXDRS485

3.1/TXD

3.2

3.3

3.4

3.5

3.6

3.7

µC

(4)

(10)

(12) (13) (14) (15)

{0}

{1}

{2}

[5]

[6]

[1]

[3][4]

[0]

[2]

(11)

(5)(6)(7)(8)

(0)

(1)

(2)

(3)

(9)

(+0)(+1)(+2)(+3)(+4)(+5)

Page 73: Elektor_340_2013

Biblioteca de firmware embebida

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

bem-vindas. Vão ser publicadas actualizações regulares no site da Elektor [11].

(120668)Artigo original: Embedded Firmware LibraryMay 2013

Internet

[1] www.elektor.com.pt/120582[2] http://sourceforge.net/projects/embeddedlib/[3] www.gnu.org/licenses/lgpl.html[4] http://subversion.apache.org[5] http://tortoisesvn.net[6] www.doxygen.org[7] www.elektor.com.pt/120668[8] www.elektor.com.pt/120596[9] www.elektor-labs.com/xmegawebserver[10] www.elektor.com.pt/110258[11] www.elektor-labs.com/EFL

da biblioteca: habitualmente não é necessário modificar aqui nenhuns parâmetros. A chamada SwitchLED(1, 0, ON) liga o primeiro LED no módulo de expansão de hardware para confirmar que o programa foi iniciado.Pressionar o primeiro botão de pressão no módulo experimental comuta o LED de teste vermelho, e também o terceiro LED no módulo de expansão. Sob controlo do scheduler do barramento, os nós enviam as medições dos dois sensores para o PC. O segundo LED no módulo de expansão pisca em sincronismo com esta actividade.O quarto LED é controlável a partir do PC.O ficheiro ExtensionEFL.c também inclui o código de configuração para um pequeno módulo de relés, referente ao qual uma parte do código é compilada dependendo de uma directiva #define presente no ficheiro ExtensionEFL.h.Como mencionado acima, o pacote para download contém um documento extra para a EFL e para o Doxygen, assim como o código base completo, incluindo bibliotecas adicionais para mostradores e para o módulo de hardware para interface TCP/IP da WIZnet, tudo num formato de código fonte.

FuturoEste artigo é apenas uma breve introdução à EFL. Está planeado um artigo com uma expli-cação passo por passo dirigido aos iniciados na programação em linguagem C. Vamos também utilizar a EFL em futuros projectos da Elektor, a começar com um módulo de hardware para moto-res passo-a-passo, para ligar ao Elektor Bus, e continuar com o módulo servidor Web XMEGA.Os leitores podem estar interessados, não apenas em utilizar a EFL, mas em expandi-la e adaptá-la (ver documentação adicional em [7]). O autor recebe quaisquer sugestões, em particular na área das aplicações para microcontroladores, para o e-mail [email protected], assunto: EFL. Expan-sões para futuros microcontroladores, módulos de hardware, e blocos periféricos também são

RS485, TCP/IP e ligações sem fios: Elektor Bus e protocolos dedicadosA independência do hardware presente na biblioteca Elektor Bus foi melhorada introduzindo um módulo de código ElektorBusEFL.h/.c, que encapsula os detalhes do protocolo utilizado. Agora é fácil enviar e receber mensagens, não apenas através de um interface RS-485, mas também através de interfaces RS-232, UART com níveis TTL, ou até TCP/IP: isto já foi testado com o módulo servidor Web XMEGA e com um módulo TCP/IP WIZ820io da WIZnet. Outra opção

interessante seria utilizar um módulo de hardware sem fios para a banda ISM (418 MHz a 433 MHz).

Assim, também é possível escrever uma biblioteca de substituição de protocolos, que seria independente do meio de comunicação, do módulo de hardware, e do microcontrolador. Como pode ver, existe uma vasta gama de possibilidades para experimentar.

Figura 8. Imagem do projecto exemplo no AtmelStudio 6. Os ficheiros de código relativos ao projecto são armazenados em pastas (virtuais) que tornam a estrutura mais fácil de entender.

Page 74: Elektor_340_2013

• Hardware & Software

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

Este projecto, na sua versão final, levou algum tempo a ser finalizado. Tudo começou um ano antes com um sistema de automação doméstica [1] desenvolvido originalmente no laboratório da Elektor por dois estagiários: Koen e Jesper. Uma parte do sistema consistia numa fita de LEDs RGB controlada através de uma rede Ethernet, isto é, com um cabo. A ideia era boa, mas conside-rei que uma ligação sem fios era uma solução mais apelativa. Eu queria também uma aplicação baseada num navegador de Internet, compatí-

vel com a maioria dos navegadores de Internet, que utilizasse botões deslizantes para controlar a cor da fita de LEDs. Assim, Koen começou a desenvolver o projecto, mas infelizmente acabou o período de estágio antes de conseguir acabar o projecto e voltou para a universidade. Antes de deixar a Elektor, Koen explicou-me os pro-blemas que encontrou, que ainda necessitavam de ser analisados. Assumi então a conclusão do projecto, que ficou a apanhar pó durante alguns meses na minha secretária! Quando finalmente

Clemens Valens (Elektor)

Placa controladora Wi-FiControlo de fitas de LEDs RGB, motores, relés e muito mais, tudo sem fios

Com a invasão dos módulos Wi-Fi chegou o tempo de adicionar electrodomésticos à sua rede Wi-Fi doméstica. Controlar a sua casa a partir do seu telemóvel nunca foi tão fácil graças ao módulo controlador Wi-Fi universal aqui apresentado.Embora o utilizemos para configurar a cor de uma fita de LEDs RGB, pode utilizá-lo para uma vasta gama de outras aplicações.

Page 75: Elektor_340_2013

Placa controladora Wi-Fi

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

encontrei o tempo e a energia para o fazer, já me tinha esquecido do que o Koen me tinha dito, e basicamente tive de começar tudo do zero.

O circuito do Koen consistia essencialmente num microcontrolador AVR ATmega328 que controlava três transístores MOSFET através de sinais PWM, para regular a intensidade das três cores. Para a ligação Wi-Fi foi utilizado um módulo WizFi220 da WIZnet que comunicava com o microcontrola-dor através de uma ligação série simples. Como possuía um módulo de expansão Arduino neste módulo Wi-Fi [2], e como um módulo Arduino Uno é baseado num Atmega328, decidi construir o meu protótipo como aplicação Arduino. Tudo o que era necessário era um segundo módulo de expansão com os MOSFETs, para poder controlar a fita de LEDs. Isto foi rapidamente construído numa placa para protótipos (Figura 1).

Depois veio a parte da programação. Processar os comandos HTTP enviados pelo módulo Wi-Fi e enviar as respectivas respostas não foi com-plicado, mas quando foi necessário modificar a página Web deparei-me com os problemas encon-trados pelo Koen. Primeiro estavam os botões deslizantes que controlam a cor da fita de LEDs que tinha pedido. Como descobri, não existiam botões deslizantes no HTML standard. Ao pes-quisar na Internet descobri que o HTML 5 podia suportar botões deslizantes, mas só alguns nave-gadores de Internet é que o suportam, pelo que HTML 5 não era uma opção. O Koen resolveu isto utilizando as bibliotecas JQuery e JQuery-UI [3] da linguagem JavaScript. Estas bibliotecas, dis-poníveis na Internet, servem para implementar todo o tipo de controlos e outras funções. Alguns inconvenientes destas bibliotecas é que estão disponíveis on-line, o que significa que é neces-sária uma ligação à Internet para as utilizar, e também são demasiado grandes para caberem na memória de programa do microcontrolador. Como não tinha outra solução, decidi utilizar as bibliotecas JavaScript on-line.

Ao analisar a código da página Web do Koen, lembrei-me do problema que ele tinha mencio-nado antes de se ir embora: por alguma razão o módulo Wi-Fi desligava a ligação depois de receber um comando, não permitindo ao nave-gador enviar mais comandos. Consequentemente só era possível alterar uma vez a cor da fita de LEDs, a não ser que se reiniciasse o módulo.

O Koen encontrou uma solução que utiliza um código complicado em JavaScript, que mandava o navegador modificar o seu porto de comunica-ção antes de enviar uma mensagem. Este código também envolvia a utilização do comando HTTP GET para enviar os dados referentes à cor, sendo que este comando foi criado para receber dados de um servidor. Para enviar os dados é necessá-rio utilizar o comando POST (ou PUT).

Uma solução mais elegante é adicionar a linha “Conection: close” à resposta do servidor a um comando GET. Agora já era possível apagar o script escrito anteriormente, tornando a página Web mais simples, e já era possível utilizar o comando POST que era o mais adequado. Pode ver como é constituído o comando POST quando é enviado pelo Firefox (os dados referentes à cor estão no final):

POST / HTTP/1.1Host: 192.168.2.15User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/17.0 Firefox/17.0Accept: */*Accept-Language: en-US,en;q=0.5Accept-Encoding: gzip, deflateDNT: 1Connection: keep-aliveContent-Type: application/x-www-form-urlencoded; charset=UTF-8

Figura 1. Protótipo baseado num Arduino Uno, num módulo de expansão Wi-Fi (120306) e num pedaço de placapara protótipos.

Page 76: Elektor_340_2013

• Hardware & Software

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

utilizar um programador especial. Infelizmente, este microcontrolador tem apenas um canal PWM, pelo que tive de implementar em software os três canais PWM para controlo da cor.Transferir o código do microcontrolador AVR para o microcontrolador PIC podia ter sido uma tarefa fácil e directa, mas não foi. Compliquei um pouco as coisas ao incluir um bootloader e funcionali-dade USB, mas a Microchip também poderia ter facilitado um pouco. Estava a utilizar o compi-lador XC8, cheio de funcionalidades e publici-tado entusiasticamente pela Microchip, mas foi impossível compilar o código USB. Retirei este código das Bibliotecas de Aplicação v2012-10-15 da Microchip, e só depois de muitas horas de experimentação de configurações do compilador e de directivas #pragma é que encontrei uma declaração na Internet que dizia que o compilador XC8 não era (ainda) compatível com as Biblio-tecas de Aplicação da Microchip. Necessitava de outro compilador. Utilizando novamente a Inter-net, quinze minutos depois encontrei um com-pilador C18 totalmente funcional. Outros quinze minutos depois já tinha o exemplo do porto série USB a funcionar.Agora era a altura de adicionar o código Wi-Fi – que correu bem excepto na introdução de todos os dados na memória RAM segmentada do micro-controlador PIC – e testá-lo. Não funcionou! Bem, funcionou um pouco: conseguia modificar a cor da fita de LEDs uma ou duas vezes, e depois a comunicação Wi-Fi parava. Quando controlava a fita através da ligação USB funcionava tudo bem. Depois descobri que a interrupção USB bloqueava a interrupção do porto série, causando a perda de dados. Por esta altura decidi simplesmente desabilitar o porto USB no modo Wi-Fi em vez de resolver o problema (se realmente lhe interessar tente resolver este problema, e se encontrar a solução diga-me).

ConstruçãoAgora o segundo protótipo – baseado num micro-controlador PIC – estava a funcionar com o que eu queria utilizar (Figura 2), e tinha chegado a altura de desenhar a placa de circuito impresso. Como o objectivo era controlar uma fita de LEDs, decidi construir uma caixa pequena e discreta. A placa de circuito impresso foi desenhada de forma a minimizar as alterações à caixa, espe-cialmente quando se utiliza a caixa azul trans-parente que permite visualizar os LEDS no seu interior. Nesse caso não são necessários furos, e

Content-Length: 23Origin: nullPragma: no-cacheCache-Control: no-cache

red=79&green=10&blue=20

O próximo passo era tornar a página Web mais atractiva para dispositivos móveis. No meu smart- phone os botões deslizantes apareciam muito pequenos, tornando impossível manipulá-los com precisão. A solução era adicionar a etiqueta meta viewport ao cabeçalho da página Web, assim:

<meta name=’viewport’ content=’width=device-width, user-scalable=no’ />

Adicionando esta linha ao código HTML da página Web os botões deslizantes já preenchiam o ecrã do smartphone Android, e também ficavam bem no PC (num iPad estes ocupavam apenas um quarto do ecrã, mas não foram alterados).Entretanto também foi optimizado o código do resto do programa, sendo que o objectivo agora era fazê-lo ocupar o mínimo de memória. Um melhoramento importante resultou da compres-são da página Web. Pode fazer isto com o gzip adicionando depois a linha “Content-encoding: gzip” à resposta do servidor. A maior parte dos navegadores de Internet, senão todos, sabem manipular páginas Web comprimidas; isto só se faz depois de finalizar o projecto.

Até este ponto tinha um protótipo completamente funcional, baseado em hardware compatível com o Arduino, e com firmware que pode ser compi-lado no Aduino IDE. Para mais detalhes, visite o site [4]. Podia ter parado por aqui, mas queria um hardware melhor; uma pilha de placas de circuito impresso simplesmente não me parecia o mais correcto. Ao procurar por um microcontro-lador com menos pinos, descobri que não podia continuar a utilizar a plataforma AVR da Atmel, porque os componentes que eram adequados eram difíceis de encontrar. No entanto, possuía alguns dispositivos PIC18F14K50 da Microchip, que são microcontroladores com 20 pinos e com USB; isto era interessante, porque permitia uma configuração do módulo Wi-Fi baseada em PC [2]. Outra funcionalidade interessante é o bootloader USB fornecido (gratuitamente) pela Microchip, que facilita o desenvolvimento do firmware sem

Page 77: Elektor_340_2013

Placa controladora Wi-Fi

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

•Controlador de três canais para controlar relés ou motores através de Wi-Fi ou de USB (ou ambos).

•Adaptador USB/Série.•Sistema de protótipos rápido com Wi-Fi,

expansor de portos, e três canais de potência.

•FlowBoard compatível com o FlowStone 3 [5].

Para tornar possíveis estas diferentes aplica-

só são necessárias algumas alterações no inte-rior. Até com um microcontrolador de 20 pinos ficam alguns pinos sem utilização, pelo que adi-cionei algumas funcionalidades ao módulo. Em combinação com o bootloader, isto transforma o módulo uma plataforma muito mais versátil, que também pode ser utilizada para outras apli-cações. Pode ser utilizado como:

•Controlador Wi-Fi para LEDs em fita.

22p22p

100n

1k

1k

1k 1k 1k

WizFi220

USB-B

IRL540

IRL540

IRL540

1N5819

47k

47k

BZX79-C3V0

ICSP

MCP1825S-3302E/AB

10u 10V 100n 10u 10V 100n

EXPANSÃO

1k

10k

GND

3V3+V5+

Vin

RXDTXD

GPIO27

GPIO29

LM2575T-5.0/NOPB

1N5819

330u 16V100u 50V

1N5819

330u 1A

3x 1N5819

CONECTOR DC

12345678

17181920

911011213141516

IC1

PIC18F14K50-I/P

X1

12MHzC1C2

C3

R1

S1

R2

D5

D6

D7D8

R3 R4 R5

1

2

1

345678

9

1011121314151617

18

19202122

4232252627

120718 - 11

282930

31

32 33 34

35363738394041424344454647

48

MOD1

1234

K1

T1

T2

T3

D1

R6

R7

D2

1 2 3 4 5 6

JP1

IC2

C4 C5 C6 C7

12345

JP2

R8

T4

BC547

R9

TP1

3PT2PT

TP4

TP5TP6

TP7

TP8

1

2

3

5

4

IC3

D3 C8C9

D4

L1

12

JP3

D9D10D11

K2

K3

+5V

Vin

+3V3

Ligação

OKRXD

+3V3

3V3+V5++5VVin

VSSD+D-

VUSBRC0RC1RC2RB4

RB5/RXRB6

VDDRA5/OSC1RA4/OSC2RA3/MCLRRC5RC4RC3RC6RC7RB7/TX

EXT ANT

GND

JTAG_TCKJTAG_TDOJTAG_TDIJTAG_TMSJTAG_NTRSTALARM1RTC_OUT1

VBAT

DC_DC_CNTLALARM2ADC1ADC2MSPI_MISO/GPIO6MSPI_MOSI/GPIO7MSPI_CLK/GPIO5VOUT_1V8

GND

MSPI_CS0/GPIO4MSPI_CS1/GPIO13I2C_CLK/GPIO9PWM0/GPIO10GPIO19/CLK_44MHZ GPIO20/CLK_22MHZ

GPIO21/CLK_11MHZI2C_DATA/GPIO8

SSPI_MISOSSPI_CLKSSPI_CS

SSPI_MOSI

GND

VIN_3V3 EN_1V8 VDDIO

EXT_RESETNUART1_CTS/GPIO26UART1_RTS/GPIO27

UART1_RX/GPIO3UART1_TX/GPIO2UART0_TX/GPIO1

UART0_RTS/GPIO25UART0_RX/GPIO0

UART0_CTS/GPIO24GPIO31GPIO30GPIO29GPIO28

GND

VBUSD-D+GND

OFF

FB

123456

Figura 2. Diagrama do circuito do módulo controlador Wi-Fi. Já reparou que as pessoas ligam sempre o conector DC ao contrário? O pino central é para receber a ligação comum. Foi aqui ligado ao contrário devido a considerações na placa de circuito impresso.

Page 78: Elektor_340_2013

• Hardware & Software

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

terminais standard de dois pinos, com passo de 5,08 mm, para placa de circuito impresso. Um díodo fornece uma protecção básica contra inver-são de polaridade.A utilização dos portos livres do microcontro-lador é permitida através de um conector de expansão de 5 vias. Este conector é expandido numa direcção por uma fila de pontos de teste; e expandido na outra direcção por um conec-tor ICSP. Tudo isto junto fornece acesso a dez pinos do microcontrolador e a todas as tensões de alimentação. Também estão disponíveis um LED, ligado ao pino RC4, e um botão de pres-são. A facilidade de alteração do programa da aplicação, devido ao bootloader e à ligação USB, transforma o módulo numa excelente plataforma para protótipos.Todos os componentes (excepto o módulo Wi-Fi) são convencionais, pelo que a sua montagem não vai apresentar problemas. É sugerido que monte em primeiro lugar o módulo Wi-Fi, porque é um pouco difícil de posicionar correctamente devido à quantidade de ligações necessárias. Note que os reguladores de tensão têm de ser montados deitados com a face para baixo (Figura 4; ou na face das soldaduras). Se não utilizar a caixa pro-posta, pode colocá-los na vertical e aparafusá-los a um dissipador de calor. Os transístores MOSFET devem ser deitados com a face para cima para caberem na caixa.Se os LEDs tiverem de sair pela caixa, deve furar primeiro a caixa para conseguir acertar o com-primento dos pinos dos LEDs. O LED D5 (pino RC4) e o botão de pressão foram montados na direcção dos suportes, para que possa fazer os furos sem necessitar de fazer medições, basta furar através dos suportes. A caixa tem uma tampa para baterias, o que lhe permite montar os LEDs de estado Wi-Fi na face das soldaduras, para que estejam visíveis apenas quando abrir esta tampa.Os botões de pressão necessitam de uma tampa com a altura correcta. O modelo de 16 mm fica quase à face da tampa superior da caixa.

Para que a placa de circuito impresso caiba na caixa tem de cortar os quatro suportes na tampa superior que juntam as partes da caixa. É mais fácil utilizar uma broca com um diâmetro ade-quado. Não corte demasiado, ou não vai conseguir aparafusar os parafusos devido à falta de material do suporte. Também deve partir os pedaços de plástico que servem para fixar baterias.

ções, o módulo foi equipado com um regulador de tensão comutado para que este possa ser alimentado por uma fonte de alimentação entre 7 V e 40 V DC sem desperdiçar muita energia. O módulo também pode ser alimentado a partir do porto USB, mas lembre-se que o módulo Wi-Fi consome bastante energia quando está a transmitir. Um grande regu-lador de 3,3 V linear fornece a energia ao módulo Wi-Fi (devido às restrições de cor-rente não é possível utilizar o

regulador de 3,3 V integrado no microcontrola-dor). O módulo é acompanhado por três LEDs de estado que indicam se o módulo está ou não ligado a um ponto de acesso, e se estão a ser transferidos dados. Como o microcontrolador é alimentado a 5 V e o módulo Wi-Fi a 3,3 V, foi adicionado um circuito conversor de nível de ten-são para as entradas do módulo Wi-Fi. O micro-controlador consegue manipular directamente os sinais de 3,3 V.

O microcontrolador é controlado por um cristal de quartzo de 12 MHz para obter uma correcta temporização USB. O botão de pressão ligado ao pino de reset (MCLR) vai servir principalmente para activar o modo bootloader (o reset externo deve ser desabilitado para esta função, fusível MCLRE=OFF). Se o bootloader não for necessá-rio, este botão de pressão pode funcionar como botão de reset ou para qualquer outra função.Os três transístores MOSFET, conservadoramente classificados, têm uma RDS(on) de 0,077 Ω, con-seguem comutar uma tensão de 100 V, e são protegidos por díodos de roda livre para que possam controlar cargas indutivas. Optei por uti-lizar um bloco de terminais standard de 4 pinos, com passo de 5,08 mm, para a placa de circuito impresso, mesmo que a maioria das fitas de LEDs tenham um conector com um passo menor. Con-tudo, como não sei que standard é utilizado por estes conectores, ou se estão ligados da mesma forma, optei por uma solução mais flexível. Pode construir facilmente um adaptador de cabo a par-tir de, por exemplo, um cabo de alimentação de um leitor de disquetes (Figura 3).Para o conector de alimentação pode utilizar um conector DC com pino central ou um bloco de

Figura 3. Fita de LEDs RGB típica com um cabo adaptador resgatado de uma fonte de alimentação de PC.

Page 79: Elektor_340_2013

Placa controladora Wi-Fi

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

módulo para o modo Ponto de Acesso Limitado (LAP), também permitido por este módulo.

Para ambos os métodos tem de configurar em primeiro lugar o módulo para o modo USB/Série. Para isto, ligue o pino RC2 a +5 V (por exemplo, com um fio no conector de expansão) e depois ligue o módulo a um porto USB livre no seu PC. O LED D5 começa a piscar e já pode enviar coman-dos AT ao novo porto COM virtual (cujo número ou nome tem de obter através do sistema opera-tivo). Se o módulo Wi-Fi estiver ligado a um Ponto de Acesso (quando os LEDs de estado LIGAÇÃO e OK estiverem ligados) introduza +++ num pro-grama terminal a controlar o porto série, para forçar o módulo a entrar no modo de comandos (o LED OK deve ficar desligado). Leia [2] para configurar o módulo.

Colocar o módulo Wi-Fi no modo LAP requer alguma destreza. Observe com atenção o ritmo do LED que está a piscar. Pressione S1 quando o LED estiver desligado, e mantenha-o pressionado durante dois ciclos completos. Liberte o botão apenas quando o LED ficar desligado logo a seguir

O módulo Wi-Fi tem um pequeno conector para se poder ligar uma antena melhor (Figura 5). Se utilizar uma deixe-a solta.

Programar o móduloO firmware que pode descarregar para este pro-jecto [6] contém o bootloader, a aplicação para a fita de LEDs, e as definições para os fusíveis num ficheiro hexadecimal à parte. Programe o microcontrolador com o ficheiro hexadecimal uti-lizando um programador adequado (PICKIT, ICD ou outro) e já está. Com o bootloader programado no microcontrolador já pode programar as suas próprias aplicações. O procedimento é o seguinte:•Não alimente o módulo e assegure-se que JP3

não está montado.•Ligue o módulo a um porto USB livre do seu PC.•Pressione S1 e mantenha-o pressionado

enquanto monta JP3. Em vez de JP3 utilizei um botão de pressão normalmente fechado (os micro-interruptores são perfeitos para isto). Nesse caso, enquanto mantém pressionado S1, ligue e desligue brevemente o micro-interruptor para entrar no modo bootloader.

•O PC (Windows, Linux ou Mac) deve agora detectar o módulo como um dispositivo HID. Se for a sua primeira vez num PC com Windows, deve instalar o ficheiro .INF que vem com o pacote para download.

•No PC corra a ferramenta HIDBootloader for-necida com o pacote para download (Windows; para Linux ou Mac deve descarregar a versão adequada do site da Microchip) (Figura 6). Esta deve reconhecer imediatamente o módulo.

•Procure o seu ficheiro hexadecimal e clique no botão para programar.

•Para sair do modo bootloader e iniciar a apli-cação, carregue no botão de reset ou desligue e ligue novamente a alimentação do módulo, sem manter carregado S1.

Configurar o módulo Wi-FiEm [2] é mostrado como configurar o modulo WizFi220 através de um porto série e utilizando comandos AT. Esta técnica é útil se, por exem-plo, quiser que o microcontrolador configure este módulo em tempo real. Esta técnica também permite a configuração de opções não disponí-veis de outra forma. O módulo aqui apresentado possui um modo especial que permite utilizar esta técnica para o configurar. Se só pretender ligar o circuito a uma rede Wi-Fi, este módulo Wi-Fi fornece uma forma fácil de o fazer: configure o

Figura 4. O módulo quase finalizado (versão 1.0) já montado. A versão 1.1 é idêntica excepto para alguns componentes que foram ligeiramente deslocados para que coubessem melhor na caixa.

Figura 5. Três antenas para 2,4 GHz: uma da Winizen (cima), e as outras duas gentilmente fornecidas pela 2J (www.2j-antennae.com).

Page 80: Elektor_340_2013

• Hardware & Software

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

aos dois ciclos. Se conseguir fazer isto correcta-mente, cerca de um segundo depois os três LEDs de estado Wi-Fi vão piscar rapidamente várias vezes, e o módulo entra no modo LAP (se contar três ciclos o módulo vai restaurar as definições de fábrica: é uma boa forma de se livrar de configu-rações incorrectas). Se ligar o módulo a um moni-tor de porto série vai ver a seguinte mensagem:

IP SubNet Gateway 192.168.1.1: 255.255.255.0: 192.168.1.1[OK]

Assegure-se de que o módulo está dentro do alcance do Ponto de Acesso que quer utilizar com o módulo. Verifique a existência de novos Pontos de Acesso com um PC, um smartphone ou um tablet. Se estiver tudo bem vai ver uma refe-rência “WizFiAPxxxx”, sendo xxxx um número. Ligue-se a esta – é um Ponto de Acesso aberto que não necessita de palavra passe – e aceda ao endereço IP 192.168.1.1. Vai ver uma página semelhante à da Figura 7. Clique no link Find Available Wireless Networks. Vai aparecer uma lista com as redes que estão dentro do alcance e que pode escolher. Clique em Save and Conti-nue. Vai voltar ao primeiro formulário, que agora apresenta os detalhes da rede escolhida. Pode ter de introduzir uma palavra passe dependendo das configurações de segurança dessa rede. Cli-que no botão Save para guardar a configuração.

Clique no link Network Settings (TCP/IP) e pre-encha o formulário. Eu prefiro utilizar um ende-reço IP estático para o módulo para me lembrar sempre desse endereço, mas escolha o que dese-jar. No campo S2W Connection method escreva ‘1,1,,80’. Isto vai transformar o módulo num gateway que utiliza o porto 80, que é o porto HTTP utilizado por defeito pelos navegadores de Internet. Novamente, pode utilizar aqui o valor que desejar. Quando acabar clique no botão Save.

O link Administrator Settings permite-lhe intro-duzir uma palavra passe para o módulo. Eu não utilizei esta opção.

Quando acabar a configuração clique no link Logout. Vai ver a mensagem Rebooting… e a liga-ção Wi-Fi vai ser desligada. O módulo WizFi vai ser reiniciado e vai tentar fazer uma ligação à rede seleccionada. Se tudo correr bem, os LEDs LIGAÇÃO e OK vão acender-se, o que significa que

Figura 6. Utilize esta ferramenta para carregar uma nova aplicação para o módulo controlador Wi-Fi.

Figura 7. A página de configuração do módulo WizFi, que está acessível em modo Ponto de Acesso Limitado,facilita muito o trabalho.

Figura 8. Página web do módulo controlador Wi-Fi apresentada num smartphone Android.O azul está meio ligado ou meio desligado?

Page 81: Elektor_340_2013

Placa controladora Wi-Fi

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

Internet

[1] Sistema de automação doméstica: www.elektor-labs.com/node/2325

[2] Módulo de expansão Wi-Fi/Bluetooth: www.elektor.com.pt/120306

[3] JQuery(UI): http://jquery.com & http://jqueryui.com

[4] Versão Arduino: www.elektor-labs.com/node/2373

[5] FlowStone: www.elektor.com.pt/130064[6] Firmware e ficheiros Eagle para a placa

de circuito impresso: www.elektor.com.pt/ 120718

pode agora ligar o módulo. Escreva o endereço IP do módulo no navegador de Internet e espere até aparecer uma página igual à da Figura 8. Quando a página estiver carregada correctamente já pode utilizá-la.Foi interessante poder controlar a iluminação da minha casa longe desta, utilizando o meu smart- phone. Contudo, esta não era a utilização que eu queria para o módulo. A minha intenção era ligá-lo à porta automática da garagem e utilizar o smartphone como chave. Seria assim possí-vel dar acesso à casa a alguém, mesmo que o dono da casa esteja longe. Este módulo possibi-lita muitas aplicações, utilize a sua imaginação!

(120718)

Artigo original: Wi-Fi Controller Board – June 2013

Lista de componentesResistências (5%, 0,25W):R1,R2,R3,R4,R5,R8 = 1 kΩR6,R7 = 47 kΩR9 = 10 kΩ

Condensadores:C1,C2 = 22 pF/50 V, cerâmico, passo 2,5 mmC3,C5,C7 = 100 nF/50 V, Z5U, passo 5 mmC4,C6 = 10 µF/63 V, radial, passo 2,5 mmC8 = 330 µF/16 V, radial, passo 3,5 mmC9 = 100 µF/50 V, radial, passo 3,5 mm

Bobinas:L1 = 330 µH/1 A, passo 5 mm (por exemplo,

Würth Elektronik tipo 7447452331)

Semicondutores:D1,D3,D4,D9,D10,D11 = 1N5819D2 = díodo Zener 3V (por exemplo, BZX79-C3V0)D5,D6,D7,D8 = LED verde 3 mmIC1 = PIC18F14K50-I/PIC2 = MCP1825S-3302E/AB

IC3 = LM2575T-5.0/NOPBT1,T2,T3 = IRL540T4 = BC547

Diversos:MOD1 = Módulo WizFi220 com antena

(Refª 130076-92)JP1 = Barra de terminais de 6 viasJP2 = Barra de terminais de 5 viasJP3 = Barra de terminais de 2 viasK1 = Conector USB-BK2 = Conector 1x4, em ângulo, passo 5,08 mm

(por exemplo, MSTBA4)K3 = Conector DCS1 = Botão de pressão Multimec tipo RA3FTL6

com tampa, tipo S09-16.0X1 = Cristal de quartzo de 12MHz (HC49/S)

Jumper para JP3Suporte DIP de 20 pinos para IC1Caixa Hammond tipo 1593QGYPCI (Refª 120718-1), disponível na Guimocircuito

(www.guimocircuito.com).

12

34

56

23

1

Page 82: Elektor_340_2013

• Hardware & Software

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

Os problemas que surgem quando se implementa um projecto numa FPGA não se devem apenas a erros de projecto. A arquitectura da FPGA e os defeitos das ferramentas de desenvolvimento também têm um papel importante. Especialmente em aplicações que funcionam com sinais de reló-gio de frequências elevadas, onde estes factores se tornam significativos e por vezes inevitáveis. Podem ocorrer picos quando as distâncias e os tempos de propagação dentro da FPGA se tornam relativamente elevados. Por esta razão, os pro-gramadores de FPGAs correm várias simulações para verificar se o projecto faz aquilo que devia fazer. Também verificam se ocorrem eventos que não foram projectados.As simulações são utilizadas em várias etapas do processo de desenvolvimento. Começa-se com uma simulação funcional, que serve para indicar

como funciona o projecto base. Contudo, a este ponto ainda há muito que fazer antes de o pro-jecto estar concluído. Cada passo do processo cria novas oportunidades para erros, pelo que é necessária uma simulação depois de cada passo para manter as coisas sob controlo. Se o projecto passar na simulação final depois do último passo de implementação, há boas hipóteses de funcio-nar correctamente. Contudo isto não é garantido, porque uma simulação é apenas uma simulação, e o hardware real pode sempre revelar surpresas.

Iniciar o simuladorVamos agora simular o projecto dos dois con-tadores cima/baixo construído nos dois últimos artigos desta série. Comece por fazer uma cópia do último projecto, 3ª parte [3]. É uma boa ideia abrir já o projecto no ISE antes de ler mais.

Clemens Valens (Elektor)

Domina as FPGAsSimulação com 250k portas lógicasA simulação é uma parte importante da programação de aplicações com FPGAs. Se a sua aplicação utilizar apenas algumas portas lógicas, não é difícil pôr o projecto a funcionar. Contudo, as coisas são diferentes quando se utiliza

virtualmente todo o conteúdo da FPGA para uma aplicação escrita numa linguagem de descrição de hardware (HDL). Nesse caso, analisar o circuito no interior da FPGA é difícil, pelo que a simulação é a única alternativa real. Neste artigo vamos ver como simular o projecto construído nos artigos anteriores desta série.

4ª parte

Page 83: Elektor_340_2013

Domina as FPGAs

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

Pode abrir o simulador ISE no topo do sepa-rador Design, onde pode ver View. Nos arti-gos anteriores desta série estivemos sempre a trabalhar na vista Implementation, mas agora necessitamos da vista Simulation. Depois de seleccionar a função clicando em Simulation, pode ver que o conteúdo da lista Processes foi alterado. Se observar com mais atenção, pode ver que apareceu um novo painel chamado Beha-vioral acima da lista Hierarchy. Como estamos a começar com um projecto em branco e não compilado, só existe uma entrada na lista Pro-cesses: Design Utilities.Seleccione top na hierarquia para aparecer o pro-cesso ISim Simulator na lista Processes. Expanda--o clicando no sinal +. Seleccione agora o pro-cesso Simulate Behavioral Model e clique no botão mais à direita, por debaixo da seta verde. Em alternativa pode seleccionar Run no menu pop-up que aparece quando clica com o botão direito do rato na entrada relevante, ou pode fazer duplo clique na entrada com o botão esquerdo do rato. O ISE apresenta-se agora ocupado e ao fim de algum tempo (assumindo que tudo corre bem) vai ver uma mensagem na janela Console que con-firma que o processo foi completado com sucesso. Pode agora ver que foi aberta uma janela ISim junto à janela ISE, com os sinais apresentados como num analisador lógico (Figura 1). Na janela Console, no fundo da janela ISim, pode ver que está a trabalhar com a versão Lite, porque ainda não adquiriu uma licença completa. Também pode ver que a resolução da simulação é de 1 ps, e no

topo da janela é apresentada a duração de toda a simulação que é de 1 µs.Vamos então experimentar algumas coisas.

Simulação manualClique no botão Restart (o botão azul com uma seta em ângulo virada para a esquerda), ou rei-nicie a simulação através do menu Simulation. Depois clique com o botão direito do rato no sinal ce na lista de sinais (existem duas, mas não inte-ressa a que escolhe). Em alternativa pode clicar na forma de onda do sinal no gráfico. Certifi-que-se que é apenas seleccionado um sinal de cada vez. No menu pop-up que aparece selec-cione Force Constant, porque este sinal é mais ou menos constante - especialmente quando com-parado com o sinal de relógio. Como resposta, o ISim abre uma caixa de diálogo Force Selected Signal, onde pode introduzir alguns parâmetros. Introduza 1 no campo Force to Value e 1ms no campo Cancel After Time Offset. Os restantes campos podem ficar como estão. Clique em OK. Agora o sinal ce vai estar no nível alto quando a simulação for iniciada, e assim vai permanecer durante 1 ms. Repita este procedimento para o sinal up_down e para o sinal clr, mas forçando o nível para 0.Em seguida utilize um procedimento semelhante para o sinal clk_in, mas neste caso seleccione Force Clock em vez de Force Constant. A caixa de diálogo Define Clock que agora aparece é muito semelhante à caixa de diálogo Force Selected Signal, mas não é igual. Introduza os valores

Figura 1. Software ISim. Não há nada em particular para ver na janela de simulação, porque ainda não definimos um sinal de entrada.

Page 84: Elektor_340_2013

• Hardware & Software

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

ou para baixo, para os agrupar. Se não observar nenhuma alteração, verifique a cor dos quatro sinais de entrada. Se algum destes tiver a cor laranja em vez de verde, o sinal não foi definido e deve ter feito algum erro algures.

Depois de encontrar o factor de zoom adequado, pode ver o sinal de relógio a oscilar ou os outros sinais a mudar de nível. Os estados actuais dos sinais dos barramentos (sinais multi-bit, como o q[7:0]) são apresentados em notação biná-ria. Esta é a configuração por defeito e pode ser alterada seleccionando Radix no mesmo menu pop-up que contém Force Constant. Esta é uma forma conveniente de ver se um contador está realmente a contar e em que direcção. Os estados dos sinais na posição do marcador amarelo são apresentados à esquerda das formas de onda.

Bancada de testeSimular um circuito da forma apresentada ante-riormente é divertido, mas não é especialmente conveniente. Se o circuito funcionar, este método é razoável se quiser verificar pouca coisa; mas se alterar muitas vezes o desenho do circuito, tem de definir os sinais em todas essas vezes, utilizando caixas de diálogo que consomem tempo. Se for um mestre do teclado, pode introduzir comandos na Consola (para ter um exemplo, veja o con- teúdo da Consola depois de fechar uma caixa de diálogo Force Constant), mas primeiro tem de aprender todos estes comandos (ver documento plugin_ism.pdf, que está disponível no site da Xilinx). Uma melhor opção – de facto, é o que a Xilinx recomenda – é utilizar uma bancada de teste para automatizar a simulação.

Neste contexto, uma bancada de teste é simples-mente um ficheiro que pode adicionar ao projecto ISE quando a vista Simulation estiver activa. Pode fazer isto da forma habitual seleccionando New Source (clicando com o botão direito do rato na lista Hierarchy). Aparece então a aplicação New Source Wizard, onde pode seleccionar VHDL Test Bench. Introduza um nome (por exemplo, test_bench), verifique se está escolhida a opção Add to Project, e depois clique em Next. Agora tem de associar o ficheiro da bancada de teste ao ficheiro do código fonte. Neste caso pretende testar todo o circuito, pelo que deve associa-lo com o ficheiro top. Depois de clicar em Next, é apresentado o sumário habitual. Pode saltar os detalhes aqui, mas neste caso é uma boa ideia

apresentados na Figura 2 e clique em OK. Estes valores fazem com que o sinal de relógio comece com um flanco ascen-dente em t=0, perma-neça activo durante 1 ms, tenha um ciclo de traba-lho de 50% e um período de 125. Mas 125 quê? A resposta é 125 picosse-gundos, porque a reso-lução é de 1 ps. Se não especificar uma unidade,

o ISim utiliza a unidade por defeito. A frequência de relógio da FPGA neste módulo é de 8 MHz, que corresponde a um período de 125 ns, pelo que deve introduzir 125 ns em vez de 125.

Agora que definimos os sinais de entrada, pode-mos iniciar a simulação. Se fizer isto clicando no botão Run All (ou através do menu Simulation), a simulação vai correr até não existirem mais eventos ou até ser encontrado um breakpoint. Como não definimos nenhuns breakpoints, a última hipótese não vai acontecer. Isto significa que a simulação só vai parar quando expirar o sinal de entrada definido, ao fim de 1 ms, porque um sinal de relógio gera constantemente uma série de eventos. Pode interromper a simula-ção em qualquer altura clicando no botão Break (com o símbolo de pausa). Note que depois de uma paragem forçada, o ISim abre um ficheiro de código VHDL (habitualmente é o ficheiro top.vhd, mas pode ser uma bancada de teste), colo-cando a vista da forma de onda para segundo plano, onde pode ser reconhecida pelo separador wcfg. Clique neste separador para apresentar novamente a vista da forma de onda.Também pode correr a simulação por degraus com o botão Run (com um triângulo e uma ampu-lheta), que está junto ao botão Run All. Antes de fazer isto tem de introduzir o intervalo de tempo de simulação na caixa junto ao botão. Por exem-plo, pode introduzir 10ms para um intervalo de tempo de 10 ms. Depois disto, a simulação vai decorrer durante 10 ms de cada vez que clicar no botão Run. Quando a simulação é parada, por acabar o tempo ou por ter sido interrom-pida, pode visualizar os sinais (Figura 3). Pode aproximar ou afastar a imagem, e pode nave-gar através dos sinais. Também pode alterar a sequência dos sinais arrastando-os para cima

Figura 2. Caixa de diálogo Define Clock. Os intervalos de tempo sem a especificação das unidades estão em picossegundos.

Page 85: Elektor_340_2013

Domina as FPGAs

www.elektor-magazine.pt | Setembro 2013 | 85

Figura 3. Janela de simulação depois de efectuada uma simulação. Na escala seleccionada o sinal clk_in muda de estado tão rapidamente que é apresentado como uma malha pelo ISim. Pode clicar com o botão direito do rato para modificar o formato utilizado para apresentar o valor presente no barramento. Nesta figura é apresentado numa notação binária.

Teste em VerilogAssim como existem várias linguagens de pro-gramação para PCs, também existem várias lin-guagens de programação para FPGAs. No artigo principal foi utilizada a linguagem VHDL, porque o ISE tem uma preferência por esta linguagem, mas poderíamos facilmente ter utilizado Veri-log. Para completar, apresentamos aqui como pode ser construída uma bancada de teste em Verilog.O processo de relógio é implementado em Ve-rilog com o comando always (note que, ao con-trário da linguagem VHDL, a linguagem Verilog é sensível a maiúsculas), e cabe em apenas uma linha devido ao operador !. A frequência é configurada com símbolo #, que introduz um atraso temporal. Neste caso o atraso é de 62,5 ns, porque aqui a unidade temporal por defeito é o nanossegundo (embora a resolução seja de 1 picossegundo).

always #62.5 CLK_IN = !CLK_IN;

Aqui o nível do sinal clk_in é invertido a cada 62,5 ns. Isto funciona se atribuir um nível inicial para o sinal clk_in. Pode utilizar o seguinte segmento de código para gerar um sinal de re-lógio como o que foi gerado em VHDL:

alwaysbegin CLK_IN = 1;

#62.5; CLK_IN = 0; #62.5;end

Com este segmento de código não é necessário inicializar o sinal clk_in. Os sinais de entrada são inicializados no bloco de código inicial, que é executado apenas uma vez no início da simu-lação. A sintaxe é semelhante à da linguagem VHDL, e começamos novamente com um tempo de espera de 100 ns.

initialbegin #100; CLK_IN <= 0; CE <= 1; CLR <= 0; UP_DOWN <= 1;end

Aqui também pode utilizar = em vez de <=. Para jogar pelo seguro, o sinal clk_in foi ini-cializado aqui. Pode não ser necessário, mas também não estraga nada.Os blocos de código always e initial podem sempre ficar juntos no final da bancada de teste gerada pelo ISE, substituído o bloco de código ifdef auto_init … endif.

Tudo pronto? Comece a simular!

Page 86: Elektor_340_2013

• Hardware & Software

86 | Setembro 2013 | www.elektor-magazine.pt

No final da listagem da bancada de teste em VHDL, pode ver o seguinte segmento de código (note que os comandos reservados em VHDL estão escritos com letras maiúsculas, mas isto não é essencial porque o VHDL não é sensível a maiúsculas):

tb : PROCESSBEGIN WAIT;END PROCESS;

Esta é aproximadamente a rotina principal da bancada de teste, ou melhor, o processo princi-pal. Este processo, chamado tb, não faz nada – apenas fica à espera. Um processo é como uma subrotina num programa de computador, mas ao contrário das subrotinas, os processos são exe-cutados concorrencialmente (em paralelo), em vez de serem executados em sequência. Pode considerar isto como um tipo perfeito de mul-titarefa. Os processos também são executados sem parar até serem interrompidos, como pode ver no ciclo infinito WAIT.

É necessário adicionar os sinais ce, clr, e up_down a este processo e atribuir-lhes níveis. O código resultante é semelhante a:

tb : PROCESSBEGIN WAIT FOR 100 NS; ce <= ‘1’; clr <= ‘0’; up_down <= ‘1’; WAIT;END PROCESS;

Agora o processo atribui o nível alto aos sinais ce e up_down, e o nível baixo a clr, antes de executar a instrução de espera. Estas instruções são executadas concorrencialmente em vez de sequencialmente, pelo que a ordem das instru-ções não é importante. A linha WAIT FOR 100 NS força o processo a esperar 100 ns, dando-lhe tempo para o sinal de reset. O ficheiro de ajuda do ISim recomenda que assim se faça, pelo que cumprimos sem fazer perguntas.Gerar o sinal de relógio é um pouco mais com-plicado, porque é necessário um outro processo para fazer isso. O processo é executado concor-rencialmente com o processo tb.

verificar se foi atribuído ao ficheiro da bancada de teste a extensão .VHD. Isto significa que este foi convertido num ficheiro VHDL. Clique em Finish para completar o procedimento. Agora deve veri-ficar se adicionou a bancada de teste à vista Simulation, e não à vista Implementation. Se se enganar, pode corrigir o erro configurando View Association para Simulation nas propriedades do ficheiro (Source Properties).

Adicionar uma bancada de teste tem mais conse-quências do que pode pensar. Por exemplo, depois de algum tempo pode ver uma nova entrada na lista Hierarchy, entre chip e top, com o nome top_top_sch_tb. Também pode ver que top mudou para UUT – top, onde UUT significa Unit Under Test. A hierarquia indica claramente o que está a ser testado e por quem. Até este ponto o ficheiro test_bench.vhd foi aberto no Editor, e como pode ver já contém bastantes coisas.Já agora pode tentar adicionar outra bancada de teste, mas desta vez em Verilog em vez de VHDL, para que possa ver as diferenças entre estas

duas linguagens. O procedimento para isto é o mesmo que já foi referido anteriormente, excepto a selecção de Verilog Test Fixture como tipo de fonte. Depois de adicionar esta segunda bancada de teste, vai ver que foi adicionada uma hie-rarquia completamente nova na lista Hierarchy. Isto parece sugerir que podemos utilizar várias bancadas de teste no mesmo projecto, mas eu não consegui fazê-lo. O ISE tem uma clara pre-ferência pela bancada de teste em VHDL. Note que o ficheiro em Verilog tem a extensão .V e o ícone respectivo não é igual ao do ficheiro em VHDL. Como estes dois ficheiros têm extensões diferentes, pode utilizar o mesmo nome para as duas bancadas de teste se desejar. Se isso é uma boa ideia na prática é algo que tem de decidir.

VHDLAo princípio, a bancada de teste apenas contém um esqueleto, pelo que deve adicionar a infor-mação necessária para activar os sinais correctos nos instantes correctos. Para testar o contador tem de fazer o mesmo, quer seja em VHDL ou em Verilog, que fez manualmente. É necessário um sinal de relógio e vários níveis que são mais ou menos constantes. Vamos começar com a parte fácil: os níveis constantes.

Processamento concorrente garante uma gestão multitarefa perfeita

Page 87: Elektor_340_2013

Domina as FPGAs

www.elektor-magazine.pt | Setembro 2013 | 87

WAIT FOR clock_half_period; clk_in <= ‘0’; WAIT FOR clock_half_period;END PROCESS;

Agora que a bancada de teste está pronta, pode iniciar a simulação. Para apresentar o processo ISIM seleccione a bancada de teste na hierar-quia. Expanda esta entrada para apresentar as seguintes duas opções: Behavioral Check Syntax e Simulate Beahvioral Model.

clock : PROCESSBEGIN clk_in <= ‘1’; WAIT FOR 62500 PS; clk_in <= ‘0’; WAIT FOR 62500 PS;END PROCESS;

Este processo não acaba com uma instrução de WAIT infinita e não pode ser interrompido, pelo que é constantemente repetido.Esta operação é fácil de entender: con-figura-se clk_in para o nível alto, espera-se 62,5 ns, configura--se clk_in para o nível baixo, espera-se novamente 62,5 ns, e depois repete-se o

processo. O resultado é um sinal com um ciclo de trabalho de 50% e uma frequência de 8 MHz. Como o ciclo de trabalho é de 50%, isto pode ser feito de forma mais elegante utilizando uma constante para o tempo de espera. Esta constante deve ser adi-cionada no fim da listagem SIGNAL:

CONSTANT clock_half_period : TIME := 62500 PS;

A constante clock_half_period é do tipo TIME e pode ser utilizada com o comando WAIT. O código para este processo fica:clock : PROCESSBEGIN clk_in <= ‘1’;

Page 88: Elektor_340_2013

• Hardware & Software

88 | Setembro 2013 | www.elektor-magazine.pt

o eixo temporal pode ter apenas um pequeno incremento temporal, o que faz parecer que os sinais estão estáticos. Utilize o botão Zoom to Full View para apresentar a simulação completa, para que possa visualizar correctamente os sinais que variam lentamente. Pode então aproximar facil-mente os sinais que lhe interessem (Figura 4).

Os sinais presentes no painel das formas de onda são apresentados pela mesma ordem que está na lista SIGNAL. Pode alterar a ordem dos ele-mentos desta lista para a sua conveniência, mas assegure-se que está tudo correcto. Lembre-se que tem de fechar a janela ISim de cada vez que pretender simular uma bancada de teste nova ou modificada, porque o ISE não o consegue fazer automaticamente e gera uma mensagem de erro.

E já está!Isto leva-nos ao fim da nossa introdução à pro-gramação de FPGAs. Agora já consegue configurar as suas próprias simulações. Há muitas coisas de que não falámos, e é recomendado que utilize a Internet e outros recursos para estudar este complexo tópico com mais detalhe. Simular um projecto não é especialmente difícil, mas fazê-lo correctamente requer um bom conhecimento de lógica programável, de linguagens de descrição de hardware, e de ferramentas de desenvolvi-mento. Experimente!

(130065)

Artigo original: Taming the Beast (4) – May 2013

Internet

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

Execute o primeiro destes processos para detectar erros. Tem de aparecer um sinal de visto verde antes de poder continuar.

Clique com o botão direito do rato em Simulate Behavioral Model para abrir as propriedades da simulação, e tire a selecção da opção Run for Spe-cified time. Agora a simulação vai correr até que clique em Break. Caso contrário a simulação iria iniciar imediatamente e correr durante o intervalo de tempo especificado. Feche a caixa de diálogo das propriedades e corra o processo Simulate Behavioral Model. Isto abre a janela ISim, mas não acontece mais nada. Clique no botão Run All, no botão Run (durante o tempo especificado na barra de tarefas), para iniciar a simulação. Deixe a simulação correr até a barra de tarefas apresentar a duração desejada. Depois clique em Break para parar a simulação. Pode agora ver os sinais da mesma forma que foi anteriormente descrita para a simulação manual. Lembre-se que

Figura 4. Pode utilizar marcadores para medir intervalos de tempo. O sinal de relógio utilizado para esta simulação foi de 250 ps em vez de 125 ns. Quando selecciona um marcador, este passa a ser o ponto de referência zero e o ISim calcula os intervalos de tempo em relação aos outros marcadores. Pode configurar a unidade de tempo clicando com o botão direito do rato no eixo temporal.

O módulo de desenvolvimento FPGA Elektor montado e testado está disponível através do Serviço Elektor.

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

Page 89: Elektor_340_2013

R&S®RTO de 600MHz O mais novo membro da família de Osciloscópios R&SRapidez na detecção de sinal numa gama de aquisição extremamente elevada, uma excelente fiabilidade de sinal, uma interface de utilizador intuitiva: os modelos R&S RTO de 1 GHz e 2 GHz de largura de banda são uma nova realidade em Osciloscópios Digitais. Por forma a oferecer estes recursos a mais utilizadores, a Rohde&Schwarz criou um novo modelo de 600 MHz (disponível em 2 e 4 canais) para a sua família de osciloscópios de alto desempenho.

Os novos modelos de 600 MHz (R&S®RTO1002 e R&S®RTO1004) são uma solução única que permite aos utilizadores realizarem análises complexas em profundidade, mesmo na gama mais baixa da largura de banda.

Saiba mais em:www.scope-of-the-art.com

Page 90: Elektor_340_2013

•Projects

90 | Setembro 2013 | www.elektor-magazine.pt

Neste artigo vamos descrever um método para enviar dados através de uma ligação de radiofre-quência (RF), nas bandas ISM dos 315 MHz ou 433 MHz, a uma taxa de transferência máxima de 5000 bps, usando componentes de baixo custo mas fiáveis, implementando um protocolo RF friendly, o código Manchester, atingindo distân-cias superiores a cerca de 200 m.Foram desenhadas duas unidades de fins gerais, uma para a transmissão (TX) e outra para a recepção (RX), prontas a utilizar em qualquer aplicação, adaptando apenas o código do micro-controlador incluído.

Introdução do TX, RX e antenasA criação de uma ligação RF envolve hardware e software (ou firmware), ambos na extremidade

TX e RX. Esta primeira parte desta série de arti-gos vai descrever o hardware.Projetar um circuito RF fiável com componentes discretos não é uma tarefa fácil, e os resultados são geralmente distantes das expectativas – ou seja, muito piores. Felizmente, a Linx Techno-logies já tratou desta difícil tarefa oferecendo módulos de RF completos encapsulados num invó-lucro híbrido. Está disponível uma ampla gama de frequências, mas nós vamos focar-nos nas bandas de 315, 418 e 433 MHz, uma vez que estas consistem nas bandas disponíveis menos usadas, dependendo de onde vive.A Figura 1 mostra o módulo transmissor e a sua disposição de pinos, conforme apresentado na folha de características do dispositivo [1]. A Figura 2 é equivalente à anterior, mas agora

Ligação RF modular usandocódigo Manchester (1)1ª Parte: Hardware

Marcelo Maggi (USA)

Quando há a necessidade de enviar dados para um ponto distante sem utilizar uma ligação com fios, seja porque a localização da infra-estrutura não permite a passagem de um par de fios entrelaçados para ligar os dois extremos, ou porque um, ou ambos, os circuitos ligados destinam-se a ser portáteis, ou simplesmente sem fios, existem várias maneiras de resolver esse problema, cada uma com as suas próprias vantagens e desvantagens. Vamos então investigar, solucionar e soldar.

Page 91: Elektor_340_2013

Ligação RF Código Manchester

www.elektor-magazine.pt | Setembro 2013 | 91

nece uma solução através da sua divisão de antenas.

Vamos usar um pólo simples de altura reduzida com ¼ de comprimento de onda. A Figura 3 mostra a antena para a banda de 315 MHz em cima da sua folha de características.A optimização da frequência é indicada por uma faixa colorida no corpo da antena; uma faixa verde indica 315 MHz, enquanto que uma faixa azul e vermelha representam 418 MHz e 433 MHz, respectivamente.

Projecto do transmissor (TX)O módulo TX simplesmente transmite qualquer sinal que seja colocado no pino de dados, com algumas restrições como é óbvio, mas não existe qualquer inteligência agregada, ou seja, sem sincronização de dados, sem proteção de código, etc. O utiliza-dor tem que implementar isto.Dê uma vista de olhos ao esquema do circuito TX apresentado na Figura 4. O circuito é bastante simples, existe apenas uma ligação entre os dois componentes principais, o microcontrolador e o módulo TX: pino B0 (RB0/INT, pino 6) do micro-controlador liga à entrada de dados do módulo TX. Os restantes componentes são necessários para o

bom funcionamento dos dois circuitos principais, mas não desempenham nenhum papel activo na transmissão de dados. Por exemplo, os componen-tes C1, C2, C3, C7 e C8 correspondem a conden-sadores cerâmicos de desacoplamento de 0,1 mF. A resistência R5 destina-se a manter o microcon-trolador a funcionar (o pino 4 é o pino de reset). O oscilador é formado por um cristal de quartzo de 20 MHz standard.O módulo TX funciona a 3 V, pelo que a saída da nossa fonte e alimentação de 5 V externa é pri-meiro aplicada a um regulador de tensão fixo do tipo LP2950-30LPR, que fornece uma tensão cons-tante de 3 volt ao módulo. C1, C5, C6 e R4 são adicionados para obter uma estabilidade adicional, de acordo com o que é recomendado na folha de características do módulo.Duas resistências adicionais estão ligados ao módulo TX. R3 liga o pino PD à linha de alimen-

Figura 1. O módulo TX da Linx com a sua disposição de pinos na folha de características. São precisas apenas umas poucas ligações para este módulo funcionar.

Figura 2. Módulo RX da Linx com respectiva disposição de pinos. Existem imensos pinos que não estão ligados.

Figura 3. A antena é do tipo ¼λ da Antenna Factor.

descrevendo o módulo receptor. Existem pou-cos pinos activos. O receptor tem mais pinos, embora a maioria não esteja ligada a nada (NC).

De acordo com a folha de características ape-nas precisa de uma antena para uma ope-ração básica, para além da óbvia fonte de alimentação regulada.Falando de antenas, este é outro elemento

muito importante de uma ligação RF com sucesso, mas geralmente esquecido. Uma vez mais, a Linx Technologies for-

Transmite 5000 bps até mais de 200 m

Page 92: Elektor_340_2013

•Projects

92 | Setembro 2013 | www.elektor-magazine.pt

ajustando o valor desta resistência. Com 0 Ω é seleccionada a potência de transmissão máxima, mas aumentando a resistência vai diminuir a potên-cia conforme se mostra na Figura 5.Uma vez que o transmissor funciona a 3 V, a ten-são no seu pino de entrada de dados não deve exceder esse nível. Assim, adicionou-se R8 e R9 que formam um divisor de tensão eficaz.No que diz respeito ao microcontrolador, existem muitas opções. O microcontrolador PIC selecionado é um membro da subfamília dos PICs de 18 pinos. O PIC16F628A corresponde a uma versão 2 KB, mas pode muito bem usar o PIC16F648A que corres-ponde a uma versão de 4 KB, com mais capacidade de SRAM e EEPROM, que podem suportar um pro-grama maior. Até mesmo o antigo PIC16F84A pode ser utilizado, o que pode ser uma vantagem quando se está bastante familiarizado com o mesmo.

tação de 3 V, mantendo-o ao nível alto. Se este pino estivesse ao nível baixo colocaria o módulo TX num estado de baixa corrente, no qual seria impossível transmitir. R1 é uma simples ponte de ligação (0 Ω). No entanto, quando a potência de transmissão é maior do que é permitido usar de acordo com os regulamentos locais para a banda ISM, é possível reduzir a potência de transmissão

LP2950-30LPRIC1

C5

3u350V

C1

100n

C6

10u25V

K1R4

10R

+5V

+V

K210111213141516

1

234567

8

9

R2

180R

D1

X1

20MHz

RB6/T1OSO/T1CK1/PGC

RA6//OSC2/CLKOUT

RA7/OSC1/CLKIN

RA4/T0CK1/CMP2RB7/T1OSI/PGD

RA5/MCLR/VPP

RA2/AN2/VREFRA3/AN3/CMP1

PIC16F628A

RB2/TX/CKRB3/CCP1

RA1/AN1RA0/AN0RB0/INT

RB4/PGM

IC2

-I/P

RB1

RB5

VSS

VDD

1817

1312

1110

16

15

14

1

3

98

7

6

2

4

5

+5V

C4

10u25V

C2

100nR5

1k

+V

K31

R3

470R

R1

0R

R8

680R

R9

1k

LC DISPLAY 2 x 16

LCD1

VSS

VDD

R/W

DB0

DB1

DB2

DB3

DB4

DB5

DB6

DB7

VEE

RS

10 11 12 13 14 15 16

A C

1 2 3 4 5 6

E

7 8 9

P1

10kR6

180R

R7

330R

+5V

ANT

+5VC3

100n

C8

100n

C7

100n

TXM-315-LR

LAD/VCC

IC3DATA

ANTVCC

GND GND GND

PD

7

31

25

4

6

8

120049 - 11

Figura 4. Esquemático do transmissor, com microcontrolador PIC, LCD e ligação de dados.

Figura 5. A potência de saída de transmissão pode ser ajustada através de R3.

Page 93: Elektor_340_2013

Ligação RF Código Manchester

www.elektor-magazine.pt | Setembro 2013 | 93

Nota final: qualquer pessoa com um mínimo de conhecimento em circuitos de RF evita tes-tar qualquer circuito que funcione a mais de 10 MHz numa breadboard. Os resultados – se hou-verem – serão desastrosos e longe da realidade. No entanto, esta unidade montada na sua placa de circuito impresso é perfeitamente “amiga” de uma breadboard, uma vez que toda a parte relacionada com o RF é tratada pelo módulo TX.

Projecto do receptor (RX)Dê uma vista de olhos ao esquemático da Figura 6. Pode ver muitas configurações já familiares; bastantes condensadores de desacoplamento (C2, C3, C7, C8 e C9), uma fonte de alimentação de 3 V semelhante ao apresentado no esquemá-tico TX (o módulo RX também funciona com 3 V), um condensador de cancelamento de ruído

Como pode ser visto no esquemático, o acesso à maioria dos pinos importantes do microcontrola-dor e do módulo TX é feito através de K2 e K3, permitindo um controlo total sobre a operação caso seja necessário, por exemplo, fazer o reset ao microcontrolador, envio de dados externos de um entrada através do transmissor, etc. No módulo TX, a transmissão de dados e alimentação, assim como o estado de baixa corrente, podem ser con-trolados pelo utilizador. O conector K3 permite ainda utilizar um microcontrolador totalmente diferente, como por exemplo um da Atmel. Basta retirar o PIC do suporte e controlar o módulo TX usando o conector K3 directamente (não se esqueça de uti-lizar uma alimentação de 3 V). Certifique-se que fornece os 5 V de alimentação necessários para o funcionamento do circuito e que tudo foi tratado para obter um funcionamento do módulo TX fiável.

LP2950-30LPRIC1

C4

3u350V

C1

100n

C5

10u25V

K1R2

10R

+5V

+V

K210111213141516

1

234567

8

9

R9

180R

D1

X1

20MHz

RB6/T1OSO/T1CK1/PGC

RA6//OSC2/CLKOUT

RA7/OSC1/CLKIN

RA4/T0CK1/CMP2RB7/T1OSI/PGD

RA5/MCLR/VPP

RA2/AN2/VREFRA3/AN3/CMP1

PIC16F628A

RB2/TX/CKRB3/CCP1

RA1/AN1RA0/AN0RB0/INT

RB4/PGM

IC2

-I/P

RB1

RB5

VSS

VDD

1817

1312

1110

16

15

14

1

3

98

7

6

2

4

5

+5V

C6

10u25V

C2

100nR10

1k

K31

LC DISPLAY 2 x 16

LCD1

VSS

VDD

R/W

DB0

DB1

DB2

DB3

DB4

DB5

DB6

DB7

VEE

RS

10 11 12 13 14 15 16

A C

1 2 3 4 5 6

E

7 8 9

P1

10kR8

180R

R7

330R

+5V

ANT

+5VC3

100n

C9

100n

C8

100n

RXM-315-LR

RSSI

IC3DATA

ANTVCC

GND GND

PDN

16

15

NCNC

NCNC

NC 10

NC 11

NC 12

NC 13

NC 14

5

4

876

12

39

+V

R4

10k

T2

BC547BG

R3

1k

R610k

T1

R5

1k

C7

100n

+5V

120049 - 12

2x

Figura 6. O esquemático do receptor é muito semelhante ao do transmissor.

Page 94: Elektor_340_2013

•Projects

94 | Setembro 2013 | www.elektor-magazine.pt

ligado aos pinos de alimentação do microcon-trolador (C6), R10 que evita que o microcon-trolador entre em reset, e um cristal de quartzo de 20 MHz. Quando discutirmos o programa de manipulação de dados na segunda parte desta série de artigos, vamos ver a importância de ter os microcontroladores a funcionar à mesma frequência quer no módulo TX quer no módulo RX. Os conectores para aceder ao circuito a par-tir do exterior têm uma disposição semelhante. A única diferença é que no módulo RX temos uma saída RSSI (Received Signal Strength Indi-cator). O sinal analógico RSSI (muito útil para implementar um circuito de silenciamento) é encaminhado para o pino central de K3 em vez do pino de ajuste de potência de trans-missão (logicamente não disponível no módulo receptor).Os componentes R9 e D1, ligados ao pino 7 (RB1) de IC2, permitem efectuar uma rápida verifica-ção para ver se a ligação está a funcionar ou não. Um programa muito simples permite que o transmissor envie um comando para activar o pino RB7 no lado do receptor. Se o comando for transmitido e recebido correctamente, o LED

LISTA DE COMPONENTESTransmissorResistênciasR1 = 0 ΩR2,R6 = 180 ΩR3 = 470 ΩR4 = 10 ΩR5, R9 = 1 kΩR7 = 330 ΩR8 = 680 ΩP1 = 10 kΩ, ajustável multivolta

CondensadoresC1,C2,C3,C7,C8 = 100 nFC4,C6 = 10 µF/25 VC5 = 3,3 µF/50 V

SemicondutoresIC1 = LP2950-30LPRIC2 = PIC16F628A-I/PIC3 = TXM-315-LR, Linx Technologies (versão

de 418 MHz ou 433 MHz, a mais apropriada)LCD1 = 2x16 caracteres, DEM16217,

Serviço Elektor #120061-71

DiversosANT = ANT-315-PW-LP, Linx TechnologiesK1 = bloco de aperto de 2 vias, PCI,

passo 5 mmK2 = conector SIL 16 viasK3 = conector SIL 3 viasX1 = cristal de quartzo de 20 MHzPCB #120049-1

Figura 7. Face superior da placa de circuito impresso do transmissor.

Figura 8. Face inferior da placa de circuito impresso do transmissor.

Figura 9. Disposição dos componentes na placa de circuito impresso do transmissor.

Page 95: Elektor_340_2013

Ligação RF Código Manchester

www.elektor-magazine.pt | Setembro 2013 | 95

acende. Vamos rever isto em mais detalhe quando falarmos sobre o software.Os transístores T1 e T2 formam n verdade um conversor de nível não inversor da saída de 3 V do módulo RX para a entrada de 5 V do micro-controlador. Duas notas:• Sim, o microcontrolador poderia funcionar a

3 V. Mas de forma a manter o projecto univer-sal, foi projectado para microcontroladores de 5 V, para permitir o uso de PICs mais antigos que apenas com 5 V.

• Um transístor e um par de resistências pode-riam ter sido poupados se tivesse sido imple-mentado um conversor de nível inversor, mas assim a inversão do sinal tinha que ser tratada no software. Não queríamos complicar as coi-sas. É certo que, se este circuito fosse para produzir em massa, o director não ia aprovar facilmente a nossa solução.

Tal como no módulo TX, pode utilizar qualquer microcontrolador que pretenda, bastando para isso remover o PIC original do seu suporte e usar as três linhas do módulo RX. A placa de circuito impresso é 100% “amiga” da breadboard e liga--se facilmente aos seus outros projectos.

LISTA DE COMPONENTESReceptorResistênciasR1 = não montadaR2 = 10 ΩR3,R5,R10 = 1 kΩR4,R6 = 10 kΩR7 = 330 ΩR8, R9 = 180 ΩP1 = 10 kΩ, ajustável multivolta

CondensadoresC1,C2,C3,C7,C8,C9 = 100 nFC4 = 3,3 uF/50 VC5,C6 = 10 uF/25 V

SemicondutoresIC1 = LP2950-30LPRIC2 = PIC16F628A-I/PIC3 = RXM-315-LR, Linx Technologies (versão

de 418 MHz ou 433 MHz, a mais apropriada)LCD1 = 2x16 caracteres, DEM16217,

Serviço Elektor #120061-71T1,T2 = BC547B

DiversosANT = ANT-315-PW-LP, Linx TechnologiesK1 = bloco de aperto de 2 vias, PCI, passo 5 mmK2 = conector SIL 16 viasK3 = conector SIL 3 viasLCD1 = 2x16 caracteres, DEM16217,

Serviço Elektor #120061-71X1 = cristal de quartzo de 20 MHzPCB #120049-2

Figura 10. O nosso primeiro protótipo ainda precisa de algumas alterações.

Figura 11. Disposição dos componentes na placa de circuito impresso do receptor.

Figura 12. O LCD encaixa perfeitamente bem no protótipo do módulo receptor.

Page 96: Elektor_340_2013

•Projects

96 | Setembro 2013 | www.elektor-magazine.pt

num suporte para facilitar a remoção do mesmo, caso seja necessário, para o programar e actua-lizar o firmware.

Construção do receptor (RX)Todas as ressalvas expressas durante a secção relacionada com a montagem do módulo TX tam-bém se aplicam ao módulo RX: um grande plano de massa na face das soldaduras, uma separação razoável entre o módulo e os outros componentes, um caminho para a antena o mais curto possível (antena aparafusada e soldada).Os desenhos da placa de circuito impresso do circuito RX completo, assim como do circuito TX, podem ser obtidos gratuitamente na Internet [2]. A disposição dos componentes no módulo recep-tor é apresentada na Figura 11. A dimensão da placa é idêntica à do transmissor.O passo entre os pinos dos conectores é exac-tamente o mesmo que no módulo TX pelo que é 100% compatível com uma breadboard. Tal como acontece com os transmissores, a Linx Technolo-gies disponibiliza os receptores sintonizados para três frequências diferentes na banda ISM em UHF.Na Figura 12 apresentamos o nosso primeiro protótipo do receptor, mais uma vez com o micro-controlador montado num suporte para facilitar a sua programação.Embora possa parecer óbvio, não faz mal nenhum enfatizar isto: para uma ligação RF funcionar, todos os componentes RF: módulo TX, antena TX, módulo RX e antena RX, devem estar sintonizados para a mesma frequência. A antena, obviamente, não discrimina entre transmissão e recepção, pelo que é usado o mesmo modelo para ambos os módulos TX e RX. Nota: embora estas antenas sejam boas não são perfeitas. No lado da transmissão pode querer limitar a potência (e por vezes a eficiência da antena) para ficar igual ou abaixo do nível de potência de transmissão permitido pelos regula-mentos locais. No lado do receptor poderá querer aumentar a eficiência da antena, tanto quanto pos-sível. Por isso esteja à vontade para fazer expe- riências com dipolos de ¼ de comprimento de onda.Isto conclui a primeira parte desta série de artigos. Na próxima, e última, edição desta série vamos falar sobre o software, que foi desenvolvido como uma verdadeira solução de uso geral.

(120049)

Internet

[1] www.linxtechnologies.com

[2] www.elektor.com.pt/120049

Construção do transmissor (TX)A Linx Technologies fabrica os módulos TX prepa-rados para três frequências, que são compatíveis pino-a-pino, de modo que possam ser facilmente trocados. Como dissemos anteriormente, um pro-jecto RF exige algumas precauções especiais a fim de obter o desempenho desejado. Embora a Linx Technologies tenha feito um grande esforço para fornecer módulos fiáveis e bastante estáveis, devemos seguir as suas recomendações sobre o layout da laca de circuito impresso, a fim de alcançar o máximo desempenho.Existem três instruções principais a seguir:1. Deve ser implementado um plano de massa

na face oposta aquela em que é montado o módulo.

2. Não devem ser direccionadas nenhumas pistas por baixo do módulo, e não deve ser colocado nenhum dispositivo condutor num raio 3,8 mm para cima e para os lados do módulo.

3. O caminho para a antena deve ser o mais curto possível.

Com essas diretrizes em mente, iniciámos o pro-jeto da placa de circuito impresso em torno da área onde o módulo TX iria ficar, e o resto dos componentes foram acomodados em conformi-dade. A Figura 7 mostra o layout da placa de circuito impresso para todo o circuito TX visto da face dos componentes, enquanto que a Figu- ra 8 mostra a face das pistas de cobre no lado das soldaduras. Repare no posicionamento iso-lado do módulo TX, o plano de massa na face das soldaduras e apenas algumas pistas na face dos componentes. Tal como recomendado, o caminho para a antena é muito curto. A antena propria-mente dita é fixada na placa de circuito impresso com um parafuso. Um toque final de solda é uma boa prática para garantir a robustez eléctrica e mecânica. O passo dos conectores K2 e K3 é de 2,54 mm, pelo que o circuito pode ser facilmente montado numa breadboard.

A disposição dos componentes é apresentada na Figura 9. A placa mede 85 × 46 mm. A Figura 10 mostra um pri-meiro protótipo do circuito. O microcontrolador foi montado

Page 97: Elektor_340_2013
Page 98: Elektor_340_2013

•Microcontroladores

98 | Setembro 2013 | www.elektor-magazine.pt

Assim que uma especificação para um conector seja aprovada, é possível juntar módulos com microcontroladores e módulos de expansão de hardware em combinações arbitrárias. Foi ante-riormente descrito [2] o conector Gnublin de 14 vias no módulo Linux Elektor, que também vai estar presente como “Conector de Expansão Embebido” no módulo servidor Web Xmega que vai ser descrito na próxima edição. Neste artigo, vão ser descritos outros módulos de expansão de hardware, e em particular vai ser apresentado como é fácil controlá-los em Linux.Para permitir testes rápidos, a equipa de desen-volvimento escreveu um pequeno programa com linha de comandos que acompanha cada módulo

de hardware. Também está disponível uma apli-cação completa em linguagem C/C++ para aju-dar no desenvolvimento de outras aplicações. A aplicação implementa os controladores stan-dard para I2C, SPI, GPIO, conversor A/D, etc., pelo que o projectista não necessita de lidar com estes controladores directamente. Assim, é pos-sível controlar um dispositivo (por exemplo, um motor passo-a-passo) utilizando apenas chama-das a funções (Figura 1). A equipa está actual-mente a trabalhar numa aplicação em Python: mais informações em [4].

A ideiaO Linux fornece uma boa camada de abstracção que permite desenvolver aplicações de forma independente do processador utilizado: escreve--se simplesmente uma aplicação para Linux. Os novos módulos de expansão de hardware, que estão disponíveis em www.elektor.com/gnublin, expandiram esta ideia de modo a cobrir projectos que utilizem motores, mostradores, sensores de temperatura, relés e muito mais. Estes módulos estão ligados ao módulo Linux Elektor utilizando um simples cabo plano.

- Módulo de Relés (controla oito relés) (130212-91, Figura 2)- Módulo de Temperatura (sensor de tempera-tura) (130212-95, Figura 3)

Benedikt Sauter [1]

Placas de extensão GnublinE ferramentas para linha de comandos para o módulo Linux Elektor e Raspberry PiForam publicados recentemente detalhes sobre um módulo de relés que pode ser ligado ao módulo Linux Elektor, ao Raspberry Pi, e a outros módulos com microcontroladores. Este foi apenas um exemplo da vasta gama de módulos de expansão de hardware desenvolvidos pela equipa Embedded Projects. A família fica completa com ferramentas úteis para linha a de comandos e uma aplicação em linguagem C/C++ para ajudar a desenvolver as suas próprias aplicações.

Device Driver

Figura 1. A aplicação Gnublin poupa-lhe o esforço de lidar com SPI, I2C e outros controladores para dispositivos.

Page 99: Elektor_340_2013

Placas de extensão Gnublin

www.elektor-magazine.pt | Setembro 2013 | 99

- Módulo com Mostrador (4x20) (mostrador de texto com 4 linhas) (130212-92, Figura 4)- Módulo com Motor Passo-a-passo (controlador para motor passo-a-passo) (130212-93, Figura 5)- Módulo de Expansão de E/S (16 entradas e saídas digitais) (130212-94, Figura 6)- Módulo de Expansão (mostrador, botões, relógio em tempo-real, besouro e expansor de portos) (120596-91, Figura 7)

Se necessitar de ligar mais do que um módulo de expansão de hardware pode utilizar a Bridge Board (130212-71, Figura 8).Como mencionado anteriormente, também está disponível um módulo adaptador para servir de interface para o popular minicomputador Rasp-berry Pi (120212-72, Figura 9, aqui ligado a um Raspberry Pi). Um desenvolvimento recente é um módulo adaptador para o BeagleBone Black (130212-74).

Ferramentas para linha de comandosA linha de comandos é condição sine qua non para trabalhar com o módulo Linux Elektor. A partir da linha de comandos pode lançar e parar aplicações, administrar o sistema Linux, ler mensagens do sistema, e muito mais.A equipa de desenvolvimento escreveu algumas ferramentas para linha de comandos para aju-dar a controlar os módulos de expansão Gnu-blin e algumas das funções internas do módulo Linux Elektor. Ao introduzir gnublin- na linha de comandos, seguido de Tab, é apresentada uma lista destes mini-programas. A Tabela 1 apre-senta uma amostra.Estas ferramentas são muito convenientes para os testes iniciais: pode facilmente determinar se o hardware está ligado correctamente. Como mui-tas pessoas sabem, é fácil perder muito tempo a procurar bugs no software até descobrir que a fonte de alimentação está desligada!

Aplicação em linguagem C/C++Depois de ligar e testar o módulo de hardware, já podemos começar a escrever uma aplicação real.

A aplicação em linguagem C/C++ mencionada acima per-mite-lhe utilizar uma gama de funções fáceis de entender, evi-tando, por exemplo, a utiliza-ção de apon-tadores e de estruturas. É for-necido um módulo de software separado para cada interface e módulo de expansão de hardware (Tabela 2). Para utilizar estas funções com o módulo Linux Elektor Gnublin, neces-sita simplesmente de incluir o ficheiro de cabe-çalho gnublin.h: a Listagem 1 apresenta um exemplo. Podem ser encontrados mais exemplos de código na wiki [3]. A versão mais recente do código fonte para a aplicação completa pode ser inspec-cionada em [5].A wiki também apresenta como pode ser criado um ambiente de desenvolvimento para simplificar o trabalho com a aplicação.

Instalar as ferramentas e a aplicaçãoEm princípio a aplicação pode ser utilizada com qualquer módulo Linux embebido que tenha controladores para I2C e para SPI. A maior parte dos processadores têm estes interfaces embutidos, e o acesso a estes é quase sempre imple-mentado com um controlador. Abaixo vamos ver como as ferra-mentas e a aplicação podem ser utilizadas em conjunto com o módulo Linux Elektor e com o Raspberry Pi.

2

Tabela 1. Ferramentas do Gnublin para linha de comandos (exemplo)

Ferramenta Exemplo de utilização Descrição

gnublin-lm75 (não tem argumentos) Apresentar temperatura

gnublin-relay gnublin-relay -p 1- o 1 Ligar relé 1

gnublin-adcint gnublin-adcint -c 1 Ler conversor A/D interno, canal 1

gnublin-step gnublin-step -p 3000 Mover o motor passo-a-passo para a posição 3000

4

3

Page 100: Elektor_340_2013

•Microcontroladores

100 | Setembro 2013 | www.elektor-magazine.pt

Módulo Linux Elektor

Desde a primeira versão que o módulo Linux Elektor está equi-

pado com um conector adequado. A marca vermelha no cabo plano tem de

ser orientada na direcção do GPA0 (a chave do conector correspondente a apontar para o centro do módulo).A primeira versão do módulo tinha um sistema de ficheiros ELDK, mas este foi posteriormente substituído por uma imagem Debian completa. O procedimento para actualizar cartões de memó-ria antigos está descrito em [6].Compilar as ferramentas para o módulo de expan-são de hardware no módulo Linux Elektor leva uns bons cinco minutos. Foi então construído um pacote Debian que simplifica a instalação das ferramentas. Primeiro descarregue o ficheiro com o pacote Debian para o PC. Depois transfira o ficheiro para o cartão SD utilizando o leitor de cartões do PC.Se o módulo estiver ligado à Internet pode des-carregar o ficheiro directamente utilizando o comando:

wget https://github.com/embeddedprojects/gnublin-api/raw/master/gnublin-tools_0.1-1_armel.deb

As ferramentas são instaladas assim:

root@gnublin:~# dpkg -i gnublin-tools_0.1-1_armel.deb

Para remover o pacote mais tarde, utilize o seguinte comando:

root@gnublin:~# dpkg -r gnublin-tools

Raspberry PiA forma mais fácil de utilizar o módulo de soft- ware no Raspberry Pi é fazer uma ligação directa ao repositório do código fonte. Faça o arranque do Raspberry Pi e assegure-se que este está ligado à Internet. O repositório é clonado utilizando o

Listagem 1. Controlar um dispositivo I2C

#define BOARD_GNUBLIN//#define BOARD_RASPBERRYPI

#include "gnublin.h"

int main(){ gnublin_i2c i2c;

i2c.setAddress(0x42); //i2c slave address

char buffer[8]; char RxBuf[8];

buffer[0]=0x22;

i2c.send(buffer,5); i2c.send(0x12, buffer, 2); //send 2 bytes register 0x12

i2c.receive(RxBuf, 3); // read 3 bytes i2c.receive(0x23, RxBuf, 3); // read from register

}

5

6

7

Page 101: Elektor_340_2013

Placas de extensão Gnublin

www.elektor-magazine.pt | Setembro 2013 | 101

A aplicação necessita dos seguintes controlado-res para ser activada:

pi@raspberrypi ~ $ sudo modprobe spi-bcm2708

pi@raspberrypi ~ $ sudo modprobe i2c-bcm2708pi@raspberrypi ~ $ sudo modprobe i2c-dev

Estes controladores já estão presentes na versão mais recente do Raspberry Pi. Como alternativa aos comandos acima apresentados, os nomes dos módulos podem ser inseridos permanente-mente no ficheiro /etc/modules, um módulo por cada linha:

spi-bcm2708i2c-bcm2708i2c-dev

As pequenas ferramentas para linha de coman-dos podem agora ser utilizadas para testar qual-quer módulo de expansão de hardware ligado ao Raspberry Pi. (130212)

Internet

[1] [email protected]

[2] www.elektor.com.pt/130157

[3] http://wiki.gnublin.org/index.php/API

[4] http://en.gnublin.org/index.php/API_Python

[5] https://github.com/embeddedprojects/gnublin-api

[6] http://en.gnublin.org/index.php/GNUBLIN-Elektor

comando git: se este não estiver já instalado no seu Raspberry Pi, instale-o desta forma:

pi@raspberrypi ~ $ sudo apt-get install git

Procure agora uma cópia do repositório

pi@raspberrypi ~ $ git clone https://github.com/embeddedprojects/gnublin-api.git

mude para a pasta do código fonte

pi@raspberrypi ~ $ cd gnublin-api

e depois compile e instale o código, exemplos e a aplicação:

pi@raspberrypi ~ $ make && sudo make install

Tabela 2. Objectos da aplicação em software (exemplo)

Módulo Interface Comentários

gnublin_gpio Interno

gnublin_adc Interno Actualmente apenas disponível no módulo Linux Elektor (e não no Raspberry Pi)

gnublin_i2c I2C Barramento I2C standard

gnublin_spi SPI Dispositivos SPI standard

gnublin_pwm Interno Actualmente apenas disponível no módulo Linux Elektor

gnublin_module_lm75 I2C Sensor de temperatura

gnublin_module_relay I2C Módulo de relés

gnublin_module_pca9555 I2C Expansor de portos com 16 entradas e saídas digitais

gnublin_module_step I2C Motor passo-a-passo

gnublin_module_lcd I2C Mostrador, 4x20 caracteres

8

Page 102: Elektor_340_2013

O nome e logo Microchip e PIC são marcas registadas da Microchip Technology Incorporated nos E.U.A. e outros países. mTouch, PICDEM e PICkit são marcas da Microchip Technology Incorporated nos E.U.A. e outros países. Todas as restantes marcas mencionadas neste documento são propriedade dos respectivos donos. ©2013 Microchip Technology Inc. Todos os Direitos Reservados. DS30010039A. ME1072Por08.13

Para informação adicional, visite o site da Microchip emwww.microchip.com/get/eupic16f753

Melhore o desempenho e a efi ciência dos seus projectos, ao mesmo tempo reduzindo os custos, com as capacidades analógicas expandidas do microcontrolador PIC16F753. Com o seu Op Amp integrado, compensação de declive e uma gama completa de periféricos independentes do núcleo, o PIC16F753 garante conversão efi ciente da alimentação e oferece uma plataforma versátil para se acrescentar sensores inteligentes e gestão de corrente em projectos de sistemas embebidos.

O microcontrolador PIC16F753 a 8-bit da Microchip oferece todas as funcionalidades do PIC12F752 e acrescenta um Op Amp com 3 MHz de produto ganho-largura de banda, para além de compensação de declive para fontes de alimentação comutadas.

Formas de onda complementares não-sobrepostas para alimentar entradas de periféricos como comparadores e PWM são garantidas pelo gerador de saída complementar integrado no chip, com controlo de banda morta, controlo de fase e controlo de intervalos, assim como desligar e reinicialização automáticas. Os 8 canais de ADC a 10-bit integrados no chip podem ser usados para acrescentar capacidades de sensores, incluindo interfaces tácteis de tipo capacitivo, enquanto duas saídas de 50 mA suportam a alimentação directa de FETs. Igualmente integrados estão comparadores de alta performance, um DAC a 9-bit e um módulo PWM de captura comparação.

Para projectos de tensão mais elevada sensíveis aos custos, o PIC16HV753 integra um regulador série (shunt) para operação desde 2V até um nível máximo de tensão defi nido pelo utilizador, com uma corrente em modo operacional inferior a 2 mA.

O seu projecto precisa de inteligência analógica num microcontrolador 8-bit? O sistema PIC16F753 suporta sensores inteligentes mais conversão e gestão efi ciente de corrente

COMECE JÁ A TRABALHAR NOS SEUS PROJECTOS■ Teste o projecto de referência grátis para uma lanterna baseada em LED■ Escolha entre as seguintes ferramentas de desenvolvimento de baixo-custo: - Kit de Desenvolvimento PICDEM™ Lab - PICkit™ 3 - Placa de Demonstração PICkit Low-Pin Count

PICDEM™ Lab Development Kit(DM163045)