Você está na página 1de 40

Diego Fiscina

Raquel Andrade
Jaízo Júnior
Emerson Oliveira
Matheus Cardoso
Cláudio Bergossi

Interface microcontrolada para automação de


experimentos.

Feira de Santana – BA
Março / 2009

1
Diego Fiscina
Raquel Andrade
Jaízo Júnior
Emerson Oliveira
Matheus Cardoso
Cláudio Bergossi

Interface microcontrolada para automação de experimentos.


Relatório da disciplina Projeto Anual
apresentada à banca de graduação em
Engenharia de Computação da
Universidade Estadual de Feira de
Santana como requisito parcial para
obtenção do título de Bacharel em
Engenharia de Computação.

Orientador:
Prof. Paulo César Machado de Abreu Farias

Departamento de Exatas
Universidade Estadual de Feira de Santana

Feira de Santana – BA
Março / 2009

2
Relatório da disciplina Projeto Anual sob o título “Interface
microcontrolada para automação de experimentos”, apresentado como
requisito parcial para a formação em Engenharia de Computação, Março
de 2009. Feira de Santana – BA.

Prof. Wagner Oliveira


Departamento de Tecnologia
Examinador

Prof. Paulo César Machado de Abreu Farias


Departamento de Exatas - UEFS
Orientador

3
Resumo

Este relatório discorre sobre o projeto desenvolvido pelos alunos do


curso Engenharia de Computação da UEFS (Universidade Estadual de Feira
de Santana) durante a disciplina Projeto Anual. Tal projeto baseia-se num
protótipo de uma estação microcontrolada para automação de experimentos,
onde a comunicação entre a estação e o computador é feita através de
comunicação serial (padrões USB e RS232). Outro requisito essencial à
criação desse equipamento foi de desenvolver uma biblioteca de rotinas em
software para controlar, a partir de uma estação de trabalho (e.g. computador
pessoal), todas as funcionalidades da estação de aquisição. Além de criar um
aplicativo básico para testar e controlar os canais analógicos e digitais da
estação microcontrolada, mostrando em tela os dados lidos e escritos destes
canais de aquisição.

4
Sumário

Lista de figuras

1. Introdução ............................................................................................................... 9

2. Fundamentação teórica........................................................................................ 10

2.1. Arquitetura de microcontroladores............................................................... 10

2.2. Comunicação USB ......................................................................................... 13

2.3 Técnicas de transferência de dados .............................................................. 14

2.3.1. Polling....................................................................................................... 14

2.3.2. Interrupção ............................................................................................... 15

2.4. Conversor A/D por aproximações sucessivas ............................................. 16

3. Desenvolvimento do projeto ................................................................................ 17

3.1 Programação de microcontroladores ........................................................... 17

3.1.1 Programador JDM..................................................................................... 17

3.1.2 Confecção do circuito .............................................................................. 19

3.2. PCB (Printed Circuit Board) do projeto ........................................................ 20

3.3. Firmware ......................................................................................................... 23

3.4. Comunicação USB: CDC e HID...................................................................... 27

3.4.1. Diagrama e componentes........................................................................ 28

3.5. System Monitoring - Data Acquisition Station ............................................. 29

3.5.1. Detalhamento das funções do sistema .................................................. 30

3.5.2. Comunicação Serial com Java................................................................ 33

3.5.3. Protocolo de comunicação (System Monitoring / Micro-controlador) . 34

3.5.4. Banco de Dados MySql (JDBC) .............................................................. 34

4. Conclusão ............................................................................................................. 37

5. Referências ........................................................................................................... 39

5
Lista de Figuras

Figura 1 – Arquitetura do microcontrolador PIC. ................................................... 10

Figura 2 – Esquema geral de um microcontrolador. .............................................. 13

Figura 3 - Conversor A/D de aproximação sucessiva. ........................................... 16

Figura 4 – Diagrama do programador JDM. ............................................................ 18

Figura 5 – Layout do programador JDM. ................................................................ 19

Figura 6 – Diagrama utilizado para conhecer os componentes e suas conexões.


............................................................................................................................ 21

Figura 7- Diagrama desenvolvido no EAGLE. ........................................................ 22

Figura 8 – Arquivo da placa com as trilhas roteadas manualmente gerado a partir


do diagrama e adaptado pra comunicação USB. ............................................ 23

Figura 9: Estrutura do firmware............................................................................... 26

Figura 10 - Diagrama do circuito de comunicação USB-RS232 ............................ 28

Figura 11 - Modelo de dados – System Monitoring. ............................................... 35

Figura 12 - Estrutura de Pacotes. ............................................................................ 36

6
Lista de tabelas

Tabela 1: Relação entre parâmetro recebido e método correspondente ........ Error!


Bookmark not defined.

7
Lista de Ilustrações

Ilustração 1 - Listagem de Experimento.................................................................. 30

Ilustração 2 - Adicionar Experimento. ..................................................................... 31

Ilustração 3 - Gráfico de um Experimento............................................................... 32

Ilustração 4 - Configuração PWM e leitura rápida de canais A/D. ......................... 32

8
1. Introdução

Este projeto tem o objetivo de projetar e montar o protótipo de uma


estação microcontrolada capaz de fazer o controle de experimentos e a
aquisição automática de dados externos.
O equipamento desenvolvido possui linhas de entrada e saída (E/S)
digitais que podem ser operadas individualmente ou em modo byte. Além
dessas características, este protótipo possui pelo menos três canais de
conversão AD (analógico/digital) e um canal de saída analógica, para atuação
sobre os experimentos.
A comunicação entre a estação e o computador foi feita pela porta USB
com a motivação de que o evoluir dos equipamentos eletrônicos,
principalmente os portáteis, propiciou a difusão das portas USB, que são, hoje,
indispensáveis para o funcionamento da grande maioria dos dispositivos atuais,
em detrimento a porta serial “clássica” RS232, que aos poucos vem sendo
substituída, inclusive nos desktops. O protocolo USB é o presente e o futuro
(no que tange ao constante evoluir do padrão) no que diz respeito à velocidade
de transferência de informação e também à facilidade e padronização em
conexões aos sistemas atuais, embora esta última questão seja
particularmente complexa, em suas nuances, no que diz respeito ao firmware
de controle.
Contudo, existem ainda muitas aplicações que utilizam,
fundamentalmente, o padrão RS232. Dessa forma, para aumentar a
flexibilidade do equipamento, a comunicação serial RS232 também foi
implementada.
O microcontrolador escolhido foi o PIC 18F4550, pois se adequou
satistatóriamente aos requisitos do projeto. Além de suas características
internas, como 32 Kbytes de memória flash, dentre outras, tal PIC possui um
módulo próprio para controlar a comunicação USB, atributo essencial ao
desenvolvimento do projeto.
A filosofia multiplataforma foi adotada, em relação ao software
(desenvolvido, com este intuito, na linguagem de programação JAVA),
permitindo ao usuário trabalhar com diferentes plataformas, como Windows ou
Linux. Como metas estipuladas pela ementa inicial do projeto, a equipe
desenvolveu uma biblioteca de rotinas para controlar todas as funcionalidades
da estação, e um aplicativo básico para testar os canais digitais de leitura e
escrita, ajustar o valor do sinal da saída analógica, mostrar em um display os
canais de aquisição, etc..
A opção de desenvolver a interface para automação de experimentos
dentro de um Projeto Anual é interessante para a universidade, pois torna
possível a adoção do equipamento em larga escala além de estimular a
produção de conhecimento técnico-científico no próprio curso de Engenharia
da Computação, bem como outros cursos beneficiados, como outros cursos de
Engenharia e Física. Este projeto se adequa ao perfil dos estudantes de
Engenharia de Computação, pois exige habilidades de desenvolvimento tanto
de hardware quanto de software, com fins de atender os requisitos do
problema.

