UNIVERSIDADE FEDERAL DO PARANÁ

KLEITON CHOCHI ZEMBOVICI MARCELO GONÇALVES FRANCO

DISPOSITIVO PARA AQUISIÇÃO DE SINAIS E CONTROLE DIGITAL VIA USB

Curitiba – PR 2009

UNIVERSIDADE FEDERAL DO PARANÁ
KLEITON CHOCHI ZEMBOVICI MARCELO GONÇALVES FRANCO

DISPOSITIVO PARA AQUISIÇÃO DE SINAIS E CONTROLE DIGITAL VIA USB

Projeto de Graduação na área de Engenharia Elétrica apresentado à Universidade Federal do Paraná, como requisito parcial para a obtenção do título de Engenheiro Eletricista. Orientador: Eduardo Parente Ribeiro.

Curitiba – PR 2009

1

AGRADECIMENTOS
Agradecemos a todos que nos incentivaram a fazer este trabalho, trazendo-nos força e confiança para que não desanimássemos em nenhum instante durante a execução deste trabalho. Agradecemos ao profo. Dr. Eduardo Parente Ribeiro do Departamento de Engenharia Elétrica da Universidade Federal do Paraná pela sugestão do tema e pelo apoio dado sempre que precisamos, orientando o projeto e indicando fontes de pesquisas para o desenvolvimento deste. Agradecemos também ao profo. M.Sc. Ademar Luiz Pastro e ao profo. Dr. Gideon Villar Leandro do Departamento de Engenharia Elétrica da Universidade Federal do Paraná pelas críticas e sugestões dadas na apresentação parcial do projeto. Agradecemos ao nosso grande amigo Luis pela força e ajuda durante o desenvolvimento do software, e ao Eng. Jefferson da Henry pelo empréstimo dos microcontroladores. Também agradecemos aos fabricantes de componentes MAXIM e MICROCHIP por terem nos disponibilizado amostras dos componentes, sem os quais não conseguiríamos realizar este projeto. Não poderíamos esquecer de agradecer às nossas famílias e amigos, que estiveram sempre ao nosso lado e que compreenderam nossa ausência 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 dedicação dados a este trabalho, na certeza de que estaríamos fazendo o possível para o sucesso deste projeto.

utilizado para captar sinais. taxa de amostragem variável. e pela comunicação com o computador. Palavras-Chave Osciloscópio USB PIC18F2550 Comunicação USB . pela seleção do ganho do AmpOp através do controle do MUX.2 RESUMO O dispositivo para aquisição de sinais e controle digital apresentado neste trabalho é um protótipo que se assemelha a um osciloscópio digital. O software da interface gráfica foi elaborado em Delphi. O firmware do microcontrolador foi elaborado em linguagem C. oito escalas de amplitude e controle digital para dois dispositivos externos. O dispositivo possui dois canais de 8 bits independentes. dois multiplexadores para seleção deste ganho e um microcontrolador. O hardware consiste de um estágio amplificador de dois canais e com ganho variável. digitalizá-los e enviá-los para o computador através da comunicação USB. responsável pelo tratamento do sinal. apresentando uma tela que lembra a de um osciloscópio convencional.

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

4 LISTA DE ABREVIATURAS E SIGLAS AMPOP BNC CAD CI’s CMOS EEPROM GPR HID ICSP kbps kSPS LSB LVP MAC Mbps MMC MSB SCLK MSPS PIC ROM SFR Register) SMD Componente de Montagem em Superfície (Superficial Monting Device) Amplificador Operacional Conector Naval Britânico (British Naval Connector) Conversor Analógico Digital Circuitos Integrados semicondutor metal-óxido complementar (complementary Memória Programável e Apagável Eletricamente metal oxide semiconductor) (Electrically Erasable Programmable Read Only Memory) Registrador de Propósito Geral (General Purpose Register) Dispositivo de Interface Humana (Human Interface Device) Programação 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) Programação em Baixa Tensão (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) Relógio da Serial (Serial Clock) Mega-amostras por Segundo (Mega-Samples per Second ) Controlador de Interface Programável (Programmable Interface Controller) Memória Somente de Leitura (Read Only Memory) Registrador de Função Especial (Special Function scheduled Management Command) .

