Você está na página 1de 75

UNIVERSIDADE POSITIVO NCLEO DE CINCIAS EXATAS E TECNOLGICAS ENGENHARIA ELTRICA

GERADOR DE FUNES MICROCONTROLADO COM INTERFACE WIRELESS NO COMPUTADOR

Curitiba, 2008.

Felipe Ehlke Anastacio Marcos Martinez

GERADOR DE FUNES MICROCONTROLADO COM INTERFACE WIRELESS NO COMPUTADOR

Trabalho de Concluso de Curso apresentado ao Curso de Engenharia Eltrica da Universidade Positivo, para obteno de avaliao parcial da disciplina de Trabalho de Concluso de Curso (TCC), como requisito obteno do grau de Engenheiro Eletricista, sob a orientao do Prof. Mauricio Perreto.

Curitiba, 2008.

AGRADECIMENTOS

Agradecemos aos nossos mestres e colegas de turma por sempre nos incentivarem e nos ajudarem em todas as dificuldades que tivemos durante a criao e implementao. A Universidade Positivo por sempre nos fornecer os materiais e livros necessrios para o embasamento terico e prtico para a construo desse projeto. A todos que participaram de vrias formas da continuidade, do aprimoramento desse projeto ou que contriburam para a realizao deste trabalho. Ao Prof. Mauricio Perretto, orientador e amigo que participou conosco em todos os momentos crticos da criao desse produto.

Os cientistas estudam o mundo como ele , os engenheiros criam um mundo como ele nunca havia sido. - Theodore von Karman

RESUMO

O gerador de funes um instrumento eletrnico desenvolvido para gerar sinais eltricos, em formas de onda, com variadas freqncias (de Hz at Mhz) e amplitudes. Sua vasta aplicao no campo da Engenharia Eltrica cria uma necessidade de um maior grau de liberdade quanto as suas funes (formas de onda) possveis de serem geradas. Esse projeto consiste exatamente em possibilitar ao usurio, atravs de um software, desenhar o sinal que ser fornecido pelo gerador. A comunicao entre PC (personal computer) e o hardware ser atravs de uma interface sem fio, devido a sua larga utilizao na comunicao de instrumentos eletrnicos e praticidade de uso. Palavras-chave: Gerador de funes, ondas personalizadas, comunicao sem fio.

SUMRIO

INTRODUO ............................................................................................................... 1 1.1 PROBLEMA .................................................................................................................. 1 1.2 JUSTIFICATIVA ............................................................................................................. 1 1.3 OBJETIVOS ESPECFICOS .............................................................................................. 2 1.3.1 Diviso do Trabalho ............................................................................................... 2 FUNDAMENTAO TERICA ................................................................................. 3 2.1 SINAIS BSICOS DE UM GERADOR ................................................................................ 3 2.2 SISTEMAS DIGITAIS .................................................................................................... 5 2.3 AMOSTRAGEM ............................................................................................................. 6 2.4 QUANTIZAO............................................................................................................. 7 2.5 COMUNICAO SEM FIO ............................................................................................... 8 2.6 MICROCONTROLADOR ................................................................................................. 9 2.6.1 Arquitetura genrica de microcontrolador............................................................ 11 ESPECIFICAO TCNICA .................................................................................... 14 3.1 ESPECIFICAO GERAL .............................................................................................. 14 3.2 ESPECIFICAO FIRMWARE ........................................................................................ 15 3.3 COMUNICADOR SEM FIO ............................................................................................ 17 3.3.1 Modo Transparente............................................................................................... 20 3.3.2 Modo API (Application Programming Interface) ................................................ 21 3.4 ESPECIFICAO DO HARDWARE ................................................................................... 21 3.4.1 Memria Interna ................................................................................................... 21 3.4.2 Ajustes .................................................................................................................. 23 3.4.3 Microcontroladores............................................................................................... 23 3.5 SOFTWARE .................................................................................................................. 24 IMPLEMENTAO.................................................................................................... 27 SOFTWARE ................................................................................................................. 27 4.1 4.1.1 Interpolao .......................................................................................................... 28 4.1.2 Importao e Exportao de Arquivos ................................................................. 29 4.2 HARDWARE ............................................................................................................... 29 4.2.1 Circuito do Microcontrolador DsPic 30F4011 ..................................................... 30 4.2.2 Circuito de Ajuste de Amplitude e Offset............................................................. 31 4.2.3 Circuito do Mdulo XBee .................................................................................... 34 4.2.4 Circuito do Display LCD...................................................................................... 35 4.2.5 Circuito dos Botes .............................................................................................. 36 4.2.6 Circuito de Alimentao....................................................................................... 36 4.2.7 Montagens em protoboard ................................................................................... 38 4.2.8 Diagrama Esquemtico Completo do Circuito..................................................... 39 RESULTADOS.............................................................................................................. 40 5.1 MEMRIA EXTERNA .................................................................................................. 40 5.2 MEMRIA INTERNA ................................................................................................... 40 5.3 USO DO PLL (PHASE LOCKED LOOP) ............................................................................ 41 5.4 VETOR COM OS VALORES DO SOFTWARE .................................................................... 42 5.5 SALVAR E ABRIR ONDAS ............................................................................................ 43

PROTOCOLO DE COMUNICAO ................................................................................. 44 ONDA PROJETADA E RESULTADO FINAL ..................................................................... 45 6 CONCLUSES ............................................................................................................. 47 6.1 ANLISE DOS OBJETIVOS ........................................................................................... 47 6.2 CONCLUSES GERAIS ................................................................................................. 47 6.3 TRABALHOS FUTUROS ................................................................................................ 48 REFERNCIAS ..................................................................................................................... 49 APNDICE A CDIGO DO DSPIC 30F4011 ................................................................. 50 APNDICE B CDIGO DO PIC 16F877A...................................................................... 52 APNDICE C CDIGO DO SOFTWARE ....................................................................... 55 ANEXO A MOD_LCD.H ................................................................................................... 59 ANEXO B MANARQUIVO.CPP ...................................................................................... 61 ANEXO C CPORTA.H....................................................................................................... 62 5.6 5.7

LISTA DE FIGURAS

Figura 1 Onda senoidal........................................................................................................... 3 Figura 2 Onda quadrada......................................................................................................... 4 Figura 3 Onda triangular ........................................................................................................ 4 Figura 4 Quantizao.............................................................................................................. 5 Figura 5 Exemplo de Aliasing ................................................................................................. 7 Figura 6 Nvel de quantizao ................................................................................................ 8 Figura 7 Microcontrolador com os seus elementos bsicos e ligaes internas .................. 10 Figura 8 Unidade de entrada/sada que fornece comunicao com o mundo exterior ........ 11 Figura 9 Arquitetura Harvard............................................................................................... 12 Figura 10 Blocos do Projeto ................................................................................................. 15 Figura 11 Fluxograma do Firmware .................................................................................... 16 Figura 12 Placa CON-USBBEE ........................................................................................... 17 Figura 13 Mdulo XBee-Pro com placa CON-USBBEE em uso ..................................... 18 Figura 14 Mdulo XBee-Pro XBP24-AWI-001 ................................................................. 18 Figura 15 Tela do programa X-CTU .................................................................................... 19 Figura 16 Frame de dado padro RS232 (8-N-1)................................................................. 20 Figura 17 Estrutura do Frame de dados no modo API......................................................... 21 Figura 18 Espao de programao para o mapa de memria do Dspic 30F4011 .............. 22 Figura 19 Interface do software ............................................................................................ 25 Figura 20 Fluxograma do software ...................................................................................... 25 Figura 21 Software em uso.................................................................................................... 26 Figura 22 Tela Inicial ........................................................................................................... 27 Figura 23 Software em uso.................................................................................................... 28 Figura 24 Diagrama Esquemtico do DsPIC 30F4011........................................................ 30 Figura 25 Diagrama Esquemtico do PIC 16F877A............................................................ 31 Figura 26 Sinal obtido com Conversor Digital para Analgico ........................................... 32 Figura 27 Configurao Somador Inversor com ajuste de Offset ........................................ 33 Figura 28 Sinal obtido com Amplificador Operacional........................................................ 34 Figura 29 Diagrama Esquemtico do Mdulo XBee ............................................................ 35 Figura 30 Diagrama Esquemtico do Display LCD ............................................................. 35 Figura 31 Diagrama Esquemtico dos Botes ..................................................................... 36 Figura 32 Diagrama Esquemtico da Alimentao do Circuito .......................................... 37 Figura 33 Montagem do circuito em protoboard.................................................................. 38 Figura 34 Diagrama Esquemtico Completo ....................................................................... 39 Figura 35 Onda com PLL (a) e onda sem PLL (b) ............................................................... 42 Figura 36 Relao Ponto X Desenho .................................................................................... 42 Figura 38 Onda Desenhada .................................................................................................. 43 Figura 39 Onda Aberta a partir do arquivo em .csv ............................................................. 44 Figura 39 Protocolo de Comunicao .................................................................................. 45 Figura 40 Onda desenhada no software ............................................................................... 45 Figura 41 Onda Reproduzida no Hardware ......................................................................... 46

LISTA DE TABELAS

Tabela 1 Tabela de Quantizao ............................................................................................. 8 Tabela 2 Caractersticas Risc ............................................................................................... 13 Tabela 3 Descrio dos pinos dos mdulos XBee/XBee-Pro ............................................ 19

LISTA DE SMBOLOS/ABREVIATURAS/SIGLAS

Hertz (Hz) - Unidade de freqncia. Volts (V) - Unidade de tenso. Km/s - Unidade de Velocidade. M/s - Unidade de Velocidade. PC - Personal Computer. PWM - Pulse Width Modulation (Modulao por Largura de Pulso). CPU - Central Processing Unit (Unidade Central de Processamento). ULA - Unidade Lgica Aritmtica. OPCODE - Cdigo de operao. Tx - Transmissor Rx - Receptor DsPIC - Processador Digital de Sinais da Microchip LDO - Low Drop-Out (Regulador de Tenso) LED - Light Emitting Diode (Diodo Emissor de Luz) USB - Universal Serial Bus (Barramento Serial Universal)