9
2. Fundamentação teórica
Esta seção irá explicar, de forma breve, os conceitos teóricos utilizados
na confecção da interface microcontrolada.

2.1. Arquitetura de microcontroladores


Um microcontrolador difere de um microprocessador em vários
aspectos. Primeiro, e o mais importante, são as suas funcionalidades. Para que
um microprocessador possa ser usado, outros componentes devem-lhe ser
adicionados, tais como memória e componentes para receber e enviar dados.
Em resumo, isso significa que o microprocessador é o verdadeiro coração do
computador. Por outro lado, o microcontrolador foi projetado para ter tudo num
só, mesmo que reduzidamente. Nenhum outro componente externo é
necessário nas aplicações, a depender do tipo de microcontrolador escolhido,
uma vez que todos os periféricos necessários já estão contidos nele. Assim,
poupa-se tempo, espaço e materiais na construção dos dispositivos.
Portanto, um microcontrolador se caracteriza por incorporar no mesmo
encapsulamento um microprocessador, memória de programa e dados,
periféricos como temporizadores, “watchdog timers”, módulos de comunicação
serial, conversores Analógico/Digital, geradores de PWM, etc., fazendo com
que o hardware final fique extremamente complexo.
A arquitetura do microcontrolador utiliza dois barramentos de endereços
distintos para acessar instruções e dados.

Figura 1 – Arquitetura do microcontrolador PIC.

A arquitetura geral de um microcontrolador está dividida em:


• Unidade de Memória;
• Unidade Central de Processamento (CPU);

10
• Barramentos;
• Unidade de entrada/saída;
• Comunicação série;

• Unidade de temporização;

• Watchdog Timer;
• Conversor analógico – digital.

Memória de programa (FLASH) - para armazenar o programa (firmware)


criado. Como a memória fabricada com tecnologia FLASH pode ser
programada e reprogramada mais de uma vez, ela é adequada para o
desenvolvimento firmwares de dispositivos.
EEPROM - memória dos dados que necessitam de ser salvaguardados quando
a alimentação é desligada. Normalmente é usada para guardar dados
importantes que não se podem perder quando a alimentação, de repente ou
intencionalmente, é desligada. Um exemplo deste tipo de dados é a
temperatura fixada para os reguladores de temperatura. Se, durante uma
queda de alimentação, se perdessem dados, seria preciso proceder a um novo
ajustamento quando a alimentação fosse restabelecida. Assim, o nosso
dispositivo perderia eficácia.
RAM - memória de dados usada por um programa, durante a sua execução.
Na RAM, são guardados todos os resultados intermediários ou dados
temporários durante a execução do programa e que não são cruciais para o
dispositivo, caso ocorra uma falha na alimentação.
Unidade de processamento central - faz a conexão com todos os outros
blocos do microcontrolador. Ele coordena o trabalho dos outros blocos e
executa o programa do utilizador.
Barramentos - são os caminhos de comunicação entre os componentes.
Existem dois tipos: de endereço (o número de linhas depende da quantidade
de dados que deseja endereçar e serve, também, para endereçar posições de
memória para a CPU) e de dados (o numero de linhas depende da largura da
palavra de dados e serve para interligar todos os componentes do
microcontrolador). Fisicamente falando, os barramentos são fios conectados
entre os componentes.
Unidades de entrada e saída - são ligações físicas entre o microcontrolador e
o mundo exterior. Estes componentes possuem vários endereços de memória,
podendo se comunicar com os outros componentes através do barramento de
dados e também com o mundo exterior através das linhas de saída (pinos do
CI).

11
Comunicação serial - é uma alternativa de comunicação com interfaces
externas. Possui três linhas de execução, uma usada para enviar e outra para
receber dados; a terceira é a linha de referência tanto do lado de entrada
quando do de saída. Este tipo de comunicação obedece a um protocolo para
troca de dados.
Contador/Temporizador - é um registrador de 8 bits do microcontrolador que
trabalha independentemente do programa. Tomando como exemplo alguns
microcontroladores, ao fim de cada conjunto de quatro ciclos de relógio do
oscilador, o contador incrementa o valor armazenado, até atingir o valor
máximo (255), que, a esta altura, recomeça a contagem a partir de zero. O
tempo exato entre dois incrementos sucessivos do conteúdo do temporizador,
pode ser utilizado para medir intervalos de tempo, o que o torna muito útil em
vários dispositivos.
Watchdog - é um contador que está continuamente em funcionamento onde,
caso haja alguma condição de erro no fluxo do programa principal, este
contador, sem necessidade de intervenção humana, reseta o microcontrolador
para que este funcione, novamente, de forma adequada.
Conversor A/D: os sinais dos periféricos são diferentes daqueles que o
microcontrolador pode entender (zero e um), e devem ser convertidos no
formato compreendido pelo microcontrolador. Esta tarefa é executada por
intermédio de um bloco destinado à conversão analógico-digital ou conversor
A/D convertendo um valor analógico para um valor digital.

12
Figura 2 – Esquema geral de um microcontrolador.

2.2. Comunicação USB