5 SRAM TDM Multiplexing) TTL USB WUSB Lógica Transístor-Transístor (Transistor-Transistor Logic) Barramento Serial Universal (Universal Serial Bus) Wireless USB Memória Estática de Acesso Randônico (Static Random Access Memory) Multiplexação por Divisão de Tempo (Time division .

.........................48 FIGURA 241 .................................................. PROGRAMMER V1......................................42 FIGURA 18 – LAYOUT DOS COMPONENTES DAS PLACAS DE CORREÇÃO ...................................................................20 FIGURA 4 – TIPOS DE CONECTORES USB......................51 .................................................................................................................................................35 FIGURA 15 – LAYOUT DAS TRILHAS..........................33 FIGURA 13: DIAGRAMA DO DISPOSITIVO COM COMUNICAÇÃO USB E CONVERSOR ANALÓGICO/DIGITAL....31 FIGURA 11 – CONVERSOR ANALÓGICO DIGITAL..............................20 FIGURA 3 – TIPOS DE CONECTORES USB...........................................................................21 FIGURA 6 – TIPOS DE ADAPTADORES USB.....23 FIGURA 9 – CORTE TRANSVERSAL DO CABO USB......................23 FIGURA 10 – MODELO DE HUB USB........................................44 FIGURA 21 – VISTA SUPERIOR ESQUERDA DA CAIXA.................33 FIGURA 12 – CIRCUITO BÁSICO DE UM AMPOP.........................................40 FIGURA 16 – LAYOUT DOS COMPONENTES................................34 FIGURA 14: DIAGRAMA DE BLOCOS DO CONVERSOR ANALÓGICO/DIGITAL...............................................................19 FIGURA 2 – TOPOLOGIA DO WIRELESS USB................................22 FIGURA 7 – TIPOS DE ADAPTADORES USB.........................................................................................................................................43 FIGURA 20 – VISTA SUPERIOR DA CAIXA..........6 LISTA DE FIGURAS FIGURA 1 – TOPOLOGIA USB.................................0............44 FIGURA 22 – VISTA SUPERIOR DIREITA DA CAIXA.......................ESQUEMA ELETRÔNICO DO PROGRAMADOR ...................................MICROCONTROLADOR 18F2550 ...49 FIGURA 25 – GRAVADOR DO PIC...............41 FIGURA 17 – LAYOUT DAS TRILHAS DAS PLACAS DE CORREÇÃO...-43 FIGURA 19 – PROTÓTIPO NO MONTADO NO INTERIOR DA CAIXA.......................1....................................................................................................................................22 FIGURA 8 – TIPOS DE ADAPTADORES USB.............45 FIGURA 23 – TELA DE INTERFACE DO PCWHD.................21 FIGURA 5 – TIPOS DE CONECTORES USB..............................................................................50 FIGURA 27 ........49 FIGURA 26 – TELA DE INTERFACE DO PICPGM DEVELOP.............5................

.................................52 FIGURA 29 – TELA DE INTERFACE GRÁFICA DO BORLAND DELPHI SECOND EDITION VERSÃO 7...2.............................61 ........7 FIGURA 28 – FLUXOGRAMA DO FIRMWARE..........................................60 FIGURA 31 – TELA DE INTERFACE GRÁFICA DO PROGRAMA FINAL................55 FIGURA 30 – FLUXOGRAMA DO PROGRAMA EM DELPHI..........................

............................................46 QUADRO 3: RELAÇÃO DE CIRCUITOS INTEGRADOS UTILIZADOS.46 QUADRO 5 – PINOS UTILIZADOS NO PIC..........................52 .................................8 LISTA DE QUADROS QUADRO 1: RELAÇÃO DE RESISTORES UTILIZADOS.................46 QUADRO 4: RELAÇÃO DOS DEMAIS COMPONENTES UTILIZADOS.....45 QUADRO 2: RELAÇÃO DE CAPACITORES UTILIZADOS.............

..............................................................................................9 SUMÁRIO AGRADECIMENTOS...........................................................................................................................9 1............................................................... HOST USB.............16 2.......26 2............................ WIRELESS USB – WUSB......................................................1............1................ ENUMERAÇÃO............................................... TIPOS DE CONECTORES E ADAPTADORES USB .....14 2.....27 2..........................................1...... MODELO DE FLUXO DE DADOS.............. OBJETIVO GERAL................................................1...................29 2................ OSCILOSCÓPIO.....1...................1................1............... PROTOCOLO USB.......................................24 2...................1.....................1......................1..........................12................... CABO USB.....................1...............................................1............................8 SUMÁRIO............. DIGITALIZAÇÃO DE SINAIS..................2............... AMPLIFICAÇÃO DE SINAIS........................11 1............................................. OBJETIVO ESPECÍFICO..................................2................. PRINCIPAIS CARACTERÍSTICAS DO USB..............2 ABSTRACT.......................... INTRODUÇÃO.......9..10............................12 1................................... OBJETIVO.............18 2.....................2...............................................6 LISTA DE QUADROS.......................................4..........17 2........................................................................15 2.....................12 2............................................7........ CONCEITOS......................................................................... PRINCIPAIS CONCEITOS....................1............................................14 2.................................................................................14.......................... JUSTIFICATIVA.... DISPOSITIVOS USB...................5.......2......1.....................................1........8.............1.....11 1..................................................... ANÁLISE DOS PRINCIPAIS COMPONENTES DO CIRCUITO.............11............. HISTÓRICO...................13.........................................34 3..........12 1.....................3 LISTA DE ABREVIATURAS E SIGLAS.......................................................................................................................................................................1 RESUMO........14 2..................25 2......................32 2....................1........................23 2.................1.6.........................1.........1..........1................20 2....35 ....... ARQUITETURA DO PROTÓTIPO....... USB...................4 LISTA DE FIGURAS.....................................3.................17 2....33 3.................... TOPOLOGIA USB........................................................1....1.....................

..................................................69 ANEXO B – DIAGRAMA ESQUEMÁTICO DO CIRCUITO.......73 ANEXO E – CÓDIGO FONTE DO FIRMWARE...................................................................1.....................................................................1......................................................63 4.........74 ANEXO F – CÓDIGO FONTE DO SOFTWARE......1........ ESCOLHA DO AMPLIFICADOR OPERACIONAL......................................... ESCOLHA DO MULTIPLEXADOR...........................1.............................. ESCOLHA DO MICROCONTROLADOR............................................................................................65 REFERÊNCIAS PARA PESQUISA........................................................64 REFERÊNCIAS BIBLIOGRÁFICAS.....................78 .................3..72 ANEXO D – DIAGRAMA ESQUEMÁTICO DA FONTE EXTERNA...................10 3.....................36 3...... PERSPECTIVAS.........CRONOGRAMA DO PROJETO......................38 4.......1.........2................................37 3................ CONCLUSÕES..........................70 ANEXO C – DIAGRAMA ESQUEMÁTICO DO CIRCUITO DE TRATAMENTO DE SINAIS.......................................66 ANEXO A ....

INTRODUÇÃO A medição e a análise de sinais são de fundamental importância para muitos profissionais. ou ainda os analisadores de espectro. maior será o custo do equipamento.11 1. de mais baixo custo. o usuário pode optar pelo equipamento que satisfaça sua necessidade. precisão. O dispositivo para aquisição de sinais e controle digital via USB é um dispositivo que captura os sinais a serem analisados através de pontas de prova conectadas a entradas do tipo BNC. e envio destes através de conexão USB para um . Quanto maior a complexidade do equipamento. quantidade de recursos e ainda a tecnologia utilizada. Cada um dos equipamentos tem sua aplicação.1. onde. Juntando a eletrônica e os recursos do computador. dependendo das necessidades de precisão. o sinal é então mostrado em uma tela. apresentado em 2007 [1]. principalmente na área de eletro-eletrônica. similar a de um osciloscópio comum. Esta medição pode ser feita de diversas maneiras. Objetivo O objetivo deste projeto é desenvolver um dispositivo para aquisição e tratamento de sinais. Este projeto foi baseado no trabalho de conclusão de curso dos graduandos Leandro Silva Piecarz e Walter Luciano Espíndola. por meio de uma interface gráfica. seja um simples multímetro de bolso com seus recursos limitados ou um sofisticado osciloscópio de bancada com suas várias funções especiais. Muitos são os dispositivos existentes para realizar medições em circuitos elétricos ou eletrônicos. porém. resolveu-se desenvolver um dispositivo para análise de sinais. semelhante a um osciloscópio. confiabilidade. trata o sinal e envia através de uma conexão USB para um microcomputador. Partindo da idéia base buscou-se aprimorar e evoluir o dispositivo apresentado por estes formandos de 2007. 1. confiabilidade e custo.

com taxa de amostragem pré-definido no firmware em 32kSPS e oito escalas de amplitude variando de 0.1.12 computador que. dentre as principais pode-se citar os seguintes: • A utilização dos conhecimentos em eletrônica analógica e digital para desenvolver o circuito. previamente carregado com um software. Também incorporado ao projeto tem-se um controlador de dispositivos através do computador.2. Confeccionar o protótipo do dispositivo. com saídas digitais para os equipamentos a serem controlados. visando custo baixo e facilidade de uso. Desenvolver uma interface gráfica para que os sinais sejam mostrados na tela do computador. 1.1. 1.2. .1. 1. Objetivo geral O objetivo geral deste projeto é desenvolver um hardware e um software na área de instrumentação e controle. • • • Desenvolver um firmware para a comunicação via USB e digitalização do sinal. voltado para a medição de sinais e o controle de dispositivos externos. Justificativa Várias são as motivações para o desenvolvimento deste projeto. mostrará os sinais a serem analisados na tela. • Objetivo específico Projetar um circuito eletrônico para a aquisição de sinais com dois canais de oito bits.02V a 25V.

visto que esta parte prática é extremamente apreciada pelos membros da equipe. adequando o produto às normas e evoluindo o protótipo com as possíveis correções e sugestões. • O desafio de desenvolver uma interface gráfica no computador. tendo então que estudar e aprender mais sobre isto. sendo que nenhum dos membros da equipe tinha conhecimentos aprofundados no assunto. • A possibilidade futura de comercialização.13 • A possibilidade de confeccionarmos a placa. .

2cm o que facilita a leitura dos sinais analisados.1.14 2. CONCEITOS Nesta parte do trabalho será apresentado um breve resumo de conceitos necessários para o entendimento da seqüência do projeto. Para realizar a captura dos sinais se faz necessário o uso de ponteiras de prova adequadas para o modelo de osciloscópio usado. 2. Serão abordados conceitos básicos sobre osciloscópios e suas principais funções. Também serão abordados os temas de digitalização e amplificação de sinais. Geralmente essas ponteiras são atenuadoras com escalas de atenuação de 1:1. Um osciloscópio pode ser usado para determinar diretamente o período ou a tensão de um sinal. comunicação via porta USB com suas principais características e protocolos. As funções mais comuns encontradas nos osciloscópios são: .1. contínuos ou alternados. Os sinais captados pelo osciloscópio são geralmente mostrados em uma tela retangular de tamanho 10cmx8cm com divisões de 1cm² e. Principais Conceitos Osciloscópio Osciloscópio é basicamente um dispositivo de visualização gráfica que mostra sinais. Os osciloscópios podem ser analógicos ou digitais. determinar indiretamente a freqüência de um sinal ou ainda para medir a diferença de fase entre dois sinais periódicos.1. resposta em freqüência com escalas de 20MHz a 300MHz e conexão do tipo BNC. nos eixos X e Y cada quadrado ainda possui subdivisões de 0. As escalas de atenuação e resposta em freqüência dependem do modelo da ponteira. normalmente com uma ou duas entradas de sinal e que permitem a visualização dos canais separadamente ou simultaneamente. bem como dispositivos que usam este tipo de comunicação. elétricos no tempo. 1:10 ou 1:100. 2.

Para dois canais. • ADD – mostra a soma dos sinais presentes nos canais 1 e 2. CH2 – mostra apenas o sinal do canal 2 . sua versatilidade. Deste modo a sequência de pequenos traços é percebida como uma linha contínua. . 2. [6]. USB Diversas características. No entanto. em alguns modelos de osciloscópios ainda podemos ter essa seleção da escala de tempo em separado para cada um dos canais. pode-se observar um traço descontínuo. Para que a atlernância não seja perceptível a varredura deve apresentar um período inferior a 1/n da persistência da retina do olho humano. fazem do USB uma interface perfeita para efetuar comunicação com os mais diversos periféricos. sua facilidade de uso e sua confiabilidade. ALT – mostra alternadamente varreduras completas de cada um dos canais. como sua velocidade de transmissão. A comutação efetua-se a elevada freqüência. desde um mouse até uma câmera digital. de forma a garantir que a distância entre traços consecutivos seja inferior ao diâmetro da mancha luminosa. • CHOP – a apresentação dos dois canais é efetuada em uma única varredura completa do feixe de elétrons por partilha de tempo.15 • • • CH1 – mostra apenas o sinal do canal 1. 100kHz. O ajuste da escala de amplitude é independente para cada um dos canais e o ajuste da escala de tempo é comum aos dois canais.1. um período equivalente a 50Hz é suficiente. onde n é o número de canais amostrados. inclusive permitindo a leigos instalar o seu próprio periférico no seu computador pessoal. por exemplo. se a freqüência de varredura for numa freqüência mais baixa. Também encontramos em um osciloscópio botões para seleção de escalas de tempo e de amplitude do sinal.2. [7] e [8].

chamado USB On-The-Go.5 Mbps) e Full-Speed (12 Mbps).x. No entanto. o “Windows 98 Second Edition”. E em maio de 2005. denominada Certified Wireless USB (ou.1 do padrão USB.2. Em setembro de 1998 foi lançada a versão 1. que introduziu uma nova velocidade de transferência: Hi-Speed (480 Mbps). foi lançado um suplemento para o USB 2.16 2. Wireless USB). Em dezembro de 2001. e o suporte técnico desta versão ainda possuía muitos erros.0 do padrão USB foi lançada em janeiro de 1996. que exige a conexão do periférico a um computador.0. Histórico A versão 1. simplesmente. Por volta de 1998. no segundo semestre de 1996. permitiram que o USB se tornasse uma interface bastante popular. que permitiu a conexão direta entre periféricos. que permite que a transmissão USB seja realizada sem fios. Com o aumento na popularidade do USB 1. ele só se tornou disponível para computadores pessoais com o lançamento da versão “OEM Service Release 2” do Windows 95.1. O seu uso ainda era muito limitado. Este valor não foi escolhido por acaso: pesquisas mostraram que para uma velocidade de transmissão possibilitar compatibilidade reversa com as velocidades anteriores. chamadas Low-Speed (1. ao contrário da implementação padrão. ela deveria ser 40 vezes maior do que a Full Speed.0 do padrão USB. que corrigiu alguns erros da anterior. tornou-se aparente a necessidade de se aumentar a velocidade do barramento. Esta nova velocidade tornou o USB mais atrativo para periféricos como dispositivos de armazenamento e impressoras. foi lançado em abril de 2000 a versão 2. [2]. visto que não havia muitos periféricos que utilizavam este barramento.x) permitiam duas velocidades. completou-se a especificação técnica de outra extensão do USB. e o lançamento do Windows 98 e de sua versão subseqüente. Visto isso.1. a quantidade de periféricos desenvolvidos com o padrão USB havia aumentado muito. Ambas as versões (citadas em conjunto como USB 1. .

[2]. Existem quatro tipos básicos de pacote utilizados neste protocolo: • Pacotes MMC (Micro-scheduled Management Command – Comando de Gerenciamento Microescalonado): são pacotes de controle da transmissão de rádio.4. . que é a taxa básica de sinalização da camada física. Estes pacotes endereçam todos os dispositivos da rede WUSB e são transmitidos utilizando encapsulamento seguro de pacotes. diretamente ou através de hubs USB. Podem ser transmitidos a qualquer taxa de bits que seja permitida pela implementação.1.3.1. são parte importante do protocolo. Devem ser transmitidos sempre pelo host da rede e à taxa de bits mais confiável do protocolo. • Pacotes de notificação: podem ser transmitidos apenas por dispositivos e são utilizados para carregar informações de notificação específicas para o host. e por isso devem ser transmitidos. Wireless USB – WUSB O WUSB utiliza formatos de pacotes definidos na subcamada MAC (Media Access Control – Controle de Acesso ao Meio) da camada enlace. Transmitidos sempre pelos dispositivos da rede WUSB.17 2. Principais características do USB O USB tem como principais características as seguintes: • • O computador atua como um host. assim como os pacotes MMC. • Pacotes de “handshake”: são pacotes pequenos que indicam sucesso das transações. 2. • Pacotes de dados: estes pacotes podem ser transmitidos tanto por um host como por um dispositivo e carregam dados específicos da aplicação. à taxa de bits mais confiável do mesmo. Podem ser conectados ao host até 127 dispositivos.

2. Um hub típico pode possuir 2. Um dispositivo (periférico) pode ainda ser um dispositivo composto. .18 • Cabos individuais USB podem ter até 5 metros. • Os dispositivos USB são hot-swappable (conectáveis "a quente"). [3].0. há um hub e cada ponto é um dispositivo que se conecta a uma porta de um hub. ou seja. • Os diversos dispositivos USB podem ser colocados no modo sleep (hibernar) pelo computador host. os dispositivos podem ficar até 30 metros de distância do host (o equivalente a seis cabos). quando o computador entrar no modo de economia de energia. um único PC (root) pode se conectar a vários periféricos (partes que provêem funções ao sistema) e ainda. Os hubs podem ter suas próprias fontes de energia para fornecer energia aos dispositivos conectados a ele. 4 ou 7 portas.5. com hubs.1. Neste tipo de topologia. Um cabo USB possui dois fios para energia (+5 volts e o fio terra) e um par trançado para a condução dos dados. o barramento possui uma taxa máxima de transferência de dados de 480 Mbps. • • • • Com o USB 2. Topologia USB O barramento USB possui uma topologia da forma de estrela em camadas (tiered star). [2]. Nos cabos de energia. definidos como uma classe especial de dispositivos no USB). [4] e [5]. o computador poderá fornecer até 500 mA de energia a 5 volts. a hubs (pontos de conexão. Os dispositivos de baixa-potência (como o mouse) poderão puxar a energia diretamente do barramento. que por sua vez conectam outros periféricos. No centro de cada estrela. Os dispositivos de altapotência (como impressoras) possuem fonte própria de alimentação e exigem mínima energia do barramento. podem ser conectados e desconectados a qualquer momento.

TDM). As conexões entre um host e um dispositivo lógico são ponto-a-ponto e dirigidas do host para o dispositivo. . [2] e [3]. O Wireless USB possui topologia semelhante ao do USB cabeado.19 contendo um periférico e um hub (por exemplo. para que possamos “plugar” um cabo para imprimir fotos diretamente de uma câmera digital ou ainda conectar outros dispositivos).br/~rapoport/usb/usb4. Além disso. onde a diferença principal entre as duas é a ausência de hubs na não-cabeada. uma impressora conectada a um host PC pode possuir portas USB. o host inicia uma transmissão de dados através dos dispositivos conectados a ele através da alocação de slots de tempo a cada dispositivo (Time division Multiplexing . A cada dispositivo composto na rede é designado um endereço único.pads. um host no USB pode fazer conexões lógicas com até 127 dispositivos.ufrj. Figura 1 – Topologia USB Fonte: http://www.html No USB.

com.br/grad/07_1/wusb/TopologiadoUSB.6.gta.php?p=cap3-18 .ufrj. Conectores Figura 3 – Tipos de Conectores USB Fonte: site http://www.1.html 2.1.6.20 Figura 2 – Topologia do Wireless USB Fonte: site http://www. Tipos de conectores e adaptadores USB 2.1.br/hardware/leia/index.gdhpress.

com/2009/02/universal-serial-bus-usb.intel.html .htm Figura 5 – Tipos de Conectores USB Fonte: site http://eletronline.com/support/pt/motherboards/desktop/sb/CS-023466.21 Figura 4 – Tipos de Conectores USB Fonte: site http://www.blogspot.

com.1. Adaptadores Figura 6 – Tipos de Adaptadores USB Fonte: site https://loja.22 2.br/adm/editor/up/108972/1499_g.GIF .jpg Figura 7 – Tipos de Adaptadores USB Fonte: site www.com.tray.br/figuras/kitusb1399.2.atera.6.

7.gdhpress.laercio. Cabo USB O cabo USB é um cabo blindado que possui que possui internamente outros quatro cabos.com.jpg 2.br/artigos/hardware/hard-051/hard-051c.1.htm .com.23 Figura 8 – Tipos de Adaptadores USB Fonte: site http://www.br/hardware/leia/cap3-18_html_67a5b903. como na figura a seguir: Figura 9 – Corte Transversal do Cabo USB Fonte: site http://www.

mas com polaridades invertidas. O cabo possui ainda os fios V+ (vermelho) e GND (preto ou marrom) em cada segmento para distribuir energia aos dispositivos.8. Estas terminações permitem a detecção da conexão e remoção em cada porta e a diferenciação entre dispositivos de alta e baixa velocidade. formada por uma malha de cobre.1. [4] e [5]. [3]. em alguns modelos. Ao invés de ter um fio de terra e outro de sinal. 2 pares de fios. Envolvendo tudo temos uma camada protetora de plástico. V+ é nominalmente +5 V na fonte. Um par é trançado e formado por fios branco e verde ou. Coletar estatísticas de atividades e estado. no formato serial. Para fornecer níveis de tensão de entradas garantidos e impedâncias apropriadas nas terminações. são utilizadas terminações parciais no fim da cada cabo. amarelo e azul. Host USB Existe apenas um host num sistema USB. A interface USB para o sistema do computador hospedeiro refere-se ao controlador do mesmo. Gerenciar o fluxo de controle e de dados entre ele e os periféricos. Envolvendo esses dois pares de fios temos uma camada formada por uma folha de alumínio e uma blindagem externa. os dois levam o mesmo sinal. A vantagem do par diferencial é a alta imunidade a ruídos elétricos e interferências em geral.24 Os cabos USB possuem no seu interior. Através desses dois fios trafegam os dados. portanto são chamados de D+ e D–. Esses dois sinais formam o que chamamos de par diferencial. . O host é responsável por: • • • Detectar a conexão e remoção de dispositivos USB. O host USB interage com os dispositivos através do controlador do mesmo. O controlador do host pode ser implementado em combinação de hardware e software. 2. escolhendo-se um padrão adequado de condutores.5 metros até 5 metros. O USB permite a utilização de segmentos de cabo variáveis de 0.

O software do sistema USB no host gerencia interações entre dispositivos USB e o software do dispositivo instalado no próprio hospedeiro. O ponto final de um dispositivo é a única porção endereçável deste que é a fonte de informação em um fluxo de comunicações entre o host e o próprio. Sempre que possível. Este primeiro pacote é conhecido como "pacote de sinal" (token packet). Gerenciamento de energia. O . inclusive. que é endereçado. 2.9. Em uma dada transação. Gerenciamento de informações de barramentos e dispositivos. O controlador do host inicia todas as transferências de dados.1. Cada transação se inicia quando o controlador do host envia um pacote USB descrevendo o tipo e a direção da transação. associado a um ponto final de um periférico USB. dados são transferidos do host para o dispositivo ou vice-versa. Protocolo USB O USB é um barramento receptor (ou de contagem). o software do sistema usa interfaces existentes no host para gerenciar as interações acima. Transferências isossíncronas de dados. o endereço do dispositivo USB e o número do ponto final (endpoint). Existem cinco áreas de interação entre o software do sistema USB e o software do dispositivo: • • • • • Enumeração e configuração do dispositivo. seleciona a si mesmo pela decodificação do endereço apropriado. A fonte da transação envia então um pacote de dados ou indica que não há mais dados para serem transferidos. A direção da transferência é especificada no token packet. [3].25 • Fornecer alimentação aos dispositivos conectados. Todas as transações do barramento envolvem a transmissão de até três pacotes. O dispositivo USB. Transferências assíncronas de dados. O número de endpoint é um valor de 4 bits entre 0(hex) e F(hex).

como direção e tamanho de buffer. [3]. O modelo para transferências de dados entre a fonte ou um destino no host e um ponto final de um dispositivo é conhecido como pipe (tubo ou canal). tipos de serviços de transferência e características de endpoint. Além disto. O mecanismo de controle de fluxo permite a construção de listas flexíveis. Existem dois tipos de pipe: correntes (stream) e mensagens (message). Múltiplas correntes de pipes podem ser servidas em diferentes intervalos e com pacotes de diferentes tamanhos. A maioria dos tubos passa a existir quando um dispositivo é configurado.10. “default control pipe”. sempre existe enquanto o dispositivo está sendo alimentado. Por permitir a conexão e remoção de dispositivos em qualquer instante de tempo. indicando o sucesso da transferência. os tubos possuem associações com as bandas de transmissão de dados. para que possa fornecer acesso às configurações. 2. em geral. Uma mensagem de pipe. que acomodam serviços concorrentes de misturas heterogêneas de stream pipes. Além disso. Uma corrente de dados não possui uma estrutura USB definida. responde com um "pacote aperto de mão" (handshake packet). a enumeração também inclui a detecção e o processo de remoção de periféricos. a enumeração é uma atividade ininterrupta para o software do sistema. Enumeração A enumeração é a atividade que identifica e atribui endereços únicos para os dispositivos ligados ao barramento. A listagem das transações permite o controle do fluxo para várias correntes de tubos (stream pipes).1.26 destinatário. enquanto as mensagens possuem. . [3]. informações de controle e status deste.

• Transferência Isossíncronas de Dados: Fluxo de dados constantes em intervalos equivalentes. com a distribuição de pulsos. Na arquitetura USB são quatro tipos básicos de transferências de dados: • Transferência de Controle: Usada para configurar um dispositivo no instante de sua conexão e pode ser usada para outros propósitos específicos. • Transferência de Volume de Dados: Gerada e consumida em grandes quantidades e simultaneamente.1. Possui uma ampla e dinâmica latitude em transmissões de reserva. Um dado dispositivo USB deve possuir vários endpoints. 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 contrário. Modelo de fluxo de dados O barramento suporta dados funcionais e substituição de controles entre o host e periféricos. Por exemplo. Chamada . assim também como um conjunto de pipes unidirecionais ou bidirecionais.11. • Transferências de Dados por Interrupção: Usada para caracteres ou coordenadas com percepções humanas ou características de respostas regenerativas. mas não a velocidade de transmissão. Algumas destas associações é que são chamadas de pipes (tubos ou canais). o movimento de dados através de um tubo é independente do fluxo de dados em outro tubo. Este tipo de dado é seqüencial. sem restrição de tempo. A largura das bandas de transmissão para este tipo de transferência de dados pode variar dependendo de outras atividades concorrentes do barramento. É um tipo de transmissão que assegura a integridade dos dados. Ocupa uma quantidade pré-negociável da banda de transmissão do barramento.27 2. Geralmente. As transferências de dados realizam-se entre o software do host e um endpoint particular em um dispositivo USB. incluindo controle de outros pipes no dispositivo. Alguns dados podem ser apresentados para transferências por um dispositivo em qualquer instante e é distribuída pelo USB a uma taxa nunca mais lenta quanto a especificada pelo dispositivo.

11. Transferência do tipo bulk Volume de dados. [3].1. esta será feita. mas não a velocidade de transmissão.1. Outros drivers podem ser escolhidos para utilizar transferências de controle em implementações específicas. . caracteres ou coordenadas que são organizadas com um ou mais bytes. ou para.1. Trocas de dados confiáveis são asseguradas por hardware utilizando a detecção de erros do próprio. e é distribuída pelo USB a uma taxa nunca mais lenta quanto a especificada pelo dispositivo. assim como os usados em impressoras e scanners.2. tipicamente. [3]. consiste em grandes quantidades destes. 2.28 também de transferência de correntes em tempo real (streaming realtime transfers). Vale lembrar também que a largura das bandas de transmissão para este tipo de transferência de dados pode variar dependendo de outras atividades concorrentes do barramento. Transferência de controle Dados de controle são usados pelo software de sistema do USB para configurar os dispositivos durante a primeira conexão destes. um dispositivo é chamada de interrupção. É um tipo de transmissão que assegura a integridade dos dados. Este tipo de dado é seqüencial. [3]. Alguns dados podem ser apresentados para transferências por um dispositivo em qualquer instante. Dados de interrupção consistem tipicamente de notificações de eventos. 2. A distribuição de dados é perdida. Esta é apenas garantida pelo melhor esforço. [3].1.11.3. Transferência de interrupção Uma transferência pequena e limitada de. isto é. caso haja possibilidade de transmissão mais rápida.11. 2.

Caso a taxa de distribuição destes dados não seja mantida. atrasos de distribuição introduzidos por software podem degradar aplicações que necessitam de transmissões em tempo real. como telefonia e áudio conferências. irão ocorrer "saltos" na corrente de dados. Um exemplo típico de dado isossíncrono é a voz.12. Todo componente USB suporta um canal especialmente . através dos quais o host pode se comunicar com os componentes.1.11. [3]. a taxa de distribuição deve ser sensível a atrasos nesta atividade.12. 2. Para pipes isossíncronos a banda de transmissão se baseia em amostras características das funções associadas. Dispositivos USB Dispositivos USB são divididos em diversas classes. auto-identificação e configurações genéricas. Além disso.29 2. Informações relacionadas ao sincronismo são sugeridas pela taxa fixa em que cada dado isossíncrono é recebido e transferido. Transferência isossíncrona Dados isossíncronos são contínuos e em tempo real na sua criação e distribuição. Cada componente adicionado suporta um ou mais pipes. Este tipo de dado deve ser distribuído de acordo com a taxa de recepção para que o seu sincronismo seja mantido. Caracterização de dispositivos Todos os dispositivos USB são acessados por um endereço atribuído durante sua conexão e enumeração. 2. Correntes isossíncronas de dados são alocados em uma determinada porção da banda de transmissão para assegurar que os dados serão distribuídos na taxa desejada.4.1.1. Estes componentes são necessários para carregar informações.1. Ainda se o dado é distribuído na taxa apropriada pelo hardware USB.

dependendo das classes de dispositivos. O canal de controle no endpoint zero é a informação necessária para descrever completamente o dispositivo USB.12.30 designado no ponto final zero para que seja incluído o canal de controle (control pipe). Funções propiciam um aumento de capacidade ao host.1. 2. Fios concentrados constituem os hubs. • • Class: A definição desta informação varia. Pontos de conexão são chamados de portas. . dispositivos USB suportam um mecanismo de acesso comum para obter informações. Hubs Hubs são elementos chave na arquitetura plug and play do USB e servem para simplificar a conectividade de acordo com as perspectivas dos usuários.2. Cada hub converte um simples ponto de conexão em vários outros. Configurações. A arquitetura suporta a concatenação de hubs. A informação é dividida em três categorias: • Standard: A definição é comum para todos os periféricos USB e inclui itens como a identificação do vendedor. classe do dispositivo e o gerenciamento de alimentação.1. [3].12.1. Vendedores USB: O vendedor de dispositivos USB é livre para adicionar qualquer informação desejada. 2.2. Estes por sua vez ativam as características de conexão do USB. Descrição dos dispositivos Existem duas classes majoritárias de dispositivos: hubs e funções. Através deste pipe de controle. além de oferecer segurança a baixo custo e complexidade. Somente os hubs possuem a característica de fornecer pontos adicionais de conexão ao barramento. interface e descrições de endpoint dos dispositivos carregam informações relacionadas sobre o mesmo.

nas portas secundárias. por um cabo. Os hubs podem detectar a conexão e a remoção de um dispositivo.31 A porta principal (upstream port) de um hub o conecta como o host.ufrj. um pacote físico pode conter funções múltiplas e possuir hosts embutidos. Antes de poder utilizar uma função. além de distribuir energia para estes.2. Cada função contém informações de configurações que descrevem suas capacitações e recursos exigidos. Este último é um protocolo de mudança controlado entre as portas secundárias e a primária. a uma porta ou hub. ou. Funções Uma função é um dispositivo que é capaz de transmitir ou receber dados ou informações de controle do barramento. Figura 10 – Modelo de Hub USB Fonte: site http://www. estando conectado. Cada porta secundária (downstream port) permite a conexão de outro hub ou função. Também possui suporte de hardware para reiniciar e suspender a transmissão de sinais. Comandos de controle e estados específicos permitem ao host configurar um hub.br/~rapoport/usb/usb4. tanto de baixa quanto de alta velocidade.2.1. [3]. Estes são conhecidos como dispositivos compostos e aparecem para o host como um hub com um ou mais dispositivos nãoremovíveis. O controlador do host propicia aos registradores da interface permitir a comunicação de.html 2.pads. o host . Além disso. para o host.12. Duas partes constituem um hub: o controlador e o repetidor. além de monitorar e controlar as suas portas.

53125mV. Abaixo seguem alguns exemplos de funções: • • • • Um dispositivo localizador.32 deve configurá-la Esta configuração inclui a alocação da banda de transmissão e a seleção das opções específicas para a configuração da função. Em geral. como um teclado. mais lento é o dispositivo. o que resultaria numa resolução de 0. Neste caso a resolução seria 5 dividido por 28.01953125V ou 19. precisamos de uma base de tempo e um Conversor Analógico Digital (CAD). Um dispositivo de saída. quanto maior for o número de bits. [3]. como um mouse. uma parte de 2n. Um adaptador de telefonia. no máximo. A aproximação digital é registrada em “n” bits e a variação de amplitude do sinal digitalizado pode ser reduzida para uma resolução de. e o bit menos significativo (LSB) registra a menor variação de tensão. [1]. que forneça uma aproximação digital do sinal original. 2. O bit mais significativo (MSB) é o que registra a maior variação de tensão. A base de tempo determina a velocidade com que podemos amostrar a forma de onda e varia com o tipo de CAD. . como um ISDN. como uma impressora. Um dispositivo de entrada. a resolução do conversor A/D é dada pelo valor máximo do sinal analógico dividido pelo valor máximo de combinações de bits. Exemplo: para um conversor de 8 bits que pode converter sinais analógicos entre 0V e 5V.13. Digitalização de sinais Para digitalizar um sinal. [9] e [10].1. como mostrado na figura 11.

pdf 2. A amplificação do sinal depende do ganho do amplificador operacional. Figura 12 – Circuito Básico de um AmpOp Fonte: Datasheet do componente TL072 .net/mit/6/6071/PDF/f02-lec20a_val. da ordem de mili ou micro-volts.14. Amplificação de sinais Como os sinais analisados podem assumir amplitudes muito baixas. responsável por amplificar o sinal amostrado para valores adequados à análise. o TL072.universiabrasil. neste projeto é usado um amplificador de sinais.1.33 Figura 11 – Conversor Analógico Digital Fonte: site http://www. e este ganho é regulado através do valor do resistor R2.

Como a amplitude do sinal capturado pode ser variável. Figura 13: Diagrama do dispositivo com comunicação USB e conversor analógico/digital Fonte: ttcsope . O ganho é definido através de seleção feita pelo usuário no software. A comunicação e o envio de sinais entre o dispositivo e o computador são feitos através da comunicação USB do microcontrolador com o computador. selecionando o resistor correspondente ao ajuste de escala desejado.34 3. e este resistor por sua vez. ARQUITETURA DO PROTÓTIPO A arquitetura definida para este protótipo foi a de um microcontrolador com comunicação via USB e conversor analógico/digital internos. esta seleção gera um sinal que vai do PIC para o multiplexador. o microcontrolador é o responsável em converter o sinal analógico capturado por qualquer uma das entradas do dispositivo em digital. Na arquitetura do microcontrolador com conversor analógico/digital interno. é quem define o ganho do amplificador. com ganho variável ajustado pelo microcontrolador. Para a placa foi definido o layout de apenas uma face de trilhas. é usado um amplificador para cada entrada do dispositivo.

e que serão analisados a seguir.35 Figura 14: Diagrama de blocos do conversor analógico/digital Fonte: Datasheet do microcontrolador PIC18F2550 3. são: • • • Microcontrolador Multiplexador Amplificador Operacional .1. Circuito Análise dos Principais Componentes do Os principais componentes deste circuito.

PIC18F2550 e PIC18F4550.0 Clock variável de 8 a 48 MHz Conversor analógico/digital de 10-bits Programação “in circuit” .36 3.1.PIC18F2550: • • • • USB 2. ambos continham as principais características desejadas. nestas ferramentas coloca-se os dados que interessam para o projeto e a ferramenta mostra o que o respectivo fabricante tem que possua as características desejadas.1. comunicação via USB e conversor analógico/digital. No site da ATMEL encontra-se o microcontrolador AT91CAP7E Características principais: • • • • • • • 256 kbytes de memória ROM interna 160 kbytes de memória SRAM interna USB 2. Características principais: . As pesquisas foram feitas através das ferramentas de auxílio para verificação de modelos disponíveis no site de cada fabricante. Já no da MICROCHIP foram encontradas 2 opções de microcontroladores. analisados MICROCHIP e TEXAS INSTRUMENTS.0 Conversor analógico/digital de 10-bits Clock variável de 8 a 16 MHz Programação “in circuit” Encapsulamento LFBGA com 225 pinos No site da site TEXAS INTRUMENTS não foi obtido nenhum microcontrolador que apresentasse as características desejadas (USB e CAD). Foram Escolha do microcontrolador microcontroladores dos fabricantes ATMEL.

um total de seis microcontroladores ficaram à disposição da equipe para que esta pudesse fazer testes com diferentes programações e para possível reposição. MAX4638 e MAX4051.2. em caso de queima de algum dos microcontroladores. entrando em contato. com isso. . sendo pago apenas as despesas de envio. Os modelos analisados foram o MAX308. Duas amostras do componente com encapsulamento DIP e duas em SMD foram enviadas pelo distribuidor. com quem. Escolha do multiplexador Os multiplexadores analisados para o projeto são todos da empresa MAXIM. todos com oito portas multiplexáveis.PIC18F4550: • USB 2.37 • • • • • . Posteriormente foi conseguido o contato de um distribuidor MICROCHIP em São Paulo. foram conseguidas amostras do componente. Bevian comercial e importadora LTDA.1. backup. 32 kbytes de memória FLASH 2048 bytes de memória SRAM 256 bytes de memória EEPROM 24 portas de entrada/saída Encapsulamentos PDIP e SOIC de 28 pinos 3. dois exemplares foram emprestados à equipe pelo engenheiro Jefferson Chochi Zembovici da empresa HENRY. pois além de ter as características desejadas.0 • Clock variável de 8 a 48 MHz • Conversor analógico/digital de 10-bits • Programação “in circuit” • 32 kbytes de memória FLASH • 2048 bytes de memória SRAM • 256 bytes de memória EEPROM • 35 portas de entrada/saída • Encapsulamentos PDIP de 40 pinos e TQFP e QFN de 44 pinos Dentre estes citados foi escolhido o PIC18F2550.

38 O motivo da escolha destes componentes do referido fabricante foi o fato de que este enviaria amostras dos componentes sem custo algum.4 ohms Tempo de chaveamento o Ton = 18ns o Toff = 7ns . Características principais: . 3. o MAX4638 e o MAX4051. MAX4638. pois foram estes os modelos enviados pelo fabricante. ambos em SMD. Escolha do amplificador operacional .MAX4638: • • • • 8 canais multiplexados Compatível com lógica TTL e CMOS Resistência de canal de 0.1.3. foi devido a este possuir menor tempo de chaveamento e menor resistência de canal.MAX308: • 8 canais multiplexados • Compatível com lógica TTL e CMOS • Resistência de canal menor que 5omhs • Proteção contra descarga eletrostática maior que 2000 V • Tempo de chaveamento o Ton = 100ns o Toff = 75ns . A escolha do componente usado no dispositivo.MAX4051: • • • • 8 canais multiplexados Compatível com lógica TTL e CMOS Resistência máxima de canal de 12 omhs Tempo de chaveamento o Ton = 50ns o Toff = 40ns Para usar no projeto restaram duas opções.

HARDWARE Para o hardware decidiu-se usar placa com apenas uma face. 3. esquemático e layout das trilhas.39 O amplificador operacional utilizado no dispositivo é o TL072 da TEXAS INSTRUMENTS. isto pelo motivo de que era de interesse da equipe confeccionar a placa.2.de). o que facilita caso algum deles venha a dar problema.1. com os quais consegue-se “bypassar” alguns CI’s e com isso testar cada parte do circuito. no trabalho de final de curso usado de base para este e em conversas entre os membros da equipe. este componente foi escolhido pelo fato de que a equipe já possuía o componente. componentes discretos e circuitos integrados com encapsulamento DIP.5.cadsoft.5. Desenvolvimento do Dispositivo O circuito foi desenhado. por meio de jumpers. A placa foi planejada de tal forma que se pudesse testar os principais componentes separadamente.003% típico) • Alta impedância de entrada (JFET) • Slew rate típico = 13 V/us 3. no software EAGLE V. Também foram usados soquetes para todos os CI’s. reduzindo assim despesas com componente e otimizando os custos do projeto. Características principais: • Dual AmpOp • Baixo ruído • Proteção contra curto-circuito na saída • Baixa distorção harmônica total (0.2. . O diagrama elétrico do circuito foi feito com base nos datasheets dos componentes.0 que é disponibilizado gratuitamente através do site do fabricante (www.

Figura 15 – Layout das Trilhas Fonte: Autoria Própria . pode-se ver como ficou a distribuição dos componentes sobre a placa. e na sequência. Fotos da Placa Para confecção do circuito forma usadas placas de fibra de face única.2. com o auxílio de um ferro de passar roupas comum.2. usando o sistema de transfer. 3. impressão a laser em papel poliéster e transferido para a placa por processo térmico.40 A placa foi feita de modo artesanal. na figura 16. na figura 15 pode-se ver o aspecto das trilhas do circuito.

2. Fazendo testes e analisando o circuito foi visto que este apenas funcionaria para sinais positivos. então foi acrescentado uma nova placa para tratamento de sinal ao dispositivo e uma fonte externa para que se obtivesse alimentação negativa.2.3. 3.4.41 Figura 16 – Layout dos Componentes Fonte: Autoria Própria 3. Correções do Circuito Algumas correções foram necessárias no hardware do dispositivo para que este pudesse captar sinais positivos e negativos. Fotos das Placas para Correção do Circuito . desta forma conseguiu-se fazer com que o dispositivo funcionasse tanto para sinais positivos como para sinais negativos.

enquanto a placa para tratamento de sinal foi colocada juntamente com as outras partes. na caixa do dispositivo. externa à do dispositivo de captura de sinais.42 A fonte foi montada em uma caixa plástica. Figura 17 – Layout das Trilhas das Placas de Correção Fonte: Autoria Própria .

Figura 19 – Protótipo no Montado no Interior da Caixa Fonte: Autoria Própria .5.43 Figura 18 – Layout dos Componentes das Placas de Correção Fonte: Autoria Própria 3.2. Aspecto Final do Dispositivo O dispositivo foi montado em uma caixa de alumínio com dimensões de 18cm x 12cm x 9cm. e a seguir vemos as imagens da montagem e do aspecto final do dispositivo. Para dar o acabamento final ao protótipo foram usados adesivos impressos aplicados por sobre a caixa. após tratamento da superfície metálica a caixa foi pintada com tinta spray.

44 Figura 20 – Vista Superior da Caixa Fonte: Autoria Própria Figura 21 – Vista Superior Esquerda da Caixa Fonte: Autoria Própria .

Resistores RESISTOR R1 R2. R12 R3. R23.6. R13 R4.2. Capacitores CAPACITOR C3.7MΩ 10MΩ Quadro 1: Relação de Resistores Utilizados 3. R11 Fonte: Autoria Própria VALOR 1kΩ 10kΩ 47kΩ 100kΩ 200kΩ 470kΩ 1MΩ 2. R20. R16 R7. Relação de Componentes 3.2. R24 R5.2. R21. R17 R8.2MΩ 4.6.45 Figura 22 – Vista Superior Direita da Caixa Fonte: Autoria Própria 3. R18 R9.1.2.6. C4 VALOR 15pF . R15 R6. R19. R14. R22 R10.

2.4.2. C9 C10. C8. JP5 20MHz Conector KK 5 vias – 5045-5 Conector USB Conector BNC Barra com 3 pinos Barra com 2 pinos Fonte: Autoria Própria Quadro 4: Relação dos Demais Componentes Utilizados . JP2. C11 C5.6. CON2 CON3 CON4. Outros componentes XTAL1 CON1.3. CON5 JP1. JP3 JP4. C7. C12 470nF 100nF 22nF 10µF Quadro 2: Relação de Capacitores Utilizados Fonte: Autoria Própria 3. C6.6.46 C2 C1. Circuitos integrados CIRCUITO INTEGRADO UC1 IC1. IC2 IC3 CÓDIGO PIC18F2551 MAX4638 TL072 Quadro 3: Relação de Circuitos Integrados Utilizados Fonte: Autoria Própria 3.

2. da empresa CCS (Custom Computer Service). O principal motivo foi à grande quantidade de funções e rotinas pré-programadas dedicadas a microcontroladores da família PIC.7. Compilador Usado O microcontrolador escolhido foi o microchip PIC 18F2550. Nesse projeto foi necessário desenvolver e compilar o programa com as instruções específicas ao microcontrolador PIC 18F2550. bem como a facilidade na interface de programação. FIRMWARE Firmware é o conjunto de instruções operacionais programadas diretamente no hardware de um equipamento eletrônico. . 3. Para esse modelo existem diversos compiladores como o próprio MPLAB em conjunto com o Microchip C18. porém decidimos utilizar o software PCWHD 4.47 3. que faz a compilação em linguagem C.1.2.7.084.

Programador Usado Existem muito gravadores de PIC dedicados. Este programador não necessita de fonte de alimentação externa.48 Figura 23 – Tela de interface do PCWHD Fonte: Autoria Própria 3.2. sendo implementada no protótipo de tal forma que com a mudança de um jumper. aproveitando o recurso existente no microcontrolador de programação em baixa tensão (LVP). nos baseamos no circuito utilizado no gravador “PICPlus” que realiza a gravação pelo método ICSP (In-Circuit Serial Programming™). é possível conectar o circuito do “PICPlus” modificado e realizar a programação do PIC.7. A questão da programação do microcontrolador foi previamente estudada.2. Para facilitar os testes em nosso protótipo. .

7.jdm.3. Foto do Programador Figura 25 – Gravador do PIC Fonte: Autoria Própria Utilizamos o software livre PICPgm versão 1.dk/newpic.homepage.2.Esquema Eletrônico do Programador Fonte: site http://www.49 Figura 241 . Esse programa reconhece automaticamente o programador PICPlus e até mesmo o modelo de microcontrolador utilizado. .1.0.htm 3.5 para realizar a gravação do firmware no PIC.

0.4.5 Fonte: Autoria Própria 3. Registradores necessários para o modelo de PIC escolhido. Freqüência do cristal utilizado. Programação do Microcontrolador Antes de iniciar a programação do firmware. bem como as funções de cada uma. Programmer V1.2. precisa-se ter conhecimento pleno nos seguintes aspectos: • • • • • Funções desempenhadas pelo microcontrolador.50 Figura 26 – Tela de interface do PICPgm Develop. Quais portas de entradas e saídas serão utilizadas.1. Fluxograma com a lógica de programação .7.

51 Figura 27 . 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 Função MCRL Vpp AN0 AN1 RA2 RA3 RA4 RA5 Vss OSC1 OSC2 RC0 RC1 Vusb DD+ Vss Vdd RB0 RB1 RB2 RB3 RB4 PGM PGC Descrição Entrada de reset.3V Linha diferencial negativa do USB (input/output) Linha diferencial positiva do USB (input/output) Referência à terra para a lógica e os pinos de i/o Fonte positiva para a lógica e os pinos de i/o Saída Digital Saída Digital Saída Digital Saída Digital Saída Digital Pino que permite a programação em baixa tensão ICSP Clock de programação ICSP .Microcontrolador 18F2550 Fonte: Datasheet Microchip – 18F2550 O quadro 5 mostra as funções dos pinos utilizados no PIC18F2550. em nível baixo reseta o sistema Entrada de tensão da programação Entrada analógica 0 Entrada analógica 1 Saída Digital A0 para controle do MUX1 Saída Digital A2 para controle do MUX2 Saída Digital A1 para controle do MUX2 Saída Digital A0 para controle do MUX2 Referência à terra para a lógica e os pinos de i/o Entrada do oscilador de cristal 20MHz Conecta o cristal 20MHz ou ressonador Saída Digital A2 para controle do MUX1 Saída Digital A1 para controle do MUX1 Regulador de tensão interno do USB 3.

Serial (SSPSTAT.52 28 PGD Pino de dados da programação ICSP Quadro 5 – Pinos Utilizados no PIC Fonte: Autoria Própria Abaixo vemos o fluxograma completo do firmware.5. SSPCON1) e na configuração de portas como entrada e saída (TRISA. OSCCON). TRISB. USTAT. CONFIG1H. UCFG. Fluxograma Figura 28 – Fluxograma do Firmware Fonte: Autoria Própria De acordo com as necessidades de utilização no projeto. . 3. TRISC).2. UADDR. os principais registradores configurados foram os relacionados às definições de clock (CONFIG1L.7. UFRMH:UFRML). USB (UCON.

oscilador de cristal de alta freqüência com PLL habilitado. LVP – programação em baixa tensão habilitada. existente no banco de dados do compilador CCS. foi compilado o firmware.proteção de código desabilitada. DEBUG .PLL5.h> Realiza a chamada do arquivo de definição de todos os registradores endereçados para o 18F2550. #fuses HSPLL. NOPROTECT .clock USB do 96MHz PLL/2 PLL5 .NOPROTECT.CPUDIV1.6. NOWDT . Os principais comando serão mostrados abaixo: #include <18F2550.USBDIV. Descrição do Firmware Com o software PCWHD.NOLVP. principalmente aos que diz respeito ao oscilador.clock do núcleo 96MHz PLL/2 VREGEN .NOWDT. VREGEN Configura vários registradores do microcontrolador.watchdog desabilitado.cristal de 20MHz PLL prescaler /5 CPUDIV1 .7.2.53 3.RB6 e RB7 dedicados para In Circuit Debug USBDIV . baseado em linguagem “C”. HSPLL .NODEBUG.regulador interno de tensão 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 transferências IN e OUT Bulk/Interrupt .

setup_adc_ports(AN0_TO_AN1) Configura apenas as portas A0 e A1 como entrada analógica. for (i=1. Rotina de leitura das entradas analógicas e envio para o computador através da porta de comunicação USB.txdata. set_adc_channel(0).USB_DTS_TOGGLE). . usb_init() usb_task() usb_wait_for_enumeration() Inicia.TXSIZE.h> <usb. set_tris_b(0b00000000).h> <PicUSB. as demais como saída digital.i<TXSIZE. delay_us(10). respectivamente. } usb_puts(1. delay_us(10). do Endpoint1.i+=2) { set_adc_channel(1).54 Determina o tamanho de 64 e 3 bytes reservado para o Buffer Tx e RX.c> Inclui as bibliotecas de configuração da USB e descritores. txdata[i]=read_adc(). set_tris_a(0b00000011). set_tris_a(0b00000000). existentes no banco de dados do compilador CCS para o hardware da família PIC18. txdata[i+1]=read_adc(). habilita os periféricos e interrupções e aguarda o PIC ser enumerado pelo sistema operacional. #include #include #include <pic18_usb.

barras de sliders. Figura 29 – Tela de interface gráfica do Borland Delphi Second Edition versão 7. SOFTWARE Foi desenvolvido um software de interface gráfica para funcionar na plataforma Windows cuja função é a visualização das diversas formas de ondas capturadas pelo dispositivo. bem como ajustes de escalas e controle das saídas digitais.55 3. como desenhos de gráficos incluindo ferramentas de auxilio como o DirectX. entre outros recursos disponíveis.2.8.8. 3.2 Fonte: Autoria Própria .2. onde utiliza linguagem Pascal orientada a objeto. Software Usado A programação de interface gráfica foi desenvolvida no Borland Delphi Second Edition versão 7. Optou-se por utilizar esse software devido a ampla variedade de recursos que desejava-se utilizar.2. processamento paralelo.1. check box.

56 3. A seguir são apresentadas as principais partes da rotina com comentários dos pontos mais importantes. end. A primeira é o processamento de eventos da janela principal e a segunda era a captura de pacotes dos sinais analógicos que o PIC enviava.2. O código 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. Como o Delphi permite processamento paralelo. ClearScreen. como clicar. Baseados nestes eventos criou-se o programa na janela de codificação. Estrutura do Código Cada objeto colocado na janela “Form” é dotado de propriedades que permite configurar o mesmo. Com exceção do gráfico. Sleep(25). dois principais rotinas ficavam continuamente em loop infinito. Para facilitar o entendimento lógico da programação.8. end. USB (comunicação) e Draw (desenho do gráfico).2. . //Loop Infinito para captura de pacotes de dados while true do begin if GetUSBData then begin UpdateDrawBuffer. DrawData. marcar. A rotina completa encontra-se no Anexo F. o código foi dividido em Main (principal). todos os demais componentes possuem algum tipo de evento. Os comandos serão mostrados em formatação itálico e negrito . arrastar e segurar.

stdcall. stdcall.pEP:PCHAR8. th. begin if not usb_connected then begin ShowMessage('Dispositivo inicializado. end. if onoff_button. stdcall.external 'mpusbapi.varpData:PBYTE.Caption = 'ON' then begin onoff_button. function_MPUSBRead(handle:THANDLE.57 procedure TForm1. end Essa rotina é executada quando o evento de clicar sobre o botão ON é realizado. _MPUSBGetDLLVersion():DWORD.dll'.dwMilliseconds:DWORD):DWORD.Enabled:=true.dwDir: DWORD. CleanDrawBuffer1.Resume.onoff_buttonClick(Sender: TObject).Caption := 'OFF'. CleanDrawBuffer2. está centralizado todos os comandos relacionados a essa comunicação. stdcall. function function _MPUSBOpen(instance:DWORD.dll'. No código USB.'). Ela verifica se o dispositivo USB está conectado e depois habilitam outros botões de controle.dll'.external 'mpusbapi.varpData: _MPUSBGetDeviceCount(pVID_PID:PCHAR8):DWORD. também limpa os buffers do gráfico.dll'. DXTimer1. function _MPUSBReadInt(handle:THANDLE.external 'mpusbapi. exit. hold_button.varpLength:DWORD.external não conectado ou não .dwLen:D WORD.dwReserved:DWORD):THANDLE.Enabled:=true. function 'mpusbapi.pVID_PID:PCHAR8.

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

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

é realizada a ligação entre ele e o ponto anterior através de uma reta.3.Height). Interface Gráfica .Width div (length(draw_buffer1) div h_factor)). y := draw_buffer1[i-1].Surface. assim fazendo com que o gráfico fique contínuo e não pontilhado.DXDraw1.DXDraw1.MoveTo(x.y). // condicionamento do sinal Form1. // condicionamento do sinal Form1.DXDraw1.8.Width div (length(draw_buffer1) div h_factor)).DXDraw1.y).60 Por último tem-se o código de desenho do gráfico precisa realizar a normalização dos níveis de sinais para as amplitudes máximas apresentadas na tela.2.Height). y := round((y/255)*Form1.DXDraw1.Canvas.Surface. x := (i)*(Form1.Canvas. x := (i-1)*(Form1.LineTo(x.DXDraw1. y := round((y/255)*Form1. A cada ponto desenhado. Figura 30 – Fluxograma do programa em Delphi Fonte: Autoria Própria 3. y := draw_buffer1[i].

61

Figura 31 – Tela de interface gráfica do programa final Fonte: Autoria Própria

Na figura 31 é mostrada a tela do Dispositivo de Aquisição de Sinais e Controle Digital via USB com as seguintes funções: • • • • • • Botão ON/OFF inicia a visualização gráfica ou encerra o aplicativo gráfico. Seletor de escala de tensão independente para os canais 1 e 2, com uma faixa de 0,02 V a 0,5 V por divisão. Seleção de escala de tempo independente em segundos por divisão. Check Box para habilitar os canais 1 e/ou 2. Hold – Permite o congelamento instantâneo do gráfico para melhor analise do sinal amostrado Tela de visualização gráfica dos canais 1 e 2, com dez divisões 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 método de comunicação USB seria adotado. Existem três métodos: USB Communication Device Class (USB CDC) – Basicamente o driver emula uma porta COM, fazendo com que a comunicação entre o software e o firmware seja realizada como se fosse uma porta serial padrão. É o método mais simples para compilação do programa, porém a velocidade de comunicação é 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), não sendo necessário desenvolver driver especiais para a aplicação, mas teria uma limitação de velocidade de 64 kB/s. USB Bulk - Driver customizado que permite a comunicação USB apenas com a limitação de velocidade do próprio USB 2.0 (480 Mbps). Esta foi a escolha para o desenvolvimento do projeto. O driver é disponibilizado pela própria Microchip e utilizado em dois momentos. O primeiro na instalação do dispositivo no sistema operacional, onde faz o reconhecimento, enumeração e configuração USB do microcontrolador. O segundo é a utilização da biblioteca “mpusbapi.dll” para o desenvolvimento do software de interface gráfica, o qual serve para comunicação entre o computador e o próprio PIC18F2550.

63

4. CONCLUSÕES
Neste trabalho foi desenvolvido um dispositivo de aquisição de sinais analógicos e controle digital via USB. Esse tema envolveu conhecimentos de diversas disciplinas do curso de engenharia elétrica, como circuitos elétricos, instrumentação, microcontroladores, circuitos lineares e não lineares, entre outros. Por esse motivo somado ao uso da comunicação USB, tornou o projeto muito interessante, pois atualmente é a interface mais utilizada para troca de dados digitais entre os diversos equipamentos eletrônicos. O aprofundamento nesse e em outros assuntos relacionados ao projeto, acabou ampliando a visão de possibilidades para aplicações desses conhecimentos em dispositivos futuros. Várias linguagens de programação e diversos softwares foram utilizados, o que proporcionou um aprendizado muito grande nessa área. Também foi um enorme desafio a confecção completa dispositivo, desde a placa de circuito impresso até a caixa protetora, todo desenvolvimento foi realizado pela equipe, o que trouxe muita satisfação para a mesma. O protótipo e software sofreram várias alterações e ajustes para alcançar o objetivo definido inicialmente. Com os testes finais, conseguimos obter as seguintes características: • Um taxa de amostragem de aproximadamente 32kSPS;

4. Controle de ganho em tempo real. entre elas. principalmente implementando um conversor analógico digital externo acoplado a uma memória intermediária. Escala de tempo ponto a ponto real de 2ms. filtros. um trigger.1. Programação do firmware ICSP Com um maior tempo de desenvolvimento seria possível melhorar as características citadas acima. aumentando assim a taxa de amostragem.64 • • • • • • Tensão de entrada AC de 50Vpp. entre outros. Escala mínima de tensão de 0. Algumas funções no tratamento de sinal através do software de interface gráfica também foram discutidas.1V/div. cálculos de valores RMS. FFT. PERSPECTIVAS Para avançar com o dispositivo e uma possível evolução para um produto comercial pode-se citar algumas melhorias a serem implementadas: • melhor • aumentado • • • entradas • • • • Redução do tamanho do dispositivo Proteções contra surtos Incorporação de filtros Eliminação da necessidade de fonte externa FFT Botão de Trigger Cálculos matemáticos entre os sinais das 2 Limite máximo de tensão de entrada Maior velocidade de aquisição com um CAD . Controle dos dispositivos externos simultaneamente com aquisição de dados.

Leandro Silva.gta.uol. [2] Topologia do USB.com. Walter Luciano. Acesso em: 1 de junho de 2009.br/artigos/hardware/hard-051/hard-051c. Disponível em: http://www. [3] Arquitetura USB.br/portas-usb1.laercio. [4] Interfaces e Periféricos USB.ufrj.com. 2007. Acesso em: 3 de junho de 2009.ufrj. Disponível em: http://www.html. Curitiba.htm. Acesso em: 1 de junho de 2009. Acesso em: 2 de junho de 2009.html. PIECARZ.pads.htm. .br/~rapoport/usb/usb4. Disponível em: http://www. [5] Como Funcionam as Portas USB.65 REFERÊNCIAS BIBLIOGRÁFICAS [1] ESPÍNDOLA. Trabalho de conclusão de curso (Graduação em Engenharia Elétrica) – UFPR. USBSCOPE.br/grad/07_1/wusb/TopologiadoUSB.hsw. Disponível em: http://informatica.

Disponível em: http://www. Acesso em: 1 de junho de 2009.br/hardware/leia/cap3-18_html_67a5b903.br/apostilas/subsidios_eletronica/conversor %20a_d. Acesso em: 3 de junho de 2009. Osciloscópio Digital em Placa ISA.com/. Disponível em: http://www.jpg. Acesso em: 2 de junho de 2009. Disponível em: http://www. ATMEL. Felipe Monteiro et al. Disponível em: http://www. Adaptadores USB.jpg.atmel.php/707/OsciloscopioISA.pdf.tray.atera.fapesp.net/mit/6/6071/PDF/f02-lec20a_val. REFERÊNCIAS PARA PESQUISA Adaptadores USB.br/eletbas/aula05.com. Disponível em: http://www.inep. Disponível em: http://incubadora. . USP.colegiouberaba.com.com. Disponível em: https://loja. [8] Eletricidade Básica – Osciloscópio. Acesso em: 1 de junho de 2009. [7] Instrumento de Medidas Elétricas em CA – Parte II – Osciloscópio.br/figuras/kitusb1399. Acesso em: 2 de junho de 2009.br/acad_web/professor/sitedocente/admin/arquivosUpload/7502/ material/Lab2%20circuitos%20elet%20ii. Acesso em: 2 de junho de 2009. Acesso em: 1 de junho de 2009.gdhpress. Disponível em: http://www. ASSOCIAÇÃO BRASILEIRA DE NORMAS TÉCNICAS. Atmel Product Selector Guide.pdf.ucg. São Paulo.com.66 [6] CARVALHO. [9] Conversão Analógica Digital.GIF.universiabrasil.pdf.br/adm/editor/up/108972/1499_g.br/frs/download. NBR 14724: informação e documentação: trabalhos acadêmicos: apresentação. [10] Conversor Analógico Digital – A/D.ufsc. 2002. Disponível em: http://www.pdf. Rio de Janeiro. Acesso em: 11 de março de 2009.pdf. Acesso em: 3 de junho de 2009. Adaptadores USB.

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

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

layout da placa. confecção do dispositivo e início do estudo para o desenvolvimento do software.Cronograma do Projeto • Março/2009 – Estudo dos microcontroladores e definição dos demais componentes eletrônicos do dispositivo a ser desenvolvido. • Abril/2009 – Definição do projeto eletrônico.69 ANEXOS ANEXO A . .

• Junho/2009 – Correções finais. elaboração do relatório e verificação final do produto.70 • Maio/2009 – Possíveis correções. últimos testes e modificações. testes preliminares do software e possíveis melhorias a serem implementadas. • Julho/2009 – Apresentação. layout externo do produto. ANEXO B – Diagrama Esquemático do Circuito . testes. calibração do dispositivo.

71 .

72 ANEXO C – Diagrama Esquemático do Circuito de Tratamento de Sinais .

73 ANEXO D – Diagrama Esquemático da Fonte Externa .

CPUDIV1.h> <PicUSBMK.VREGEN #use delay(clock=48000000) // Cristal de 16MHz // Includes das bibliotecas USB do compilador CCS.USBDIV.h> //Configuração do USB e descritores para o dispositivo <usb.PLL4.NOWDT.NOPROTECT.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 .NODEBUG.h> #fuses HSPLL.74 ANEXO E – Código Fonte do Firmware //==Código Fonte do Firmware compilado em C pelo programa PCWHD============== #include <18F2550.NOLVP.c> //Handles usb . //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 //==Definições======================================================== #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.

int8 send_buf[5]. } void TXAnalog(void) { int8 i. MUX_OFF(MUX1A1). int8 txdata2[TXSIZE].USB_DTS_TOGGLE).75 int8 rxdata[5]. int8 txdata[TXSIZE]. int8 txdata7[TXSIZE]. // Aguarda o Pic ser configurado pelo PC enumerou=usb_enumerated(). int8 txdata4[TXSIZE]. MUX_ON(MUX1A0). } void MuxCH1(void) { //Seleciona o ganho do CH1 if (rxdata[1]==NO1){ MUX_OFF(MUX1A2). LED_ON(LED3USB). usb_task().TXSIZE. else LED_OFF(LED2ENUM). } usb_puts(1.txdata. o perif. MUX_OFF(MUX1A1). int8 txdata8[TXSIZE]. int8 txdata10[TXSIZE]. // Hab. for (i=1. int8 txdata5[TXSIZE]. } if (rxdata[1]==NO2){ MUX_OFF(MUX1A2). txdata[i+1]=read_adc(). void TesteUSB(void) { //Verifica se o USB está conectado e enumerado int8 enumerou. LED_OFF(LED3USB).i<TXSIZE. set_adc_channel(0). if (enumerou) LED_ON(LED2ENUM). delay_us(10). usb e as interrupções usb_wait_for_enumeration(). txdata[0]=read_adc(). txdata[i]=read_adc().i+=2) { set_adc_channel(1). int8 txdata9[TXSIZE]. delay_us(10). int8 txdata3[TXSIZE]. delay_us(10). MUX_OFF(MUX1A0). int8 txdata6[TXSIZE]. } // Canal A0 // Retardo //Realiza a captura e transmissão das portas analógicas // Canal A1 // Retardo // Canal A0 // Retardo . set_adc_channel(0).

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

LED_OFF(LED5OUT2). LED_OFF(LED4OUT1).rxdata. MUX_ON(MUX2A0). // Programa Principal // AN0. } } void main(void) { int8 cont=1. } if (rxdata[1]==NO7){ MUX_ON(MUX2A2). MUX_ON(MUX2A1). setup_adc(ADC_CLOCK_INTERNAL). set_tris_b(0b00000000). else LED_OFF(LED4OUT1). set_tris_c(0b00000000). while (TRUE) { TesteUSB(). } // Mux Control CH 1 . MUX_ON(MUX2A0).5). MUX_ON(MUX2A1). usb_init().RA5 saídas // RB Todas saídas // RC0 Todas saídas // configura IN analog. 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. //Captura os dados da USB e coloca //na variável rxdata // sample if(rxdata[0]==SAMPLE) { TXAnalog(). } // led control if(rxdata[0]==LED_CONTROL) { if(rxdata[1]) LED_ON(LED4OUT1). else LED_OFF(LED5OUT2).RA3. set_tris_a(0b00000011). LED_OFF(LED3USB). LED_ON(LED1ON).RA4. LED_OFF(LED2ENUM).77 MUX_OFF(MUX2A1).do conversor A/D // configura clock interno para o ADC setup_adc_ports( AN0_TO_AN1 ). if(rxdata[2]) LED_ON(LED5OUT2). MUX_OFF(MUX2A0). } if (rxdata[1]==NO8){ MUX_ON(MUX2A2). AN1 entradas e RA2.

} // Mux Control CH 2 if(rxdata[0]==MUX_CONTROL2) { MuxCH2().PONG if(rxdata[0]==PING) { send_buf[0] = PING. } } } } } ANEXO F – Código Fonte do Software . usb_put_packet(1.1. } // PING .78 if(rxdata[0]==MUX_CONTROL1) { MuxCH1().send_buf.USB_DTS_TOGGLE).

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

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

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