INTRODUO

O gerador de funes um instrumento tcnico fundamental na rea da Engenharia Eltrica. Ele abrange uma grande variedade de utilizao, devido a ser um gerador de trs sinais bsicos, que so usados frequentemente. Sendo, o maior exemplo o sinal senoidal, que utilizado na rede eltrica aberta. Seu uso tambm esta intimamente ligado a gerao de sinais quadrados, sendo sua aplicao na rea da eletrnica digital. Outra aplicao a onda triangular, sendo usada na resposta de circuitos que necessitem de excitao de sinais lineares. Junto com os sinais, o gerador possui uma vasta possibilidade de ajustes de controle, para a forma de onda escolhida, desde a freqncia, amplitude, duty cycle, offset, entre outros.

1.1

PROBLEMA

O gerador, mesmo sendo um instrumento de amplo uso, no permite ao seu usurio a criao de sinais prprios, para experimentos que possuam aplicaes mais especficas, como a resposta de capacitores e circuitos ressonantes a diferentes tipos de sinais de entrada. Com a gerao de apenas trs tipos de sinais, o usurio necessita de tempo para harmoniz-lo com o circuito ao qual ir testar, para evitar que haja alguma avaria nos componentes. Ou no se consiga o resultado esperado.

1.2

JUSTIFICATIVA

O projeto tem como objetivo suprir a necessidade de um maior nmero de sinais. Para isso, atravs de uma interface no PC, na qual o usurio gere sinais discretos, atravs do uso de um mouse, tenha a possibilidade de selecionar a amplitude das amostras da forma de onda desejada, marcando os pontos no grfico por onde ela deva passar e, essa onda seja ge-

2 rada na sada. A comunicao entre PC e hardware feita por dois mdulos de comunicao sem fio, permitindo que o usurio no necessite mais do computador. Podendo levar o hardware para uma bancada ou para o campo, permitindo assim o incio do uso.

1.3

OBJETIVOS ESPECFICOS

Uma boa aplicao na rea de ensino didtico. No qual com os sinais fornecidos pode-se ver a reao de diferentes componentes. Assim como criar modulaes para esses sinais, verificar perodo, continuidade, respostas transitrias e permanentes de sistemas. Os limites de operao para o gerador so de 20 a 100 KHz nos sinais amostrados e com uma amplitude de -10 V at +10 V. A deciso de usar um sistema sem fio deve-se ao fato de que a comunicao wireless vem sendo mais comum a todos os equipamentos eletrnicos que necessitam de transmisso de dados. Tornando assim o gerador um equipamento possvel de comunicao com outros instrumentos e at mesmo com computadores portteis.

1.3.1

Diviso do Trabalho

O trabalho apresentado est dividido em captulos. Primeiramente vem a fundamentao terica, onde descrito a base do tratamento de sinais, os trs tipos de ondas comuns, a comunicao sem fio usada e o uso do microcontrolador, alm da definio de alguns possveis empecilhos nesse projeto como a parte de quantizao e aliasing. Logo aps h a especificao tcnica. Onde abordada a idia geral do projeto, diviso em blocos, especificao do software e seu fluxograma, assim como especificao do hardware e sua montagem.

3 2 FUNDAMENTAO TERICA

Neste capitulo apresentado o embasamento terico e fundamentos necessrios ao desenvolvimento desse trabalho.

2.1

SINAIS BSICOS DE UM GERADOR

O gerador de funes gera trs ondas analgicas; senoidal, triangular e retangular. Um sinal continuo aquele que possui um nmero infinito de valores em um determinado intervalo de tempo. Matematicamente, todo sinal uma funo que toma um valor em Cada ponto do espao em que est definida. A amplitude do sinal varia com o seu deslocamento no tempo. Como exemplo, a tenso disponvel na rede eltrica brasileira, varia senoidalmente do seu mnimo para seu mximo e novamente para seu mnimo sessenta vezes por segundo. Isso devido a sua freqncia de 60 Hz, a figura 1 exemplifica o sinal dito.

Figura 1 Onda senoidal Fonte prpria Outro modelo de sinal contnuo que usado frequentemente o sinal retangular. Essencialmente usado na eletrnica digital, onde ocorre uma variao brusca e instantnea de valores, criando assim os sinais quadrados como mostra a figura 2.

Figura 2 Onda quadrada Fonte prpria

O terceiro sinal fornecido o triangular, utilizado em sistemas que necessitam de variao linear. Ele tambm usado para fazer modulaes. O sinal mostrado na figura 3.

Figura 3 Onda triangular Fonte prpria A eletrnica analgica com sua enorme quantidade de variveis, cria uma difcil preciso na busca de resultados em experimentos. Para contornar isso, utilizamos uma tcnica chamada de converso digital, onde os sinais so representados atravs de pulsos finitos, permitindo uma maior exatido e uma maior alocao de informaes em um mesmo espao de banda.

5 2.2 SISTEMAS DIGITAIS

Sistemas digitais possuem muitas vantagens sobre os sistemas analgicos. Estes ltimos so circuitos construdos a partir de componentes de hardware, cujas propriedades podem variar consideravelmente dentro da especificao dos fabricantes. Elas tambm podem variar com a temperatura, alterando o comportamento do circuito. Em contra partida, o comportamento digital previsvel. Sendo que no afetado por esses problemas, porque majoritariamente feito por software. Pelas mesmas razes, os sistemas digitais so bem menos afetados por rudos que os analgicos, alm de consumirem muito menos energia. Os sistemas digitais so perfeitos para tratamento de sinal por sua exatido, por isso sero utilizados no projeto para conferir uma maior preciso na passagem das informaes do grfico para o hardware pelo mdulo wireless. Um sinal digital composto por um somatrio de impulsos que representam amostras do sinal analgico escolhido para ser digitalizado. Esse processo chama-se quantizao o processo de atribuio de valores discretos para um sinal cuja amplitude varia entre infinitos valores, como apresenta a figura 4. Esse processo realizado atravs da amostragem.

(a) Figura 4 Quantizao [Roland 2008]

(b)

6 2.3 AMOSTRAGEM

Um sinal analgico, para ser representado de forma digital, necessitaria ser dividido em um nmero infinito de pontos de informao. O processamento digital de sinais utiliza um computador, ou um microprocessador. Esses elementos, computadores e microprocessadores, no podem armazenar infinitas informaes, sendo necessrio o processo de amostragem. A amostragem reduz o nmero de pontos para um nvel aceitvel, sem que a forma do sinal original seja perdido. A freqncia de amostragem necessria para que se capture um nmero suficiente de pontos obedece a Teoria de Amostragem de Nyquist [VAN DE VEGTE 2002], onde ele diz que a freqncia de amostragem deve ser no mnimo o dobro da freqncia do sinal a ser amostrado. Como exemplo, se um sinal que contm uma freqncia de 20 kHz, deve ser amostrado 40.000 vezes por segundo, ou seja, a uma freqncia de 40 kHz. Caso contrrio, com uma freqncia de amostragem muito baixa, h a possibilidade de ocorrer um erro chamado aliasing. A figura 5 mostra os efeitos de uma baixa amostragem. Nele um sinal de 40 kHz usado para amostrar um grupo de sinais, de 10 kHz at 80 kHz. Os pontos de amostragem, iguais para todos os sinais, so representados em linhas tracejadas verticalmente. De acordo com a teoria de Nyquist, somente sinais de at 20 kHz poderiam ser amostrados usando uma taxa de amostragem de 40 kHz. O sinal de 30 kHz, mostrado na terceira janela da figura 4(a), tende a parecer como 10 kHz devido a insuficincia de pontos. E sinais de freqncias superiores, tendem a parecer freqncias na faixa de 0 Hz a 20 kHz pelo mesmo motivo.

(a)

(b)

Figura 5 Exemplo de Aliasing [VAN DE VEGTE 2002] Esse erro chamado aliasing. A maioria das pessoas pode perceb-lo quando assiste a um filme e tem a iluso das rodas de um carro parecendo estar rodando para trs. Isso um resultado direto de que o nmero de quadros do filme no foram gravados suficientemente rpidos para capturar a rotao correta das rodas. Outro detalhe do processamento digital a quantizao.

2.4

QUANTIZAO

Como j mencionado, sinais analgicos possuem duas caractersticas que os tornam inviveis para o processamento computacional. Primeiro, sinais analgicos so definidos em todos os pontos do tempo. A amostragem resolve isso reduzindo o nmero de pontos para um nmero finito. Segundo, esses sinais podem ter qualquer amplitude entre seus valores mnimos e mximos fsicos. Computadores usam grupo de bits para representar as amplitudes. Por exemplo, se dois bits so usados, haver somente quatro valores digitais 00, 01, 10, 11cada um para representar um valor de amplitude. Uma amostra analgica codificada escolhendo o valor mais prximo de quantizao, logo erros sempre existiro quando o nmero de bits for finito. Quando N bits so utilizados, 2N valores possveis podem ser representados pelo PC. Quanto maior o nmero de bits, mais prximo o valor digital se torna do analgico,

8 mas em compensao, maior o tempo para o processamento do sinal. A tabela 1 e a figura 6 mostram exemplos de quantizao. Tabela 1 Tabela de Quantizao [VAN DE VEGTE 2002] CDIGO DIGITAL 000 001 010 011 100 101 110 111 NVEL QUANTIZAO(V) 0,0 0,375 0,75 1,125 1,5 1,875 2,25 2,625 ALCANCE DE ENTRADA ANALGICAS PARA ESSE CDIGO DIGITAL (V) 0,0 x < 0,275 0,275 x < 0,5625 0,5625 x < 0,9375 0,9375 x < 1,3125 1,3125 x < 1,6875 1,6875 x < 2,0625 2,0625 x < 2,4375 2,4375 x < 3