Inicialmente, a comunicação USB (Universal Serial Bus) foi projetada
para conectar dispositivos periféricos, como teclados e mouse, ao computador.
Entretanto, a comunicação USB provou ser muito útil em diversas aplicações,
incluindo medição e automação.
Um dispositivo USB é detectado, automaticamente, quando conectado a
computador, mesmo que este não venha a funcionar corretamente na máquina
host [1]. De acordo com a topologia do barramento, até 127 dispositivos podem
ser conectados ao mesmo tempo em um mesmo barramento, ao contrário da
porta serial clássica que suporta apenas um dispositivo conectado por vez.
Adicionando "hubs" ou concentradores de portas, mais dispositivos podem ser
adicionados a uma máquina, criando conexão para mais periféricos [3]
Atualmente, quase todos os periféricos estão disponíveis em uma versão para
USB, como mouses, teclados, impressoras, etc.. Dentre as vantagens que o
13
padrão USB oferece, algumas delas foram especialmente consideradas para
utilização do padrão na estação de aquisição de dados deste projeto. São elas:

 Padrão de conexão: qualquer dispositivo compatível como USB usa


padrões definidos de conexão assim não é necessário ter um tipo de
conector específico para cada aparelho;

 Plug and Play ("Colocar e Usar"): quase todos os dispositivos USB são
concebidos para serem conectados ao computador e utilizados logo em
seguida. Apenas alguns exigem a instalação de drivers, como é o caso
deste trabalho, ou softwares específicos.

 Alimentação elétrica: a maioria dos dispositivos que usam USB não


precisam ser ligados a uma fonte de energia, já que a própria conexão
USB é capaz de fornecer eletricidade (5V – cinco volts [1]).

 Ampla compatibilidade: o padrão USB é compatível com diversas


plataformas e sistemas operacionais. O Windows, por exemplo, o
suporta desde a versão 98. Sistemas operacionais Linux e Mac também
são compatíveis.
Os cabos USB contam com quatro fios internos: VBus (VCC), D+, D- e
GND. O primeiro é o responsável pela alimentação elétrica. O segundo e o
terceiro são utilizados na transmissão de dados (a letra "D" provém de data,
dado em inglês). O quarto, por sua vez, é para controle elétrico, servindo como
referência (InfoWester, 2009). A comunicação entre os dispositivos conectados
via USB é feita através de um protocolo específico [1]. Nele, o host, isto é, o
computador ou o equipamento que recebe as conexões, emite um sinal para
encontrar os dispositivos conectados e estabelece um endereço para cada um
deles [1]. Uma vez estabelecida a comunicação, o host recebe a informação de
que tipo de conexão o dispositivo conectado utiliza .
Tal como ocorre com outras tecnologias, o padrão USB passa
periodicamente por revisões em suas especificações para atender as
necessidades atuais do mercado [1]. Este trabalho utiliza a versão 2.0 que é
atualmente mais usada, contudo compatível [1] com a versão anterior e
concomitante em uso, a versão 1.1.

2.3 Técnicas de transferência de dados


Existem basicamente três técnicas para transferência de dados: Polling,
Interrupção e DMA (Direct Memory Access). Nesse tópico são abordadas as
técnicas de Pooling e Interrupção.
2.3.1 Polling
Nesse tipo de operação de entrada e saída, o controle da transferência é
todo feito pela CPU. O dispositivo de E/S executa a operação requisitada,
sinaliza o término da operação carregando um valor apropriado no registrador
de estado de E/S. Enquanto isso, a CPU não é alertada sobre o término da

14
operação e precisa ficar verificando periodicamente o estado do dispositivo de
E/S.
Para exemplificar pode ser feita uma analogia com um telefone que não
tivesse campainha. Seria necessário tirar o fone do gancho periodicamente,
para ver se alguma comunicação está em curso. No entanto, tal como o
telefone, há outro meio de resolver esse problema: usar um "sinal de
chamada", o que equivale a solicitar ao dispositivo que execute uma tarefa e
que avise quando tiver terminado; enquanto isto, a CPU poderia fazer outras
coisas.
A principal vantagem da e/s com polling é a sua simplicidade. No entanto,
esta técnica possui a desvantagem de que a CPU fica dedicada à operação de
e/s. Isto pode ser extremamente ineficiente, sob o ponto de vista da utilização
da CPU.
2.3.2 Interrupção
Interrupções são modificações no fluxo de controle causadas por uma
ação externa relacionada à entrada ou saída. Uma interrupção é um sinal de
controle enviado por um agente externo à CPU, quando um determinado
evento é detectado. Este mecanismo força a CPU a tratar o evento externo. A
detecção de uma interrupção faz com que o processador transfira o controle
para uma rotina de tratamento de interrupção ("interrupt handler"). A rotina de
tratamento de interrupções faz o processador executar as seguintes ações:

 detectar a fonte da interrupção (o dispositivo que interrompeu);


 executar as ações apropriadas (que dependem do dispositivo);
 retornar ao ponto do programa em que estava quando iniciou o
atendimento à interrupção.
Pode ocorrer que um ou mais dispositivos enviem sinal de interrupção
simultaneamente à CPU. Nesse caso, atenderá primeiramente ao dispositivo
de mais alta prioridade. São prioritárias para atendimento as interrupções
devidas a:

 emergências de hardware, tais como atendimento a reset


(reinicicalização) e erros de hardware (erro de paridade de memória,
etc.);
 eventos de alta prioridade;
 E/S de dispositivos de alta velocidade.

Durante o atendimento a uma interrupção, a CPU não poderá


simultaneamente atender a outra interrupção (nas interrupções mascaráveis, a
CPU para e atende de mais alta prioridade). Para evitar essa situação, existe o
recurso de habilitar / desabilitar as interrupções, de forma que a CPU, ao iniciar
o atendimento a uma interrupção, desabilita as demais interrupções e, ao
terminar o atendimento, volta a habilitar todas as interrupções. Algumas
interrupções não são mascaráveis, ou seja, não podem ser desabilitadas, tais
como os erros de hardware e reset.

15
2.4 Conversor A/D por aproximações sucessivas
O circuito conversor A/D clássico que usa um conversor D/A é chamado de
aproximação sucessiva, sendo o mais usado. Ele é mostrado na Figura 3. Vin é
a entrada analógica e Dn até D0 são as saídas digitais.
Esse circuito utiliza um buffer e, portanto, o sinal digital ainda permanece
no circuito enquanto o conversor está processando a próxima amostra. RAS
significa Registrador de Aproximação Sucessiva (ou, em inglês, SAR,
Successive Approximation Register). Ele tem os mesmos sinais de controle que
o conversor A/D contador de rampa: START, que comanda o conversor A/D
para iniciar a conversão, CLOCK e END, que diz que a conversão daquela
amostra em particular foi finalizada.