procedure TForm1. 4: hscale1:=0. 1: hscale2:=0. procedure TForm1.050. hold := false. begin change_mux1(vscale_bar1. end.500. //===================Fim Rotina MAIN==================================== //===================Início da Rotina USB================================= unit usb. end.010.050.020. 5: hscale1:=0. end.vscale_bar2Change(Sender: TObject).020. end else begin hold := true. 4: hscale2:=0.005.200. begin if hold then begin DXTimer1. end. 3: hscale1:=0. procedure TForm1. procedure TForm1. 2: hscale1:=0. 5: hscale2:=0. end. end.Position of 6: hscale2:=0. case hscale_bar2. end. 0: hscale1:=0.Position). DXTimer1.100. end.hold_buttonClick(Sender: TObject).Enabled := false.vscale_bar1Change(Sender: TObject).Position of 6: hscale1:=0.hscale_bar2Change(Sender: TObject).Position). procedure TForm1.010.hscale2Change(Sender: TObject).82 ClearScreen.500. begin CleanDrawBuffer2. 3: hscale2:=0.100. 0: hscale2:=0.200. case hscale_bar1. end.Enabled := true. begin CleanDrawBuffer1. 2: hscale2:=0.005. end. . begin change_mux2(vscale_bar2. 1: hscale1:=0.

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

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 conexão - 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 saída 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

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

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

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

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

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

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

Sign up to vote on this title
UsefulNot useful