Figura 6 Nvel de quantizao [VAN DE VEGTE 2002]

2.5

COMUNICAO SEM FIO

Sistemas de comunicao sem fio utilizam dispositivos chamados transmissores para criar ondas de rdio. Os sinais a serem transmitidos, como voz e dados, so convertidos em pulsos eletrnicos. Os transmissores modulam os sinais de rdio, a fim de que estes pos-

9 sam carregar os dados e ento transmitem os sinais de rdio modulados para reas distantes. Os receptores de rdio captam esses sinais, decodificando-os para obter o contedo original. [HAYKIN - 2001], [LATHI - 1998]. A freqncia a ser utilizada na transmisso influncia inversamente no alcance e no comprimento de onda do sinal. Esta relao apresentada na equao 1.

(1) onde: = comprimento de onda de uma onda sonora ou onda eletromagntica; c = velocidade da luz no vculo = 300.000 km/s = 300.000.000 m/s; f = frequncia da onda = Hz.

Para que a transmisso de dados neste sistema tenha xito importante que certos requisitos sejam respeitados. So estes os requisitos:

Potncia de transmisso; Mnima distoro na propagao do sinal; As condies anteriores devem ser mantidas dentro de parmetros suficientes para garantir a integridade dos dados transmitidos.

2.6

MICROCONTROLADOR

Pode-se definir um microcontrolador, como o mostrado na figura 7, sendo um pequeno componente eletrnico, dotado de uma inteligncia programvel, utilizado no controle de processos lgicos. Esses processos devem ser entendidos como controles de perifricos, tais como leds, botes, displays de 7 segmentos, displays de cristal lquido (LCD), resistncias, rels, sensores diversos (presso, temperatura, etc) e muitos outros. Os controles lgicos so chamados assim, pois suas aes so baseadas no estado dos perifricos de entrada e sada. A inteligncia do componente est associada Unidade Lgica Aritmtica (ULA), pois nessa unidade que todas as operaes matemticas e lgicas

10 so executadas. Quanto mais poderosa a ULA do componente, maior a sua capacidade de processar informaes. Ele considerado pequeno porque em uma nica pastilha de silcio, temos todos os componentes necessrios ao controle de um processo, ou seja, o microcontrolador est provido internamente de memria de programa, memria de dados, porta de entrada, e sada paralela, timers, contadores, comunicao serial, PWMs, conversores analgicosdigitais, etc. [RANGEL - 2008]

Figura 7 Microcontrolador com os seus elementos bsicos e ligaes internas [RANGEL 2008]

11 2.6.1 Arquitetura genrica de microcontrolador

Todo microcontrolador possui em sua arquitetura as partes descritas a seguir:

Memria de programa - Nesta fica as instrues que um microcontrolador deve executar, ou seja, as linhas de programao foram digitadas em um PC. Memria de dados - a parte do controlador que permite ao programador escrever ou ler um determinado dado sempre que necessrio. ULA - Chamada de Unidade Lgica Aritmtica, esta parte do microcontrolador responsvel por todos os clculos e a lgica matemtica para tomada de deciso das tarefas a serem realizadas. I/Os - So os braos dos microcontroladores, mostrado na figura 8. por eles que consegue inserir e receber dados dos chips, bem como controlar dispositivos mecnicos e eltricos. Em outras palavras so os caminhos que fazem a interligao do microcontrolador com o mundo externo.

Figura 8 Unidade de entrada/sada que fornece comunicao com o mundo exterior [RANGEL - 2008] CPU - Conhecida como Unidade Central de Processamento esta parte do microcontrolador responsvel por todo processamento de dados da unidade. ela que interpreta os comandos e ativa os dispositivos de entrada e sada. [RANGEL - 2008].

12 Unidade de Temporizao - Tendo a unidade de comunicao srie implementada, pode-se receber, enviar e processar dados. Contudo, para ser capaz de utilizar isto na indstria precisa-se ainda de mais alguns blocos. Um deles o bloco de temporizao que interessa bastante porque pode dar informaes acerca da hora, durao, protocolo, etc. A unidade bsica do temporizador um contador que na realidade um registro cujo contedo aumenta de uma unidade num intervalo de tempo fixo, assim, anotando o seu valor durante os instantes de tempo T1 e T2 e calculando a sua diferena, obtm-se a quantidade de tempo decorrida. Esta uma parte muito importante do microcontrolador, cujo domnio requer muita da ateno. RISC CPU - Na arquitetura Harvard existem dois barramentos, sendo um de dados e outro de instrues no caso dos microcontroladores PIC, o barramentos de dados sempre de 8 bits e o de instrues podem ser de 12, 14, 16 bits dependendo do microcontrolador. Este tipo de arquitetura permite que enquanto uma instruo executada outra seja buscada na memria, o que torna o processo mais rpido. Alm disso, como o barramento de instrues maior que 8 bits, o OPCODE (Cdigo de Operao) da instruo j inclui o dado e o local onde ele vai operar (quando necessrio), significa que apenas uma posio de memria utilizada por instruo, economizando muita memria de programa. A arquitetura Harvard tambm possui um repertrio com menos instrues que a de Von-Neumann, e essas so executadas apenas num nico ciclo de relgio. Os microcontroladores com arquitetura Havard, so tambm designados por microcontroladores RISC (Computador com Conjunto Reduzido de Instrues). A tabela 2 mostra a diferena entre Risc e Cisc. A figura 9 mostra as arquiteturas Harvard versus Von Neumann. [MIKRO - 2008].

Figura 9 Arquitetura Harvard - [MIKRO - 2008]

13

Tabela 2 Caractersticas Risc [VEIGA 2008]

CARACTERISTICAS RISC Risc Instrues simples levando um ciclo Apenas loads/setores referenciam a memria Altamente pipeline Instrues executada pelo hardware Poucas instrues e, mais de end. A complexidade est no compilador Mltiplos conjuntos de registradores

14

ESPECIFICAO TCNICA

Este captulo tem como objetivo descrever as especificaes dos componentes que sero utilizados para o desenvolvimento do projeto.

3.1

ESPECIFICAO GERAL

Nesta fase pode-se ver o projeto como um todo no diagrama em bloco apresentado na figura 10. No bloco PC est localizado o software, onde realizado o desenho da forma de onda desejada. O hardware no depende do programa para gerar as formas de ondas: senoidal, triangular e quadrada. Caso queira desenhar uma outra forma de onda, ele dever utilizar o software para realizar o desenho e a gravao. Aps realizar esse procedimento, o usurio est livre do computador para fornecer a onda na sada. Quando essa forma de onda enviada, ela vai para o bloco Tx, onde realizada a transmisso wireless. O bloco Rx recebe essa forma de onda, que mandar imediatamente para o bloco Microcontrolador. Esse bloco faz o armazenamento da onda dentro de sua prpria memria EEPROM. Para se realizar a gerao de algum dos quatro sinais, feito a seleo atravs do bloco Botes. Nesse bloco escolhida a forma de onda e feito o ajuste da freqncia. Aps definir esses dois parmetros, o Microcontrolador busca em sua memria os dados referentes a onda que enviada para o bloco D/A, onde feita a converso do sinal digital para o analgico. Em seguida, o sinal ir para o bloco Ajustes onde feito os ajustes de amplitude e offset.

15

Figura 10 Blocos do Projeto Fonte prpria Com esse gerador de funes, ser possvel obter sinais com uma freqncia de 20 100 kHz e uma amplitude variando de no mnimo -10V at o mximo de +10V. Podendo ser realizado qualquer ajuste dentro desses intervalos.

3.2

ESPECIFICAO FIRMWARE

A figura 11 mostra o fluxograma do Firmware. No incio feito a seleo da forma de onda desejada. Caso a onda senoidal seja selecionada, ele ir gerar essa onda, indo para o ajuste da freqncia, ocorrendo o mesmo para a onda triangular e quadrada. Caso deseje receber uma nova onda proveniente do software, ser habilitado o receptor fazendo seu armazenamento na memria atravs do microcontrolador. Caso a onda aleatria seja selecionada, ele ir gerar a ltima forma de onda gravada, indo para o ajuste da freqncia. Se nenhuma forma de onda foi selecionada, o hardware no ir gerar sinal, retornando para seu menu inicial.

16

Figura 11 Fluxograma do Firmware Fonte prpria

17 3.3 COMUNICADOR SEM FIO

A comunicao feita por dois mdulos de comunicao sem fio, um deles instalado no hardware e o outro conectado ao PC atravs de um emulador de portas USB/Serial, chamado CON-USBBEE. [MESSIAS 2008] A placa CON-USBBEE, mostrada na figura 12, usa um chip conversor USB/Serial; regulador de tenso LDO (baixa queda de tenso), comparador de tenso conectado aos LEDs (RSSI) que simulam a fora do sinal de radio freqncia; LEDs indicadores de TX, RX, mdulo ligado (ASS), e um microboto para resetar o mdulo de comunicao.

Figura 12 Placa CON-USBBEE [MESSIAS - 2008]

Ao instalar no computador o driver USB que acompanha a placa, criada no Windows uma porta COMx virtual quando a placa CON-USBBEE plugada. Assim, possvel atravs de um programa, no caso o C/C++Builder, se comunicar com a placa como se fosse uma comunicao serial padro RS232. A figura 13 mostra o mdulo em uso em um laptop.

18

Figura 13 Mdulo XBee-Pro com placa CON-USBBEE em uso [MESSIAS - 2008] A comunicao entre o software e o hardware ser realizada pelo sistema wireless. O mdulo aqui utilizado o XBee-Pro XBP24-AWI-001 (antena fio) da ZigBee/IEEE 802.15.4, mostrado na figura 14. atravs dele que o hardware ser gravado com a nova forma de onda desenhada pelo usurio atravs do software.