Figura 3 - Conversor A/D de aproximação sucessiva.


O conversor A/D de aproximação sucessiva configura primeiro a
configuração do MSB (bit mais significativo; o MSB em um conversor A/D de
oito bits é o D7). De modo a facilitar as explicações abaixo, deve ser
considerado um conversor A/D de oito bits.
A comparação entre Vin e a saída do conversor D/A dirá à unidade de
controle se este bit deverá permanecer configurado como 1 ou se deveria ser
configurado como 0, já que o amplificador operacional dirá de imediato à
unidade de controle se o valor da amostra é maior ou menor do que 128 (2^7).
Em seguida o D6 é configurado em 1 e, com base na comparação feita pelo
amplificador operacional, a unidade de controle saberá se este bit deverá
permanecer em 1 ou não, repetindo o processo. E assim por diante.
Uma vantagem do conversor A/D de aproximação sucessiva é o seu
tempo de conversão fixo. No pior caso ele encontrará o valor digital correto
para a amostra em n pulsos de clock, onde n é o número de bits usados. Para
um conversor A/D de oito bits, o valor digital para cada amostra pode ser

16
encontrado em até oito pulsos de clock (comparado aos 255 no contador de
rampa), e para um conversor A/D de 16 bits o valor digital para cada amostra
pode ser encontrado em até 16 pulsos de clock.
Outra grande vantagem deste circuito é o uso de um buffer de saída que
permite ao circuito que está sendo alimentado pelo conversor A/D ler o dado
digital enquanto o conversor A/D já está trabalhando na próxima amostra.

3. Desenvolvimento do projeto
Nessa sessão é abordado o desenvolvimento do projeto analisando
cada parte eleborada.

3.1 Programação de microcontroladores


A programação de um PIC pode ser feita em um PC com ferramentas
disponíveis gratuitamente em Assembler ou C, mas requer o uso de um
dispositivo programador para transferir o código do programa para a memória
interna do PIC. Normalmente isto pode ser feito de duas maneiras:

 Inserindo-se o PIC no soquete apropriado do programador.


Posteriormente, o PIC é transferido para o circuito definitivo, onde pode
ser soldado diretamente à placa de circuito impresso ou inserido em um
soquete.

 Conectando-se um programador serial em um soquete previamente


soldado à placa de circuito impresso onde o PIC já reside. Isto é
conhecido como In-Circuit Serial Programming ou ICSP. Esta
modalidade é bastante prática e causa menos estresse ao PIC, por
evitar seu constante manuseio durante repetidos testes.

Há vários tipos diferentes de programadores cujo projeto pode ser


encontrado na Internet ou adquiridos de determinados fornecedores. A maioria
deles é de fácil construção e podem ser conectados à porta paralela ou à porta
serial do P, ou à USB. De fato, qualquer computador que disponha de uma
dessas interfaces pode ser usado para programar o PIC.

3.1.1 Programador JDM

O Programador JDM tem como característica fundamental a sua


facilidade de montagem, custo baixo, além de se utilizar a porta serial para a
comunicação com o PIC. Além desses requisitos fundamentais, a principal
17
característica que se levou a escolher o JDM como programador, foi
justamente no ponto em que ele oferece suporte tanto para a programação
previa do chip fora do circuito em si, quanto pela modalidade ICSP.

Como alternativa para o auxilio no desenvolvimento do projeto, optou-se


por confeccionar dois programadores JDM, pois os outros programadores
existentes no laboratório eram utilizados por muitos alunos, o que dificultava o
andamento do projeto.

A Figura 4 mostra diagrama do programador JDM confeccionado,


facilmente encontrado na Internet. Vale ressaltar que existem vários projetos de
programadores, onde os mesmos diferem no tipo de PIC’s compatíveis para a
programação, alem dos seus componentes internos.

Figura 4 – Diagrama do programador JDM.

18
3.1.2 Confecção do circuito

Após a identificação de todos os componentes necessários à confecção do


programador, a partir do diagrama da Figura 4, o circuito foi montado
previamente numa protoboard e testado para verificar se funcionava
corretamente.

Para a confecção da PCB, partindo do layout abaixo, também


encontrado na Internet, utilizou-se uma técnica muito comum para imprimir tal
layout na placa de fenolite. Essa técnica se baseia em alguns passos simples:

1. Imprimir o layout numa folha de papel fotográfico. A impressão tem que


ser feita com uma impressora a laser.

Figura 5 – Layout do programador JDM.


2. Após impresso, o papel é prendido em cima da placa de fenolite, com
ajuda de uma fita adesiva.

19
3. Posteriormente, passa-se um ferro de passar roupas em sua superfície,
fazendo com que a tinta se desprenda do papel e grude na placa.

4. A placa impressa é, então, corroída numa solução contendo percloreto


de ferro.

Após esses passos a placa está, então, pronta para ser furada, colocada
os componentes e soldada.

A partir dessa técnica, foi possível confeccionar a placa do programador


com qualidade, facilitando o andamento do projeto.

3.2. PCB (Printed Circuit Board) do projeto


A confecção da placa final do projeto se deu com a mesma técnica utilizada
para confeccionar o gravador. Inicialmente, foi confeccionada uma placa para
20
abrigar o PIC18F877A para posteriormente ser confeccionada a placa final do
projeto, a qual abriga o PIC 18F4550.
O diagrama para a placa com o PIC18F877A com os componentes e
suas ligações utilizado foi disponibilizado pelo professor da disciplina e pode
ser visto na Figura 6.

Figura 6 – Diagrama utilizado para conhecer os componentes e suas conexões.

21
Primordialmente, foi feito um estudo do programa EAGLE 5.3.0 que foi o
utilizado para a confecção da PCB. Para a elaboração da PCB inicial, primeiro
foi feito um diagrama do circuito com todas as ligações entre os componentes
baseado no diagrama inicial fornecido pelo professor com algumas alterações
no regulador de tensão. Alguns pinos do microcontrolador ficaram ligados com
conectores para serem acessados posteriormente conforme necessário. Como
as ligações básicas do PIC 18F877A são iguais as do PIC 18F4550, para fazer
a alteração da placa para abrigar o PIC 18F4550 foi utilizado o mesmo
diagrama da placa para o PIC 18F877A, fazendo alterações nos pinos 18, 23 e
24 responsáveis pela comunicação USB (Figura 7). Dessa forma foi gerado um
novo arquivo para ser impresso e produzir a placa final com comunicação USB
e RS232.

Figura 7 - Diagrama desenvolvido no EAGLE.

