You are on page 1of 94

UNIVERSIDADE FEDERAL DO PARAN

KLEITON CHOCHI ZEMBOVICI MARCELO GONALVES FRANCO

DISPOSITIVO PARA AQUISIO DE SINAIS E CONTROLE DIGITAL VIA USB

Curitiba PR 2009

UNIVERSIDADE FEDERAL DO PARAN


KLEITON CHOCHI ZEMBOVICI MARCELO GONALVES FRANCO

DISPOSITIVO PARA AQUISIO DE SINAIS E CONTROLE DIGITAL VIA USB

Projeto de Graduao na rea de Engenharia Eltrica apresentado Universidade Federal do Paran, como requisito parcial para a obteno do ttulo de Engenheiro Eletricista. Orientador: Eduardo Parente Ribeiro.

Curitiba PR 2009

AGRADECIMENTOS
Agradecemos a todos que nos incentivaram a fazer este trabalho, trazendo-nos fora e confiana para que no desanimssemos em nenhum instante durante a execuo deste trabalho. Agradecemos ao profo. Dr. Eduardo Parente Ribeiro do Departamento de Engenharia Eltrica da Universidade Federal do Paran pela sugesto do tema e pelo apoio dado sempre que precisamos, orientando o projeto e indicando fontes de pesquisas para o desenvolvimento deste. Agradecemos tambm ao profo. M.Sc. Ademar Luiz Pastro e ao profo. Dr. Gideon Villar Leandro do Departamento de Engenharia Eltrica da Universidade Federal do Paran pelas crticas e sugestes dadas na apresentao parcial do projeto. Agradecemos ao nosso grande amigo Luis pela fora e ajuda durante o desenvolvimento do software, e ao Eng. Jefferson da Henry pelo emprstimo dos microcontroladores. Tambm agradecemos aos fabricantes de componentes MAXIM e MICROCHIP por terem nos disponibilizado amostras dos componentes, sem os quais no conseguiramos realizar este projeto. No poderamos esquecer de agradecer s nossas famlias e amigos, que estiveram sempre ao nosso lado e que compreenderam nossa ausncia em alguns momentos, com a certeza de que tudo isso era preciso para o sucesso deste trabalho. Acima de tudo, agradecemos um ao outro pelo empenho e dedicao dados a este trabalho, na certeza de que estaramos fazendo o possvel para o sucesso deste projeto.

RESUMO
O dispositivo para aquisio de sinais e controle digital apresentado neste trabalho um prottipo que se assemelha a um osciloscpio digital, utilizado para captar sinais, digitaliz-los e envi-los para o computador atravs da comunicao USB. O dispositivo possui dois canais de 8 bits independentes, taxa de amostragem varivel, oito escalas de amplitude e controle digital para dois dispositivos externos. O hardware consiste de um estgio amplificador de dois canais e com ganho varivel, dois multiplexadores para seleo deste ganho e um microcontrolador, responsvel pelo tratamento do sinal, pela seleo do ganho do AmpOp atravs do controle do MUX, e pela comunicao com o computador. O firmware do microcontrolador foi elaborado em linguagem C. O software da interface grfica foi elaborado em Delphi, apresentando uma tela que lembra a de um osciloscpio convencional.

Palavras-Chave Osciloscpio USB PIC18F2550 Comunicao USB

ABSTRACT
The device for signal acquisition and digital control presented in this work is a prototype that resembles a digital oscilloscope,used to capture signals, scan them and send them to your computer through the USB communication. The device has two independent channels of 8 bits, variable sample rate, eight amplitude scales and digital control for two external devices. The hardware consists of a stage and two-channel amplifier with variable gain, two multiplexers to select the gain and a microcontroller, which is the responsible for the signal treatment, for the selection of the AmpOp gain through MUX control, and also for the communication with the computer. The microcontrollers firmware was developed in language C. The software's graphical interface was developed in Delphi, displaying a screen that resembles that of a conventional oscilloscope.

Key words USB oscilloscope PIC18F2550 USB communication

LISTA DE ABREVIATURAS E SIGLAS