Figura 14 Mdulo XBee-Pro XBP24-AWI-001 [MESSIAS - 2008]

Na tabela 3 est descrito o significado de cada pino dos mdulos XBee-Pro, como podemos ver, h pinos que podem exercer diferentes funes como, entrada analgica, entrada/sada digital, controle de fluxo e PWM. A maneira mais fcil para configurar a funo de um determinado pino do mdulo ou mesmo outros parmetros, atravs do programa XCTU, representado na figura 15.

19 Tabela 3 Descrio dos pinos dos mdulos XBee/XBee-Pro - [MESSIAS - 2008]


Pino # Nome Direo Descrio 1 VCC Alimentao 3,3v 2 DOUT Sada Sada de dados da UART 3 DIN / CONFIG Entrada Entrada de dados da UART 4 DO8* Sada Sada digital 8 5 RESET Entrada Inicializa mdulo (um pulso nvel 0 de pelo menos 200ms) 6 PWM0 / RSSI Sada Sada do PWM 0 / Indicador de Fora do sinal de RF (RX) 7 PWM1 Sada Sada do PWM 1 8 (Reservado) Ainda no tem uma funo definida (futura implementao) 9 DRT/ SLEEP_IRQ / DI8 Entrada Linha de Controle da Funo Sleep ou Entrada digital 8 10 GND Terra 11 AD4 / DIO4 Entrada/Sada S Entrada Analgica 4 ou Entrada/Sada Digital 4 12 CTS/ DIO7 Entrada/Sada Controle de Fluxo CTS ou Entrada/Sada Digital 7 13 ON / SLEEP Sada Indicador de Estado do Mdulo 14 VREF Entrada Tenso de Referncia para as Entradas A/D Associao / AD5 / Indicador de Associao, s Entrada Analgica 5 ou Entra15 Entrada/Sada DIO5 da/Sada Digital 5 Controle de Fluxo RTS, s Entrada Analgica 6 ou 16 RTS/ AD6 / DIO6 Entrada/Sada Entrada/Sada Digital 6 17 AD3 / DIO3 Entrada/Sada S Entrada Analgica 3 ou Entrada/Sada Digital 3 18 AD2 / DIO2 Entrada/Sada S Entrada Analgica 2 ou Entrada/Sada Digital 2 19 AD1 / DIO1 Entrada/Sada S Entrada Analgica 1 ou Entrada/Sada Digital 1 20 AD0 /DIO0 Entrada/Sada S Entrada Analgica 0 ou Entrada/Sada Digital 0

Figura 15 Tela do programa X-CTU [MAXSTREAM - 2008]

20 Basicamente os mdulos XBee-Pro j vm de fbrica configurados para serem usados diretamente, o mnimo que precisamos fazer para estabelecer um link de comunicao alimentar os mdulos corretamente com uma tenso de 3,3V. A comunicao entre os mdulos pode ser realizada de dois modos diferentes: Modo Transparente e Modo API.

3.3.1

Modo Transparente

Os dados recebidos da UART pelo pino DI(RX) so colocados na fila para transmisso via RF. J os dados recebidos do canal de RF, so transmitidos atravs do pino DO(TX). No modo transparente os dados so transmitidos e recebidos da mesma forma que uma comunicao Serial RS232 padro, como mostra a figura 16. Os mdulos dispem de buffers de transmisso e recepo para um melhor desempenho na comunicao serial.

Figura 16 Frame de dado padro RS232 (8-N-1) [MESSIAS - 2008]

21 3.3.2 Modo API (Application Programming Interface)

Esse modo de operao uma alternativa ao modo de operao Transparente padro. O modo API baseado em frame e assim estende o nvel para o qual uma aplicao de Host pode interagir com as capacidades de rede do mdulo, mostrado na figura 17. No modo API os dados transmitidos e recebidos esto contidos em frames, que definem operaes ou eventos dentro do mdulo. Atravs desse modo de operao possvel um determinado mdulo enviar endereo fonte, endereo destino, nome de um determinado n, sinal RSSI, estado, e muito mais. [MESSIAS - 2008]

Figura 17 Estrutura do Frame de dados no modo API - [MESSIAS - 2008]

3.4

ESPECIFICAO DO HARDWARE

Este captulo tem como objetivo descrever os dispositivos utilizados na composio do hardware.

3.4.1

Memria Interna

O Dspic 30F4011 possui uma memria interna de 1 Kbytes, seu endereamento localizado no datasheet do componente. Como mostra a figura 18.

22

. Figura 18 Espao de programao para o mapa de memria do Dspic 30F4011 Fonte Prpria. Como mostrado na figura 18, o primeiro endereo da memria EEPROM interna comea em 7FFC00 e vai at 7FFFFE. Como o nmero de ondas a serem gravadas so quatro e cada uma possui 128 (bytes), chega-se a um total de 512 posies de memria para todas as ondas. O endereamento feito em hexadecimal, logo o uso dos endereos ir de 7FFC00 at 7FFE00, sendo que as 384 primeiras posies so fixas contendo os valores das ondas senide, triangular e quadrada. O nico trecho que variado da onda aleatria, que receber os valores do mdulo.

23 3.4.2 Ajustes

No bloco Ajustes, so realizados dois ajustes: offset e amplitude. O primeiro ser feito com o auxlio de um amplificador operacional, o LM318. Ser feito a configurao do somador inversor, onde ser somada uma tenso negativa na entrada do amplificador operacional, sendo ajustado o seu valor de tenso atravs de um potencimetro, realizando assim o ajuste de offset. O ajuste de amplitude ser feito atravs de um potencimetro no resistor de ganho do amplificador. Sendo o sinal novamente enviado a um amplificador com a configurao inversor para desinverter o sinal sua posio de origem.

3.4.3

Microcontroladores

Os microcontroladores tero um papel fundamental no projeto, ser utilizado um DsPIC 30F4011 e um PIC 16F877A. O primeiro utilizado por causa da alta velocidade de trabalho. Ele a ponte de ligao entre o software e a sada do hardware, responsvel por receber os dados da comunicao sem fio. Uma de suas sadas ser conectada diretamente em um pino de ativao do mdulo, fazendo com que o mdulo receptivo seja habilitado para receber dados da transmisso. Enviando-os a sua memria e atravs de seus botes ser feita a seleo das ondas atravs da leitura e rpida repetio dos valores dos dados dando assim a impresso de ser criada uma onda continua no tempo e sendo repetida infinitamente. Alm da seleo da onda a ser usada, seu maior papel o ajuste da freqncia a ser gerada na sada. J o segundo tem como funo controlar a exibio dos textos do LCD e o valor da freqncia.

24 3.5 SOFTWARE

O software ter uma interface bastante simples para o usurio. Um menu de opes como salvar, abrir arquivos, ajuda, nova tela e outra opes ser fornecido para dar menos trabalho na hora de iniciar uma nova gerao de onda, sendo que a opo de salvar a onda criada gerar um arquivo em formato Excel para simplificar o entendimento de como funciona a criao dos dados a partir da onda desenhada. Ao abrir o programa, o usurio ficar de frente com uma interface que possui um grfico [STEEMA - 2000], dois botes, duas editbox e uma listbox, onde o primeiro ter seus dois eixos variando de 0 a 127 valores cada um, mostrado na figura 19. Aps desenhar as retas que formaro as ondas com cliques de mouse, a qual dever obrigatoriamente comear no valor (0;0), o usurio dever clicar no boto compila para que seja feita uma verificao de obedincia das condies pr estabelecidas adiante para se montar a onda. Aps a compilao, o boto enviar se tornar disponvel para ser selecionado, comeando assim o enlace de transmisso entre o PC e o hardware, caso contrrio uma mensagem ir aparecer na tela dizendo que a forma de onda no aceitvel, mostrado no fluxograma da figura 20. A listbox ter como funo marcar os pontos e valores clicados no grfico para conhecimento do usurio e tambm para registro na hora do envio das informaes para o hardware. Outra possvel demarcao de pontos no grfico numericamente, atravs das duas editbox que possibilitam uma maior preciso na escolha dos pontos, j que isso acontece atravs de valores exatos l digitados.

25

Figura 19 Interface do software Fonte Prpria

Figura 20 Fluxograma do software Fonte Prpria

26

Aps a onda ser desenhada como na figura 21 e o boto de Compilar pressionado, o programa ir fazer uma varredura no desenho, procurando por erros no desenho e procurando ver se as condies necessrias para enviar a onda foram seguidas, como: - O incio da onda deve ser obrigatoriamente no ponto (0;0) do grfico e o fim obrigatoriamente no ponto (127;0). - A onda deve ser continua durante todo o trajeto. - No deve haver mais de um valor em Y para cada valor em X.

Figura 21 Software em uso Fonte Prpria O programa dividir o eixo das abscissas em 127 pontos de informao, onde cada um desses pontos ter 7 bits de possveis valores que ser representado pelo eixo das ordenadas. Aps isso o programa salvar apenas os pontos aonde h informao, ou seja, aonde a linha do grfico foi encontrada. Enviando essas informaes para o mdulo sem fio para comear a transmisso.

27 4 IMPLEMENTAO

Neste captulo, ser descrita a implementao do projeto, incluindo montagens, diagramas esquemticos, software, testes.

4.1

SOFTWARE

Na tela inicial do form foi inserido o elemento do grfico, o TChart, ele o principal componente do programa. Para ajustar os pontos do grfico para estarem sincronizados com a posio do mouse necessrio fazer um clculo interno j que as posies (X;Y) do grfico no so os mesmos valores de posies existentes nas coordenadas do form. Aps isso deve-se implementar os comandos que vo garantir que o desenho no grfico comee em (0;0) e terminar em (127;0), para possibilitar a continuidade do perodo da onda desenhada. Atravs de uma ListBox so armazenados os valores das posies selecionadas com o mouse para o clculo da interpolao das retas intermedirias. Para uma melhor preciso no desenho, possvel a insero numrica de valores no grfico atravs de duas EditBox representando os valores X e Y do ponto desejado. Por fim, um menu localizado no canto esquerdo superior possibilita a gravao dos pontos selecionados em um arquivo .csv e a importao do arquivo j gerado. A tela principal do software apresentada na figura 22.