O arquivo para a confecção da placa é gerado a partir do diagrama com


todas as conexões estabelecidas. Nesse arquivo foi feito o posicionamento
entre os componentes para não ocorrer cruzamento entre trilhas e o
roteamento das mesmas. Para fazer o roteamento foi atentado para as quinas
que não poderiam estar formando 90 graus, portanto todas as quinas foram
22
diagonalizadas ou arredondadas. Esse roteamento foi feito para placa de uma
camada. A Figura 8 mostra o layout da placa.

Figura 8 – Arquivo da placa com as trilhas roteadas manualmente gerado a partir


do diagrama e adaptado pra comunicação USB.

Para obter o arquivo somente com as trilhas é necessário apenas


imprimir a figura desmarcando a exibição dos componentes nas opções do
programa.

3.3. Firmware
Firmware é o conjunto de instruções de um programa gravado
diretamente no hardware, de forma a ser armazenado permanentemente no
circuito. Em geral, é não-volátil e permanece armazenado mesmo após o
desligamento do aparelho que o esteja armazenando.
O firmware desenvolvido no projeto que está gravado no
microcontrolador PIC18F4550 [7] tem como finalidade se comunicar através de
comunicação serial (RS232 ou USB) com o software de gerenciamento da
estação aquisição de dados o sistema de supervisão. Este software foi
desenvolvido na linguagem de programação Java, visando a portabilidade, e
intermedia o acesso do usuário com a estação de aquisição de dados. A
primeira funcionalidade pensada para o firmware foi em virtude da
comunicação através da porta serial: como saber que um dado foi recebido?
23
Como o único evento que interessa a esse firmware é a entrada de dados pela
porta serial, não há nenhum prejuízo em deixá-lo em um loop contínuo,
verificando da porta serial se algum dado foi recebido. Além disso, é a forma
mais simples, e, conseqüentemente a que exige menos tempo de
implementação, fato realmente relevante na escolha do método, devido ao
curto espaço de tempo de desenvolvimento disponível. Esse é o fluxo básico e
central do funcionamento do firmware, que está sempre ‘ouvindo’ a porta serial.
Depois de resolvida esta questão, começou-se então a listar e,
posteriormente, implementar as funcionalidades que o usuário deveria dispor
nesse sistema. Por questão de organização, dividimos essas funcionalidades
em módulos, que são um conjunto de funções (métodos) responsáveis por
funcionalidades especificas do microcontrolador. O primeiro módulo construído
foi o responsável pela conversão analógico-digital, ou simplesmente A/D. Ele é
constituído de três funções, bastante simples, como descrito abaixo:
channel_adc_0(): faz a conversão A/D do sinal lido no PORT A0, e
escreve esse valor na porta serial;
channel_adc_1():faz a conversão A/D do sinal lido no PORT A1, e
escreve esse valor na porta serial;
channel_adc_3():faz a conversão A/D do sinal lido no PORT A3, e
escreve esse valor na porta serial;

O segundo módulo a ser construído foi o módulo responsável pela


geração do PWM , Pulse-Width Modulation, ou Modulação por Largura de
Pulso, no português. De uma forma básica, um PWM consiste de uma onda
quadrada, onde se pode variar a Duty Cicle, ou seja, o tempo em que o sinal
fica em estado lógico alto, sem, entretanto, variar o período da onda [8]. O
PORT C0 foi escolhido para ser a saída do sinal PWM. Esse módulo é
constituído de sete métodos, descritos abaixo:
1. set_cicly_pwm_high(): eleva, em uma taxa de 4%,
proporcionalmente ao período do ciclo, o tempo em que a onda
fica em estado lógico alto.

2. set_cicly_pwm_low(): similar a set_cicly_pwm_high(), porém


decrementando a parte ativa do ciclo em 4% em relação ao seu
período total.

3. set_cicly_pwm_0(): seta o ciclo ativo em 0%, ou seja, mantém em


0 a saída do PWM.

4. set_cicly_pwm_25(): seta em 25% o percentual de tempo ativo do


ciclo.

24
5. set_cicly_pwm_50(): seta em 50% o percentual de tempo ativo do
ciclo.

6. set_cicly_pwm_75(): seta em 75% o percentual de tempo ativo do


ciclo.

7. set_cicly_pwm_100(): seta em 100% o percentual de tempo ativo


do ciclo, ou seja, deixa a porta em nível alto.

O outro módulo implementado foi o responsável pela entrada e saída


digital. O PORTB (todas as portas) foi escolhido para essa função, assim temos
oito portas disponíveis, o que equivale a um byte. Pode-se setar como entrada
ou saída cada uma das portas individualmente, assim como ler ou escrever em
cada uma delas. Em seguida, listam-se os três métodos que fazem essas
funções.

1. set_tris_io_digital(): responsável por setar, individualmente, as


portas escolhidas para fazerem a E/S digital (escolhemos o
PORTB) como entrada ou saída, de acordo com o parâmetro
recebido;

2. set_ports_io_digital(): responsável por setar, individualmente, os


níveis lógicos das portas que estão setadas como saída, de
acordo com o parâmetro recebido;

3. get_ports_io_digital(): responsável pela leitura do nível lógico das


portas, individualmente ou todas juntas.

Implementados esses módulos, o próximo problema a ser tratado foi o da


comunicação, pois não basta saber que um dado foi recebido (como foi
discutido acima), mas precisa-se saber que dado foi esse, e que ele significa
para o sistema. Dessa forma, um protocolo foi elaborado, onde cada escolha
do usuário, que será feita através do programa Java, corresponderá a um
caractere, que deve ser enviado pela porta serial ao firmware, onde,
posteriormente, ao reconhecer o dado, chamará a função correspondente. A
Figura 9 mostra um diagrama do funcionamento do firmware, e a Tabela 1
mostra os caracteres associados a cada método.

25
Figura 9: Estrutura do firmware.

Tabela 1:Relação entre parâmetro recebido e método correspondente.

FUNÇÃO
CÓDIGO
ASSOCIADA
A channel_adc_0
B channel_adc_1
C channel_adc_3
D set_time_adc
T set_tris_io_digital
P set_ports_io_digital
G get_ports_io_digital
H set_cicly_pwm_high
L set_cicly_pwm_low
0 set_cicly_pwm_0
1 set_cicly_pwm_25
2 set_cicly_pwm_50
3 set_cicly_pwm_75
4 set_cicly_pwm_100

A seta dupla entre o módulo do programa Java e o firmware indica que