AMPOP BNC CAD CIs CMOS EEPROM GPR HID ICSP kbps kSPS LSB LVP MAC Mbps MMC MSB SCLK MSPS PIC ROM SFR Register) SMD Componente de Montagem em Superfcie (Superficial Monting Device) Amplificador Operacional Conector Naval Britnico (British Naval Connector) Conversor Analgico Digital Circuitos Integrados semicondutor metal-xido complementar (complementary Memria Programvel e Apagvel Eletricamente

metal oxide semiconductor) (Electrically Erasable Programmable Read Only Memory) Registrador de Propsito Geral (General Purpose Register) Dispositivo de Interface Humana (Human Interface Device) Programao Serial no Circuito (In-Circuit Serial Programming) Kilo-bits por Segundo (Kilo-bits per second) Kilo-amostras por Segundo (Kilo-Samples per Second) Bit menos significativo (Least significant Bit) Programao em Baixa Tenso (Low Voltage

Programming) Controle de Acesso ao Meio (Media Access Control) Megabits por Segundo (Mega bits per Second) Comando de Gerenciamento Microescalonado (MicroBit mais significativo (Most Significant Bit) Relgio da Serial (Serial Clock) Mega-amostras por Segundo (Mega-Samples per Second ) Controlador de Interface Programvel (Programmable Interface Controller) Memria Somente de Leitura (Read Only Memory) Registrador de Funo Especial (Special Function

scheduled Management Command)

5 SRAM TDM Multiplexing) TTL USB WUSB Lgica Transstor-Transstor (Transistor-Transistor Logic) Barramento Serial Universal (Universal Serial Bus) Wireless USB Memria Esttica de Acesso Randnico (Static Random Access Memory) Multiplexao por Diviso de Tempo (Time division

LISTA DE FIGURAS
FIGURA 1 TOPOLOGIA USB..........................................................................19 FIGURA 2 TOPOLOGIA DO WIRELESS USB...............................................20 FIGURA 3 TIPOS DE CONECTORES USB...................................................20 FIGURA 4 TIPOS DE CONECTORES USB...................................................21 FIGURA 5 TIPOS DE CONECTORES USB...................................................21 FIGURA 6 TIPOS DE ADAPTADORES USB..................................................22 FIGURA 7 TIPOS DE ADAPTADORES USB..................................................22 FIGURA 8 TIPOS DE ADAPTADORES USB..................................................23 FIGURA 9 CORTE TRANSVERSAL DO CABO USB.....................................23 FIGURA 10 MODELO DE HUB USB..............................................................31 FIGURA 11 CONVERSOR ANALGICO DIGITAL........................................33 FIGURA 12 CIRCUITO BSICO DE UM AMPOP..........................................33 FIGURA 13: DIAGRAMA DO DISPOSITIVO COM COMUNICAO USB E CONVERSOR ANALGICO/DIGITAL...............................................................34 FIGURA 14: DIAGRAMA DE BLOCOS DO CONVERSOR ANALGICO/DIGITAL........................................................................................35 FIGURA 15 LAYOUT DAS TRILHAS..............................................................40 FIGURA 16 LAYOUT DOS COMPONENTES.................................................41 FIGURA 17 LAYOUT DAS TRILHAS DAS PLACAS DE CORREO..........42 FIGURA 18 LAYOUT DOS COMPONENTES DAS PLACAS DE CORREO - - -43 FIGURA 19 PROTTIPO NO MONTADO NO INTERIOR DA CAIXA...........43 FIGURA 20 VISTA SUPERIOR DA CAIXA.....................................................44 FIGURA 21 VISTA SUPERIOR ESQUERDA DA CAIXA................................44 FIGURA 22 VISTA SUPERIOR DIREITA DA CAIXA......................................45 FIGURA 23 TELA DE INTERFACE DO PCWHD...........................................48 FIGURA 241 - ESQUEMA ELETRNICO DO PROGRAMADOR ...................49 FIGURA 25 GRAVADOR DO PIC...................................................................49 FIGURA 26 TELA DE INTERFACE DO PICPGM DEVELOP. PROGRAMMER V1.0.1.5...............................................................................................................50 FIGURA 27 - MICROCONTROLADOR 18F2550 .............................................51

7 FIGURA 28 FLUXOGRAMA DO FIRMWARE.................................................52 FIGURA 29 TELA DE INTERFACE GRFICA DO BORLAND DELPHI SECOND EDITION VERSO 7.2.......................................................................55 FIGURA 30 FLUXOGRAMA DO PROGRAMA EM DELPHI...........................60 FIGURA 31 TELA DE INTERFACE GRFICA DO PROGRAMA FINAL........61

LISTA DE QUADROS

QUADRO 1: RELAO DE RESISTORES UTILIZADOS.................................45 QUADRO 2: RELAO DE CAPACITORES UTILIZADOS..............................46 QUADRO 3: RELAO DE CIRCUITOS INTEGRADOS UTILIZADOS...........46 QUADRO 4: RELAO DOS DEMAIS COMPONENTES UTILIZADOS..........46 QUADRO 5 PINOS UTILIZADOS NO PIC......................................................52

SUMRIO
AGRADECIMENTOS...........................................................................................1 RESUMO.............................................................................................................2 ABSTRACT..........................................................................................................3 LISTA DE ABREVIATURAS E SIGLAS..............................................................4 LISTA DE FIGURAS............................................................................................6 LISTA DE QUADROS..........................................................................................8 SUMRIO............................................................................................................9 1. INTRODUO..............................................................................................11 1.1. OBJETIVO.................................................................................................11 1.1.1. OBJETIVO GERAL.................................................................................12 1.1.2. OBJETIVO ESPECFICO.......................................................................12 1.2. JUSTIFICATIVA.........................................................................................12 2. CONCEITOS.................................................................................................14 2.1. PRINCIPAIS CONCEITOS........................................................................14 2.1.1. OSCILOSCPIO....................................................................................14 2.1.2. USB.........................................................................................................15 2.1.2.1. HISTRICO.........................................................................................16 2.1.3. WIRELESS USB WUSB......................................................................17 2.1.4. PRINCIPAIS CARACTERSTICAS DO USB.........................................17 2.1.5. TOPOLOGIA USB..................................................................................18 2.1.6. TIPOS DE CONECTORES E ADAPTADORES USB ...........................20 2.1.7. CABO USB.............................................................................................23 2.1.8. HOST USB..............................................................................................24 2.1.9. PROTOCOLO USB................................................................................25 2.1.10. ENUMERAO....................................................................................26 2.1.11. MODELO DE FLUXO DE DADOS.......................................................27 2.1.12. DISPOSITIVOS USB............................................................................29 2.1.13. DIGITALIZAO DE SINAIS...............................................................32 2.1.14. AMPLIFICAO DE SINAIS................................................................33 3. ARQUITETURA DO PROTTIPO...............................................................34 3.1. ANLISE DOS PRINCIPAIS COMPONENTES DO CIRCUITO...............35

10 3.1.1. ESCOLHA DO MICROCONTROLADOR...............................................36 3.1.2. ESCOLHA DO MULTIPLEXADOR.........................................................37 3.1.3. ESCOLHA DO AMPLIFICADOR OPERACIONAL.................................38 4. CONCLUSES.............................................................................................63 4.1. PERSPECTIVAS.......................................................................................64 REFERNCIAS BIBLIOGRFICAS..................................................................65 REFERNCIAS PARA PESQUISA...................................................................66 ANEXO A - CRONOGRAMA DO PROJETO....................................................69 ANEXO B DIAGRAMA ESQUEMTICO DO CIRCUITO...............................70 ANEXO C DIAGRAMA ESQUEMTICO DO CIRCUITO DE TRATAMENTO DE SINAIS..........................................................................................................72 ANEXO D DIAGRAMA ESQUEMTICO DA FONTE EXTERNA..................73 ANEXO E CDIGO FONTE DO FIRMWARE................................................74 ANEXO F CDIGO FONTE DO SOFTWARE...............................................78

11

1. INTRODUO
A medio e a anlise de sinais so de fundamental importncia para muitos profissionais, principalmente na rea de eletro-eletrnica. Esta medio pode ser feita de diversas maneiras. Muitos so os dispositivos existentes para realizar medies em circuitos eltricos ou eletrnicos, seja um simples multmetro de bolso com seus recursos limitados ou um sofisticado osciloscpio de bancada com suas vrias funes especiais, ou ainda os analisadores de espectro. Cada um dos equipamentos tem sua aplicao, dependendo das necessidades de preciso, confiabilidade e custo, o usurio pode optar pelo equipamento que satisfaa sua necessidade. Quanto maior a complexidade do equipamento, confiabilidade, preciso, quantidade de recursos e ainda a tecnologia utilizada, maior ser o custo do equipamento. Juntando a eletrnica e os recursos do computador, resolveu-se desenvolver um dispositivo para anlise de sinais, semelhante a um osciloscpio, porm, de mais baixo custo. O dispositivo para aquisio de sinais e controle digital via USB um dispositivo que captura os sinais a serem analisados atravs de pontas de prova conectadas a entradas do tipo BNC, trata o sinal e envia atravs de uma conexo USB para um microcomputador, onde, por meio de uma interface grfica, o sinal ento mostrado em uma tela, similar a de um osciloscpio comum. Este projeto foi baseado no trabalho de concluso de curso dos graduandos Leandro Silva Piecarz e Walter Luciano Espndola, apresentado em 2007 [1]. Partindo da idia base buscou-se aprimorar e evoluir o dispositivo apresentado por estes formandos de 2007.

1.1.

Objetivo

O objetivo deste projeto desenvolver um dispositivo para aquisio e tratamento de sinais, e envio destes atravs de conexo USB para um

12 computador que, previamente carregado com um software, mostrar os sinais a serem analisados na tela. Tambm incorporado ao projeto tem-se um controlador de dispositivos atravs do computador, com sadas digitais para os equipamentos a serem controlados.

1.1.1.

Objetivo geral

O objetivo geral deste projeto desenvolver um hardware e um software na rea de instrumentao e controle, voltado para a medio de sinais e o controle de dispositivos externos, visando custo baixo e facilidade de uso.

1.1.2.

Objetivo especfico

Projetar um circuito eletrnico para a aquisio de sinais com dois canais de oito bits, com taxa de amostragem pr-definido no firmware em 32kSPS e oito escalas de amplitude variando de 0,02V a 25V.

Desenvolver um firmware para a comunicao via USB e digitalizao do sinal. Desenvolver uma interface grfica para que os sinais sejam mostrados na tela do computador. Confeccionar o prottipo do dispositivo.

1.2.

Justificativa

Vrias so as motivaes para o desenvolvimento deste projeto, dentre as principais pode-se citar os seguintes: A utilizao dos conhecimentos em eletrnica analgica e digital para desenvolver o circuito.

13 A possibilidade de confeccionarmos a placa, visto que esta parte prtica extremamente apreciada pelos membros da equipe. O desafio de desenvolver uma interface grfica no computador, sendo que nenhum dos membros da equipe tinha conhecimentos aprofundados no assunto, tendo ento que estudar e aprender mais sobre isto. A possibilidade futura de comercializao, adequando o produto s normas e evoluindo o prottipo com as possveis correes e sugestes.

14

2. CONCEITOS
Nesta parte do trabalho ser apresentado um breve resumo de conceitos necessrios para o entendimento da seqncia do projeto. Sero abordados conceitos bsicos sobre osciloscpios e suas principais funes, comunicao via porta USB com suas principais caractersticas e protocolos, bem como dispositivos que usam este tipo de comunicao. Tambm sero abordados os temas de digitalizao e amplificao de sinais.

2.1. 2.1.1.

Principais Conceitos Osciloscpio

Osciloscpio basicamente um dispositivo de visualizao grfica que mostra sinais, contnuos ou alternados, eltricos no tempo. Um osciloscpio pode ser usado para determinar diretamente o perodo ou a tenso de um sinal, determinar indiretamente a freqncia de um sinal ou ainda para medir a diferena de fase entre dois sinais peridicos. Os sinais captados pelo osciloscpio so geralmente mostrados em uma tela retangular de tamanho 10cmx8cm com divises de 1cm e, nos eixos X e Y cada quadrado ainda possui subdivises de 0,2cm o que facilita a leitura dos sinais analisados. Para realizar a captura dos sinais se faz necessrio o uso de ponteiras de prova adequadas para o modelo de osciloscpio usado. Geralmente essas ponteiras so atenuadoras com escalas de atenuao de 1:1, 1:10 ou 1:100, resposta em freqncia com escalas de 20MHz a 300MHz e conexo do tipo BNC. As escalas de atenuao e resposta em freqncia dependem do modelo da ponteira. Os osciloscpios podem ser analgicos ou digitais, normalmente com uma ou duas entradas de sinal e que permitem a visualizao dos canais separadamente ou simultaneamente. As funes mais comuns encontradas nos osciloscpios so:

15 CH1 mostra apenas o sinal do canal 1. CH2 mostra apenas o sinal do canal 2 . ALT mostra alternadamente varreduras completas de cada um dos canais. Para que a atlernncia no seja perceptvel a varredura deve apresentar um perodo inferior a 1/n da persistncia da retina do olho humano, onde n o nmero de canais amostrados. Para dois canais, por exemplo, um perodo equivalente a 50Hz suficiente. CHOP a apresentao dos dois canais efetuada em uma nica varredura completa do feixe de eltrons por partilha de tempo. A comutao efetua-se a elevada freqncia, 100kHz, de forma a garantir que a distncia entre traos consecutivos seja inferior ao dimetro da mancha luminosa. Deste modo a sequncia de pequenos traos percebida como uma linha contnua. No entanto, se a freqncia de varredura for numa freqncia mais baixa, pode-se observar um trao descontnuo. ADD mostra a soma dos sinais presentes nos canais 1 e 2.

Tambm encontramos em um osciloscpio botes para seleo de escalas de tempo e de amplitude do sinal. O ajuste da escala de amplitude independente para cada um dos canais e o ajuste da escala de tempo comum aos dois canais, em alguns modelos de osciloscpios ainda podemos ter essa seleo da escala de tempo em separado para cada um dos canais. [6], [7] e [8].

2.1.2.

USB

Diversas caractersticas, como sua velocidade de transmisso, sua versatilidade, sua facilidade de uso e sua confiabilidade, fazem do USB uma interface perfeita para efetuar comunicao com os mais diversos perifricos, desde um mouse at uma cmera digital, inclusive permitindo a leigos instalar o seu prprio perifrico no seu computador pessoal.

16

2.1.2.1.

Histrico

A verso 1.0 do padro USB foi lanada em janeiro de 1996. No entanto, ele s se tornou disponvel para computadores pessoais com o lanamento da verso OEM Service Release 2 do Windows 95, no segundo semestre de 1996. O seu uso ainda era muito limitado, visto que no havia muitos perifricos que utilizavam este barramento, e o suporte tcnico desta verso ainda possua muitos erros. Por volta de 1998, a quantidade de perifricos desenvolvidos com o padro USB havia aumentado muito, e o lanamento do Windows 98 e de sua verso subseqente, o Windows 98 Second Edition, que corrigiu alguns erros da anterior, permitiram que o USB se tornasse uma interface bastante popular. Em setembro de 1998 foi lanada a verso 1.1 do padro USB. Ambas as verses (citadas em conjunto como USB 1.x) permitiam duas velocidades, chamadas Low-Speed (1,5 Mbps) e Full-Speed (12 Mbps). Com o aumento na popularidade do USB 1.x, tornou-se aparente a necessidade de se aumentar a velocidade do barramento. Visto isso, foi lanado em abril de 2000 a verso 2.0 do padro USB, que introduziu uma nova velocidade de transferncia: Hi-Speed (480 Mbps). Este valor no foi escolhido por acaso: pesquisas mostraram que para uma velocidade de transmisso possibilitar compatibilidade reversa com as velocidades anteriores, ela deveria ser 40 vezes maior do que a Full Speed. Esta nova velocidade tornou o USB mais atrativo para perifricos como dispositivos de armazenamento e impressoras. Em dezembro de 2001, foi lanado um suplemento para o USB 2.0, chamado USB On-The-Go, que permitiu a conexo direta entre perifricos, ao contrrio da implementao padro, que exige a conexo do perifrico a um computador. E em maio de 2005, completou-se a especificao tcnica de outra extenso do USB, denominada Certified Wireless USB (ou, simplesmente, Wireless USB), que permite que a transmisso USB seja realizada sem fios. [2].

17

2.1.3.

Wireless USB WUSB

O WUSB utiliza formatos de pacotes definidos na subcamada MAC (Media Access Control Controle de Acesso ao Meio) da camada enlace. Existem quatro tipos bsicos de pacote utilizados neste protocolo: Pacotes MMC (Micro-scheduled Management Command Comando de Gerenciamento Microescalonado): so pacotes de controle da transmisso de rdio. Estes pacotes endeream todos os dispositivos da rede WUSB e so transmitidos utilizando encapsulamento seguro de pacotes. Devem ser transmitidos sempre pelo host da rede e taxa de bits mais confivel do protocolo, que a taxa bsica de sinalizao da camada fsica. Pacotes de dados: estes pacotes podem ser transmitidos tanto por um host como por um dispositivo e carregam dados especficos da aplicao. Podem ser transmitidos a qualquer taxa de bits que seja permitida pela implementao. Pacotes de handshake: so pacotes pequenos que indicam sucesso das transaes. Transmitidos sempre pelos dispositivos da rede WUSB, so parte importante do protocolo, e por isso devem ser transmitidos, assim como os pacotes MMC, taxa de bits mais confivel do mesmo. Pacotes de notificao: podem ser transmitidos apenas por dispositivos e so utilizados para carregar informaes de notificao especficas para o host. [2].

2.1.4.

Principais caractersticas do USB

O USB tem como principais caractersticas as seguintes: O computador atua como um host. Podem ser conectados ao host at 127 dispositivos, diretamente ou atravs de hubs USB.

18 Cabos individuais USB podem ter at 5 metros; com hubs, os dispositivos podem ficar at 30 metros de distncia do host (o equivalente a seis cabos). Com o USB 2.0, o barramento possui uma taxa mxima de transferncia de dados de 480 Mbps. Um cabo USB possui dois fios para energia (+5 volts e o fio terra) e um par tranado para a conduo dos dados. Nos cabos de energia, o computador poder fornecer at 500 mA de energia a 5 volts. Os dispositivos de baixa-potncia (como o mouse) podero puxar a energia diretamente do barramento. Os dispositivos de altapotncia (como impressoras) possuem fonte prpria de alimentao e exigem mnima energia do barramento. Os hubs podem ter suas prprias fontes de energia para fornecer energia aos dispositivos conectados a ele. Os dispositivos USB so hot-swappable (conectveis "a quente"), ou seja, podem ser conectados e desconectados a qualquer momento. Os diversos dispositivos USB podem ser colocados no modo sleep (hibernar) pelo computador host, quando o computador entrar no modo de economia de energia. [2], [3], [4] e [5].

2.1.5.

Topologia USB

O barramento USB possui uma topologia da forma de estrela em camadas (tiered star). Neste tipo de topologia, um nico PC (root) pode se conectar a vrios perifricos (partes que provem funes ao sistema) e ainda, a hubs (pontos de conexo, definidos como uma classe especial de dispositivos no USB), que por sua vez conectam outros perifricos. No centro de cada estrela, h um hub e cada ponto um dispositivo que se conecta a uma porta de um hub. Um hub tpico pode possuir 2, 4 ou 7 portas. Um dispositivo (perifrico) pode ainda ser um dispositivo composto,

19 contendo um perifrico e um hub (por exemplo, uma impressora conectada a um host PC pode possuir portas USB, para que possamos plugar um cabo para imprimir fotos diretamente de uma cmera digital ou ainda conectar outros dispositivos). A cada dispositivo composto na rede designado um endereo nico.

Figura 1 Topologia USB Fonte: http://www.pads.ufrj.br/~rapoport/usb/usb4.html

No USB, o host inicia uma transmisso de dados atravs dos dispositivos conectados a ele atravs da alocao de slots de tempo a cada dispositivo (Time division Multiplexing - TDM). As conexes entre um host e um dispositivo lgico so ponto-a-ponto e dirigidas do host para o dispositivo. Alm disso, um host no USB pode fazer conexes lgicas com at 127 dispositivos. O Wireless USB possui topologia semelhante ao do USB cabeado, onde a diferena principal entre as duas a ausncia de hubs na no-cabeada. [2] e [3].

20

Figura 2 Topologia do Wireless USB Fonte: site http://www.gta.ufrj.br/grad/07_1/wusb/TopologiadoUSB.html

2.1.6.

Tipos de conectores e adaptadores USB

2.1.6.1. Conectores

Figura 3 Tipos de Conectores USB Fonte: site http://www.gdhpress.com.br/hardware/leia/index.php?p=cap3-18

21

Figura 4 Tipos de Conectores USB Fonte: site http://www.intel.com/support/pt/motherboards/desktop/sb/CS-023466.htm

Figura 5 Tipos de Conectores USB Fonte: site http://eletronline.blogspot.com/2009/02/universal-serial-bus-usb.html

22

2.1.6.2. Adaptadores

Figura 6 Tipos de Adaptadores USB Fonte: site https://loja.tray.com.br/adm/editor/up/108972/1499_g.jpg

Figura 7 Tipos de Adaptadores USB Fonte: site www.atera.com.br/figuras/kitusb1399.GIF

23

Figura 8 Tipos de Adaptadores USB Fonte: site http://www.gdhpress.com.br/hardware/leia/cap3-18_html_67a5b903.jpg

2.1.7.

Cabo USB

O cabo USB um cabo blindado que possui que possui internamente outros quatro cabos, como na figura a seguir:

Figura 9 Corte Transversal do Cabo USB Fonte: site http://www.laercio.com.br/artigos/hardware/hard-051/hard-051c.htm

24

Os cabos USB possuem no seu interior, 2 pares de fios. Um par tranado e formado por fios branco e verde ou, em alguns modelos, amarelo e azul. Atravs desses dois fios trafegam os dados, no formato serial. Esses dois sinais formam o que chamamos de par diferencial. Ao invs de ter um fio de terra e outro de sinal, os dois levam o mesmo sinal, mas com polaridades invertidas, portanto so chamados de D+ e D. A vantagem do par diferencial a alta imunidade a rudos eltricos e interferncias em geral. O cabo possui ainda os fios V+ (vermelho) e GND (preto ou marrom) em cada segmento para distribuir energia aos dispositivos. V+ nominalmente +5 V na fonte. Envolvendo esses dois pares de fios temos uma camada formada por uma folha de alumnio e uma blindagem externa, formada por uma malha de cobre. Envolvendo tudo temos uma camada protetora de plstico. O USB permite a utilizao de segmentos de cabo variveis de 0,5 metros at 5 metros, escolhendo-se um padro adequado de condutores. Para fornecer nveis de tenso de entradas garantidos e impedncias apropriadas nas terminaes, so utilizadas terminaes parciais no fim da cada cabo. Estas terminaes permitem a deteco da conexo e remoo em cada porta e a diferenciao entre dispositivos de alta e baixa velocidade. [3], [4] e [5].

2.1.8.

Host USB

Existe apenas um host num sistema USB. A interface USB para o sistema do computador hospedeiro refere-se ao controlador do mesmo. O controlador do host pode ser implementado em combinao de hardware e software. O host USB interage com os dispositivos atravs do controlador do mesmo. O host responsvel por: Detectar a conexo e remoo de dispositivos USB. Gerenciar o fluxo de controle e de dados entre ele e os perifricos. Coletar estatsticas de atividades e estado.

25 Fornecer alimentao aos dispositivos conectados.

O software do sistema USB no host gerencia interaes entre dispositivos USB e o software do dispositivo instalado no prprio hospedeiro. Existem cinco reas de interao entre o software do sistema USB e o software do dispositivo: Enumerao e configurao do dispositivo. Transferncias isossncronas de dados. Transferncias assncronas de dados. Gerenciamento de energia. Gerenciamento de informaes de barramentos e dispositivos.

Sempre que possvel, o software do sistema usa interfaces existentes no host para gerenciar as interaes acima. [3].

2.1.9.

Protocolo USB

O USB um barramento receptor (ou de contagem). O controlador do host inicia todas as transferncias de dados. Todas as transaes do barramento envolvem a transmisso de at trs pacotes. Cada transao se inicia quando o controlador do host envia um pacote USB descrevendo o tipo e a direo da transao, o endereo do dispositivo USB e o nmero do ponto final (endpoint). O ponto final de um dispositivo a nica poro enderevel deste que a fonte de informao em um fluxo de comunicaes entre o host e o prprio. O nmero de endpoint um valor de 4 bits entre 0(hex) e F(hex), inclusive, associado a um ponto final de um perifrico USB. Este primeiro pacote conhecido como "pacote de sinal" (token packet). O dispositivo USB, que endereado, seleciona a si mesmo pela decodificao do endereo apropriado. Em uma dada transao, dados so transferidos do host para o dispositivo ou vice-versa. A direo da transferncia especificada no token packet. A fonte da transao envia ento um pacote de dados ou indica que no h mais dados para serem transferidos. O

26 destinatrio, em geral, responde com um "pacote aperto de mo" (handshake packet), indicando o sucesso da transferncia. O modelo para transferncias de dados entre a fonte ou um destino no host e um ponto final de um dispositivo conhecido como pipe (tubo ou canal). Existem dois tipos de pipe: correntes (stream) e mensagens (message). Uma corrente de dados no possui uma estrutura USB definida, enquanto as mensagens possuem. Alm disto, os tubos possuem associaes com as bandas de transmisso de dados, tipos de servios de transferncia e caractersticas de endpoint, como direo e tamanho de buffer. A maioria dos tubos passa a existir quando um dispositivo configurado. Uma mensagem de pipe, default control pipe, sempre existe enquanto o dispositivo est sendo alimentado, para que possa fornecer acesso s configuraes, informaes de controle e status deste. A listagem das transaes permite o controle do fluxo para vrias correntes de tubos (stream pipes). O mecanismo de controle de fluxo permite a construo de listas flexveis, que acomodam servios concorrentes de misturas heterogneas de stream pipes. Mltiplas correntes de pipes podem ser servidas em diferentes intervalos e com pacotes de diferentes tamanhos. [3].

2.1.10. Enumerao
A enumerao a atividade que identifica e atribui endereos nicos para os dispositivos ligados ao barramento. Por permitir a conexo e remoo de dispositivos em qualquer instante de tempo, a enumerao uma atividade ininterrupta para o software do sistema. Alm disso, a enumerao tambm inclui a deteco e o processo de remoo de perifricos. [3].

27

2.1.11. Modelo de fluxo de dados


O barramento suporta dados funcionais e substituio de controles entre o host e perifricos, assim tambm como um conjunto de pipes unidirecionais ou bidirecionais. As transferncias de dados realizam-se entre o software do host e um endpoint particular em um dispositivo USB. Algumas destas associaes que so chamadas de pipes (tubos ou canais). Geralmente, o movimento de dados atravs de um tubo independente do fluxo de dados em outro tubo. Um dado dispositivo USB deve possuir vrios endpoints. Por exemplo, o dispositivo deve ter um ponto final que suporte um tubo transportando dados para o dispositivo e outro que suporte o transporte de dados no sentido contrrio. Na arquitetura USB so quatro tipos bsicos de transferncias de dados: Transferncia de Controle: Usada para configurar um dispositivo no instante de sua conexo e pode ser usada para outros propsitos especficos, incluindo controle de outros pipes no dispositivo. Transferncia de Volume de Dados: Gerada e consumida em grandes quantidades e simultaneamente, sem restrio de tempo. Possui uma ampla e dinmica latitude em transmisses de reserva. Este tipo de dado seqencial. A largura das bandas de transmisso para este tipo de transferncia de dados pode variar dependendo de outras atividades concorrentes do barramento. um tipo de transmisso que assegura a integridade dos dados, mas no a velocidade de transmisso. Transferncias de Dados por Interrupo: Usada para caracteres ou coordenadas com percepes humanas ou caractersticas de respostas regenerativas. Alguns dados podem ser apresentados para transferncias por um dispositivo em qualquer instante e distribuda pelo USB a uma taxa nunca mais lenta quanto a especificada pelo dispositivo. Transferncia Isossncronas de Dados: Fluxo de dados constantes em intervalos equivalentes. Ocupa uma quantidade pr-negocivel da banda de transmisso do barramento, com a distribuio de pulsos. Chamada

28 tambm de transferncia de correntes em tempo real (streaming realtime transfers). [3].

2.1.11.1.

Transferncia de controle

Dados de controle so usados pelo software de sistema do USB para configurar os dispositivos durante a primeira conexo destes. Outros drivers podem ser escolhidos para utilizar transferncias de controle em implementaes especficas. A distribuio de dados perdida. [3].

2.1.11.2.

Transferncia do tipo bulk

Volume de dados, tipicamente, consiste em grandes quantidades destes, assim como os usados em impressoras e scanners. Este tipo de dado seqencial. Trocas de dados confiveis so asseguradas por hardware utilizando a deteco de erros do prprio. Vale lembrar tambm que a largura das bandas de transmisso para este tipo de transferncia de dados pode variar dependendo de outras atividades concorrentes do barramento. um tipo de transmisso que assegura a integridade dos dados, mas no a velocidade de transmisso. Esta apenas garantida pelo melhor esforo, isto , caso haja possibilidade de transmisso mais rpida, esta ser feita. [3].

2.1.11.3.

Transferncia de interrupo

Uma transferncia pequena e limitada de, ou para, um dispositivo chamada de interrupo. Alguns dados podem ser apresentados para transferncias por um dispositivo em qualquer instante, e distribuda pelo USB a uma taxa nunca mais lenta quanto a especificada pelo dispositivo. Dados de interrupo consistem tipicamente de notificaes de eventos, caracteres ou coordenadas que so organizadas com um ou mais bytes. [3].

29

2.1.11.4.

Transferncia isossncrona

Dados isossncronos so contnuos e em tempo real na sua criao e distribuio. Informaes relacionadas ao sincronismo so sugeridas pela taxa fixa em que cada dado isossncrono recebido e transferido. Este tipo de dado deve ser distribudo de acordo com a taxa de recepo para que o seu sincronismo seja mantido. Alm disso, a taxa de distribuio deve ser sensvel a atrasos nesta atividade. Para pipes isossncronos a banda de transmisso se baseia em amostras caractersticas das funes associadas. Um exemplo tpico de dado isossncrono a voz. Caso a taxa de distribuio destes dados no seja mantida, iro ocorrer "saltos" na corrente de dados. Ainda se o dado distribudo na taxa apropriada pelo hardware USB, atrasos de distribuio introduzidos por software podem degradar aplicaes que necessitam de transmisses em tempo real, como telefonia e udio conferncias. Correntes isossncronas de dados so alocados em uma determinada poro da banda de transmisso para assegurar que os dados sero distribudos na taxa desejada. [3].

2.1.12. Dispositivos USB


Dispositivos USB so divididos em diversas classes. Estes componentes so necessrios para carregar informaes, auto-identificao e configuraes genricas.

2.1.12.1.

Caracterizao de dispositivos

Todos os dispositivos USB so acessados por um endereo atribudo durante sua conexo e enumerao. Cada componente adicionado suporta um ou mais pipes, atravs dos quais o host pode se comunicar com os componentes. Todo componente USB suporta um canal especialmente

30 designado no ponto final zero para que seja includo o canal de controle (control pipe). Atravs deste pipe de controle, dispositivos USB suportam um mecanismo de acesso comum para obter informaes. O canal de controle no endpoint zero a informao necessria para descrever completamente o dispositivo USB. A informao dividida em trs categorias: Standard: A definio comum para todos os perifricos USB e inclui itens como a identificao do vendedor, classe do dispositivo e o gerenciamento de alimentao. Configuraes, interface e descries de endpoint dos dispositivos carregam informaes relacionadas sobre o mesmo. Class: A definio desta informao varia, dependendo das classes de dispositivos. Vendedores USB: O vendedor de dispositivos USB livre para adicionar qualquer informao desejada. [3].

2.1.12.2.

Descrio dos dispositivos

Existem duas classes majoritrias de dispositivos: hubs e funes. Somente os hubs possuem a caracterstica de fornecer pontos adicionais de conexo ao barramento. Funes propiciam um aumento de capacidade ao host.

2.1.12.2.1.

Hubs

Hubs so elementos chave na arquitetura plug and play do USB e servem para simplificar a conectividade de acordo com as perspectivas dos usurios, alm de oferecer segurana a baixo custo e complexidade. Fios concentrados constituem os hubs. Estes por sua vez ativam as caractersticas de conexo do USB. Pontos de conexo so chamados de portas. Cada hub converte um simples ponto de conexo em vrios outros. A arquitetura suporta a concatenao de hubs.

31 A porta principal (upstream port) de um hub o conecta como o host. Cada porta secundria (downstream port) permite a conexo de outro hub ou funo. Os hubs podem detectar a conexo e a remoo de um dispositivo, tanto de baixa quanto de alta velocidade, nas portas secundrias, alm de distribuir energia para estes. Duas partes constituem um hub: o controlador e o repetidor. Este ltimo um protocolo de mudana controlado entre as portas secundrias e a primria. Tambm possui suporte de hardware para reiniciar e suspender a transmisso de sinais. O controlador do host propicia aos registradores da interface permitir a comunicao de, ou, para o host. Comandos de controle e estados especficos permitem ao host configurar um hub, alm de monitorar e controlar as suas portas. [3].

Figura 10 Modelo de Hub USB Fonte: site http://www.pads.ufrj.br/~rapoport/usb/usb4.html

2.1.12.2.2.

Funes

Uma funo um dispositivo que capaz de transmitir ou receber dados ou informaes de controle do barramento, estando conectado, por um cabo, a uma porta ou hub. Alm disso, um pacote fsico pode conter funes mltiplas e possuir hosts embutidos. Estes so conhecidos como dispositivos compostos e aparecem para o host como um hub com um ou mais dispositivos noremovveis. Cada funo contm informaes de configuraes que descrevem suas capacitaes e recursos exigidos. Antes de poder utilizar uma funo, o host

32 deve configur-la Esta configurao inclui a alocao da banda de transmisso e a seleo das opes especficas para a configurao da funo. Abaixo seguem alguns exemplos de funes: Um dispositivo localizador, como um mouse. Um dispositivo de entrada, como um teclado. Um dispositivo de sada, como uma impressora. Um adaptador de telefonia, como um ISDN. [3].

2.1.13. Digitalizao de sinais


Para digitalizar um sinal, precisamos de uma base de tempo e um Conversor Analgico Digital (CAD), que fornea uma aproximao digital do sinal original, como mostrado na figura 11. A aproximao digital registrada em n bits e a variao de amplitude do sinal digitalizado pode ser reduzida para uma resoluo de, no mximo, uma parte de 2n. Exemplo: para um conversor de 8 bits que pode converter sinais analgicos entre 0V e 5V, a resoluo do conversor A/D dada pelo valor mximo do sinal analgico dividido pelo valor mximo de combinaes de bits. Neste caso a resoluo seria 5 dividido por 28, o que resultaria numa resoluo de 0,01953125V ou 19,53125mV. A base de tempo determina a velocidade com que podemos amostrar a forma de onda e varia com o tipo de CAD. Em geral, quanto maior for o nmero de bits, mais lento o dispositivo. O bit mais significativo (MSB) o que registra a maior variao de tenso, e o bit menos significativo (LSB) registra a menor variao de tenso. [1], [9] e [10].

33

Figura 11 Conversor Analgico Digital Fonte: site http://www.universiabrasil.net/mit/6/6071/PDF/f02-lec20a_val.pdf

2.1.14. Amplificao de sinais


Como os sinais analisados podem assumir amplitudes muito baixas, da ordem de mili ou micro-volts, neste projeto usado um amplificador de sinais, o TL072, responsvel por amplificar o sinal amostrado para valores adequados anlise. A amplificao do sinal depende do ganho do amplificador operacional, e este ganho regulado atravs do valor do resistor R2.

Figura 12 Circuito Bsico de um AmpOp Fonte: Datasheet do componente TL072

34

3. ARQUITETURA DO PROTTIPO
A arquitetura definida para este prottipo foi a de um microcontrolador com comunicao via USB e conversor analgico/digital internos. Para a placa foi definido o layout de apenas uma face de trilhas. Na arquitetura do microcontrolador com conversor analgico/digital interno, o microcontrolador o responsvel em converter o sinal analgico capturado por qualquer uma das entradas do dispositivo em digital. Como a amplitude do sinal capturado pode ser varivel, usado um amplificador para cada entrada do dispositivo, com ganho varivel ajustado pelo microcontrolador. O ganho definido atravs de seleo feita pelo usurio no software, esta seleo gera um sinal que vai do PIC para o multiplexador, selecionando o resistor correspondente ao ajuste de escala desejado, e este resistor por sua vez, quem define o ganho do amplificador. A comunicao e o envio de sinais entre o dispositivo e o computador so feitos atravs da comunicao USB do microcontrolador com o computador.

Figura 13: Diagrama do dispositivo com comunicao USB e conversor analgico/digital Fonte: ttcsope

35

Figura 14: Diagrama de blocos do conversor analgico/digital Fonte: Datasheet do microcontrolador PIC18F2550

3.1. Circuito

Anlise dos Principais Componentes do

Os principais componentes deste circuito, e que sero analisados a seguir, so: Microcontrolador Multiplexador Amplificador Operacional

36

3.1.1.
Foram

Escolha do microcontrolador
microcontroladores dos fabricantes ATMEL,

analisados

MICROCHIP e TEXAS INSTRUMENTS. As pesquisas foram feitas atravs das ferramentas de auxlio para verificao de modelos disponveis no site de cada fabricante, nestas ferramentas coloca-se os dados que interessam para o projeto e a ferramenta mostra o que o respectivo fabricante tem que possua as caractersticas desejadas. No site da ATMEL encontra-se o microcontrolador AT91CAP7E Caractersticas principais: 256 kbytes de memria ROM interna 160 kbytes de memria SRAM interna USB 2.0 Conversor analgico/digital de 10-bits Clock varivel de 8 a 16 MHz Programao in circuit Encapsulamento LFBGA com 225 pinos

No

site

da site

TEXAS

INTRUMENTS

no

foi

obtido

nenhum

microcontrolador que apresentasse as caractersticas desejadas (USB e CAD). J no da MICROCHIP foram encontradas 2 opes de microcontroladores, PIC18F2550 e PIC18F4550, ambos continham as principais caractersticas desejadas, comunicao via USB e conversor analgico/digital. Caractersticas principais: - PIC18F2550: USB 2.0 Clock varivel de 8 a 48 MHz Conversor analgico/digital de 10-bits Programao in circuit

37 - PIC18F4550: USB 2.0 Clock varivel de 8 a 48 MHz Conversor analgico/digital de 10-bits Programao in circuit 32 kbytes de memria FLASH 2048 bytes de memria SRAM 256 bytes de memria EEPROM 35 portas de entrada/sada Encapsulamentos PDIP de 40 pinos e TQFP e QFN de 44 pinos Dentre estes citados foi escolhido o PIC18F2550, pois alm de ter as caractersticas desejadas, dois exemplares foram emprestados equipe pelo engenheiro Jefferson Chochi Zembovici da empresa HENRY. Posteriormente foi conseguido o contato de um distribuidor MICROCHIP em So Paulo, Bevian comercial e importadora LTDA, com quem, entrando em contato, foram conseguidas amostras do componente, sendo pago apenas as despesas de envio. Duas amostras do componente com encapsulamento DIP e duas em SMD foram enviadas pelo distribuidor, com isso, um total de seis microcontroladores ficaram disposio da equipe para que esta pudesse fazer testes com diferentes programaes e para possvel reposio, backup, em caso de queima de algum dos microcontroladores. 32 kbytes de memria FLASH 2048 bytes de memria SRAM 256 bytes de memria EEPROM 24 portas de entrada/sada Encapsulamentos PDIP e SOIC de 28 pinos

3.1.2.

Escolha do multiplexador

Os multiplexadores analisados para o projeto so todos da empresa MAXIM. Os modelos analisados foram o MAX308, MAX4638 e MAX4051, todos com oito portas multiplexveis.

38 O motivo da escolha destes componentes do referido fabricante foi o fato de que este enviaria amostras dos componentes sem custo algum. Caractersticas principais: - MAX308: 8 canais multiplexados Compatvel com lgica TTL e CMOS Resistncia de canal menor que 5omhs Proteo contra descarga eletrosttica maior que 2000 V Tempo de chaveamento o Ton = 100ns o Toff = 75ns - MAX4638: 8 canais multiplexados Compatvel com lgica TTL e CMOS Resistncia de canal de 0,4 ohms Tempo de chaveamento o Ton = 18ns o Toff = 7ns

- MAX4051: 8 canais multiplexados Compatvel com lgica TTL e CMOS Resistncia mxima de canal de 12 omhs Tempo de chaveamento o Ton = 50ns o Toff = 40ns

Para usar no projeto restaram duas opes, o MAX4638 e o MAX4051, pois foram estes os modelos enviados pelo fabricante, ambos em SMD. A escolha do componente usado no dispositivo, MAX4638, foi devido a este possuir menor tempo de chaveamento e menor resistncia de canal.

3.1.3.

Escolha do amplificador operacional

39 O amplificador operacional utilizado no dispositivo o TL072 da TEXAS INSTRUMENTS, este componente foi escolhido pelo fato de que a equipe j possua o componente, reduzindo assim despesas com componente e otimizando os custos do projeto. Caractersticas principais: Dual AmpOp Baixo rudo Proteo contra curto-circuito na sada Baixa distoro harmnica total (0,003% tpico) Alta impedncia de entrada (JFET) Slew rate tpico = 13 V/us

3.2.

HARDWARE

Para o hardware decidiu-se usar placa com apenas uma face, componentes discretos e circuitos integrados com encapsulamento DIP, isto pelo motivo de que era de interesse da equipe confeccionar a placa.

3.2.1.

Desenvolvimento do Dispositivo

O circuito foi desenhado, esquemtico e layout das trilhas, no software EAGLE V.5.5.0 que disponibilizado gratuitamente atravs do site do fabricante (www.cadsoft.de). O diagrama eltrico do circuito foi feito com base nos datasheets dos componentes, no trabalho de final de curso usado de base para este e em conversas entre os membros da equipe. A placa foi planejada de tal forma que se pudesse testar os principais componentes separadamente, por meio de jumpers, com os quais consegue-se bypassar alguns CIs e com isso testar cada parte do circuito. Tambm foram usados soquetes para todos os CIs, o que facilita caso algum deles venha a dar problema.

40 A placa foi feita de modo artesanal, usando o sistema de transfer, impresso a laser em papel polister e transferido para a placa por processo trmico, com o auxlio de um ferro de passar roupas comum.

3.2.2.

Fotos da Placa

Para confeco do circuito forma usadas placas de fibra de face nica, na figura 15 pode-se ver o aspecto das trilhas do circuito, e na sequncia, na figura 16, pode-se ver como ficou a distribuio dos componentes sobre a placa.

Figura 15 Layout das Trilhas Fonte: Autoria Prpria

41

Figura 16 Layout dos Componentes Fonte: Autoria Prpria

3.2.3.

Correes do Circuito

Algumas correes foram necessrias no hardware do dispositivo para que este pudesse captar sinais positivos e negativos. Fazendo testes e analisando o circuito foi visto que este apenas funcionaria para sinais positivos, ento foi acrescentado uma nova placa para tratamento de sinal ao dispositivo e uma fonte externa para que se obtivesse alimentao negativa, desta forma conseguiu-se fazer com que o dispositivo funcionasse tanto para sinais positivos como para sinais negativos.

3.2.4.

Fotos das Placas para Correo do Circuito

42

A fonte foi montada em uma caixa plstica, externa do dispositivo de captura de sinais, enquanto a placa para tratamento de sinal foi colocada juntamente com as outras partes, na caixa do dispositivo.

Figura 17 Layout das Trilhas das Placas de Correo Fonte: Autoria Prpria

43
Figura 18 Layout dos Componentes das Placas de Correo Fonte: Autoria Prpria

3.2.5.

Aspecto Final do Dispositivo

O dispositivo foi montado em uma caixa de alumnio com dimenses de 18cm x 12cm x 9cm, aps tratamento da superfcie metlica a caixa foi pintada com tinta spray. Para dar o acabamento final ao prottipo foram usados adesivos impressos aplicados por sobre a caixa, e a seguir vemos as imagens da montagem e do aspecto final do dispositivo.

Figura 19 Prottipo no Montado no Interior da Caixa Fonte: Autoria Prpria

44

Figura 20 Vista Superior da Caixa Fonte: Autoria Prpria

Figura 21 Vista Superior Esquerda da Caixa Fonte: Autoria Prpria

45

Figura 22 Vista Superior Direita da Caixa Fonte: Autoria Prpria

3.2.6.

Relao de Componentes

3.2.6.1. Resistores
RESISTOR R1 R2, R21, R22 R10, R18 R9, R17 R8, R16 R7, R15 R6, R14, R19, R20, R23, R24 R5, R13 R4, R12 R3, R11
Fonte: Autoria Prpria

VALOR 1k 10k 47k 100k 200k 470k 1M 2,2M 4,7M 10M

Quadro 1: Relao de Resistores Utilizados

3.2.6.2. Capacitores
CAPACITOR C3, C4 VALOR 15pF

46 C2 C1, C6, C7, C8, C9 C10, C11 C5, C12 470nF 100nF 22nF 10F

Quadro 2: Relao de Capacitores Utilizados Fonte: Autoria Prpria

3.2.6.3. Circuitos integrados


CIRCUITO INTEGRADO UC1 IC1, IC2 IC3 CDIGO PIC18F2551 MAX4638 TL072

Quadro 3: Relao de Circuitos Integrados Utilizados Fonte: Autoria Prpria

3.2.6.4. Outros componentes


XTAL1 CON1, CON2 CON3 CON4, CON5 JP1, JP2, JP3 JP4, JP5 20MHz Conector KK 5 vias 5045-5 Conector USB Conector BNC Barra com 3 pinos Barra com 2 pinos
Fonte: Autoria Prpria

Quadro 4: Relao dos Demais Componentes Utilizados

47

3.2.7.

FIRMWARE

Firmware o conjunto de instrues operacionais programadas diretamente no hardware de um equipamento eletrnico. Nesse projeto foi necessrio desenvolver e compilar o programa com as instrues especficas ao microcontrolador PIC 18F2550.

3.2.7.1. Compilador Usado


O microcontrolador escolhido foi o microchip PIC 18F2550. Para esse modelo existem diversos compiladores como o prprio MPLAB em conjunto com o Microchip C18, porm decidimos utilizar o software PCWHD 4.084, da empresa CCS (Custom Computer Service), que faz a compilao em linguagem C. O principal motivo foi grande quantidade de funes e rotinas pr-programadas dedicadas a microcontroladores da famlia PIC, bem como a facilidade na interface de programao.

48

Figura 23 Tela de interface do PCWHD Fonte: Autoria Prpria

3.2.7.2. Programador Usado


Existem muito gravadores de PIC dedicados. Para facilitar os testes em nosso prottipo, nos baseamos no circuito utilizado no gravador PICPlus que realiza a gravao pelo mtodo ICSP (In-Circuit Serial Programming). Este programador no necessita de fonte de alimentao externa, aproveitando o recurso existente no microcontrolador de programao em baixa tenso (LVP). A questo da programao do microcontrolador foi previamente estudada, sendo implementada no prottipo de tal forma que com a mudana de um jumper, possvel conectar o circuito do PICPlus modificado e realizar a programao do PIC.

49

Figura 241 - Esquema Eletrnico do Programador Fonte: site http://www.jdm.homepage.dk/newpic.htm

3.2.7.3. Foto do Programador

Figura 25 Gravador do PIC Fonte: Autoria Prpria

Utilizamos o software livre PICPgm verso 1.0.1.5 para realizar a gravao do firmware no PIC. Esse programa reconhece automaticamente o programador PICPlus e at mesmo o modelo de microcontrolador utilizado.

50

Figura 26 Tela de interface do PICPgm Develop. Programmer V1.0.1.5 Fonte: Autoria Prpria

3.2.7.4. Programao do Microcontrolador


Antes de iniciar a programao do firmware, precisa-se ter conhecimento pleno nos seguintes aspectos: Funes desempenhadas pelo microcontrolador; Quais portas de entradas e sadas sero utilizadas, bem como as funes de cada uma; Freqncia do cristal utilizado; Registradores necessrios para o modelo de PIC escolhido; Fluxograma com a lgica de programao

51

Figura 27 - Microcontrolador 18F2550 Fonte: Datasheet Microchip 18F2550

O quadro 5 mostra as funes dos pinos utilizados no PIC18F2550.


Pino 1 2 3 4 5 6 7 8 9 10 11 12 14 15 16 19 20 21 22 23 24 25 26 27 Funo MCRL Vpp AN0 AN1 RA2 RA3 RA4 RA5 Vss OSC1 OSC2 RC0 RC1 Vusb DD+ Vss Vdd RB0 RB1 RB2 RB3 RB4 PGM PGC

Descrio Entrada de reset, em nvel baixo reseta o sistema Entrada de tenso da programao Entrada analgica 0 Entrada analgica 1 Sada Digital A0 para controle do MUX1 Sada Digital A2 para controle do MUX2 Sada Digital A1 para controle do MUX2 Sada Digital A0 para controle do MUX2 Referncia terra para a lgica e os pinos de i/o Entrada do oscilador de cristal 20MHz Conecta o cristal 20MHz ou ressonador Sada Digital A2 para controle do MUX1 Sada Digital A1 para controle do MUX1 Regulador de tenso interno do USB 3.3V Linha diferencial negativa do USB (input/output) Linha diferencial positiva do USB (input/output) Referncia terra para a lgica e os pinos de i/o Fonte positiva para a lgica e os pinos de i/o Sada Digital Sada Digital Sada Digital Sada Digital Sada Digital Pino que permite a programao em baixa tenso ICSP Clock de programao ICSP

52
28 PGD Pino de dados da programao ICSP Quadro 5 Pinos Utilizados no PIC Fonte: Autoria Prpria

Abaixo vemos o fluxograma completo do firmware.

3.2.7.5. Fluxograma

Figura 28 Fluxograma do Firmware Fonte: Autoria Prpria

De acordo com as necessidades de utilizao no projeto, os principais registradores configurados foram os relacionados s definies de clock (CONFIG1L, CONFIG1H, OSCCON), USB (UCON, UCFG, USTAT, UADDR, UFRMH:UFRML), Serial (SSPSTAT, SSPCON1) e na configurao de portas como entrada e sada (TRISA, TRISB, TRISC).

53

3.2.7.6. Descrio do Firmware


Com o software PCWHD, baseado em linguagem C, foi compilado o firmware. Os principais comando sero mostrados abaixo: #include <18F2550.h>

Realiza a chamada do arquivo de definio de todos os registradores endereados para o 18F2550, existente no banco de dados do compilador CCS. #fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1, VREGEN Configura vrios registradores do microcontrolador, principalmente aos que diz respeito ao oscilador. HSPLL - oscilador de cristal de alta freqncia com PLL habilitado. NOWDT - watchdog desabilitado. NOPROTECT - proteo de cdigo desabilitada. LVP programao em baixa tenso habilitada. DEBUG - RB6 e RB7 dedicados para In Circuit Debug USBDIV - clock USB do 96MHz PLL/2 PLL5 - cristal de 20MHz PLL prescaler /5 CPUDIV1 - clock do ncleo 96MHz PLL/2 VREGEN - regulador interno de tenso USB habilitado #define #define #define #define USB_EP1_TX_ENABLE USB_ENABLE_BULK USB_EP1_RX_ENABLE USB_ENABLE_BULK USB_EP1_TX_SIZE USB_EP1_RX_SIZE 64 3

Ativa o Endpoint1 para as transferncias IN e OUT Bulk/Interrupt

54 Determina o tamanho de 64 e 3 bytes reservado para o Buffer Tx e RX, respectivamente, do Endpoint1. #include #include #include <pic18_usb.h> <PicUSB.h> <usb.c>

Inclui as bibliotecas de configurao da USB e descritores, existentes no banco de dados do compilador CCS para o hardware da famlia PIC18. set_tris_a(0b00000011); set_tris_b(0b00000000); set_tris_a(0b00000000); setup_adc_ports(AN0_TO_AN1) Configura apenas as portas A0 e A1 como entrada analgica, as demais como sada digital. usb_init() usb_task() usb_wait_for_enumeration() Inicia, habilita os perifricos e interrupes e aguarda o PIC ser enumerado pelo sistema operacional. for (i=1;i<TXSIZE;i+=2) { set_adc_channel(1); delay_us(10); txdata[i]=read_adc(); set_adc_channel(0); delay_us(10); txdata[i+1]=read_adc(); } usb_puts(1,txdata,TXSIZE,USB_DTS_TOGGLE); Rotina de leitura das entradas analgicas e envio para o computador atravs da porta de comunicao USB.

55

3.2.8.

SOFTWARE

Foi desenvolvido um software de interface grfica para funcionar na plataforma Windows cuja funo a visualizao das diversas formas de ondas capturadas pelo dispositivo, bem como ajustes de escalas e controle das sadas digitais.

3.2.8.1. Software Usado


A programao de interface grfica foi desenvolvida no Borland Delphi Second Edition verso 7.2, onde utiliza linguagem Pascal orientada a objeto. Optou-se por utilizar esse software devido a ampla variedade de recursos que desejava-se utilizar, como desenhos de grficos incluindo ferramentas de auxilio como o DirectX, barras de sliders, check box, processamento paralelo, entre outros recursos disponveis.

Figura 29 Tela de interface grfica do Borland Delphi Second Edition verso 7.2 Fonte: Autoria Prpria

56

3.2.8.2. Estrutura do Cdigo


Cada objeto colocado na janela Form dotado de propriedades que permite configurar o mesmo. Com exceo do grfico, todos os demais componentes possuem algum tipo de evento, como clicar, marcar, arrastar e segurar. Baseados nestes eventos criou-se o programa na janela de codificao. Como o Delphi permite processamento paralelo, dois principais rotinas ficavam continuamente em loop infinito. A primeira o processamento de eventos da janela principal e a segunda era a captura de pacotes dos sinais analgicos que o PIC enviava. Para facilitar o entendimento lgico da programao, o cdigo foi dividido em Main (principal), USB (comunicao) e Draw (desenho do grfico). A seguir so apresentadas as principais partes da rotina com comentrios dos pontos mais importantes. Os comandos sero mostrados em formatao itlico e negrito . A rotina completa encontra-se no Anexo F.

//Loop Infinito para captura de pacotes de dados while true do begin if GetUSBData then begin UpdateDrawBuffer; ClearScreen; DrawData; end; Sleep(25); end; O cdigo Main basicamente cria os procedimentos para cada evento da janela principal e fica em um loop infinito onde espera o PIC enviar dados ao programa.

57 procedure TForm1.onoff_buttonClick(Sender: TObject); begin if not usb_connected then begin ShowMessage('Dispositivo inicializado.'); exit; end; if onoff_button.Caption = 'ON' then begin onoff_button.Caption := 'OFF'; hold_button.Enabled:=true; DXTimer1.Enabled:=true; CleanDrawBuffer1; CleanDrawBuffer2; th.Resume; end Essa rotina executada quando o evento de clicar sobre o boto ON realizado. Ela verifica se o dispositivo USB est conectado e depois habilitam outros botes de controle, tambm limpa os buffers do grfico. No cdigo USB, est centralizado todos os comandos relacionados a essa comunicao. function 'mpusbapi.dll'; function function _MPUSBOpen(instance:DWORD;pVID_PID:PCHAR8;pEP:PCHAR8;dwDir: DWORD;dwReserved:DWORD):THANDLE; stdcall;external 'mpusbapi.dll'; function_MPUSBRead(handle:THANDLE;varpData:PBYTE;dwLen:D WORD;varpLength:DWORD;dwMilliseconds:DWORD):DWORD; stdcall;external 'mpusbapi.dll'; function _MPUSBReadInt(handle:THANDLE;varpData: _MPUSBGetDeviceCount(pVID_PID:PCHAR8):DWORD; stdcall;external 'mpusbapi.dll'; _MPUSBGetDLLVersion():DWORD; stdcall;external no conectado ou no

58 PBYTE;dwLen:DWORD;var pLength:PDWORD;dwMilliseconds:DWORD):DWORD; 'mpusbapi.dll'; function _MPUSBWrite(handle:THANDLE;pData:PBYTE;dwLen:DWORD;var pLength:DWORD;dwMilliseconds:DWORD):DWORD; 'mpusbapi.dll'; function _MPUSBClose(handle:THANDLE):DWORD; stdcall;external 'mpusbapi.dll'; Esses so alguns comandos contidos na biblioteca mpusbapi.dll fornecida pelo fabricante do microcontrolador. As funes precisam ser reconhecidas pelo Delphi para futura utilizao. vid_pid:PCHAR8='vid_04d8&pid_2525'; // VID e PID Indica ao software qual dispositivo USB reconhecer. Vendor ID 04d8 o padro para produtos Microchip j o Product ID 2525 foi definido pela equipe para identificao desse projeto. function StartUSB: boolean; if (_MPUSBGetDeviceCount(vid_pid)=0) then exit; myOutPipe:= _MPUSBOpen(0,vid_pid,out_pipe,MP_WRITE,0); myInPipe:= _MPUSBOpen(0,vid_pid,out_pipe,MP_READ,0); if ((myOutPipe exit; // testa a conexo - envia ping send_buffer[0] := PING; _MPUSBWrite(myOutPipe,send_buffer,1,SentLength,1000); tmp:=IntToStr(SentLength); _MPUSBRead(myInPipe,recv_buffer,MAXSIZE,ReceiveLength,1000); Funo para incio do dispositivo USB se conectado. Para verificar a comunicao, o programa envia um ping e em seguido recebe uma resposta pr-definida. = INVALID_HANDLE_VALUE) or (myInPipe = INVALID_HANDLE_VALUE)) then stdcall;external stdcall;external

59

send_buffer[0] := LED_CONTROL; send_buffer[1] := led1; send_buffer[2] := led2; if _MPUSBWrite(myOutPipe,send_buffer,3,SentLength,1000)<>1 then ShowMessage('error led control'); Exemplo de envio de bytes de controle dos dispositivos externos (representado por LEDs) para o microcontrolador PIC. if(_MPUSBRead(myInPipe, 1000)<>1)then begin ShowMessage('error get usb data 3'); exit; end; for i:=1 to ReceiveLength do begin if ((i mod 2)=0) then //ndex par begin usb_buffer2[buf2] := recv_buffer[i-1]; inc(buf2); end else begin // ndex impar usb_buffer1[buf1] := recv_buffer[i-1]; inc(buf1); end; end; Captura dos pacotes enviados pelo PIC. Onde realiza a diferenciao dos canais analgicos 1 e 2. O microcontrolador envia os sinais do canal 1 atravs dos bytes de indexao par, enquanto os sinais do canal 2 pelos bytes de indexao impar, assim mantendo a mesma velocidade de captura em ambos os canais. recv_buffer, MAXSIZE, ReceiveLength,

60 Por ltimo tem-se o cdigo de desenho do grfico precisa realizar a normalizao dos nveis de sinais para as amplitudes mximas apresentadas na tela. x := (i-1)*(Form1.DXDraw1.Width div (length(draw_buffer1) div h_factor)); y := draw_buffer1[i-1]; y := round((y/255)*Form1.DXDraw1.Height); // condicionamento do sinal Form1.DXDraw1.Surface.Canvas.MoveTo(x,y); x := (i)*(Form1.DXDraw1.Width div (length(draw_buffer1) div h_factor)); y := draw_buffer1[i]; y := round((y/255)*Form1.DXDraw1.Height); // condicionamento do sinal Form1.DXDraw1.Surface.Canvas.LineTo(x,y); A cada ponto desenhado, realizada a ligao entre ele e o ponto anterior atravs de uma reta, assim fazendo com que o grfico fique contnuo e no pontilhado.

Figura 30 Fluxograma do programa em Delphi Fonte: Autoria Prpria

3.2.8.3. Interface Grfica

61

Figura 31 Tela de interface grfica do programa final Fonte: Autoria Prpria

Na figura 31 mostrada a tela do Dispositivo de Aquisio de Sinais e Controle Digital via USB com as seguintes funes: Boto ON/OFF inicia a visualizao grfica ou encerra o aplicativo grfico. Seletor de escala de tenso independente para os canais 1 e 2, com uma faixa de 0,02 V a 0,5 V por diviso. Seleo de escala de tempo independente em segundos por diviso. Check Box para habilitar os canais 1 e/ou 2. Hold Permite o congelamento instantneo do grfico para melhor analise do sinal amostrado Tela de visualizao grfica dos canais 1 e 2, com dez divises no eixo X e no eixo Y.

3.2.8.4. Driver do Dispositivo

62 Antes de iniciar o desenvolvimento do firmware foi estudado qual o mtodo de comunicao USB seria adotado. Existem trs mtodos: USB Communication Device Class (USB CDC) Basicamente o driver emula uma porta COM, fazendo com que a comunicao entre o software e o firmware seja realizada como se fosse uma porta serial padro. o mtodo mais simples para compilao do programa, porm a velocidade de comunicao muito baixa 115 kbps (~14,4 kB/s). Human Interface Device (EasyHID) - O dispositivo USB seria reconhecido automaticamente pelo Windows como um Dispositivo de Interface Humana (HID), no sendo necessrio desenvolver driver especiais para a aplicao, mas teria uma limitao de velocidade de 64 kB/s. USB Bulk - Driver customizado que permite a comunicao USB apenas com a limitao de velocidade do prprio USB 2.0 (480 Mbps). Esta foi a escolha para o desenvolvimento do projeto. O driver disponibilizado pela prpria Microchip e utilizado em dois momentos. O primeiro na instalao do dispositivo no sistema operacional, onde faz o reconhecimento, enumerao e configurao USB do microcontrolador. O segundo a utilizao da biblioteca mpusbapi.dll para o desenvolvimento do software de interface grfica, o qual serve para comunicao entre o computador e o prprio PIC18F2550.

63

4. CONCLUSES
Neste trabalho foi desenvolvido um dispositivo de aquisio de sinais analgicos e controle digital via USB. Esse tema envolveu conhecimentos de diversas disciplinas do curso de engenharia eltrica, como circuitos eltricos, instrumentao, microcontroladores, circuitos lineares e no lineares, entre outros. Por esse motivo somado ao uso da comunicao USB, tornou o projeto muito interessante, pois atualmente a interface mais utilizada para troca de dados digitais entre os diversos equipamentos eletrnicos. O aprofundamento nesse e em outros assuntos relacionados ao projeto, acabou ampliando a viso de possibilidades para aplicaes desses conhecimentos em dispositivos futuros. Vrias linguagens de programao e diversos softwares foram utilizados, o que proporcionou um aprendizado muito grande nessa rea. Tambm foi um enorme desafio a confeco completa dispositivo, desde a placa de circuito impresso at a caixa protetora, todo desenvolvimento foi realizado pela equipe, o que trouxe muita satisfao para a mesma. O prottipo e software sofreram vrias alteraes e ajustes para alcanar o objetivo definido inicialmente. Com os testes finais, conseguimos obter as seguintes caractersticas: Um taxa de amostragem de aproximadamente 32kSPS;

64 Tenso de entrada AC de 50Vpp; Escala de tempo ponto a ponto real de 2ms; Escala mnima de tenso de 0,1V/div. Controle de ganho em tempo real; Controle dos dispositivos externos simultaneamente com aquisio de dados; Programao do firmware ICSP

Com um maior tempo de desenvolvimento seria possvel melhorar as caractersticas citadas acima, principalmente implementando um conversor analgico digital externo acoplado a uma memria intermediria, aumentando assim a taxa de amostragem. Algumas funes no tratamento de sinal atravs do software de interface grfica tambm foram discutidas, entre elas, um trigger, clculos de valores RMS, filtros, FFT, entre outros.

4.1.

PERSPECTIVAS

Para avanar com o dispositivo e uma possvel evoluo para um produto comercial pode-se citar algumas melhorias a serem implementadas: melhor aumentado entradas Reduo do tamanho do dispositivo Protees contra surtos Incorporao de filtros Eliminao da necessidade de fonte externa FFT Boto de Trigger Clculos matemticos entre os sinais das 2 Limite mximo de tenso de entrada Maior velocidade de aquisio com um CAD

65

REFERNCIAS BIBLIOGRFICAS

[1] ESPNDOLA, Walter Luciano; PIECARZ, Leandro Silva. USBSCOPE. Trabalho de concluso de curso (Graduao em Engenharia Eltrica) UFPR, Curitiba. 2007. [2] Topologia do USB. Disponvel em: http://www.gta.ufrj.br/grad/07_1/wusb/TopologiadoUSB.html. Acesso em: 1 de junho de 2009. [3] Arquitetura USB. Disponvel em: http://www.pads.ufrj.br/~rapoport/usb/usb4.html. Acesso em: 1 de junho de 2009. [4] Interfaces e Perifricos USB. Disponvel em: http://www.laercio.com.br/artigos/hardware/hard-051/hard-051c.htm. Acesso em: 2 de junho de 2009. [5] Como Funcionam as Portas USB. Disponvel em: http://informatica.hsw.uol.com.br/portas-usb1.htm. Acesso em: 3 de junho de 2009.

66

[6] CARVALHO, Felipe Monteiro et al. Osciloscpio Digital em Placa ISA. USP. So Paulo. Disponvel em: http://incubadora.fapesp.br/frs/download.php/707/OsciloscopioISA.pdf. Acesso em: 1 de junho de 2009. [7] Instrumento de Medidas Eltricas em CA Parte II Osciloscpio. Disponvel em: http://www.ucg.br/acad_web/professor/sitedocente/admin/arquivosUpload/7502/ material/Lab2%20circuitos%20elet%20ii.pdf. Acesso em: 1 de junho de 2009. [8] Eletricidade Bsica Osciloscpio. Disponvel em: http://www.inep.ufsc.br/eletbas/aula05.pdf. Acesso em: 1 de junho de 2009. [9] Converso Analgica Digital. Disponvel em: http://www.universiabrasil.net/mit/6/6071/PDF/f02-lec20a_val.pdf. Acesso em: 3 de junho de 2009. [10] Conversor Analgico Digital A/D. Disponvel em: http://www.colegiouberaba.com.br/apostilas/subsidios_eletronica/conversor %20a_d.pdf. Acesso em: 3 de junho de 2009.

REFERNCIAS PARA PESQUISA


Adaptadores USB. Disponvel em: http://www.atera.com.br/figuras/kitusb1399.GIF. Acesso em: 2 de junho de 2009. Adaptadores USB. Disponvel em: http://www.gdhpress.com.br/hardware/leia/cap3-18_html_67a5b903.jpg. Acesso em: 2 de junho de 2009. Adaptadores USB. Disponvel em: https://loja.tray.com.br/adm/editor/up/108972/1499_g.jpg. Acesso em: 2 de junho de 2009. ASSOCIAO BRASILEIRA DE NORMAS TCNICAS. NBR 14724: informao e documentao: trabalhos acadmicos: apresentao. Rio de Janeiro, 2002. ATMEL. Atmel Product Selector Guide. Disponvel em: http://www.atmel.com/. Acesso em: 11 de maro de 2009.

67 COSTA, Alexandre. Gravadores de PIC. Disponvel em: http://br.geocities.com/alexrobotica/eletronic_robotica_grava_pics.html. Acesso em: 23 de abril de 2009. Create USB Interface. Disponvel em: http://www.create.ucsb.edu/~dano/CUI/. Acesso em 24 de abril de 2009. Entendendo USB Firewire. Disponvel em: http://www.gdhpress.com.br/blog/entendendo-usb-firewire.html. Acesso em: 2 de junho de 2009. HOFFMAN, Pablo. Osciloscpio USB Documentacin. Disponvel em: http://pablohoffman.com/cgi-bin/twiki/bin/view/Oscusb/OscusbDocumentacion. Acesso em: 28 de abril de 2009. IN-Circuit Serial Programming (ICSP). Disponvel em: http://www.embedinc.com/picprg/icsp.htm. Acesso em: 23 de abril de 2009. Iniciando PIC USB. Disponvel em: http://www.edaboard.com/ftopic313796.html. Acesso em: 23 de abril de 2009. Intel. Desktop Boards Portas USB. Disponvel em: http://www.intel.com/support/pt/motherboards/desktop/sb/CS-023466.htm. Acesso em: 2 de junho de 2009. Jonis Project PIC+USB. Disponvel em: http://www.jonis.com.br/novo/index.php? option=com_content&view=article&id=53:pic-usb-bootloaderfacil&catid=38:eletronica. Acesso em: 24 de abril de 2009. MICROCHIP. Microchip Advanced Parts Selection. Disponvel em: http://www.microchip.com/stellent/idcplg? IdcService=SS_GET_PAGE&nodeId=1924. Acesso em: 11 de maro de 2009. OBJECTIVE DEVELOPMENT. Power Switch. Disponvel em: http://www.obdev.at/products/vusb/powerswitch.html. Acesso em: 11 de maro de 2009. PIC 18 USB Support. Disponvel em: http://www.oshonsoft.com/pic18usb.html. Acesso em: 21 de abril de 2009. PICPgm. Disponvel em: http://members.aon.at/electronics/pic/picpgm/. Acesso em: 23 de abril de 2009. Programas de PIC com USB. Disponvel em: http://www.electronicfr.com/index.php/Microcontrollers-and-USB/-Part-3-Howto-build-a-USB-thermometer-and-barometer-with-PIC-18F4550-or18F2550.html. Acesso em: 23 de abril de 2009.

68 SOUZA, Emmanuel C. O. Criando Textos Segundo a ABNT. Disponvel em: http://www.scribd.com/doc/1816529/Normas-ABNT-no-Word?page=7. Acesso em: 28 de maio de 2009. TEXAS INSTRUMENTS. MCU Selection Tool. Disponvel em: http://focus.ti.com/en/multimedia/flash/selection_tools/mcu/mcu.html. Acesso em: 10 de maro de 2009. UNISO. Manual de Normalizao de Apresentao de Teses, Dissertaes e Trabalhos de Concluso de Curso (TCC) da Universidade de Sorocaba. Disponvel em: http://www.scribd.com/doc/4076862/ABNT-Manual-I. Acesso em: 22 de junho de 2009. Universal Serial Bus USB Eletronline. Disponvel em: http://eletronline.blogspot.com/2009/02/universal-serial-bus-usb.html. Acesso em: 2 de junho de 2009. USB. Disponvel em: http://www.gdhpress.com.br/hardware/leia/index.php? p=cap3-18. Acesso em: 2 de junho de 2009. USB Boot-Loader on a PIC 18F2550. Disponvel em: http://techsanctuary.com/node/64. Acesso em 23 de abril de 2009. USB Especifications. Disponvel em: http://www.usb.org/developers/usb20/developers/whitepapers/usb_20g.pdf. Acesso em: 21 de abril de 2009. USB Explicao. Disponvel em: http://www.rogercom.com/PortaUSB/MotorPasso.htm. Acesso em: 24 de abril de 2009.

69

ANEXOS

ANEXO A - Cronograma do Projeto


Maro/2009 Estudo dos microcontroladores e definio dos demais componentes eletrnicos do dispositivo a ser desenvolvido. Abril/2009 Definio do projeto eletrnico, layout da placa, confeco do dispositivo e incio do estudo para o desenvolvimento do software.

70 Maio/2009 Possveis correes, testes, calibrao do dispositivo, testes preliminares do software e possveis melhorias a serem implementadas. Junho/2009 Correes finais, layout externo do produto, ltimos testes e modificaes, elaborao do relatrio e verificao final do produto. Julho/2009 Apresentao.

ANEXO B Diagrama Esquemtico do Circuito

71

72

ANEXO

Diagrama

Esquemtico

do

Circuito

de

Tratamento de Sinais

73

ANEXO D Diagrama Esquemtico da Fonte Externa

74

ANEXO E Cdigo Fonte do Firmware


//==Cdigo Fonte do Firmware compilado em C pelo programa PCWHD============== #include <18F2550.h> #fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL4,CPUDIV1,VREGEN #use delay(clock=48000000) // Cristal de 16MHz // Includes das bibliotecas USB do compilador CCS. //Microchip PIC18Fxx5x Hardware p/ CCS PIC USB Driver #define USB_HID_DEVICE FALSE // Desabilitamos o uso das diretivas HID #define USB_EP1_TX_ENABLE USB_ENABLE_BULK // Ativa EP1(EndPoint1) para as transferencias IN Bulk/Interrupt #define USB_EP1_RX_ENABLE USB_ENABLE_BULK // Ativa EP1(EndPoint1) para as transferencias OUT Bulk/Interrupt #define USB_EP1_TX_SIZE 64 // Tamanho para o Buffer Tx EndPoint1 #define USB_EP1_RX_SIZE 3 // Tamanho para o Buffer Rx EndPoint1 #include #include #include #ENDIF //==Definies======================================================== #define LED1ON PIN_B0 #define LED2ENUM PIN_B1 #define LED3USB PIN_B2 #define LED4OUT1 PIN_B3 #define LED5OUT2 PIN_B4 #define LED_ON output_low #define LED_OFF output_high #define MUX1A0 #define MUX1A1 #define MUX1A2 #define MUX2A0 #define MUX2A1 #define MUX2A2 PIN_A2 PIN_C1 PIN_C0 PIN_A5 PIN_A4 PIN_A3 <pic18_usb.h> <PicUSBMK.h> //Configurao do USB e descritores para o dispositivo <usb.c> //Handles usb ,tokens e descritores

#define MUX_ON output_high #define MUX_OFF output_low #define SAMPLE 0x00 #define LED_CONTROL 0x01 #define MUX_CONTROL1 0x02 #define MUX_CONTROL2 0x03 #define PING 0x05 #define NO1 #define NO2 #define NO3 #define NO4 #define NO5 #define NO6 #define NO7 #define NO8 #defineTXSIZE 64 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07

75

int8 rxdata[5]; int8 txdata[TXSIZE]; int8 txdata2[TXSIZE]; int8 txdata3[TXSIZE]; int8 txdata4[TXSIZE]; int8 txdata5[TXSIZE]; int8 txdata6[TXSIZE]; int8 txdata7[TXSIZE]; int8 txdata8[TXSIZE]; int8 txdata9[TXSIZE]; int8 txdata10[TXSIZE]; int8 send_buf[5]; void TesteUSB(void) { //Verifica se o USB est conectado e enumerado

int8 enumerou; usb_task(); // Hab. o perif. usb e as interrupes usb_wait_for_enumeration(); // Aguarda o Pic ser configurado pelo PC enumerou=usb_enumerated(); if (enumerou) LED_ON(LED2ENUM); else LED_OFF(LED2ENUM); } void TXAnalog(void) { int8 i; LED_ON(LED3USB); set_adc_channel(0); delay_us(10); txdata[0]=read_adc(); for (i=1;i<TXSIZE;i+=2) { set_adc_channel(1); delay_us(10); txdata[i]=read_adc(); set_adc_channel(0); delay_us(10); txdata[i+1]=read_adc(); } usb_puts(1,txdata,TXSIZE,USB_DTS_TOGGLE); LED_OFF(LED3USB); } void MuxCH1(void) { //Seleciona o ganho do CH1 if (rxdata[1]==NO1){ MUX_OFF(MUX1A2); MUX_OFF(MUX1A1); MUX_OFF(MUX1A0); } if (rxdata[1]==NO2){ MUX_OFF(MUX1A2); MUX_OFF(MUX1A1); MUX_ON(MUX1A0); } // Canal A0 // Retardo //Realiza a captura e transmisso das portas analgicas

// Canal A1 // Retardo // Canal A0 // Retardo

76
if (rxdata[1]==NO3){ MUX_OFF(MUX1A2); MUX_ON(MUX1A1); MUX_OFF(MUX1A0); } if (rxdata[1]==NO4){ MUX_OFF(MUX1A2); MUX_ON(MUX1A1); MUX_ON(MUX1A0); } if (rxdata[1]==NO5){ MUX_ON(MUX1A2); MUX_OFF(MUX1A1); MUX_OFF(MUX1A0); } if (rxdata[1]==NO6){ MUX_ON(MUX1A2); MUX_OFF(MUX1A1); MUX_ON(MUX1A0); } if (rxdata[1]==NO7){ MUX_ON(MUX1A2); MUX_ON(MUX1A1); MUX_OFF(MUX1A0); } if (rxdata[1]==NO8){ MUX_ON(MUX1A2); MUX_ON(MUX1A1); MUX_ON(MUX1A0); } } void MuxCH2 (void) { //Seleciona o ganho do CH2 if (rxdata[1]==NO1){ MUX_OFF(MUX2A2); MUX_OFF(MUX2A1); MUX_OFF(MUX2A0); } if (rxdata[1]==NO2){ MUX_OFF(MUX2A2); MUX_OFF(MUX2A1); MUX_ON(MUX2A0); } if (rxdata[1]==NO3){ MUX_OFF(MUX2A2); MUX_ON(MUX2A1); MUX_OFF(MUX2A0); } if (rxdata[1]==NO4){ MUX_OFF(MUX2A2); MUX_ON(MUX2A1); MUX_ON(MUX2A0); } if (rxdata[1]==NO5){ MUX_ON(MUX2A2); MUX_OFF(MUX2A1); MUX_OFF(MUX2A0); } if (rxdata[1]==NO6){ MUX_ON(MUX2A2);

77
MUX_OFF(MUX2A1); MUX_ON(MUX2A0); } if (rxdata[1]==NO7){ MUX_ON(MUX2A2); MUX_ON(MUX2A1); MUX_OFF(MUX2A0); } if (rxdata[1]==NO8){ MUX_ON(MUX2A2); MUX_ON(MUX2A1); MUX_ON(MUX2A0); } } void main(void) { int8 cont=1; set_tris_a(0b00000011); set_tris_b(0b00000000); set_tris_c(0b00000000); // Programa Principal

// AN0, AN1 entradas e RA2,RA3,RA4,RA5 sadas // RB Todas sadas // RC0 Todas sadas // configura IN analog.do conversor A/D // configura clock interno para o ADC

setup_adc_ports( AN0_TO_AN1 ); setup_adc(ADC_CLOCK_INTERNAL); LED_ON(LED1ON); LED_OFF(LED2ENUM); LED_OFF(LED3USB); LED_OFF(LED4OUT1); LED_OFF(LED5OUT2); usb_init(); while (TRUE) { TesteUSB(); if(usb_enumerated()) {

// Inicializamos o USB // Loop Infinito // Testa a USB // Se o PicUSB est configurado

if (usb_kbhit(1)) { // Verifica se h algo no USB usb_get_packet(1,rxdata,5); //Captura os dados da USB e coloca //na varivel rxdata // sample if(rxdata[0]==SAMPLE) { TXAnalog(); } // led control if(rxdata[0]==LED_CONTROL) { if(rxdata[1]) LED_ON(LED4OUT1); else LED_OFF(LED4OUT1); if(rxdata[2]) LED_ON(LED5OUT2); else LED_OFF(LED5OUT2); } // Mux Control CH 1

78
if(rxdata[0]==MUX_CONTROL1) { MuxCH1(); } // Mux Control CH 2 if(rxdata[0]==MUX_CONTROL2) { MuxCH2(); } // PING - PONG if(rxdata[0]==PING) { send_buf[0] = PING; usb_put_packet(1,send_buf,1,USB_DTS_TOGGLE); } } } } }

ANEXO F Cdigo Fonte do Software

79

//==Cdigo Fonte do Software de Interface Grfica compilado no Delphi============ //===================Incio da Rotina MAIN============================== unit main; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, DXDraws, DXClass, ComCtrls, {draw,} ExtCtrls, Menus, Buttons, usb, draw; type TForm1 = class(TForm) DXDraw1: TDXDraw; GroupBox1: TGroupBox; led1_checkbox: TCheckBox; led2_checkbox: TCheckBox; DXTimer1: TDXTimer; GroupBox2: TGroupBox; en_canal1: TCheckBox; en_canal2: TCheckBox; onoff_button: TButton; Label1: TLabel; usb_led: TPanel; hold_button: TButton; GroupBox3: TGroupBox; hscale_bar1: TTrackBar; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; Label7: TLabel; Label2: TLabel; Label8: TLabel; Label9: TLabel; Label10: TLabel; Label11: TLabel; Label20: TLabel; Label21: TLabel; GroupBox4: TGroupBox; vscale_bar1: TTrackBar; Label12: TLabel; Label13: TLabel; Label14: TLabel; Label15: TLabel; Label16: TLabel; Label17: TLabel; Label18: TLabel; Label19: TLabel; hscale_bar2: TTrackBar; vscale_bar2: TTrackBar; procedure led_c(Sender: TObject); procedure DXTimer1Timer(Sender: TObject; LagCount: Integer); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure onoff_buttonClick(Sender: TObject); procedure FormResize(Sender: TObject); procedure FormCreate(Sender: TObject);

80
procedure hold_buttonClick(Sender: TObject); procedure hscale_bar2Change(Sender: TObject); procedure hscale2Change(Sender: TObject); procedure vscale_bar1Change(Sender: TObject); procedure vscale_bar2Change(Sender: TObject); private { Private declarations } public { Public declarations } end; main_thread = class(TThread) private { Private declarations } protected procedure Execute; override; end; var Form1: TForm1; th: main_thread; // escalas hscale1: double = 0.005; hscale2: double = 0.005; vscale1: double = 0.02; vscale2: double = 0.02; hscale_default: double = 0.005; vscale_default: double = 0.02; implementation {$R *.dfm} procedure TForm1.led_c(Sender: TObject); var led1, led2: integer; begin if led1_checkbox.Checked then led1:=1 else led1:=0; if led2_checkbox.Checked then led2:=1 else led2:=0; led(led1,led2); end; procedure TForm1.DXTimer1Timer(Sender: TObject; LagCount: Integer); begin if DXDraw1.CanDraw then DXDraw1.Flip; end; procedure main_thread.Execute; begin if hold and usb_connected then exit; while true do

81
begin if GetUSBData then begin UpdateDrawBuffer; ClearScreen; DrawData; end; Sleep(25); end; end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin DXTimer1.Enabled:=false; // th.Suspend; end; procedure TForm1.onoff_buttonClick(Sender: TObject); begin if not usb_connected then begin ShowMessage('Dispositivo no conectado ou no inicializado.'); exit; end; if onoff_button.Caption = 'ON' then begin onoff_button.Caption := 'OFF'; hold_button.Enabled:=true; DXTimer1.Enabled:=true; CleanDrawBuffer1; CleanDrawBuffer2; th.Resume; end else begin onoff_button.Caption := 'ON'; hold_button.Enabled:=false; DXTimer1.Enabled:=false; ClearScreen; DXDraw1.Flip; //th.Suspend; end; end; procedure TForm1.FormResize(Sender: TObject); begin DXDraw1.Flip; end; procedure TForm1.FormCreate(Sender: TObject); begin if StartUSB then begin th:=main_thread.Create(true); end else begin usb_connected := false; end;

82
ClearScreen; end; procedure TForm1.hold_buttonClick(Sender: TObject); begin if hold then begin DXTimer1.Enabled := true; hold := false; end else begin hold := true; DXTimer1.Enabled := false; end; end; procedure TForm1.hscale_bar2Change(Sender: TObject); begin CleanDrawBuffer1; case hscale_bar1.Position of 6: hscale1:=0.500; 5: hscale1:=0.200; 4: hscale1:=0.100; 3: hscale1:=0.050; 2: hscale1:=0.020; 1: hscale1:=0.010; 0: hscale1:=0.005; end; end; procedure TForm1.hscale2Change(Sender: TObject); begin CleanDrawBuffer2; case hscale_bar2.Position of 6: hscale2:=0.500; 5: hscale2:=0.200; 4: hscale2:=0.100; 3: hscale2:=0.050; 2: hscale2:=0.020; 1: hscale2:=0.010; 0: hscale2:=0.005; end; end; procedure TForm1.vscale_bar1Change(Sender: TObject); begin change_mux1(vscale_bar1.Position); end; procedure TForm1.vscale_bar2Change(Sender: TObject); begin change_mux2(vscale_bar2.Position); end; end. //===================Fim Rotina MAIN==================================== //===================Incio da Rotina USB================================= unit usb;

83
interface uses Classes, Windows, SysUtils, Dialogs, Graphics; Const MAXSIZE=64; MPUSB_FAIL=0; MPUSB_SUCCESS=1; MP_WRITE:DWORD=0; MP_READ:DWORD=1; MAX_NUM_MPUSB_DEV=127; SAMPLE = $00; LED_CONTROL = $01; MUX_CONTROL1 = $02; MUX_CONTROL2 = $03 N01 = $00 N02 = $01 N03 = $02 N04 = $03 N05 = $04 N06 = $05 N07 = $06 N07 = $07 PING = $05; type DWORD = LongInt; PCHAR8 = array[0..MAXSIZE] of char; PBYTE = array[0..MAXSIZE] of BYTE; PDWORD = array[0..MAXSIZE] of DWORD; PVOID = Pointer; UINT = Cardinal; usb_thread = class(TThread) private { Private declarations } protected procedure Execute; override; end; function _MPUSBGetDLLVersion():DWORD; stdcall;external 'mpusbapi.dll'; function _MPUSBGetDeviceCount(pVID_PID:PCHAR8):DWORD; stdcall;external 'mpusbapi.dll'; function _MPUSBOpen(instance:DWORD;pVID_PID:PCHAR8;pEP:PCHAR8;dwDir:DWORD;dwReserv ed:DWORD):THANDLE; stdcall;external 'mpusbapi.dll'; function _MPUSBRead(handle:THANDLE;var pData:PBYTE;dwLen:DWORD;var pLength:DWORD;dwMilliseconds:DWORD):DWORD; stdcall;external 'mpusbapi.dll'; function _MPUSBReadInt(handle:THANDLE;var pData:PBYTE;dwLen:DWORD;var pLength:PDWORD;dwMilliseconds:DWORD):DWORD; stdcall;external 'mpusbapi.dll'; function _MPUSBWrite(handle:THANDLE;pData:PBYTE;dwLen:DWORD;var pLength:DWORD;dwMilliseconds:DWORD):DWORD; stdcall;external 'mpusbapi.dll'; function _MPUSBClose(handle:THANDLE):DWORD; stdcall;external 'mpusbapi.dll'; var vid_pid:PCHAR8='vid_04d8&pid_2525'; // VID e PID out_pipe:PCHAR8='\MCHP_EP1'; in_pipe:PCHAR8='\MCHP_EP1';

84
usb_buffer1: array[1..320] of byte; usb_buffer2: array[1..320] of byte; usb_connected: boolean = false; function StartUSB: boolean; function GetUSBData: boolean; procedure led(led1, led2: byte); procedure change_mux1(value: byte); procedure change_mux2(value: byte); implementation uses main, draw; var send_buffer, recv_buffer: PBYTE; myOutPipe:THANDLE; myInPipe:THANDLE; tmp: string; //=============Inicia a USB============================================== function StartUSB: boolean; var ReceiveLength, SentLength:DWORD; begin Form1.usb_led.Color := clRed; usb_connected := false; result := false; if (_MPUSBGetDeviceCount(vid_pid)=0) then exit; myOutPipe:= _MPUSBOpen(0,vid_pid,out_pipe,MP_WRITE,0); myInPipe:= _MPUSBOpen(0,vid_pid,out_pipe,MP_READ,0); if ((myOutPipe = INVALID_HANDLE_VALUE) or (myInPipe = INVALID_HANDLE_VALUE)) then exit; // testa a conexo - envia ping send_buffer[0] := PING; _MPUSBWrite(myOutPipe,send_buffer,1,SentLength,1000); tmp:=IntToStr(SentLength); _MPUSBRead(myInPipe,recv_buffer,MAXSIZE,ReceiveLength,1000); if (ReceiveLength<>1) or (recv_buffer[0]<>PING) then exit; _MPUSBClose(myOutPipe); _MPUSBClose(myInPipe); myInPipe:= INVALID_HANDLE_VALUE; myOutPipe:=INVALID_HANDLE_VALUE; Form1.usb_led.Color:=clGreen; usb_connected := true; Form1.led1_checkbox.Enabled:=true; Form1.led2_checkbox.Enabled:=true; result := true; end;

85

//=============Controla a sada Digital (LEDs)=============================== procedure led(led1, led2: byte); var SentLength: DWORD; begin myOutPipe:= _MPUSBOpen(0,vid_pid,out_pipe,MP_WRITE,0); myInPipe:= _MPUSBOpen(0,vid_pid,out_pipe,MP_READ,0); if ((myOutPipe = INVALID_HANDLE_VALUE) or (myInPipe = INVALID_HANDLE_VALUE)) then begin ShowMessage('error led control'); exit; end; send_buffer[0] := LED_CONTROL; send_buffer[1] := led1; send_buffer[2] := led2; if _MPUSBWrite(myOutPipe,send_buffer,3,SentLength,1000)<>1 then ShowMessage('error led control'); tmp:=IntToStr(SentLength); _MPUSBClose(myOutPipe); _MPUSBClose(myInPipe); myInPipe:= INVALID_HANDLE_VALUE; myOutPipe:=INVALID_HANDLE_VALUE; end; //============= Captura os dados da USB =============================== function GetUSBData: boolean; var i, c, buf1, buf2: integer; ReceiveLength, SentLength:DWORD; begin result:=false; myOutPipe:= _MPUSBOpen(0,vid_pid,out_pipe,MP_WRITE,0); myInPipe:= _MPUSBOpen(0,vid_pid,out_pipe,MP_READ,0); if ((myOutPipe = INVALID_HANDLE_VALUE) or (myInPipe = INVALID_HANDLE_VALUE)) then begin ShowMessage('error get usb data 1'); exit; end; // solicita os dados send_buffer[0] := SAMPLE; if _MPUSBWrite(myOutPipe,send_buffer,1,SentLength,1000)<>1 then begin ShowMessage('error get usb data 2'); exit; end; tmp:=IntToStr(SentLength); // le os dados buf1 := 1; buf2 := 1;

86
for c:=1 to (2*length(usb_buffer1)div length(recv_buffer)) do begin if(_MPUSBRead(myInPipe, recv_buffer, MAXSIZE, ReceiveLength, 1000)<>1)then begin ShowMessage('error get usb data 3'); exit; end; tmp:=IntToStr(ReceiveLength); if ReceiveLength<>0 then result:=true; for i:=1 to ReceiveLength do begin if ((i mod 2)=0) then //par begin usb_buffer2[buf2] := recv_buffer[i-1]; inc(buf2); end else begin // impar usb_buffer1[buf1] := recv_buffer[i-1]; inc(buf1); end; end; end; _MPUSBClose(myOutPipe); _MPUSBClose(myInPipe); myInPipe:= INVALID_HANDLE_VALUE; myOutPipe:=INVALID_HANDLE_VALUE; end; procedure change_mux1(value: byte); var SentLength: DWORD; begin myOutPipe:= _MPUSBOpen(0,vid_pid,out_pipe,MP_WRITE,0); myInPipe:= _MPUSBOpen(0,vid_pid,out_pipe,MP_READ,0); if ((myOutPipe = INVALID_HANDLE_VALUE) or (myInPipe = INVALID_HANDLE_VALUE)) then begin ShowMessage('error mux control'); exit; end; {send_buffer[0] := MUX_CONTROL1; case value of 0: send_buffer[1] := N01; // 0.002V/div 1: send_buffer[1] := N02; // 0.005V/div 2: send_buffer[1] := N03; // 0.1V/div 3: send_buffer[1] := N04; // 0.2V/div 4: send_buffer[1] := N05; // 0.5V/div 5: send_buffer[1] := N06; // 1V/div 6: send_buffer[1] := N07; // 2V/div 7: send_buffer[1] := N08; // 5V/div end; } if _MPUSBWrite(myOutPipe,send_buffer,3,SentLength,1000)<>1 then

87
ShowMessage('error mux control'); tmp:=IntToStr(SentLength); _MPUSBClose(myOutPipe); _MPUSBClose(myInPipe); myInPipe:= INVALID_HANDLE_VALUE; myOutPipe:=INVALID_HANDLE_VALUE; end; procedure change_mux2(value: byte); var SentLength: DWORD; begin myOutPipe:= _MPUSBOpen(0,vid_pid,out_pipe,MP_WRITE,0); myInPipe:= _MPUSBOpen(0,vid_pid,out_pipe,MP_READ,0); if ((myOutPipe = INVALID_HANDLE_VALUE) or (myInPipe = INVALID_HANDLE_VALUE)) then begin ShowMessage('error mux control'); exit; end; {send_buffer[0] := MUX_CONTROL2; case value of 0: send_buffer[1] := N01; // 0.002V/div 1: send_buffer[1] := N02; // 0.005V/div 2: send_buffer[1] := N03; // 0.1V/div 3: send_buffer[1] := N04; // 0.2V/div 4: send_buffer[1] := N05; // 0.5V/div 5: send_buffer[1] := N06; // 1V/div 6: send_buffer[1] := N07; // 2V/div 7: send_buffer[1] := N08; // 5V/div end; } if _MPUSBWrite(myOutPipe,send_buffer,3,SentLength,1000)<>1 then ShowMessage('error mux control'); tmp:=IntToStr(SentLength); _MPUSBClose(myOutPipe); _MPUSBClose(myInPipe); myInPipe:= INVALID_HANDLE_VALUE; myOutPipe:=INVALID_HANDLE_VALUE; end; //=============Loop Infinito para leitura do USB=============================== procedure usb_thread.Execute; begin {while true do begin GetUSBData; Sleep(10); end;} end; end. //===================Fim da Rotina USB=================================== //===================Incio da Rotina DRAW================================

88
unit draw; interface uses Graphics, Windows, Classes, SysUtils, Dialogs; type draw_thread = class(TThread) private // Private declarations protected procedure Execute; override; end; procedure UpdateDrawBuffer; procedure DrawData; procedure ClearScreen; procedure CleanDrawBuffer1; procedure CleanDrawBuffer2; var hold: boolean = false; next_start_h_scale: integer = 0; implementation uses main, usb; var draw_buffer1: array[1..320] of smallint; // guarda os pontos j lidos draw_buffer2: array[1..320] of smallint; draw_buffer1_index: integer = 1; draw_buffer2_index: integer = 1; procedure draw_thread.Execute; begin {while true do begin UpdateDrawBuffer; ClearScreen; DrawData; Form1.DXDraw1.Flip; end;} end; //=================Esvazio buffer do desenho 1=============================== procedure CleanDrawBuffer1; var i: integer; begin for i:=1 to length(draw_buffer1) do begin draw_buffer1[i] := -1; draw_buffer2[i] := -1; end; end; //=================Esvazio buffer do desenho 2===============================

89
procedure CleanDrawBuffer2; var i: integer; begin for i:=1 to length(draw_buffer2) do begin draw_buffer1[i] := -1; draw_buffer2[i] := -1; end; end; //=================Atualiza o buffer do desenho============================== procedure UpdateDrawBuffer; var usb_buf, draw_buf, i: integer; begin ///////////// // canal 1 // ///////////// draw_buf:=-1; // acha o inicio do buffer 1 for i:=1 to length(draw_buffer1) do if draw_buffer1[i]=-1 then begin draw_buf:=i; break; end; // buffer cheio, apaga if draw_buf=-1 then begin CleanDrawBuffer1; draw_buf:=1; end; // skip := hscale/hscale_default; // copia todo o USB buffer usb_buf := 1; while true do//draw_buf <= length(draw_buffer1) do begin if usb_buf > length(usb_buffer1) then break; if draw_buf > length(draw_buffer1) then begin CleanDrawBuffer1; draw_buf:=1; end; draw_buffer1[draw_buf] := usb_buffer1[usb_buf]; draw_buffer2[draw_buf] := usb_buffer2[usb_buf]; inc(draw_buf); inc(usb_buf); end; end; //=================Limpa a tela e desenha os eixos=========================== procedure ClearScreen;

90
var hdivs, vdivs: integer; // numero de divisoes horizontais e verticais i: integer; begin vdivs := 10; hdivs := 10; if not Form1.DXDraw1.CanDraw then exit; // pinta a tela de branco Form1.DXDraw1.Surface.Fill( Form1.DXDraw1.Surface.ColorMatch(rgb(255,255,255)) ); Form1.DXDraw1.Surface.Canvas.Pen.Color:=clGray; Form1.DXDraw1.Surface.Canvas.Pen.Style := psdot; // desenha as escalas verticais do canal 1 for i := 1 to vdivs-1 do with Form1.DXDraw1.Surface.Canvas do begin MoveTo(i*(Form1.DXDraw1.Width)div(vdivs), 0); LineTo(i*(Form1.DXDraw1.Width)div(vdivs), Form1.DXDraw1.Height); end; // desenha as escalas horizontais do canal 1 for i := 1 to hdivs-1 do with Form1.DXDraw1.Surface.Canvas do begin MoveTo(0, i*(Form1.DXDraw1.Height)div(hdivs)); LineTo(Form1.DXDraw1.Width, i*(Form1.DXDraw1.Height)div(hdivs)); end; Form1.DXDraw1.Surface.Canvas.Pen.Color := clBlack; Form1.DXDraw1.Surface.Canvas.Pen.Style := pssolid; // eixo vertical Form1.DXDraw1.Surface.Canvas.Pen.Width:=1; Form1.DXDraw1.Surface.Canvas.MoveTo(Form1.DXDraw1.Width div 2, 0); Form1.DXDraw1.Surface.Canvas.LineTo(Form1.DXDraw1.Width div 2, Form1.DXDraw1.Height); // eixo horizontal Form1.DXDraw1.Surface.Canvas.MoveTo(0, Form1.DXDraw1.Height div 2); Form1.DXDraw1.Surface.Canvas.LineTo(Form1.DXDraw1.Width, Form1.DXDraw1.Height div 2); // mini divises - horizontal for i:=0 to hdivs*5 do begin Form1.DXDraw1.Surface.Canvas.MoveTo(i*Form1.DXDraw1.Width div hdivs div 5, (Form1.DXDraw1.Height div 2) - 3); Form1.DXDraw1.Surface.Canvas.LineTo(i*Form1.DXDraw1.Width div hdivs div 5, (Form1.DXDraw1.Height div 2) + 3); end; // mini divises - vertical for i:=0 to vdivs*5 do begin

91
Form1.DXDraw1.Surface.Canvas.MoveTo((Form1.DXDraw1.Width div 2) - 3, i*Form1.DXDraw1.Height div vdivs div 5); Form1.DXDraw1.Surface.Canvas.LineTo((Form1.DXDraw1.Width div 2) + 3, i*Form1.DXDraw1.Height div vdivs div 5); end; end; //=================Desenha o Canal1================================== procedure DrawData; var i, x, y, h_factor: integer; begin // muda a cor do traado para verde Form1.DXDraw1.Surface.Canvas.Pen.Color := clGreen; Form1.DXDraw1.Surface.Canvas.Pen.Width := 2; if not Form1.DXDraw1.CanDraw then exit; ///////////// // canal 1 // ///////////// h_factor := round(hscale1/hscale_default); i:=1; if Form1.en_canal1.Checked then while i <= (length(draw_buffer1) div h_factor) do begin // se chegou no fim do buffer, sai do loop if draw_buffer1[i] = -1 then break; x := (i-1)*(Form1.DXDraw1.Width div (length(draw_buffer1) div h_factor)); y := draw_buffer1[i-1]; y := round((y/255)*Form1.DXDraw1.Height); // condicionamento do sinal Form1.DXDraw1.Surface.Canvas.MoveTo(x,y); x := (i)*(Form1.DXDraw1.Width div (length(draw_buffer1) div h_factor)); y := draw_buffer1[i]; y := round((y/255)*Form1.DXDraw1.Height); // condicionamento do sinal Form1.DXDraw1.Surface.Canvas.LineTo(x,y); inc(i); end; Form1.DXDraw1.Surface.Canvas.Pen.Color := clBlue; //=================Desenha o Canal2=================================== h_factor := round(hscale2/hscale_default); i:=1; if Form1.en_canal2.Checked then while i <= (length(draw_buffer2)/h_factor) do begin // se chegou no fim do buffer, sai do loop if draw_buffer2[i] = -1 then break;

92
x := (i-1)*(Form1.DXDraw1.Width div (length(draw_buffer2) div h_factor)); y := draw_buffer2[i-1]; y := round((y/255)*Form1.DXDraw1.Height); // condicionamento do sinal Form1.DXDraw1.Surface.Canvas.MoveTo(x,y); x := (i)*(Form1.DXDraw1.Width div (length(draw_buffer1) div h_factor)); y := draw_buffer2[i]; y := round((y/255)*Form1.DXDraw1.Height); // condicionamento do sinal Form1.DXDraw1.Surface.Canvas.LineTo(x,y); inc(i); end; end; end. //==================Fim da Rotina DRAW================================

You might also like