Figura 22 Tela Inicial Fonte Prpria

28 4.1.1 Interpolao

Uma das necessidades do projeto de uma interpolao linear no grfico, j que aps o desenho do sinal apenas os pontos selecionados tiveram suas coordenadas marcadas, sendo necessrio o clculo dos outros pontos, intermedirios as retas desenvolvidas, como mostra a figura 23.

Figura 23 Software em uso Fonte Prpria Aps a escolha de todos os pontos da forma de onda, o boto Compilar far a captura dos pontos registrados no ListBox e com eles calcular a interpolao dos valores dos pontos intermedirios. Aps esse clculo, o boto Enviar ser habilitado e quando pressionado criar um vetor com os valores das amplitudes de cada ponto em sua devida posio entre os 128 pontos e comear a transmisso. A onda criada no grfico nada mais do que vrios trechos de retas que juntas formam o desenho desejado. A interpolao necessita do ponto inicial e final para que formem as retas a serem conferidas para calcular os outros pontos. Atravs dos dois pontos de cada reta e da equao bsica de uma reta (y = ax + b) [SWOKOWSKI - 1994] possvel

29 conferir valores a a e b. Com a substituio de x por seus 127 valores, surgem seus iguais para y. As equaes abaixo mostram os pontos (x2;y2) e (x1;y1). Subtraindo a equao (2) da equao (1), temos o cancelamento da varivel b (3), com isso pode-se isolar a e descobrir seu valor. Substituindo depois na equao original possvel achar o valor de b, completando assim a equao.

y2 = a.x2 + b y1 = a.x1 + b y2 y1 = a.( x2 x1 )

(1) ( 2) (3)

4.1.2

Importao e Exportao de Arquivos

Um recurso do programa salvar os dados da onda desenhada em arquivo .CSV (comma-separated values). Os valores ficam salvos em duas colunas, cada uma representando um eixo de coordenadas. Quando o usurio quiser reproduzir uma onda j criada, basta abrir o arquivo j salvo.

4.2

HARDWARE

Neste item, sero tratadas as implementaes que contemplam o hardware do sistema.

30 4.2.1 Circuito do Microcontrolador DsPic 30F4011

Um dos microcontroladores utilizado o DsPIC 30F4011, devido sua velocidade de processamento. A figura 24 mostra uma configurao bsica para o respectivo componente.

Figura 24 Diagrama Esquemtico do DsPIC 30F4011 Fonte Prpria

31 O outro PIC utilizado o 16F877A, utilizado na configurao do LCD, mostrado na figura 25.

Figura 25 Diagrama Esquemtico do PIC 16F877A Fonte Prpria

4.2.2

Circuito de Ajuste de Amplitude e Offset

Os dados referentes ao sinal da onda selecionada sairo do DsPIC em 7 bits, sendo enviados para um conversor digital/analgico. A configurao do conversor foi montada e nela realizado alguns testes. Com a utilizao desse dispositivo o sinal obtido na sada com distores como mostra a figura 26.

32

Figura 26 Sinal obtido com Conversor Digital para Analgico Fonte Prpria

Devido a estas distores, foram realizados testes utilizando um amplificador operacional, configurando como somador inversor, como mostra a figura 27. Nesta configurao realizado o ajuste de offset atravs do potencimetro R19, onde h um divisor resistivo na entrada no inversora do amplificador operacional. Variando o valor dessa resistncia, varia o valor da tenso de entrada no amplificador, realizando desta forma o ajuste de offset. O ajuste de amplitude realizado diretamente no resistor de ganho do amplificador (R18). O sinal invertido sai do primeiro amplificador operacional sendo invertido novamente no segundo.

33

Figura 27 Configurao Somador Inversor com ajuste de Offset Fonte Prpria

34 Aps a realizao de testes com esta configurao somador inversor [PERTENCE - 1996], foi obtido um sinal livre das distores apresentadas com a utilizao do conversor de digital para analgico. A figura 28 mostra o sinal obtido com o somador inversor.

Figura 28 Sinal obtido com Amplificador Operacional Fonte Prpria

4.2.3

Circuito do Mdulo XBee

O mdulo XBEE responsvel pela comunicao entre o software e o hardware, o diagrama esquemtico dele apresentado na figura 29. O pino 2 representado por f2 o transmissor e o pino 3 onde feito um divisor resistivo porque o DsPIC opera em 5V, enquanto o mdulo opera em 3,3V, representado por f3 o receptor do mdulo.

35

Figura 29 Diagrama Esquemtico do Mdulo XBee Fonte Prpria

4.2.4

Circuito do Display LCD

O display LCD usado para mostrar a interface do hardware para o usurio e exibir o valor da freqncia. A figura 30 mostra o diagrama esquemtico do display de LCD. Nos pino 1 e 2 feita a alimentao. No pino 3 h um trimpot para fazer o ajuste do contraste. Os pinos 6, 8, 13, 14, 15 e 16 so conectados ao PIC 16F877A, sendo pinos de controle e dados.

Figura 30 Diagrama Esquemtico do Display LCD Fonte Prpria

36 4.2.5 Circuito dos Botes

A seleo da forma de onda feita atravs de botes. O diagrama esquemtico apresentado na figura 31. Para os botes usado o port D e port C do DsPIC e tambm usado o port A do PIC 16F877A.

Figura 31 Diagrama Esquemtico dos Botes Fonte Prpria

4.2.6

Circuito de Alimentao

A alimentao do circuito feita atravs de um transformador com sada 15 + 15V de 500mA. As sadas do transformador so ligadas em uma ponte retificadora e conectada em 2 reguladores de tenso. Um o LM7812 que ir regular a tenso para +12V e o outro o LM7912 que ir regular a tenso para -12V. Essa alimentao usada pelo amplificador operacional. Na sada do regulador LM7812 ligado um LM7805 para regular a tenso para 5V para alimentar o DsPIC, Display LCD. Na sada do regulador LM7805 ligado o LM7833

37 que regula a tenso para 3,3V para alimentar o Mdulo XBee. O diagrama esquemtico da alimentao mostrado na figura 32.

Figura 32 Diagrama Esquemtico da Alimentao do Circuito Fonte Prpria

38 4.2.7 Montagens em protoboard

Os circuitos foram implementados em estgios, testados e ensaiados individualmente, em seguida foram montados no protoboard. Na figura 33, est a montagem completa.

Figura 33 Montagem do circuito em protoboard Fonte Prpria

39 4.2.8 Diagrama Esquemtico Completo do Circuito

Na figura 34 est o esquemtico completo do circuito, contendo todos os estgios utilizados no hardware.

Figura 34 Diagrama Esquemtico Completo Fonte Prpria

40 5 RESULTADOS

Este captulo tem como objetivo descrever os resultados obtidos atravs dos testes realizados durante a produo deste projeto: - Uso de memria externa. - Uso de memria interna. - Uso de PLL (Phase Locked Loop) - Teste dos valores de compilao - Abertura e fechamento de arquivos de ondas - Protocolo de comunicao - Onda projetado - Resultado final

5.1

MEMRIA EXTERNA

Iniciamente, durante a elaborao do projeto foi considerada a idia de ter uma memria externa modelo 24LC256, para armazenar os valores das ondas. Mas devido a alta velocidade do DsPic e a baixa velocidade de resposta do componente de memria, no estava sendo possivel fazer o armazenamento, pois os valores que chegavam pelo mdulo eram muito rapidamente enviados para a memria sem ela ter tempo de salv-los. Devido a esse motivo foi utilizada a memria EEPROM interna ao 30F4011, j que sua capacidade era suficiente pra armazenar as quatros ondas e ao mesmo tempo possuia uma resposta rapida tanto para gravao quanto para leitura.

5.2

MEMRIA INTERNA

O DsPIC 30F4011 possui uma memria interna de 1 Kbytes, seu endereamento localizado no datasheet do componente.

41 O primeiro endereo da memria EEPROM interna comea em 7FFC00 e vai at 7FFFFE. Como o nmero de ondas a serem gravadas so quatro e cada uma possui cento e vinte e oito valores (bytes). Chega-se a um total de quinhentos e doze posies de memria para todas as ondas. O endereamento feito em hexadecimal, logo o uso dos endereos ir de 7FFC00 at 7FFE00, sendo que as trezentas e oitenta e quatro primeiras posies so fixas contendo os valores das ondas senide, triangular e quadrada. O nico trecho que variado da onda aleatria, que receber os valores do mdulo.

5.3

USO DO PLL (PHASE LOCKED LOOP)

Devido ao uso de vrias instrues dentro do microcontrolador, houve uma queda significativa de freqncia para prximo de 20 kHz. O objetivo de utilizar o PLL para um alcance maior de freqncia no foi alcanado, j que se manteve constante tanto com seu uso quanto sem, o que no possibilitou o alcance de 100 kHz. Sendo o nico responsvel pela freqncia o crystal de 20 MHz. Acredita-se que sua disfuno tenha ocorrido devido a estruturao interna do DsPIC 30F4011, ou seja, os blocos dos timers no so interligados ao bloco do PLL, surtindo nenhum efeito na freqncia. A figura 35 mostra uma comparao de um mesmo tipo de onda com o PLL ativado e sem ele. Nota-se que nada foi alterado.

42

(a)

(b)

Figura 35 Onda com PLL (a) e onda sem PLL (b) Fonte Prpria

5.4

VETOR COM OS VALORES DO SOFTWARE