este também envia dados, e não apenas recebe. Isso ocorre por que os
26
métodos do módulo de entrada e saída digital necessitam de parâmetro, pois é
necessário saber qual porta o usuário quer setar como entrada ou saída, ou
qual porta ele vai querer ler ou escrever. O protocolo que foi definido segue o
seguinte procedimento para esse caso: se alguma função do módulo de
entrada e saída digital for chamada, o programa Java deve esperar uma
sinalização (escolheu-se o caractere ‘s’), que virá do método chamado, indique
que o firmware está pronto para receber o parâmetro, e só então enviar o
parâmetro que indique em qual porta deve-se fazer o procedimento indicado no
parâmetro passado anteriormente, assim garante-se que o parâmetro não se
perderá. Poder-se-ia fazer diferente, como usar bufferização, porém, não se fez
necessário, pois a solução escolhido se mostra bastante funcional, foi de
simples implementação, e a perda de desempenho que isso possa ter causado
é irrelevante.

3.4. Comunicação USB: CDC e HID

A especificação USB (USB-IF) define classes de comunicação para os mais


variados tipos de comunicação (interrupção, transferência em massa, etc. [1].
Dentre essas classes de comunicação que o padrão USB define, duas classes
foram consideradas para desenvolver dois tipos de comunicação USB: CDC e
HID.

A classe de comunicação CDC (Connected Device Configuration),


desenvolvida nesse projeto, se enquadra em uma série de classes que definem
transferências genéricas de dados, como transferência de sinais de controle e
dados em modems, cabos Ethernet e, para o caso deste trabalho,
transferências que emulam a transmissão de dados através da comunicação
serial RS232.

A especificação CDC descreve a subclasse Abstract Control Model (IAR


SYSTEMS) para a emulação serial através do USB. Basicamente, para que a
emulação RS232 possa ser realizada duas interfaces (classes) USB são
necessárias: Communication Interface Class e Data Interface Class. A primeira
interface encarrega-se de notificar ao host – neste caso uma estação de
controle, um computador pessoal – do status da conexão USB-RS232 oriunda
do dispositivo. A segunda interface define a forma como os dados serão
enviados (OUT bulk endpoint and one IN bulk endpoint [1] já que, no padrão
RS 232, os dados são mandados em sua forma crua (raw data), sem qualquer
formatação [2].
A classe de comunicação HID (acrônimo em inglês, Human Interface Device)
consiste, primariamente, na definição da comunicação entre computadores e
dispositivos que são usados por humanos para controlar funções em sistemas
de computadores. Os exemplos mais conhecidos são os teclados, mouses e
flash drives ou, menos convencionais, como painéis de controle, leitores de
27
código de barras [1], etc.. Dispositivos que se adéquam aos requerimentos de
hardware [1] para serem dispositivos HID são reconhecidos automaticamente
pelos atuais e alguns antigos sistemas operacionais. Ou seja, não há
necessidade de instalação de driver ou software extra para que os dispositivos
funcionem nos computadores, por exemplo, diferentemente do que acontece
para os dispositivos inclusos nas definições das classes CDC.

3.4.1. Diagrama e componentes

O diagrama abaixo (ver Figura 10) representa a montagem do circuito básico


para se realizar a comunicação RS232 mascarada através da USB. O micro-
controlador utilizado foi o PIC18F4550, que possui um módulo próprio que
gerencia a comunicação USB, como já foi dito anteriormente. Nele pode-se
perceber, dentre os demais, o componente SV1, por exemplo. Esse
componente simboliza a entrada para o gravador serial, utilizado para gravar o
firmware no microcontrolador. Os demais componentes são peças chave que a
própria especificação do micro-controlador requer para realizar comunicações
USB.

Figura 10 - Diagrama do circuito de comunicação USB-RS232

Se bem analisado, esta é, de fato, toda a montagem necessária para o


funcionamento da estação de aquisição dados. Pois, os módulos de leitura
ADC e PWM, únicos módulos estáveis e funcionais da estação após a
transposição do PIC16F877A para o atual PIC18F4550, realizam leitura e
escrita, respectivamente, em portas do próprio microcontrolador, dispensando
dispositivos extras para tais funcionalidades.
28
A inserção ou junção destes módulos, ADC e PWM, com o código base
de comunicação USB, além do funcionamento em si da estação e a
comunicação com o sistema de supervisão (tratado adiante) foi transparente. O
sistema de supervisão continua a reconhecer portas seriais COM, por exemplo,
em Windows, transparecendo o uso ou não do barramento USB. Quanto a
implementação, as mudanças sensíveis, necessitando da inserção nos locais
corretos de algumas diretrizes para inicialização e manutenção da
comunicação USB.
Embora já tenha sido descrita, mesmo de forma resumida, a forma como
um dispositivo USB se comunica com um computador, é válido ressaltar,
especificamente, o processo de identificação do microcontrolador no
computador como dispositivo USB e a manutenção da comunicação:
1. O microcontrolador inicializa, antes de tudo, o módulo de comunicação
USB (neste caso, a simulação da conexão RS232 via USB).
2. Aguarda até que o dispositivo esteja conectado ao computador para que
o todo o código do firmware possa ser acionado.
3. Após a confirmação da conexão, o firmware só permite que as funções
sejam chamadas se o dispositivo esteja enumerado. Este estado é
diferente do conectado. Um dispositivo conectado não necessáriamente
está enumerado, ou seja, não está entre os dispositivos devidamente
reconhecidos e configurados para pleno funcionamento.
4. Durante todo o processo de comunicação, o módulo USB fica,
continuamente, enviando um sinal de atividade do dispositivo (tempo
máximo de 10 ms (dez milissegundos) para que a conexão de dados
não se perca). Este sinal é enviado através de uma interrupção criada
somente para enviar tal sinalização.

Por fim, para que a estação possa iniciar suas funções, basta, claro, que
o firmware já tenha sido gravado no micro-controlador e conectar o circuito
através do cabo USB na devida e correspondente porta no computador. Após
isso, será exibida uma mensagem que o dispositivo foi detectado (em ambiente
Windows). Contudo, o computador – assim como todos os demais com sistema
Windows - não possui nativo um driver necessário para gerenciar a
comunicação com o dispositivo (microcontrolador). Como foi dito antes, já que
essa é uma forma de comunicação específica de emulação RS232 e não
comunicações HID, faz-se necessário um driver específico. Após indicar onde
se encontra o driver correto, (utilizou-se o driver que acompanha o software
desenvolvimento) o micro-controlador será enumerado pelo computador e o
firmware poderá funcionar corretamente.

3.5. System Monitoring - Data Acquisition Station


29
O System Monitoring foi projetado para prover a manipulação de dados
e parâmetros do microcontrolador PIC 18F4550. Esta manipulação inclui ler,
armazenar e montar gráficos de dados coletados do conversor A/D do micro-
controlar. Outro propósito é a configuração da largura do pulso do PWM.

Este aplicativo foi implementado utilizando a linguagem de programação


Java. Esta linguagem disponibiliza API’s que possibilitam a comunicação Serial
e USB. Para o armazenamento dos dados, foi utilizado o servidor de banco de
dados MySql.

3.5.1. Detalhamento das funções do sistema

As funcionalidades do sistema serão listadas a seguir:

 Listar Experimentos realizados;

Neste requisito o usuário visualiza todos os experimentos armazenados no


banco de dados (ver imagem).

Ilustração 1 - Listagem de Experimento.

o Adicionar Experimento e Amostras em Banco de Dados;

Nesta funcionalidade o usuário do sistema pode configurar um


experimento, onde neste é informado: uma descrição, o canal A/D
lido, a freqüência de leitura e uma observação geral do
experimento, ver imagem abaixo.

30
Ilustração 2 - Adicionar Experimento.

Após esta configuração inicial, o usuário poderá iniciar a


gravação dos dados lidos da porta serial clicando no botão “Start”.

Ao final do experimento o usuário poderá parar a gravação


dos dados adquiridos via porta serial, oriundos do canal A/D
selecionado, finalizando assim a coleta de dados, clicando no
botão “Stop”.

o Remover Experimento e Amostras do Banco de Dados;

O usuário através desta funcionalidade poderá remover um


experimento e suas amostras armazenadas no banco de dados.

o Montar Gráfico de um determinado Experimento do Banco


de Dados.

Esta rotina permite ao usuário montar gráfico do experimento,


onde os seus eixos X e Y são, respectivamente, momento da
coleta e valor coletado. Ver ilustração abaixo.

31
Ilustração 3 - Gráfico de um Experimento.

 Listar as portas do Sistema;

Está funcionalidade mostra ao usuário as portas seriais


disponíveis em seu sistema.

 Configuração PWM e leitura rápida de canais A/D.

A configuração do PWM é realizada executando funções no


micro-controlador referentes ao seu percentual (0%, 25%, 50%,
75% e 100%), além disso, o sistema permite que o usuário
aumente e diminua o pulso do PWM através de passos (step_up /
step_down).

A leitura rápida de canais A/D é feita executando funções do


microcontrolador e lendo seu retorno através da porta serial. O
resultado da leitura é exibido nesta mesma tela, proporcionando
ao usuário a informação de forma rápida. Ver ilustração abaixo.

Ilustração 4 - Configuração PWM e leitura rápida de canais A/D.

32
3.5.2. Comunicação Serial com Java

A comunicação serial do System Monitoring foi implementada utilizando a


biblioteca RXTXcomm. Através desta biblioteca foi desenvolvida a classe
SerialCommunication.java, responsável por todos os métodos envolvidos na
comunicação serial.

Implementação da Classe SerialCommunication:

Nesta classe foi implementado o padrão de projeto Singleton de forma a


permitir apenas uma instância desta classe, não permitindo assim o sistema
criar múltiplas instâncias (conexões com a mesma porta serial).

Nesta classe foram implementados os seguintes métodos:

 listSerialPorts;

Este método retorna as portas seriais presentes no micro-


computador.

 openSerialPort;

É neste método que a porta serial, configurada no arquivo de


propriedades (serialPort.properties), é aberta com os parâmetros
configurados no mesmo arquivo de propriedades.

 setParametersPort;

O método setParametersPort, como o próprio nome já indica,


configura a porta serial com os parâmetros indicados no arquivo
de propriedade. Os parâmetros são: bit de dados, bit de parada,
paridade, timeout e velocidade. Os valores padrões podem ser
visualizados abaixo:

o bit de dados = 8
o bit de parada = 1
o paridade = 0
o timeout = 1000
o velocidade = 9600
o defaultPort=COM1

 writeDataToSerialPort;

Através deste método pode-se enviar uma string ou um int para


a porta serial.

33
 readDataFromSerialPort;

Este é o método responsável por iniciar a Thread responsável por


monitorar os eventos de entrada de dados pela porta serial.

 serialEvent;

Este método é uma implementação do método declarado na


interface SerialPortEventListener, onde através desta interface,
pode-se capturar os dados oriundos da porta serial.

 closeSerialPort;

Este método fecha a porta serial em uso.

3.5.3. Protocolo de comunicação (System Monitoring / Microcontrolador)

O protocolo de comunicação entre o System Monitoring e o micro-


controlador foi definida de forma que fossem atendidos os requisitos do
sistema.

Inicialmente foram implementados os métodos no firmware do micro-


controlador (ex.: read_adc_0, ler o dado do canal 0 do conversor A/D) a fim de
promover os dados necessários para a sua exibição no System Monitoring.
Para este fim, o software do System Monitoring, envia para a porta serial um
inteiro, onde este é lido pelo firmware para executar a função correspondente a
este inteiro enviado. Caso a função executada retorne algum valor, este é
enviado para a porta serial e eventualmente lido pelo System Monitoring.

3.5.4. Banco de Dados MySql (JDBC)

O armazenamento dos dados coletados num experimento é feito através


do JDBC com MySql. O primeiro passo foi elaborar o modelo entidade
relacional, esse modelo foi simples de criar, pois para atender as necessidades
do sistema bastaram apenas duas tabelas (ver Figura 11).

34
Figura 11 - Modelo de dados – System Monitoring.

Através da Figura 11, pode-se perceber a simplicidade do modelo do


banco de dados do System Monitoring.

Para efetuar as operações necessárias aos requisitos do sistema (insert,


select, etc.) foi criado o pacote database na estrutura do sistema (ver Figura
12). Neste pacote foram criadas três classes:

35
Figura 12 - Estrutura de Pacotes.

 DataBaseConnection

Esta classe é responsável por realizar a conexão com o servidor


de banco de dados, ou seja, é ela que fornece o método
getConnection para uso em toda a aplicação.

 DataBaseparameters

Esta classe é apenas para armazenar as constantes referentes


aos parâmetros de conexão com o banco de dados.

 ExperimentoDAO;

É na classe Experimento DAO, que se encontram todos os


métodos operacionais do banco de dados (inserts, selects,
deletes, etc).

Para atingir os objetivos do sistema foram desenvolvidos os


seguintes métodos:

o insertExperiment

Método responsável pela inserção de um determinado


experimento no banco de dados.

o delExperiment
36
Método responsável por deletar um determinado
experimento do banco de dados.

o insertSample

Método responsável pela inserção de uma determinada


amostra no banco de dados.

o getExperiment

Através deste método pode-se obter um experimento


armazenado no banco de dados.

o getAllExperiments

Este método retorna todos os experimentos do banco de


dados.

o getAllSamplesFromExperimento

Com este método podem-se obter todas as amostras de


um determinado experimento.

Vale ressaltar que estas operações com banco de dados, são exclusivas
para experimentos com leitura de dados de conversores A/D no micro-
controlador.

Outro detalhe a ser comentado, é o fato do tempo de coleta de


amostras, ou seja, no momento que o usuário inicia um experimento, ele
informa o intervalo entre as amostras. Mas este intervalo não é o intervalo real
entre as amostras. Isto ocorre devido a algumas limitações do protocolo
adotado.

O intervalo informado pelo usuário é na verdade o intervalo em que o


sistema envia a solicitação do dado do conversor A/D, após esta solicitação, o
microcontrolador interpreta a solicitação e executa a função correspondente e
envia o seu retorno para a porta serial. A partir deste momento, o sistema
recebe o dado enviado para a porta serial, captura o tempo do sistema e
armazena a amostra no banco de dados. Como este processo é assíncrono,
não podemos afirmar que o intervalo entre as amostras será o mesmo
informado pelo usuário.

4. Conclusão

37
Para o desenvolvimento desse trabalho foi necessário o estudo e
entendimento principalmente, do funcionamento dos microcontroladores da
família PIC da Microchip, de comunicação USB-RS232 e de confecção de
placas de circuito impresso.
A despeito da maior facilidade de uso de dispositivos HID, somente a
comunicação CDC ou USB-RS232 pode ser desenvolvida. Dentre os principais
motivos para a não conclusão da comunicação HID, foi o grande atraso
ocorrido no desenvolvimento da comunicação CDC. Esta última que possui
complexidade consideravelmente inferior à comunicação HID, implicou
considerável atraso no desenvolvimento, devido, principalmente, à
inexperiência em montagem e análise de circuitos eletrônicos do estudante
responsável pelo desenvolvimento, além da novidade da pesquisa sobre o
padrão USB. O estudante responsável encontrou, em relação à montagem,
vários outros problemas/dificuldades quanto, por exemplo, à verificação de fios
sem continuidade, valores corretos para os componentes necessários para
realizar a comunicação (capacitores, resistores, etc.) e gravação do firmware,
etc. Outra grande dificuldade encontrada, talvez tão impactante quanto à
inexperiência do estudante, foi a escassez de fonte de pesquisa e estudo sobre
a programação em C com PIC para comunicação USB, utilizando a ferramenta
de desenvolvimento CCS C (CCS Inc.). Esta ferramenta somente dispunha de
alguns exemplos que abarcavam algumas nuances de formas para programar
para USB (embora, posteriormente, tenham sido fundamentais, após intenso e
laborioso estudo). Além de explicações pouco elucidativas a respeito das
funções para USB que a ferramenta implementava.
Outra grande dificuldade na fase de montagem da comunicação USB: a
gravação do firmware. Uma tarefa que deveria ser simples, e de fato é, tornou-
se complicada em certo período do projeto devido a contínuas inconstâncias no
gravador - somente havia um único disponível no início. Além dos eventuais
problemas com fios, havia computadores em que a tensão necessária da porta
serial, fundamental para concretizar a gravação, não era suficiente, resultando
inconstâncias no reconhecimento do microcontrolador pelo software
responsável pela gravação (WinPic800). Posteriormente outros dois
gravadores foram montados por um componente do grupo e a constância de
problemas com gravações de firmware diminuiu bastante ou se esvaiu em
alguns casos.
A partir dos testes realizados pôde-se verificar o funcionamento adequado
do sistema atendendo as funcionalidades previstas no início do projeto como o
sistema supervisório, a comunicação Serial RS232, execução das funções do
firmware e a placa feita para abrigar o sistema. A comunicação USB foi
desenvolvida como CDC. Os testes realizados foram ensaios feitos no
laboratório e os módulos de leitura ADC e PWM foram os únicos módulos

38
estáveis e funcionais da estação após a transição do PIC16F877A para o atual
PIC18F4550.
Em relação à comunicação serial (RS-232), a codificação do firmware
começou usando como microcontrolador o PIC 16F877A, e apenas no final do
projeto o código foi migrado para o PIC 18F4550.
Problemas em relação à equipamentos defeituoso, que atrasaram o
andamento da codificação desse firmware, também ocorreram, porém,
considera-se que o mesmo está em um nível razoável de desenvolvimento.
Somado a isso, tem-se que o código está bastante inteligível, e há a
possibilidade de se ampliar, sem maiores dificuldades (em relação ao código),
inserindo novas funcionalidades ao sistema.

5. Referências

[1] Axelson, J. (2005). USB Complete: Everything You Need to Develop


USB Peripherals, Third Edition. Madison, WI 53704: Lakeview Research
LLC.
[2] Serial communications via USB Virtual Com Ports. (s.d.). Acesso em 21
de Janeiro de 2009, disponível em IAR SYSTEMS:
http://supp.iar.com/Support/?note=15729&from=search+result
[3] Visão geral da comunicação USB. Acesso em 22 de Janeiro de 2009,
disponível em National Instruments:
http://digital.ni.com/worldwide/brazil.nsf/web/all/354F3CD90DC1B8BE86
256FBE0050D6D6
[4] Fazendo suas placas de circuito impresso. Acesso em 21 de janeiro de
2009, disponível em:
http://www.overdance.com.br/audio_list/Fazendo%20suas%20placas%2
0de%20circuito%20impresso.pdf
[5] Understanding ICSP for PIC Microcontrollers. Acesso em 16 de
dezembro de 2008, disponível em:

39
http://www.instructables.com/id/Understanding-ICSP-for-PIC-
Microcontrollers/
[6] Multi chip programmer. Acesso em 19 de dezembro de 2008, disponível
em:
http://www.talkingelectronics.com/projects/MultiChipPgmr/MultiChipPgmr
-02-Construction.html
[7] PIC18F2455/2550/4455/4550 Data Sheet. Disponível em:
http://ww1.microchip.com/downloads/en/DeviceDoc/39632D.pdf

[8] PWM (Pulse Width Modulation). Acesso em 19 de dezembro de 2008,


disponível em:
http://www.netrino.com/Embedded-Systems/How-To/PWM-Pulse-Width-
Modulation

40

Você também pode gostar