Toda a lgica usada dentro do software serve a para um nico propsito, a criao de um vetor final com os 128 valores digitais para serem reproduzidos no hardware. Com uma lgica de posicionamento dos valores e outra de interpolao, possvel ver na listbox ao pressionar o boto compila que os valores so automaticamente gerados e j assumem sua posio no vetor em relao a sua posio no grfico como mostra a figura 36.

Figura 36 Relao Ponto X Desenho Fonte Prpria

43 5.5 SALVAR E ABRIR ONDAS

No momento em que solicitado no programa para salvar a onda desenhada em um arquivo .csv atravs do comando salvar como. Os valores que se encontram na listbox so automaticamente enviados para uma tabela formada por duas colunas e 128 linhas, onde a primeira coluna indica a posio do ponto e a segunda coluna indica o valor do ponto. Ao se recuperar a onda no software atravs do comando abrir, o processo inverso feito, os valores so enviados ao listbox e a partir de l so recriados no grfico. Devido a serem valores lidos, ao ser recriada, a onda pode sofrer um pequeno erro de quantizao, pois quando foi desenhada seus valores no trabalho de interpolao foram criados como inteiros, havendo um arredondamento dos valores reais do grfico. Um exemplo esta sendo mostrado nas figuras 39 (onda desenhada) e 40 (onda aberta a partir do arquivo salvo).

Figura 37 Onda Desenhada Fonte Prpria

44

Figura 38 Onda Aberta a partir do arquivo em .csv Fonte Prpria

Esse erro de quantizao amortecido pelo prprio hardware, atravs da passagem de digital para analgico no final do processamento dos valores.

5.6

PROTOCOLO DE COMUNICAO

Com o uso do osciloscpio, possvel ver a transmisso dos dados de handshake que garantem o sincronismo e o encaminhamento dos dados. Eles obedecem a seguinte instruo, mostrada na figura 39.

45

Figura 39 Protocolo de Comunicao Fonte Prpria

5.7

ONDA PROJETADA E RESULTADO FINAL

Aps a concluso do tratamento do sinal, pode-se comparar a forma desenhada no software com a forma na sada do hardware. As figuras 40 e 41 mostram o resultado.

Figura 40 Onda desenhada no software Fonte Prpria

46

Figura 41 Onda Reproduzida no Hardware Fonte Prpria

47 6 CONCLUSES

Aqui so discutidos os resultados obtidos durante todas as fases do projeto. Desde as variveis controladas at aquelas que podem ter uma influncia externa no trabalho. Tambm sero comentados os benefcios do projeto em relao aos objetivos especificados em seu inicio.

6.1

ANLISE DOS OBJETIVOS

O principal objetivo de construir ondas com formas variadas de uma maneira fcil e simples foi alcanado com os valores de amplitude variando de -10V at +10V e com um ajuste de offset. A comunicao sem fio funcionou perfeitamente dentro dos parmetros dos componentes. O objetivo de alcanar a freqncia mxima de 100kHz atingindo apenas quando os timers so desativados, mas como sendo eles de uso essencial no projeto, a freqncia mxima ficou limitada ao crystal de 20 MHz utilizado, j que o PLL no faz efeito sobre os timers.

6.2

CONCLUSES GERAIS

Com esse projeto, h uma facilidade quanto ao uso de sinais eltricos para diversos meios e reas, como computao, sonorizao, construo de circuitos e outros. Ele uma forma inovadora de tratar sinais eltricos digitalmente, pois com ele pode-se economizar uma boa parte de hardware, tudo tratado com programao, desde o reconhecimento dos pontos no grfico at o envio para o hardware. Esse projeto tende incrementar a evoluo de equipamentos de testes eletrnicos, que possuem reguladores analgicos para aferio dos sinais.

48 Esse projeto mostra como qualquer sinal analgico pode ser tratado digitalmente e suas vantagens na hora do processamento e tratamento digitais. Com essa tecnologia pode-se criar novos equipamentos que simplificaro ainda mais a vida de engenheiros de produo e desenvolvedores.

6.3

TRABALHOS FUTUROS

Com esse projeto possvel seguir vrios caminhos de desenvolvimento, foi pensando nisso que foi utilizada a comunicao sem fio, permitindo assim uma maior compatibilidade. Outra evoluo seria na utilizao de microcontroladores mais eficientes e rpidos a medida que forem sendo desenvolvidos no mercado, permitindo assim uma maior freqncia e exatido j que ser possvel um maior nmero de bits na hora de amostrar os pontos. Outra evoluo seria outras interpolaes alm da linear usada neste projeto, permitindo assim ondas mais variadas.

49

REFERNCIAS

VAN DE VEGTE, Joyce. Fundamentals of digital signal processing. Upper Saddle River, NJ:

Prentice Hall, 2002. ROLAND, M. Zurmely. Quantizao e Codificao. PY4ZBZ, Sete Lagoas, Minas Gerais, Abril 2008. Disponvel em <http://paginas.terra.com.br/lazer/py4zbz/teoria/quantiz.htm>. Acesso em: 25 maio 2008. HAYKIN, Simon S. Communication systems . 4th. New York: J. Wiley & Sons, 2001. LATHI, B. P. (Bhagwandas Pannalal). Modern digital and analog communication systems. 3rd ed. -. New York: Oxford University Press, 1998. PERTENCE JUNIOR, Antonio. Amplificadores operacionais e filtros ativos : teoria, projetos, aplicaes e laboratorio. 5.. ed. So Paulo: MAKRON, 1996. MESSIAS, Antonio Rogrio. Controle remoto e aquisio de dados via XBee/ZigBee. Disponvel em: <http://www.rogercom.com >. Acesso em: 22 maio. 2008. RANGEL, Arthur. TCC. Histria dos microprocessadores, So Paulo .Disponvel em: <http://www.dca.fee.unicamp.br/~rangel/tcc/tcc-2_corrigido.doc>. Acesso em: 21 de maio de 2008. MIKRO, Elektronika. Introduo aos Microcontroladores. Disponvel em: < http://www.mikroe.com/pt/product/books/picbook/capitulo1.htm >. Acesso em: 15 de maio de 2008. MAXSTREAM, Data Radio Modems and Radio Modules. <http://www.maxstream.net/>. Acesso em: 3 de maio de 2008. Disponvel em:

VEIGA, Srgio Luis. Microprocessadores e Microcontroladores. Introduo aos Microcontroladores, Curitiba. Disponvel em: < http://www.up.edu.br/ >. Acesso em: 5 de maio de 2008. STEEMA. Getting Started With TeeChart Pro VCL. EUA, 2000. Disponvel em: <http://www.steema.com/products/teechart/getting_started_with_teechart_pr.htm>. Acesso em: 10 de abril de 2008.

50 APNDICE A CDIGO DO DSPIC 30F4011

#include <30F4011.h> #fuses HS,NOWDT,NOPROTECT,NOBROWNOUT,NOMCLR #use delay(clock=160M,crystal=10M) #use rs232(BAUD=19200, XMIT=PIN_F5,RCV=PIN_F4,BITS=8,UART2) #include <input.c> #include <i2c.c> #define TAM 128 int8 x=0; int i=0; int tabela1[]= {127,127,127,126,125,123,120,117,113,109,105,100,94,88,83,76,70,64,58,52,45,40,34,28,23,19,15,1 1,8,5,3,1,0,0,0,1,3,5,8,11,15,19,23,28,34,40,45,52,58,64,70,76,83,88,94,100,105,109,113,117,120, 123,125,126}; int tabela2[]= {0,4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64,68,72,76,80,84,88,92,96,100,104,108,112,116,120, 124,127,124,120,116,112,108,104,100,96,92,88,84,80,76,72,68,64,60,56,52,48,44,40,36,32,28,24,20, 16,12,8,4,0}; int tabela3[]= {127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127, 127,127,127,127,127,127,127,127,127,127,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0}; int tabela4[128]; int8 estado, cont; int8 valores[TAM]; int t=0; int8 onda = 0; void lerSerial() { char lido; lido = getc(); if(estado == 0 && lido==0x55) { putc(0xAA); estado = 1; } else if(estado == 1 && lido==0xAA) { putc(0xAA); // com->EnviaDado(&val,1); estado = 2; cont = 0; } else if(estado == 2) { valores[cont] = lido; cont++; if(cont==TAM) { estado = 3; }

51
} else if(estado == 3 && lido==0xAA) { putc(0xAA); estado = 0; for(t=0;t<128;t++) { tabela4[t] = valores[t]; } } } void main() { estado = 0; while(true) { if(kbhit()) { lerSerial(); } if(!input(pin_d1)) onda = 1; if(!input(pin_d2)) onda = 2; if(!input(pin_d3)) onda = 3; if(!input(pin_d0)) onda = 4; if(onda==1) { for(i=0;i<128;i++) { output_b(tabela4[i]); delay_us(x); } } if(onda==4) { for(i=0;i<64;i++) { output_b(tabela1[i]); delay_us(x); } } if(onda==3) { for(i=0;i<64;i++) { output_b(tabela2[i]); delay_us(x); } } if(onda==2) { for(i=0;i<64;i++) { output_b(tabela3[i]); delay_us(x);

52
} } if(!input(pin_c13)) { delay_ms(1000); x=x+1; } if(!input(pin_c14)) { delay_ms(1000); x=x-1; } if(x<0) x=0; if(x>16 && !input(pin_c13)) { delay_ms(1000); x=x+1000; } if(x>16 && !input(pin_c14)) { delay_ms(1000); x=x-1000; } } }

APNDICE B CDIGO DO PIC 16F877A

#include <16f877A.h> #fuses HS,NOWDT,NOPROTECT,NOLVP,NOBROWNOUT #use delay(clock=20M) #include <mod_lcd.c> #org 0x1F00, 0x1FFF void loader16F877(void) {} int i; void Tela1(); void Tela2(); void Tela3(); #int_timer1 void tempo() { set_timer1(0); i++; } void main() { lcd_ini(); Tela1(); delay_ms(3000);

53
Tela2(); Tela3(); lcd_escreve("\f"); setup_timer_1 ( T1_EXTERNAL | T1_DIV_BY_1 ); enable_interrupts(GLOBAL); enable_interrupts(int_timer1); for(;;) { if (!input(pin_a1)) { while(input(pin_a2)&&input(pin_a3)&&input(pin_a4)) { float f; set_timer1(0); i=0; delay_ms(2000); f=((i * 65536) + get_timer1())/2; lcd_escreve("\f"); lcd_pos_xy(1,1); lcd_escreve("Onda Senoidal "); lcd_pos_xy(1,2); printf(lcd_escreve,"F: %f Hz ",f); } } if (!input(pin_a2)) { while(input(pin_a1)&&input(pin_a3)&&input(pin_a4)) { float f; set_timer1(0); i=0; delay_ms(2000); f=((i * 65536) + get_timer1())/2; lcd_escreve("\f"); lcd_pos_xy(1,1); lcd_escreve("Onda Triangular "); lcd_pos_xy(1,2); printf(lcd_escreve,"F: %f Hz ",f); } } if (!input(pin_a3)) { while(input(pin_a1)&&input(pin_a2)&&input(pin_a4)) { float f; set_timer1(0); i=0; delay_ms(2000); f=((i * 65536) + get_timer1())/2; lcd_escreve("\f"); lcd_pos_xy(1,1); lcd_escreve("Onda Quadrada "); lcd_pos_xy(1,2); printf(lcd_escreve,"F: %f Hz ",f); }

54
} if (!input(pin_a4)) { while(input(pin_a1)&&input(pin_a2)&&input(pin_a3)) { float f; set_timer1(0); i=0; delay_ms(2000); f=((i * 65536) + get_timer1())/2; lcd_escreve("\f"); lcd_pos_xy(1,1); lcd_escreve("Onda Aleatoria "); lcd_pos_xy(1,2); printf(lcd_escreve,"F: %f Hz ",f); } } } } void Tela1() { lcd_escreve("\f"); lcd_pos_xy(1,1); lcd_escreve("Felipe Anastacio"); lcd_pos_xy(1,2); lcd_escreve("Marcos Martinez "); } void Tela2() { lcd_escreve("\f"); lcd_pos_xy(1,1); lcd_escreve(" TCC - Gerador "); lcd_pos_xy(1,2); lcd_escreve(" de Funcoes "); delay_ms(3000); lcd_pos_xy(1,1); lcd_escreve("Microcontrolado "); lcd_pos_xy(1,2); lcd_escreve(" com Interface "); delay_ms(3000); lcd_pos_xy(1,1); lcd_escreve(" Wireless no "); lcd_pos_xy(1,2); lcd_escreve(" Computador "); delay_ms(3000); } void Tela3() { lcd_escreve("\f"); lcd_pos_xy(1,1); lcd_escreve("S1 p/ Senoidal "); lcd_pos_xy(1,2); lcd_escreve("S2 p/ Triangular"); delay_ms(4000); lcd_pos_xy(1,1);

55
lcd_escreve("S3 p/ Quadrada "); lcd_pos_xy(1,2); lcd_escreve("S4 p/ Aleatoria "); delay_ms(4000); }

APNDICE C CDIGO DO SOFTWARE

//--------------------------------------------------------------------------#include <vcl.h> #pragma hdrstop #include "manArquivo.cpp" #include "unit1.h" #include "cPorta.h" //--------------------------------------------------------------------------#pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; HANDLE arq; cPorta *com; unsigned char *xs, ys[128]; int final; //--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { Chart1->Series[0]->AddXY(0,0,"",clRed); // define ponto inicial (0;0). Chart1->Series[0]->AddXY(127,0,"",clRed); // define ponto final (127;0). ListBox1->Items->Add("0;0"); ListBox1->Items->Add("127;0"); com = new cPorta("COM2",19200,1,2,0); // define porta serial. } //--------------------------------------------------------------------------void __fastcall TForm1::Chart1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { int x = (X - 47) / 4.816; // redefine o ponto x=0 como do grfico e no do form. int y = (410 - Y) / 3.076; // redefine o ponto y=0 como do grfico e no do form. if(x>0 && x<128) //No permite marcao de pontos em x fora da rea de 0 a 256. { if(y>0 && y<128) // No permite marcao de pontos em y fora de 0 a 256. { Chart1->Series[0]->AddXY(x,y,"",clRed); ListBox1->Items->Add(IntToStr(x)+";"+IntToStr(y)); } } else ShowMessage("Ponto no vlido."); // Mensagem de alerta. } //--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)

56
{ Chart1->Series[0]->AddXY(StrToInt(Edit1->Text),StrToInt(Edit2->Text),"",clRed); // Adiciona os pontos digitados no grfico. ListBox1->Items->Add(Edit1->Text+";"+Edit2->Text); // Adiciona os pontos digitados no Listbox. Edit1->Text = ""; Edit2->Text = ""; } //--------------------------------------------------------------------------void __fastcall TForm1::Button4Click(TObject *Sender) ///////////////////////////Protocolo de Comunicao////////////////////////// { unsigned char *handshake, val; int qtde = 0; val = 0x55; com->EnviaDado(&val,1); Sleep(1); do { handshake = com->RecebeDado(qtde); } while (qtde==0); if(handshake[0] == 0xAA) { val = 0xAA; com->EnviaDado(&val,1) ; delete handshake; qtde = 0; Sleep(1); do { handshake = com->RecebeDado(qtde); } while (qtde==0); if(handshake[0] == 0xAA) { for(int i=0;i<128;i++) { com->EnviaDado(&ys[i],1); Sleep(20); } val = 0xAA; com->EnviaDado(&val,1); delete handshake; qtde = 0; Sleep(1); do { handshake = com->RecebeDado(qtde); } while (qtde==0); if(handshake[0] == 0xAA) { ShowMessage("Transmisso concluida com sucesso"); }

57
} else ShowMessage("HandShake confirmado. Valor no confirmado"); } else ShowMessage("HandShake no confirmado."); } //--------------------------------------------------------------------------void __fastcall TForm1::NovoClick(TObject *Sender) { ListBox1->Clear(); Chart1->Series[0]->Clear(); ListBox1->Items->Add("0;0"); ListBox1->Items->Add("127;0"); Chart1->Series[0]->AddXY(0,0,"",clRed); Chart1->Series[0]->AddXY(127,0,"",clRed); } //--------------------------------------------------------------------------void __fastcall TForm1::Sobre1Click(TObject *Sender) { ShowMessage("Software criado por Felipe Ehlke Anastacio e Marcos Martinez.\n Projeto desenvolvido para trabalho de concluso de curso."); } //--------------------------------------------------------------------------void __fastcall TForm1::SalvarComo1Click(TObject *Sender) { sd->Execute(); arq = abrirArquivo(sd->FileName); AnsiString linha = ListBox1->Items->GetText(); gravarArquivo(arq,linha.c_str(),linha.Length()); // Aonde ser salvo o arquivo. } //--------------------------------------------------------------------------void __fastcall TForm1::Abrir1Click(TObject *Sender) { OpenDialog1->Execute(); ListBox1->Items->Clear(); Chart1->Series[0]->Clear(); ListBox1->Items->LoadFromFile(OpenDialog1->FileName); for(int i=0;i<ListBox1->Items->Count;i++) { AnsiString texto = ListBox1->Items->Strings[i]; texto = texto.Delete(1,texto.AnsiPos(";")); int valor = StrToInt(texto); Chart1->Series[0]->Add(valor,"",clRed); } } //--------------------------------------------------------------------------void __fastcall TForm1::Fechar1Click(TObject *Sender) { Form1->Close(); } //--------------------------------------------------------------------------void __fastcall TForm1::Button2Click(TObject *Sender) {

58
final = ListBox1->Items->Count; int cont = 0; memset(ys,0,128); //Seta as 128 posicoes do vetor ys para 0. xs = new unsigned char[final+1]; memset(xs,0,final); //Seta a qntd de posies alocada em "final" para 0. for(int i=0;i<final;i++) { AnsiString linha = ListBox1->Items->Strings[i]; //envia para "linha" o valor locado na linha [i] do ListBox. AnsiString x = linha.SubString(1,linha.AnsiPos(";")-1); // Separa a informao x da string (x;y). AnsiString y = linha.SubString(linha.AnsiPos(";")+1,3); // Separa a informao y da string (x;y). ys[StrToInt(x)] = StrToInt(y); // Salva o valor y na posicao x do vetor ys. xs[cont++] = StrToInt(x); // Salva em um vetor os valores de x. } for(int i=0;i<final;i++) for(int j=0;j<final-1;j++) if(xs[j]>xs[j+1]) { int temp = xs[j]; xs[j] = xs[j+1]; xs[j+1] = temp; } //////////////////////////INTERPOLAO////////////////////////////////////// int x1,x0,y1,y0,z; float a,b; for(int i=0;i<final-1;i++) { x0=xs[i]; y0=ys[xs[i]]; //Define os pontos limites das retas x1=xs[i+1]; y1=ys[xs[i +1]]; a=(float)(y1-y0)/(x1-x0); b=(float)y1-(a*x1); //Clculo dos pontos intermedirios da reta. for(z=x0+1;z<x1;z++) { ys[z]=(a*z+b); } } ////////////////////LISTAGEM DE PONTOS//////////////////////////////////////// ListBox1->Clear(); for(int i=0;i<128;i++) { ListBox1->Items->Add(IntToStr(i)+" ; "+IntToStr(ys[i])); } Button4->Enabled= true; } //---------------------------------------------------------------------------

59 ANEXO A MOD_LCD.H

#ifndef lcd_enable #define lcd_enable #define lcd_rs #define lcd_d4 #define lcd_d5 #define lcd_d6 #define lcd_d7 #endif

pin_d3 // pino enable do LCD pin_d2 // pino rs do LCD pin_d4 // pino de dados d4 do LCD pin_d5 // pino de dados d5 do LCD pin_d6 // pino de dados d6 do LCD pin_d7 // pino de dados d7 do LCD

#define lcd_type 2 // 0=5x7, 1=5x10, 2=2 linhas #define lcd_seg_lin 0x40 // Endereo da segunda linha na RAM do LCD byte CONST INI_LCD[4] = {0x20 | (lcd_type << 2), 0xf, 1, 6}; byte lcd_le_byte() // l um byte do LCD (somente com pino RW) { byte dado; // configura os pinos de dados como entradas input(lcd_d4); input(lcd_d5); input(lcd_d6); input(lcd_d7); // se o pino rw for utilizado, coloca em 1 #ifdef lcd_rw output_high(lcd_rw); #endif output_high(lcd_enable); // habilita display dado = 0; // zera a varivel de leitura // l os quatro bits mais significativos if (input(lcd_d7)) bit_set(dado,7); if (input(lcd_d6)) bit_set(dado,6); if (input(lcd_d5)) bit_set(dado,5); if (input(lcd_d4)) bit_set(dado,4); // d um pulso na linha enable output_low(lcd_enable); output_high(lcd_enable); // l os quatro bits menos significativos if (input(lcd_d7)) bit_set(dado,3); if (input(lcd_d6)) bit_set(dado,2); if (input(lcd_d5)) bit_set(dado,1); if (input(lcd_d4)) bit_set(dado,0); output_low(lcd_enable); // desabilita o display return dado; // retorna o byte lido } void lcd_envia_nibble( byte dado ) // envia um dado de quatro bits para o display { // coloca os quatro bits nas saidas output_bit(lcd_d4,bit_test(dado,0)); output_bit(lcd_d5,bit_test(dado,1));

60
output_bit(lcd_d6,bit_test(dado,2)); output_bit(lcd_d7,bit_test(dado,3)); // d um pulso na linha enable output_high(lcd_enable); output_low(lcd_enable); } void lcd_envia_byte( boolean endereco, byte dado ) { // coloca a linha rs em 0 output_low(lcd_rs); // aguarda o display ficar desocupado //while ( bit_test(lcd_le_byte(),7) ) ; // configura a linha rs dependendo do modo selecionado output_bit(lcd_rs,endereco); delay_us(100); // aguarda 100 us // caso a linha rw esteja definida, coloca em 0 #ifdef lcd_rw output_low(lcd_rw); #endif // desativa linha enable output_low(lcd_enable); // envia a primeira parte do byte lcd_envia_nibble(dado >> 4); // envia a segunda parte do byte lcd_envia_nibble(dado & 0x0f); }

void lcd_ini() // rotina de inicializao do display { byte conta; output_low(lcd_d4); output_low(lcd_d5); output_low(lcd_d6); output_low(lcd_d7); output_low(lcd_rs); #ifdef lcd_rw output_high(lcd_rw); #endif output_low(lcd_enable); delay_ms(15); // envia uma seqncia de 3 vezes 0x03 // e depois 0x02 para configurar o mdulo // para modo de 4 bits for(conta=1;conta<=3;++conta) { lcd_envia_nibble(3); delay_ms(5); } lcd_envia_nibble(2); // envia string de inicializao do display for(conta=0;conta<=3;++conta) lcd_envia_byte(0,INI_LCD[conta]); } void lcd_pos_xy( byte x, byte y)

61
{ byte endereco; if(y!=1) endereco = lcd_seg_lin; else endereco = 0; endereco += x-1; lcd_envia_byte(0,0x80|endereco); } void lcd_escreve( char c) // envia caractere para o display { switch (c) { case '\f' : lcd_envia_byte(0,1); delay_ms(2); break; case '\n' : case '\r' : lcd_pos_xy(1,2); break; case '\b' : lcd_envia_byte(0,0x10); break; default : lcd_envia_byte(1,c); break; } } char lcd_le( byte x, byte y) // le caractere do display { char valor; // seleciona a posio do caractere lcd_pos_xy(x,y); // ativa rs output_high(lcd_rs); // l o caractere valor = lcd_le_byte(); // desativa rs output_low(lcd_rs); // retorna o valor do caractere return valor; }

ANEXO B MANARQUIVO.CPP

#include <vcl.h> HANDLE abrirArquivo(AnsiString nome) { HANDLE arq = CreateFile(nome.c_str(), GENERIC_READ | GENERIC_WRITE, 0,

62
NULL, OPEN_ALWAYS, 0, NULL); return arq; } //--------------------------------------------------------------------------void gravarArquivo(HANDLE arq, char *texto, int num) { DWORD charsWritten; WriteFile(arq, texto, num, &charsWritten, NULL); } //--------------------------------------------------------------------------unsigned char *lerArquivo(HANDLE arq, int &num) { DWORD dwLength; unsigned char *texto; texto = new char[num+1]; texto[num]='\0'; ReadFile( arq, texto, num, &dwLength, NULL); num = dwLength; return texto; } //--------------------------------------------------------------------------void fecharArquivo(HANDLE arq) { CloseHandle(arq); } void inicioArquivo(HANDLE arq) { SetFilePointer(arq,0,0,FILE_BEGIN); } void fimArquivo(HANDLE arq) { SetFilePointer(arq,0,0,FILE_END); } void moverArquivo(HANDLE arq, int num) { SetFilePointer(arq,num,0,FILE_END); }

ANEXO C CPORTA.H

//--------------------------------------------------------------------------#include <vcl.h> #pragma hdrstop

63
#include "cPorta.h" #include <stdio.h> //--------------------------------------------------------------------------cPorta :: cPorta(char * Porta) { Erro = NO_ERRO; BaudRate = 2400; hComm = CreateFile(Porta,GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL); // Tenta abrir a porta de comunicao. if(hComm == INVALID_HANDLE_VALUE) // Se houve um erro, verifica o que aconteceu. Erro = HANDLE_INV; fSucesso = GetCommState(hComm, &dcbStatus); // Le as configuraes da porta recm aberta. if(!fSucesso){ ShowMessage("No foi possvel acessar a porta!"); CloseHandle(hComm); // Fecha a porta de comunicao. Erro = ESTADO_PORTA_INV; return; } dcbStatus.BaudRate = BaudRate; dcbStatus.ByteSize = 8; dcbStatus.Parity = NOPARITY; dcbStatus.StopBits = ONESTOPBIT; fSucesso = SetCommState(hComm, &dcbStatus); if(!fSucesso){ CloseHandle(hComm); // Fecha a porta de comunicao. Erro = ESTADO_PORTA_INV; return; } fSucesso = SetCommTimeouts(hComm, &Timeouts); if(!fSucesso){ CloseHandle(hComm); // Fecha a porta de comunicao. Erro = TIMEOUT_INV; return; } } cPorta::cPorta(char *Porta, int iBaud, int iDados, int iPar, int iStop) { Erro = NO_ERRO; hComm = CreateFile(Porta,GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL); // Tenta abrir a porta de comunicao. if(hComm == INVALID_HANDLE_VALUE) // Se houve um erro, verifica o que aconteceu. Erro = HANDLE_INV; fSucesso = GetCommState(hComm, &dcbStatus); // Le as configuraes da porta recm aberta. if(!fSucesso){ ShowMessage("No foi possvel acessar a porta!"); CloseHandle(hComm); // Fecha a porta de comunicao. Erro = ESTADO_PORTA_INV; return; } dcbStatus.BaudRate = iBaud;

64
switch(iDados) { case 0: dcbStatus.ByteSize = 7; break; case 1: dcbStatus.ByteSize = 8; break; } switch(iPar) { case 0: dcbStatus.Parity = EVENPARITY; break; case 1: dcbStatus.Parity = ODDPARITY; break; case 2: dcbStatus.Parity = NOPARITY; break; } switch(iStop) { case 0: dcbStatus.StopBits = ONESTOPBIT; break; case 1: dcbStatus.StopBits = TWOSTOPBITS; break; } fSucesso = SetCommState(hComm, &dcbStatus); if(!fSucesso){ CloseHandle(hComm); // Fecha a porta de comunicao. Erro = ESTADO_PORTA_INV; return; } fSucesso = SetCommTimeouts(hComm, &Timeouts); if(!fSucesso){ CloseHandle(hComm); // Fecha a porta de comunicao. Erro = TIMEOUT_INV; return; } } cPorta :: ~cPorta() { if (!Erro) CloseHandle(hComm); } void cPorta::EnviaDado(char *Dado, int iNum) { // char *buffer = new char[iNum];

65
DWORD charsWritten = 0; Erro = NO_ERRO; /* for(int i=0;i<iNum;i++) *(buffer+iNum) = *(Dado+iNum);*/ if (!WriteFile((HANDLE(hComm)), Dado, iNum, &charsWritten, NULL)) Erro = HANDLE_INV; } char* cPorta::RecebeDado(int &iNum) { COMSTAT ComStat ; DWORD dwErrorFlags, dwLength, dwBytesLer; bool fReadStat; unsigned char* c = 0; fReadStat = ClearCommError(hComm, &dwErrorFlags, &ComStat ); // Comprova se h dados para serem recebidos. if(iNum!=0) dwBytesLer = iNum; else dwBytesLer = ComStat.cbInQue; if(dwBytesLer > 0) { c = new char[dwBytesLer+1]; memset(c,'\0',dwBytesLer+1); fReadStat = ReadFile( hComm, c, dwBytesLer, &dwLength, NULL); // Le um byte. if (!fReadStat) // Verifica se h erros. return NULL; iNum = dwLength; return c; // Se no h erros, retorna o caracter recebido. }else return NULL; } void cPorta::limpa(void){ PurgeComm(hComm, PURGE_RXCLEAR); Sleep(10); } #pragma package(smart_init)