USBSCOPE - Notícias [Engenharia Eletrica - UFPR] · Estudo dos Microcontroladores Definição do...
Transcript of USBSCOPE - Notícias [Engenharia Eletrica - UFPR] · Estudo dos Microcontroladores Definição do...
i
UNIVERSIDADE FEDERAL DO PARANÁ
WALTER LUCIANO ESPÍNDOLA
LEANDRO SILVA PIECARZ
USBSCOPE
Curitiba – PR 2007
ii
UNIVERSIDADE FEDERAL DO PARANÁ
WALTER LUCIANO ESPÍNDOLA
LEANDRO SILVA PIECARZ
USBSCOPE
Projeto de Graduação na área de Engenharia
Elétrica apresentado à Universidade Federal do
Paraná, como requisito parcial para a obtenção do
título de Engenheiro Elétrico .
Orientador: Márlio José do Couto Bonfim
Curitiba – PR 2007
iii
LEANDRO PIECARZ WALTER LUCIANO ESPÍNDOLA
USBSCOPE – OSCILOSCÓPIO USB
Este Trabalho de Diplomação foi julgado e aprovado como requisito parcial para a obtenção do Título de Engenheiro Eletricista, do Curso Superior de Engenharia Elétrica da Universidade Federal do Paraná.
Curitiba, 29 de Junho de 2007
Prof. M.Sc. Ademar Luiz Pastro Universidade Federal do Paraná
Prof. Dr. Marlio J. do C. Bonfim Prof. Dr. Marlio J. do C. BonfimUniversidade Federal do Paraná
OrientadorUniversidade Federal do Paraná
Prof. MSc. Raimundo Ribeiro P. Júnior Coordenador de Curso
Departamento de Engenharia Elétrica
BANCA EXAMINADORA
Prof. Dr. Eduardo Parente RibeiroUniversidade Federal do Paraná
i
AGRADECIMENTO
Este trabalho se deve ao empenho, esforço e confiança dos membros da
equipe, os quais sempre perseveraram para a realização desta pesquisa.
Agradecemos aos nossos mestres que nos ensinaram o valor e a
importância do conhecimento para o crescimento pessoal e profissional.
Devemos agradecer aos fabricantes, pelo fornecimento dos componentes,
a titulo de amostra, sem custos para este trabalho.
Agradecemos em especial ao profo. Dr. Marlio J. do C. Bonfim do
Departamento de Engenharia Elétrica da Universidade Federal do Paraná pela
constante disposição em ensinar, orientando as pesquisas desenvolvidas neste
projeto .
Agradecemos ao profo. M.Sc. Ademar Luiz Pastro do Departamento de
Engenharia Elétrica da Universidade Federal do Paraná pelas críticas construtivas,
na primeira fase do projeto.
Agradecemos ao profo. Dr Eduardo Parente Ribeiro do Departamento de
Eletrica da Universidade Federal do Paraná pelos comentários referentes ao
direcionamento de nossas pesquisas.
Agradecemos principalmente à nossos familiares e amigos, que souberam
compreender nossos momentos de ausência na execução deste trabalho, nos
apoiando e incentivando a todo instante.
ii
RESUMO
O projeto USBSCOPE consiste no desenvolvimento de protótipo para a digitalização e transferência de sinais analógicos para o microcomputador via porta de comunicação USB, de modo semelhante a um osciloscópio digital. O osciloscópio possui dois canais de 8 bits, com taxa de amostragem variável, sete escalas de tempo e oito escalas de amplitude variando de 0,2V a 50V controlados por software. O hardware consiste em um estágio de amplificação com ganho variável de dois canais, dois multiplexadores para a seleção das escalas e um microcontrolador PIC 18F2550 responsável pelo controle da conversão do sinal analógico em digital, pelo controle do multiplexador e também pela transferência das amostras para o microcomputador via interface USB. O firmware para o microcontrolador foi elaborado em linguagem C e Assembler. O software da interface visual no microcomputador foi elaborado em Visual Basic com características similares às de um osciloscópio convencional de bancada.
.
Palavras-chave
Osciloscópio USB
Microcontrolador PIC
Aquisição de dados via USB
iii
ABSTRACT
The USBSCOPE project aims the development of a prototype to digitalize and transfer analog signals to the microcomputer via USB interface, in a way similar to a digital oscilloscope. The oscilloscope has two 8 bits channels with variable sampling rate, seven time scales and eight amplitude scales varying from 0,2V to 50V controlled by software. The hardware consists of two variable gain amplifier stages, two multiplexer switches for the scale selection and a microcontroller PIC 18F2550 to control the analog to digital conversion, multiplexer and also for the transference of the samples to the microcomputer via USB. The firmware for the microcontroller was developed in language C and Assembler The software of the visual interface in the microcomputer was developed in Visual Basic code with characteristics similar to a conventional workbench oscilloscope.
Key words
Oscilloscope USB
Microcontroller PIC
Acquisition of data saw USB
iv
LISTA DE FIGURAS
FIGURA 1 – CONEXÃO MESTRE - ESCRAVO SPI................................................XIII
FIGURA 2 – SINAIS NA COMUNICAÇÃO SPI.........................................................XIII
FIGURA 3 – TOPOLOGIA USB...............................................................................XVI
FIGURA 4 – CORTE TRANSVERSAL DO CABO USB...........................................XVI
FIGURA 5 – CONVERSOR ANALÓGICO DIGITAL.................................................XXI
FIGURA 6 - CIRCUITO BÁSICO DO AMPLIFICADOR OPERACIONAL .............XXIII
FIGURA 7 - DIAGRAMA DO CAD E MICROCONTROLADOR USB SEPARADOS
- - -XXVIII
FIGURA 8 - DIAGRAMA DO MICROCONTROLADOR COM USB E CAD INTERNO
- - -XXVIII
FIGURA 9 - DIAGRAMA DE TEMPOS DO CONVERSOR A/D ...........................XXIX
FIGURA 10 - FACES DA PLACA DE CIRCUITO IMPRESSO ............................XXXII
FIGURA 11 - FACE SUPERIOR ..........................................................................XXXII
FIGURA 12 - LAYOUT DA FACE INFERIOR .....................................................XXXIII
FIGURA 13 - ASPECTO FINAL DO PROTÓTIPO ............................................XXXIV
FIGURA 14 - TELA INICIAL DO CCS - PCWH ..................................................XXXVI
FIGURA 15 - ESQUEMA ELETRÔNICO DO PROGRAMADOR JDM .............XXXVII
FIGURA 16 - PROGRAMADOR ICSP .............................................................XXXVIII
FIGURA 17 - MICROCONTROLADOR 18F2550 ..............................................XXXIX
FIGURA 18 - OPÇÕES DE CRIAÇÃO DO VISUAL BASIC ...................................XLII
FIGURA 19 - TELA DO USBSCOPE ....................................................................XLVI
v
LISTA DE QUADROS
QUADRO 1 – CRONOGRAMA DO PROJETO............................................................X
QUADRO 2 – OPÇÕES DE CONFIGURAÇÃO DAS PORTAS DO 18F2550... .XXXIV
QUADRO 3 – RELAÇÃO DE RESISTORES.......................................................XXXV
QUADRO 4 – RELAÇÃO DE CAPACITORES......................................................XXXV
QUADRO 5 – RELAÇÃO DE CIRCUITOS INTEGRADOS...................................XXXV
QUADRO 6 – RELAÇÃO DE COMPONENTES...................................................XXXV
QUADRO 7 – PINOS UTILIZADOS NO PIC..............................................................XL
vi
SUMÁRIO
AGRADECIMENTO.......................................................................................................I
RESUMO......................................................................................................................II
ABSTRACT.................................................................................................................III
LISTA DE FIGURAS...................................................................................................IV
LISTA DE QUADROS..................................................................................................V
SUMÁRIO...................................................................................................................VI
1 CAPÍTULO..............................................................................................................VIII
1.1 INTRODUÇAO.................................................................................................viii
1.2 OBJETIVO.......................................................................................................viii
1.2.1 Objetivo Geral............................................................................................ix
1.2.2 Objetivo Específico....................................................................................ix
1.3 JUSTIFICATIVA................................................................................................ix
1.4 PROCEDIMENTOS METODOLÓGICOS..........................................................x
1.5 CRONOGRAMA DO PROJETO........................................................................x
2 CAPÍTULO................................................................................................................XI
2.1 EMBASAMENTO TEÓRICO............................................................................xi
2.2 PRINCIPAIS CONCEITOS..............................................................................xi
2.2.1 Osciloscópio..............................................................................................xi
2.2.2 Comunicação SPI.....................................................................................xii
2.2.3 Comunicação USB...................................................................................xiv
2.2.4 Digitalização do Sinal...............................................................................xx
2.2.5 Amplificação do Sinal..............................................................................xxii
3 CAPÍTULO...........................................................................................................XXIV
3.1 ARQUITETURA DO PROTOTIPO................................................................xxiv
3.1.1 Análise dos Componentes.....................................................................xxiv
3.1.2 Escolha dos Componentes...................................................................xxvii
3.1.3 Conversor A/D e Microcontrolador USB Separados.............................xxvii
3.1.4 Microcontrolador USB com CAD interno..............................................xxviii
3.1.5 Definição da Arquitetura.......................................................................xxviii
4 CAPITULO...........................................................................................................XXXI
4.1 HARDWARE..................................................................................................xxxi
vii
4.1.1 Desenvolvimento....................................................................................xxxi
4.1.2 Layout da Placa.....................................................................................xxxi
4.1.3 Correções do Circuito...........................................................................xxxiii
4.1.4 Aspecto Final do Protótipo...................................................................xxxiv
4.1.5 Relação dos Componentes..................................................................xxxiv
5 CAPITULO.........................................................................................................XXXVI
5.1 FIRMWARE.................................................................................................xxxvi
5.1.1 Software Utilizado................................................................................xxxvi
5.1.2 Programador Utilizado.........................................................................xxxvi
5.1.3 Programacão do Microcontrolador.....................................................xxxviii
5.1.4 Descrição do Firmware..............................................................................xl
6 SOFTWARE...........................................................................................................XLII
6.1.1 Software Utilizado....................................................................................xlii
6.1.2 Estruturação do Código..........................................................................xliii
6.1.3 Interface Gráfica......................................................................................xlv
6.1.4 Driver do Dispositivo USB......................................................................xlvii
7 CONCLUSÕES E PERSPECTIVAS..................................................................XLVIII
REFERÊNCIAS BIBLIOGRÁFICAS.............................................................................L
ANEXO A....................................................................................................................LII
ANEXO B...................................................................................................................LIII
ANEXO C...................................................................................................................LV
viii
1 CAPÍTULO
1.1 INTRODUÇAO
As medições realizadas em qualquer circuito eletrônico são de fundamental
importância para o técnico reparador ou simplesmente para um estudante de
eletrônica, no desenvolvimento de seus experimentos. Essas medições podem ser
feitas de várias maneiras, com simples instrumentos de bancada como os
multímetros, ou com equipamentos mais sofisticados, com funções especiais que
tornam os resultados mais precisos e confiáveis, como os osciloscópios, podendo
acrescentar funções como memorização e impressão dos sinais visualizados.
Analisando os custos dos equipamentos de medição, que são proporcionais à
complexidade, confiabilidade e precisão requerida, buscamos com este protótipo
uma alternativa de baixo custo, com recursos limitados, mas de grande praticidade,
associado aos recursos disponíveis em qualquer microcomputador com uma porta
de comunicação USB.
O protótipo, designado USBSCOPE, envolve um circuito eletrônico destinado
a digitalização e transferência dos sinais medidos para o microcomputador e
também um software para a interpretação e visualização dos sinais em uma
interface gráfica, similar a tela de um osciloscópio.
1.2 OBJETIVO
O objetivo deste projeto é construir um protótipo que permita a aquisição de
sinais e a transferência destes, via porta de comunicação USB, para um
microcomputador que será responsável pela interpretação dos sinais através de um
software.
ix
1.2.1 Objetivo Geral
Temos como objetivo deste projeto desenvolver um hardware e um software,
aplicado a medição de sinais eletrônicos, buscando praticidade e custos reduzidos.
1.2.2 Objetivo Específico
Projetar um circuito eletrônico para a aquisição de sinais com dois canais de
oito bits, com taxa de amostragem variável de 0,5s a 0,02s, oito escalas de
amplitude variando de 0,2V a 50V, com seletor de sinal CC-CA via hardware.
Desenvolver uma interface gráfica para visualização dos sinais na tela do
microcomputador.
Desenvolver um Firmware para a comunicação via USB.
Implementar o circuito eletrônico em uma placa de circuito impresso, com
dimensões reduzidas, fazendo uso da tecnologia SMD.
1.3 JUSTIFICATIVA
Dentre os principais motivos que nos levaram a realização deste projeto,
podemos citar:
• O fato do tema do projeto estar correlacionado com o uso de
comunicação USB, sendo um grande desafio e extremamente
interessante para os membros do grupo.
• Possibilitar a aplicação de conhecimentos de eletrônica analógica e
digital, associados a recursos de programação de Firmware e Sofware.
• Os modelos de equipamentos com funções similares ao do projeto,
geralmente são para comunicação via porta paralela ou serial, de
custos elevados e em alguns casos, importados.
• A possibilidade do protótipo desenvolvido, poder evoluir para uma
versão mais elaborada, que permita comercialização futura.
x
1.4 PROCEDIMENTOS METODOLÓGICOS
O projeto será realizado por meio de pesquisa bibliográfica em de livros,
manuais, Internet, normas técnicas, apresentadas apropriadamente no decorrer dos
capítulos.
A pesquisa é científica, aplicada, explicativa e de laboratório, em que na
execução do trabalho usamos recursos como Internet, livros, manuais, datasheets
de componentes e equipamentos de medição em laboratório.
1.5 CRONOGRAMA DO PROJETO
As etapas do projeto foram desenvolvidadas conforme planejado no
cronograma,
com a apresentação prevista para a primeira semana de Julho. Quadro 1 – Cronograma do Projeto
Atividades / Mês Março Abril Maio Junho JulhoEstudo dos MicrocontroladoresDefinição do hardwareConfecção da placa e montagemTestes e calibraçãoEstudo do SoftwareDesenvolvimento do SoftwareTestes de Software Apresentação
xi
2 CAPÍTULO
2.1 EMBASAMENTO TEÓRICO
No presente trabalho pretende-se uma solução de como transferir sinais de
medições eletrônicas para um microcomputador através da porta USB, de maneira
satisfatória. Serão abordados aspectos conceituais do hardware envolvido, bem
como do firmware necessário, apresentando-se os softwares usados na
implementação do presente projeto.
Abordaremos conceitos básicos das funções existentes em um osciloscópio
comercial, que serão implementados na interface gráfica do nosso protótipo.
Mostraremos as características principais do protocolo de comunicação USB.
Neste trabalho, portanto, serão abordados conceitos de medição de sinais
eletrônicos, processos de conversão dos sinais analógicos em digitais, possíveis
alternativas dos componentes utilizados com suas vantagens e desvantagens,
normatização aplicada ao padrão de comunicação escolhido e estudo dos
problemas localizados durante a implementação do projeto.
2.2 PRINCIPAIS CONCEITOS
2.2.1 Osciloscópio
O osciloscópio é basicamente um dispositivo de visualização gráfica que
mostra sinais elétricos no tempo, que além de uma medida quantitativa, apresenta
também uma medida qualitativa da grandeza que está sendo objeto de análise.
O monitor de um osciloscópio é, geralmente, um retângulo de 10cmx8cm,
subdividido em quadrículos que permitem a leitura dos sinais visualizados. Os eixos
vertical e horizontal possuem escalas que são ajustadas pelos seletores de base de
tempo e amplitude, Para se medir um sinal elétrico com um osciloscópio, é
necessário se dispor das “ponteiras de prova”, que deverão ser conectadas aos
canais do osciloscópio e à fonte do sinal elétrico que se deseja medir.
xii
Os osciloscópios geralmente são de dois canais, o que significa que dois
sinais podem ser observados (simultaneamente ou não) com o instrumento. Existem
também osciloscópios com mais canais. Cada um dos canais possui uma entrada
para uma ponteira de prova e alguns comandos independentes.
Tanto os osciloscópios analógicos quanto os digitais permitem a visualização
de qualquer um dos seus dois canais, ou dos dois canais de forma simultânea.
Citamos as funções mais comuns encontradas em um osciloscópio:
• CH1: mostra o sinal do canal 1;
• CH2: mostra o sinal do canal 2;
• ALT e CHOP: mostram os dois canais de forma simultânea.
• ADD: mostra um sinal correspondente à soma do canal 1 com o canal 2.
• Amplitude máxima do sinal.
Os botões para selecionar as escalas horizontal e vertical do osciloscópio
permitem um ajuste da imagem de acordo com a freqüência e a amplitude de um
sinal. O ajuste da escala de tempo é comum aos dois canais do osciloscópio. A
escala de amplitude é independente para cada um dos canais do osciloscópio. O
ajuste dos seletores das escalas de tempo e de amplitude varia de acordo com o
sinal a ser analisado.
A amplitude dos sinais mostrados por um osciloscópio pode ser
determinada diretamente. Para isso, basta observar a escala do eixo vertical do
osciloscópio, quando um determinado sinal está sendo mostrado em função do
tempo. Deve-se contar o número de divisões e multiplicar pela escala que está
sendo utilizada.
2.2.2 Comunicação SPI
O SPI é um protocolo de comunicação síncrono e opera no modo full-duplex.
O protocolo SPI é composto por 4 sinais, são eles:
• Sinais de dados: MOSI (Master data Output, Slave data Input) e MISO
(Master data Input, Slave data Output) são responsáveis pela transferência de
dados entre o master e o slave.
• Sinais de controle: SCLK (Serial Clock) e /SS (Slave Select).
xiii
A figura 1 ilustra a conexão entre dois dispositivos spi. O dispositivo da direita
é denominado dispositivo mestre e o da esquerda dispositivo escravo. O dispositivo
mestre possui o controle do sinal de clock (SPICLK) e é quem controla o processo
de trocas de mensagens e dados. Os pinos de dados são denominados SPISIMO e
SPISOMI. No primeiro pino os dados entram quando o dispositivo é escravo (Slave
In) e saem quando o dispositivo é mestre (Mestre Out). No segundo pino a operação
é inversa. Na figura abaixo as setas indicam a direção dos dados.
Figura 1 – Conexão Mestre - Escravo SPI
Onde:
• SPITXBUF - É o buffer que contém o dado a ser transmitido.
• SPIRXBUF - É o buffer que contém o dado recebido.
• SPIDATA - É o registro de dados. Os dados a serem transmitidos são
transferidos para este registro. Na realidade ao mesmo tempo em que o
mestre transmite dados ele recebe dados do dispositivo escravo. Neste caso
o mestre deve, por software, aceitar ou não o dado.
• Registros de controle - São os registros utilizados para configurar a interface
SPI, como estabelecer a freqüência do clock, definir se o dispositivo será
mestre ou escravo e outras funções. Figura 2 – Sinais na Comunicação SPI
xiv
O mestre inicia uma transmissão enviando o sinal de relógio SPICLK. Dados
seriais são enviados pelo pino SPISIMO, do lado do mestre, e pelo pino SPISOMI,
do lado do escravo. Por exemplo, na subida do clock os dados são disponibilizados
nos pinos anteriores e na descida subseqüente do relógio os dados são
armazenados no registro SPIDATA. Assim na descida de cada pulso de clock o
escravo captura um bit vindo do mestre e o mestre captura um bit vindo do escravo.
Deste modo ambos dispositivos transmitem e recebem dados simultaneamente.
Cabe ao software de aplicação determinar se o dado é significativo ou não.
O mestre pode iniciar uma transmissão a qualquer momento, uma vez que ele
controla o sinal de clock, porém cabe ao projetista determinar como o mestre irá
saber quando o escravo está pronto para transmitir dados. Isto pode ser feito, por
exemplo, através de sinais de interrupção ou varredura por software.
2.2.3 Comunicação USB
Idealizado em 1995 por um grupo de empresas de tecnologia, o padrão USB
(Barramento Serial Universal), permite que sejam conectados até 127 equipamentos
em cada computador através de hubs. Tudo isso sem a necessidade de desligar o
computador para fazer as ligações e com reconhecimento automático doa aparelhos
adicionados. É o chamado plug and play.
A configuração do USB é automática, sendo desnecessária a preocupação
com drivers e programas ao acrescentar novos dispositivos. As controladoras USB
detectam automaticamente a conexão ou remoção de um periférico. Estas também
gerenciam e controlam o driver e a largura da banda exigida por cada dispositivo,
além também de definir a alimentação elétrica correta.
As primeiras interfaces USB atendiam à especificação 1.0 (Low Speed).
Posteriormente, foram introduzidas modificações que deram origem à especificação
1.1 (Low/ Full Speed), na qual seguem a maioria dos computadores produzidos
antes de 2000. A partir de meados de 2001 os computadores passaram a ter
barramento USB 2.0 (Low/ Full/ High Speed). A principal diferença das
especificações está na taxa de transferência, suportando as seguintes velocidades:
• Low speed – taxa de transferência de 1,5 Mbits/s
• Full speed – taxa de transferência de 12 Mbits/s
xv
• High speed – taxa de transferência de 480 Mbits/s
2.2.3.1.Características
As principais características do padrão USB estão abaixo listadas de acordo
com os benefícios propiciados por estas:
• Auto-identificação de periféricos, configuração e mapeamento de drivers
automático.
• Conexão dinâmica e reconfiguração de periféricos.
• Sensível a dispositivos cuja largura da banda de transmissão vai de poucos
Kbps até alguns Mbps.
• Suporta transferências isossíncronas assim como assíncronas para o mesmo
conjunto de fios
• Suporta conexões múltiplas de vários dispositivos, com até 127 periféricos.
• Protocolo reduzido, resultando em uma alta utilização do barramento.
• Suporta um grande número de pacotes de tamanhos variados
• A inserção e remoção dinâmica de periféricos é identificada e percebida em
tempo real pelo usuário.
• Consistente com a arquitetura plug and play dos PC’s.
• Compatível com as interfaces dos sistemas operacionais existentes.
2.2.3.2.Topologia USB
O barramento USB conecta dispositivos e hosts que suportam este padrão. A
interconexão física da USB usa a topologia tiered-star (estrela disposta em camadas
/ níveis). Um hub, conector, é o centro de cada estrela. Cada segmento de cabo é
uma conexão pontual entre o host e hub ou função, ou um hub conectado a outro
hub ou função. Existe apenas um host num sistema USB. A interface USB para o
sistema do computador hospedeiro refere-se ao controlador do mesmo. O
controlador do host pode ser implementado em combinação de hardware e software.
xvi
Um hub pode prover mais pontos de conexão. A figura seguinte ilustra a topologia
do USB:
Figura 3 – Topologia USB
2.2.3.3.Conexão Elétrica
As transferências de sinal e potencial são feitas através de um cabo, com
quatro fios, como mostrado na figura 4:
Figura 4 – Corte Transversal do Cabo USB
Os cabos USB possuem no seu interior dois pares de fios. Um par é trançado
e formado, geralmente, por fios de cor branco e verde. É através desses fios que
trafegam os dados, no formato serial. Esses dois sinais formam o par diferencial. Ao
invés de ter um fio terra e outro de sinal, os dois levam o mesmo sinal, mas com
polaridades invertidas, chamados de D+ e D-. A vantagem do par diferencial é a alta
imunidade a ruídos elétricos e interferências em geral. O outro par é usado para a
alimentação dos dispositivos ligados no barramento. O fio preto é o terra e o
xvii
vermelho traz uma tensão de +5 volts, e a corrente que pode ser fornecida é de 500
mA. Envolvendo esses dois pares de fios temos uma camada formada por uma folha
de alumínio e uma blindagem externa, formada por uma malha de cobre.
Envolvendo tudo temos uma capa de plástico.
2.2.3.4.Controlador Host
O host USB interage com os dispositivos através do controlador do mesmo. O
host é responsável por:
• Detectar a conexão e remoção de dispositivos USB.
• Gerenciar o fluxo de controle e de dados entre ele e os periféricos.
• Coletar estatísticas de atividades e estado.
• Fornecer alimentação aos dispositivos conectados.
O software do sistema USB no host gerencia interações entre dispositivos
USB e o software do dispositivo instalado no próprio hospedeiro.
Existem cinco áreas de interação entre o software do sistema USB e o
software do dispositivo:
• Enumeração e configuração do dispositivo.
• Transferências isossíncronas de dados.
• Transferências assíncronas de dados.
• Gerenciamento de energia.
• Gerenciamento de informações de barramentos e dispositivos.
Sempre que possível, o software do sistema usa interfaces existentes no host
para gerenciar as interações acima.
2.2.3.5.Protocolo USB
O USB é um barramento receptor. O controlador do host inicia todas as
transferências de dados.
Todas as transações do barramento envolvem a transmissão de até três
pacotes. Cada transação se inicia quando o controlador do host envia um pacote
USB descrevendo o tipo e a direção da transação, o endereço do dispositivo USB e
xviii
o número do ponto final (endpoint). O ponto final de um dispositivo é a única porção
endereçável deste que é a fonte de informação em um fluxo de comunicações entre
o host e o próprio. O número de endpoint é um valor de 4 bits entre 0(hex) e F(hex),
inclusive, associado a um ponto final de um periférico USB.
Este primeiro pacote é conhecido como "pacote de sinal" (token packet).
O dispositivo USB, que é endereçado, seleciona a si mesmo pela
decodificação do endereço apropriado. Em uma dada transação, dados são
transferidos do host para o dispositivo ou vice-versa. A direção da transferência é
especificada no token packet. A fonte da transação envia então um pacote de dados
ou indica que não há mais dados para serem transferidos. O destinatário, em geral,
responde com um "pacote aperto de mão" (handshake packet), indicando o sucesso
da transferência.
O modelo para transferências de dados entre a fonte ou um destino no host e
um ponto final de um dispositivo é conhecido como pipe (tubo ou canal). Existem
dois tipos de pipe: correntes (stream) e mensagens.
Uma corrente de dados não possui uma estrutura USB definida, enquanto as
mensagens possuem.
Além disto, os tubos possuem associações com as bandas de transmissão de
dados, tipos de serviços de transferência e características de endpoint, como
direção e tamanho de buffers. A maioria dos tubos passam a existir quando um
dispositivo é configurado. Uma mensagem de pipe, default control pipe, sempre
existe enquanto o dispositivo está sendo alimentado, para que possa fornecer
acesso às configurações, informações de controle e status deste.
A listagem da transações permite o controle do fluxo para várias correntes de
tubos (stream pipes). O mecanismo de controle de fluxo permite a construção de
listas flexíveis, que acomodam serviços concorrentes de misturas heterogêneas de
stream pipes. Múltiplas correntes de pipes podem ser "servidas" em diferentes
intervalos e com pacotes de diferentes tamanhos.
2.2.3.6.Fluxo de Dados
O barramento suporta dados funcionais e substituição de controles entre o
host e periféricos, assim também como um conjunto de pipes uni ou bidirecionais. As
transferências de dados realizam-se entre o software do host e um endpoint
xix
particular em um dispositivo USB. Algumas destas associações é que são chamadas
de pipes (tubos ou canais). Geralmente, o movimento de dados através de um tubo
é independente do fluxo de dados em outro tubo.
Um dado dispositivo USB deve possuir vários endpoints. Por exemplo, o
dispositivo deve ter um ponto final que suporte um tubo transportando dados para o
dispositivo e outro que suporte o transporte de dados no sentido contrário.
A arquitetura USB compreende quatro tipos básicos de transferências de
dados:
• Transferência de Controle
Usada para configurar um dispositivo no instante de sua conexão e pode ser
usada para outros propósitos específicos, incluindo controle de outros pipes no
dispositivo.
• Transferência de Volume de Dados
Gerada e consumida em grandes quantidades e simultaneamente. Possui
uma ampla e dinâmica latitude em transmissões de reserva. Este tipo de dado é
seqüencial. A largura das bandas de transmissão para este tipo de transferência de
dados pode variar dependendo de outras atividades concorrentes do barramento. É
um tipo de transmissão que assegura a integridade dos dados mas não a velocidade
de transmissão.
• Transferências Interruptas de Dados
Usada para caracteres ou coordenadas com percepções humanas ou
características de respostas regenerativas. Alguns dados podem ser apresentados
para transferências por um dispositivo em qualquer instante e é distribuída pelo USB
a uma taxa nunca mais lenta quanto a especificada pelo dispositivo.
• Transferência Isossíncrona de Dados
Ocupa uma quantidade pré-negociável da banda de transmissão do
barramento, com a distribuição de pulsos. Chamada também de transferência de
correntes em tempo real (streaming real-time transfers).
2.2.3.7.Caracterização de Dispositivos
xx
Todos os dispositivos USB são acessados por um endereço atribuído durante
sua conexão e enumeração. Cada componente adicionado suporta um ou mais
pipes através dos quais o host pode se comunicar com eles. Todo componente USB
também suporta um canal especialmente designado no ponto final zero para que
seja incluído o canal de controle (control pipe). Através deste pipe de controle,
dispositivos USB suportam um mecanismo de acesso comum para obter
informações.
O canal de controle no endpoint zero é a informação necessária para
descrever completamente o dispositivo USB. Esta informação é dividida em três
categorias:
• Standard
A definição é comum para todos os periféricos USB e inclui itens como a
identificação do vendedor, classe do dispositivo e o gerenciamento de alimentação.
Configurações, interface e descrições de endpoint dos dispositivos carregam
informações relacionadas sobre o mesmo.
• Class
A definição desta informação varia, dependendo das classes de dispositivos
USB.
• Vendedores USB
O vendedor de dispositivos USB é livre para adicionar qualquer informação
desejada.
2.2.4 Digitalização do Sinal
Para digitalizar um sinal, precisamos de uma base de tempo e um Conversor
Analógico Digital (ADC), que forneça uma aproximação digital do sinal original. A
aproximação digital é registrada em n – bits e a variação pode ser reduzida para
uma precisão de, no máximo, uma parte de 2n. A base de tempo determina a
velocidade com que podemos amostrar a forma de onda e varia com o tipo de ADC.
Em geral, quanto maior for o número de bits, mais lento é o dispositivo.
O bit mais significativo (msb) é o que registra a maior variação de tensão, e o
bit menos significativo (lsb) registra a menor variação de tensão.
xxi
2.2.4.1.Conversor Analógico Digital
Um conversor A/D é um circuito que converte um nível de tensão (ou
corrente) em um valor numérico (digital) correspondente. É a base de qualquer
instrumento de medição digital. Existem várias topologias de circuitos conversores A/
D, cada uma delas com características específicas priorizando a velocidade de
conversão, a resolução, a simplicidade ou o custo.
Figura 5 – Conversor Analógico Digital
• Conversor A/D Paralelo ou Flash
O processo de conversão A/D é feito de modo paralelo (todos os bits
simultaneamente), o que possibilita uma maior velocidade de operação. O sinal de
entrada é comparado com 2n-1 valores intermediários de tensão distribuídos
linearmente dentro da faixa dinâmica do conversor (n = nº de bits do conversor).
Para cada valor intermediário é utilizado um comparador de tensão. A saída dos
2n-1 comparadores é combinada por um conjunto de portas digitais, fornecendo o
resultado de saída em código binário.
• Conversor A/D de Rampa Simples
É baseado na geração de uma rampa de tensão linear no tempo, obtida pela
integração da tensão de entrada (circuito integrador com AMPOP).
• Conversor A/D de Rastreamento
O rastreamento funciona pela saída de um comparador impulsionando a
direção de contagem. O contador emite uma palavra digital que o D/A converte para
V+. O sinal de controle configura a taxa do relógio, então, à medida que o contador
vai para frente e para trás em volta do binário da tensão de entrada, o relógio é
xxii
desacelerado para conseguir uma representação melhor. A característica
interessante do A/D de rastreamento é que ele segue um alvo em movimento.
• Conversor Carga-Equilíbrio
O projeto de equilíbrio de carga é mais comum para dispositivos lentos e de
baixo custo (mas pode ser bastante preciso). A idéia é carregar um capacitor via
tensão do sinal integrado. Isso é usado para acionar um mono-estável que envia um
pulso de gatilho breve para uma fonte de corrente precisa. A freqüência da fonte de
corrente irá cancelar a construção da carga no capacitor em função do integrador e,
portanto, a freqüência fornece uma medida da tensão de entrada. A freqüência é
medida com um contador.
• Conversor por Aproximações Sucessivas
Uma abordagem antiga para a conversão A/D é por aproximações
sucessivas, começando com o bit mais significativo e indo até o menos significativo.
O comparador simplesmente informa se a aproximação é alta demais. Podemos
pensar nisso como um elo de realimentação buscando seu ponto operacional, mas,
na verdade, ele nunca será encontrado, já que a aproximação não é igual ao sinal
de entrada.
2.2.5 Amplificação do Sinal
Tendo em vista que o sinal elétrico a ser convertido pode ser da escala de
mili-volts, é necessário que eles sejam aplicados a um amplificador, que fornece um
alto ganho para o sinal diferencial de entrada obtendo um sinal de saída adequado
para a análise.
Este ganho pode ser regulado variando o valor da resistência entre os
terminais de controle de ganho deste componente e é ajustado durante a montagem
do sistema.
xxiii
Figura 6 - Circuito Básico do Amplificador Operacional
.
xxiv
3 CAPÍTULO
3.1 ARQUITETURA DO PROTOTIPO
Entre as várias possibilidades de desenvolvimento do protótipo podemos citar:
• Conversor AD e microcontrolador separados.
• Microcontrolador com USB e CAD interno.
3.1.1 Análise dos Componentes
Fazendo a análise dos componentes necessários para a montagem do
protótipo, destacamos os seguintes como principais:
• Microcontrolador
• Conversor Analógico Digital
• Multiplexador
• Amplificador Operacional
3.1.1.1.Microcontrolador
FTDI FT232BM USB UART
Este microcontrolador se destaca principalmente por disponibilizar
gratuitamente, no site do fabricante, drives de controle para os sistemas
operacionais Windows 98/Me/200/XP/CE.NET, Linux e Mac OS-X/9/8, com
exemplos de aplicação e código fonte para as linguagens C++, LabView, Delphi,
Visual Basic, Java e Python, juntamente com uma ampla documentação. Seria ideal
para a nossa aplicação se não fosse a limitação do número de saídas. Tem as
seguintes características:
• 32 pinos com encapsulamento LQFP
• 284 Bytes de buffer de recebimento
• 128 Bytes de buffer de envio
• Taxa de transferência entre 300 a 1M Baud (RS232)
• Compatível com USB1.1 e USB2.0
xxv
• EPROM programável via USB
Atnel AT90USB82
Este fabricante possui a linha AT90USB com capacidades de memória Flash
de 8 a 128Kb, com conversor A/D de 10bits e várias outras características
necessárias para o protótipo, mas a documentação de referência para programação
e outros detalhes de aplicação são destinados para usuários mais avançados,
dificultando seu uso no presente projeto. Tem as seguintes características:
• 32 pinos com encapsulamento QFN32 e TQPP32
• 8 kB de memória Flash para o programa
• 512 Bytes SRAM para dados
• 512 Bytes EEPROM
• 22 I/Os programáveis
Microchip 18F2550
Este foi o mais adequado a nossa aplicação. O microcontrolador da
Microchip é baseado na arquitetura Harvard com modelo de instruções RISC
(Reduced Instruction Set Computer). Desta forma possui apenas 35 instruções em
Assembler viabilizando o aprendizado e programação. Possui uma vasta
documentação a respeito da programação e aplicações práticas, favorecendo na
solução dos problemas que pudessem ocorrer na implementação do protótipo.
Citamos as principais características:
• 28 pinos com encapsulamento PDIP e SOIC
• 32 kB de memória Flash para o programa
• 2 kB de memória SRAM para dados
• 24 pinos de I/O individualmente configurados
• Conversor A/D com10 canais de 10 bits
• Proteção de Código Programável
• Modo SLEEP para diminuição de consumo de energia.
• Opções de oscilador selecionável: RC, XT, HS, LP
• Programação Serial “in-circuit” (através de dois pinos)
xxvi
• Bytes de identificação (ID) programáveis pelo usuário
3.1.1.2.Conversor Analógico Digital
Analog Device AD7912
O fator determinante na escolha foi a taxa de conversão disponível com a
interface serial, sendo que tínhamos a opção de outros fabricantes mas com
interface paralela ou freqüência de clock acima de 20MHz. Tem as seguintes
características:
• Dois canais de 10 bits
• Taxa de conversão máxima de 1MSPS com 18MHz de clock
• Interface serial SPI
• Encapsulamento 8 pinos MSOP
3.1.1.3.Multiplexador
Maxim Max4638ESE
O chaveador multiplexador foi escolhido dado suas dimensões e numero de
canais. Tem as seguintes características:
• Oito canais multiplexados
• Encapsulamento 8 pinos SOIC
3.1.1.4.Amplificador Operacional
Texas OPA2350
Este componente estava disponível em nosso laboratório, sendo adequado à
aplicação em questão, com as seguintes características:
• Dois canais
• Largura de banda de 38 MHz
• Encapsulamento 8 pinos SOIC
xxvii
3.1.2 Escolha dos Componentes
A escolha dos componentes foi realizada tendo como base os requisitos
mínimos de desempenho do protótipo mencionados no objetivo do projeto, item
1.2.2. Também levamos em conta a facilidade de aquisição dos componentes,
buscando fabricantes que disponibilizassem amostras sem custos para nosso
projeto.
O microcontrolador escolhido foi o 18F2550 da Microchip por possuir
características de desempenho, ferramentas para desenvolvimento e dimensões
apropriadas para a construção do protótipo.
O conversor AD escolhido foi o AD 7912 da Analog Device, com dois canais
de 10 bits e interface SPI (Serial Peripheral Interface).
Usamos dois multiplexadores da Maxim, o MAX4051, com oito canais
multiplexados através de três bits de controle, para a seleção das escalas.
Na entrada de sinal para o conversor AD usamos um amplificador operacional
da Texas, o OPA2350U, possibilitando um range de oito escalas através do controle
de ganho.
3.1.3 Conversor A/D e Microcontrolador USB Separados
Com esta arquitetura temos um conversor A/D de dois canais comunicando
com um microcontrolador via SPI (Serial Peripheral Interface). O microcontrolador é
responsável pelo controle do fluxo de dados da comunicação USB e SPI. Na entrada
do conversor A/D precisamos de um amplificador operacional para cada canal. O
controle de escalas pode ser feito diretamente pelo microcontrolador ou através de
um multiplexador.
xxviii
Figura 7 - Diagrama do CAD e Microcontrolador USB Separados
3.1.4 Microcontrolador USB com CAD interno
Nesta arquitetura o microcontrolador e responsável pela conversão A/D dos
dois canais, assim como pelo controle do fluxo de dados da comunicação USB. Faz-
se necessário, para cada um dos canais, a utilização de um amplificador operacional
juntamente com um multiplexador, com o objetivo de fazermos a seleção das
escalas através do controle de ganho do amplificador.
Figura 8 - Diagrama do Microcontrolador com USB e CAD Interno
3.1.5 Definição da Arquitetura
Inicialmente começamos desenvolvendo o sistema com conversor A/D e
microcontrolador separados, mas não pode ser totalmente implementado devido a
características do protocolo SPI do conversor A/D.
Na parte do microcontrolador (máster), o sinal de clock somente é enviado
quando se quer realizar a transmissão ou recepção de dados, sempre são oito ciclos
de clock.
xxix
Na parte do conversor A/D (slave), o conversor precisa do sinal de clock
para dar início à conversão do dado. Essa conversão começa no primeiro ciclo e o
envio do dado só começa a partir do quarto pulso de clock. O dado é enviado bit por
bit sendo que o ultimo bit é enviado no quarto pulso de clock, o penúltimo bit no
quinto pulso, e assim sucessivamente até o primeiro bit do dado.
Diante desse atraso ocorreria a perda de seis clocks do dado convertido
que seria enviado para o microcontrolador, resultando numa perda na escala de
resolução. A figura abaixo mostra o diagrama de tempos do conversor A/D.
Figura 9 - Diagrama de Tempos do Conversor A/D
A solução adotada para resolver este problema foi a utilização do conversor
interno do próprio microcontrolador, que apesar de proporcionar uma freqüência de
amostragem mais baixa manteria a resolução em dez bits.
A freqüência de amostragem máxima (F s ) foi estimada pelas equações:
610486464×
==FT
oscad sT ad
61033,1 −×=
Para 10 bits serão usados T ad×11 , então:
TT adc ×= 1161048
6411−×
×=T csT c
51047,1 −×=
T acq é fornecido pelo datasheet com um valor médio s61045,2 −× .
65 1045,21047,111
−− ×+×=
+=
TTFacqc
s kHzF s 3,58=
xxx
Entre duas conversões consecutivas temos T acq×3 , portanto:
TTTT adacqctotal ×++= 3 sT total510114,2 −×=
xxxi
4 CAPITULO
4.1 HARDWARE
Inicialmente começamos implementando o hardware da arquitetura
mensionada no item 3.1.3, conversor A/D e do microcontrolador USB separados,
mas diante dos problemas apresentados, fizemos pequenas modificações no
mesmo hardware para adequá-lo à arquitetura do item 3.1.4, microcontrolador USB
com conversor A/D interno.
4.1.1 Desenvolvimento
Tanto no desenvolvimento do esquema eletrônico quanto na elaboração da
placa de circuito impresso foi utilizado uma versão freeware do software Eagle.
O esquema eletrônico foi fundamentado nas informações contidas nos
datasheets dos componentes, disponível na homepage do fabricante, juntamente
com o direcionamento recebido do orientador do projeto. O esquema eletrônico está
no Anexo_A.
O layout da placa de circuito impresso foi dimensionado tendo como
referência as medidas de caixa de um “pen drive”, com o objetivo de usarmos a
mesma caixa para suportar o nosso circuito, usando inclusive o conector USB e o de
áudio.
Dada as dimensões da placa de circuito e impresso optou-se por tercerizar
sua confecção, ficando a nosso encargo a montagem dos componentes.
4.1.2 Layout da Placa
Com os padrões de encapsulamentos dos componentes definidos, fizemos
a distribuição destes nos dois lados da placa de circuito , resultando em duas faces
com vários pontos de interligação entre elas.
xxxii
A placa de circuito impresso ficou com dimensões de 25mm de largura e
70mm de comprimento, adequadas ao tamanho invólucro do “pen drive”, como
mostrado na figura 10.
Figura 10 - Faces da Placa de Circuito Impresso
Na face superior, figura 11, temos como principais componentes o
microcontrolador, o conversor A/D e o aplificador operacional .
Devido a necessidade de programação do firmware do microcontrolador, foi
previsto um ponto de conexão para o programador ICSP™ (In-Circuit Serial
Programming™).
Figura 11 - Face Superior
Na face inferior, figura 12, foram posicionados os dois multiplexadores e o
oscilador cristral de 16MHz.
xxxiii
Figura 12 - Layout da Face Inferior
4.1.3 Correções do Circuito
A primeira alteração foi devido à substituição do oscilador semicondutor por
um cristal de 16MHz, para uma maior precisão do clock, conforme recomenda a
especifição USB 2.0 (Universal Serial Bus Specification Revision 2.0) , para o modo
Full-speed uma tolerância de ±0,25%.
Na elaboração do layout foi determinado erroneamente o encapsulamento
dos multiplexadores como SOIC1, ao invés do encapsulamento SOIC com
dimensões menores que fora previsto, sendo necessário prolangar alumas
conexões dos pinos do multiplexador.
Eliminamos o conversor A/D externo, pelas limitações mencionadas no item
3.1.3, relocado as conexões de entrada do conversor para os pinos 2 e 3 do
microcontrolador, entradas analógicas AN0 e AN1.
Em função do uso das entradas analógicas AN0 e AN1 do microcontrolador foi
necessário relocar as conexões do multiplexador que inicialmente estavam nos
pinos 2 e 3 para os pinos 11 e 12, por razões de configuração das portas anlógicas
sendo necessário obdecer a seguinte ordem da tabela abaixo:
xxxiv
Quadro 2 – Opções de Configuração das Portas do 18F2550
4.1.4 Aspecto Final do Protótipo
Todo circuito foi elaborado com o objetivo de acomodá-lo no invólucro de um
pen-drive, com o correto dimensionamento da placa de circuito impresso e
disposição dos conectores adequadamente para um encaixe perfeito. A figura 13
mostra o aspecto final do protótipo.
Figura 13 - Aspecto Final do Protótipo
4.1.5 Relação dos Componentes
xxxv
• Resistores
ValorR1, R9 10 MΩR2, R10 4 MΩR3, R11 2 MΩR4, R12, R17, R18 1 MΩR5, R13 400 kΩR6, R14 200kΩR7, R15 100kΩR8, R16 40kΩR19, R20, R21, R22 10kΩ
Quadro 3 – Relação de Resistores
• Capacitores
ValorC1, C2, C3, C4, C5, C8, C10 0,1µFC6 470 nfC7, C9 15pFC11, C12 10µFC13, C14 20nF
Quadro 4 – Relação de Capacitores
• Circuitos Integrados
Quadro 5 – Relação de Circuitos Integrados
• Outros Componentes
Cristal Q1 HS 16MhzConector SV1 PIN MA05-1Conector X1 USBConector X2 JACK
Quadro 6 – Relação de Componentes
IC1 AD7912IC2, IC3 MAX4051IC4 OPA2350U1 18F2550
xxxvi
5 CAPITULO
5.1 FIRMWARE
O firmware descrito neste capítulo está relacionado com o
microcontrolador 18F2550, mostraremos os detalhes de programação e as
ferramentas utilizadas.
5.1.1 Software Utilizado
Para programar o firmware usamos o software PCWH 4.013, da empresa
CCS (Custom Computer Service), que faz a compilação em linguagem C,
suportando as famílias dos microcontroladores da Microchip de 12 bits, 14 bits e
16bits.
O software inclui várias funções e rotinas pré-definidas que permitem ao
programador uma maior agilidade na elaboração dos programas.
Figura 14 - Tela Inicial do CCS - PCWH
5.1.2 Programador Utilizado
A transferência do firmware para o microcontrolador foi realizada com o
auxílio do programador PICPlus. Possui as mesmas características eletrônicas do
programador JDM, figura 15, não precisando de fonte de alimentação externa,
xxxvii
aproveitando o recurso existente no microcontrolador de programação em baixa
tensão (LVP).
Figura 15 - Esquema Eletrônico do Programador JDM
O programador PICPlus faz as seguintes conexões com o microcontrolador
via porta serial:
• Pino 1 (VDD) do conector ICSP alimenta o PIC no pino 20 (VDD) e habilita
programação em baixa tensão no pino 26 (PGM).
• Pino 2 (PGD) do conector ICSP faz a programação de dados com o PIC no
pino 28 (PGD).
• Pino 3 (VSS) do conector ICSP alimenta o PIC nos pinos 8 (VSS) e 19 (VSS).
• Pino 4 (VPP) do conector ICSP conecta a tensão de programação do PIC no
pino 1(VPP).
• Pino 5 (PGC) do conector ICSP conecta o clock de programação do PIC no
pino 27 (PGD)
xxxviii
Figura 16 - Programador ICSP
5.1.3 Programacão do Microcontrolador
O PIC18F2550 possui uma arquitetura baseada em acumulador (o
registrador W), todas as instruções lógicas e aritméticas são referenciadas à ele. Os
registradores são divididos em duas categorias: especiais (SFR) e de propósitos
geral (GPR).
A maior parte dos SFRs são usados para configurar e usar os diversos
periféricos disponíveis. O registrador de STATUS sinaliza condições especiais
ocorridas durante as operações.
Os principais registradores configurados para nosso projeto foram os
relacionados às definições de clock (CONFIG1L, CONFIG1H, OSCCON), nas
definições da USB (UCON, UCFG, USTAT, UADDR, UFRMH:UFRML), nas
definições de SPI (SSPSTAT, SSPCON1) e na configuração de portas como entrada
e saída (TRISA, TRISB). A programação de cada registrador é feita movendo-se um
valor equivalente ao valor binário que represente as condições necessárias para
cada função ou configuração.
xxxix
Figura 17 - Microcontrolador 18F2550
O quadro abaixo mostra as funções dos pinos utilizados no PIC18F2550.
Pino Função Descrição
1MCRL Entrada de reset, em nível baixo reseta o sistemaVpp Entrada de tensão da programação
2 AN0 Entrada analógica 03 AN1 Entrada analógica 14 RA2 Digital i/o5 RA3 Digital i/o6 RA4 Digital i/o7 RA5 Digital i/o8 Vss Referência à terra para a lógica e os pinos de i/o9 OSC1 Entrada do oscilador de cristal ou entrada de clock externo
10 OSC2 Conecta o cristal ou ressonador 11 RC0 Digital i/o12 RC1 Digital i/o14 Vusb Regulador de tensão interno do USB 3.3V15 D - Linha diferencial negativa do USB (input/output)16 D+ Linha diferencial positiva do USB (input/output)19 Vss Referência à terra para a lógica e os pinos de i/o
xl
20 Vdd Fonte positiva para a lógica e os pinos de i/o26 PGM Pino que permite a programação em baixa tensão ICSP27 PGC Clock de programação ICSP28 PGD Pino de dados da programação ICSP
Quadro 7 – Pinos Utilizados no PIC
5.1.4 Descrição do Firmware
Faremos uma breve descricao dos pontos principais do firmware que foi
compilado em linguagem “C”. A rotina completa encontra-se no Anexo B. Os
comandos serao mostrados em formatação itálico e negrito.
Comecamos fazendo a chamada do arquivo de definicao de todos os
registradores enderecados para o 18F2550, existente no banco de dados do
compilador CCS: #include <18F2550.h
Fazemos a configuracao dos fusíveis:
HSPLL - oscilador de cristal de alta frequencia com PLL habilitado.
NOWDT - watchdog desabilitado.
NOPROTECT - proteção de codigo desabilitada.
LVP – programacao em baixa tensão habilitada.
DEBUG - RB6 e RB7 dedicados para InCircuitDebug
USBDIV - clock USB do 96MHz PLL/2
PLL5 - cristal de 20MHz PLL prescaler /5
CPUDIV1-clock do núcleo 96MHz PLL/2
VREGEN - regulador interno de tensão USB habilitado
#fuses
HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREG
EN
Ativamos o EndPoint1 para as transferencias IN Bulk/Interrupt
#define USB_EP1_TX_ENABLE USB_ENABLE_BULK
Ativamos o EndPoint1 para as transferencias OUT Bulk/Interrupt
#define USB_EP1_RX_ENABLE USB_ENABLE_BULK
xli
Determinamos o tamanho de 4 bytes reservado para o Buffer Tx EndPoint1
#define USB_EP1_TX_SIZE 4
Determinamos o tamanho de 3 bytes reservado para o Buffer Rx EndPoint1
#define USB_EP1_RX_SIZE 3
Fazemos a inclusão das bibliotecas USB do compilador CCS para o hardware
18F2550, configuração da USB e descritores:
#include <pic18_usb.h>
#include <PicUSB.h>
#include <usb.c>
Configuramos as entradas analógicas do conversor A/D:
setup_adc_ports(AN0_TO_AN1)
Inicializamos o USB: usb_init()
Habilitamos os periféricos e interrupções: usb_task()
Esperamos que o Pic seja enumerado pelo windows:
usb_wait_for_enumeration()
Fazemos a seleção do canal, aguardamos 10µs para configurar, iniciamos a
leitura do canal A0 e enviamos o pacote de dados de 4 bytes para a USB
set_adc_channel(0); delay_us(10); entrada_0 = read_adc();
usb_put_packet(1,envia,4,USB_DTS_TOGGLE)
xlii
6 SOFTWARE
Apresentaremos o software desenvolvido para a interface gráfica bem como
detalhes do driver utilizado para a instalação do dispositivo USB no
microcomputador.
6.1.1 Software Utilizado
A programação da interface gráfica foi desenvolvida no Visual Basic 6.0,
rodando em qualquer microcomputador com sistema operacional Windows.
O Visual Basic estrutura o programa em varias seções, oferece uma séria
de opções sobre o que desejamos criar, podendo ser: um executável, uma DLL, um
ActiveX, etc, como mostrado na figura 18. Usaremos somente "standard EXE" que é
o usual para criação de programas executáveis.
Figura 18 - Opções de criação do Visual Basic
O Visual Basic fornece muitas possibilidades de desenhar gráficos,
geralmente os gráficos são feitos através dos objetos “Printer “, “Form” ou “Picture”.
Eles representam a superfície as quais os gráficos podem ser aplicados. Neste
aplicativo nos usamos o objeto “Form” como tela base e o objeto “Picture”, para
plotarmos o gráfico dos sinais.
xliii
6.1.2 Estruturação do Código
Cada objeto colocado no formulário , “Form”, é dotado de uma janela de
propriedades que permite configurar o mesmo. Também possui eventos, e baseados
nestes eventos criamos nosso programa na janela de codificação.
O programa inicia com a declaração das variáveis gerais que serão usadas
em várias sub-rotinas, e dentro destas existe a declaração das variáveis locais.
A seguir apresentaremos as principais partes da rotina com comentários
dos pontos mais importantes. Os comandos serao mostrados em formatação itálico
e negrito . A rotina completa encontra-se no Anexo C.
• Rotina de início
Pressionando o botão de comando cmdCiclo iniciamos o programa que
executa continuamente as sub-rotinas DoEvents, cmdEntradas através dos
comandos de laço Do e Loop.
Private Sub cmdCiclo_Click() Do DoEvents cmdEntradas_Click cmdAnalogicas_Click LoopEnd Sub
• Rotina de leitura analógica
Primeiramente testa se o pipes de comunicação myOutPipe e myInPipe
estão configurados, então atribui valor 4 para o Send_Buf(0) , se houver
erro no processo, mostra a mensagem de "Falha na leitura analógica",
caso contrário transfere os valores dos canais para a variável
lblAnalogica.
If (myOutPipe <> INVALID_HANDLE_VALUE) And (myInPipe <> INVALID_HANDLE_VALUE) Then
Send_Buf(0) = 4 If (Send_Receive(Send_Buf, 1, Rec_Buf, 4, 1000, 1000) <> 1) Then MsgBox "Falha na leitura analógica" Else For i = 0 To 1 lblAnalogica(i).Caption = Rec_Buf(i) Next i End If End If
xliv
• Rotina de plotagem
Começa com a definição da escala da área de plotagem com Picture1.Scale,
em seguida identifica em qual posição encontra-se o seletor de canal, Select
Case Slider1.Value. Neste ponto temos três opções de canais, para CH1 e
CH2 corresponde ao Case 0, somente CH1 corresponde ao Case 1, somente
CH2 corresponde ao Case 2 . Selecionado a opção correta, inicia a plotagem
com o comando Picture1.Line , interligando cada ponto amostrado com linhas,
incrementando a variável X2 ate atingir o limite estabelecido na escala com a
variável vetorhoriz . O processo se repete para os dois canais e ao final de
cada plotagem a tela e limpa para a nova plotagem
Picture1.Scale (0, 255)-((vetorhoriz), -1)Select Case Slider1.Value
Case 0 For i = 0 To 1 If i = 0 Then Picture1.Line (x1, aux)-(x2, Rec_Buf(i)), vbRed aux = Rec_Buf(i) x1 = x2 x2 = x1 + 1 Else Picture1.Line (x12, aux2)-(x22, Rec_Buf(i)), vbGreen aux2 = Rec_Buf(i) x12 = x22 x22 = x12 + 1 End If If x2 = (vetorhoriz) Then x2 = 0 x1 = 0 x12 = 0 x22 = 0 Picture1.Cls End If qtz(i) = Rec_Buf(i) Next i
• Rotina de conversão para valores de tensão
Inicia com a seleção do fator de conversão correspondente a cada uma das
posições do seletor de escalas Select Case Slider. Com o FATOR
xlv
determinado, os valores de tensão instantânea iblVinst , tensão máxima
iblVmax e tensão mínima iblVmin do quadro são caculados.
For i = 0 To 1 Select Case Slider(i).Value Case 0 FATOR = 0.196 Case 1 FATOR = 0.078 Case 2 FATOR = 0.0391 Case 3 FATOR = 0.0195 Case 4 FATOR = 0.0078 Case 5 FATOR = 0.0039 Case 6 FATOR = 0.00195 Case 7 FATOR = 0.00078 End Select lblVinst(i) = ((qtz(i) - 128) * FATOR) max(i) = lblVinst(i) min(i) = lblVinst(i) If max(i) > lblVmax(i) Then lblVmax(i) = max(i) End If If min(i) < lblVmin(i) Then lblVmin(i) = min(i) End If Next i
6.1.3 Interface Gráfica
A visualização gráfica foi desenvolvida com base na tela de um
osciloscópio convencional, de forma simplificada, incluindo algumas funções básicas
de seleção, como o seletor de escalas vertical e horizontal, seletor do canal de sinal
ativo e a visualização dos valores medidos.
xlvi
Figura 19 - Tela do USBSCOPE
Na figura 19, e mostramos a tela do USBSCOPE com as seguintes
funções:
1) Botão ON inicia a visualização gráfica e o botão OFF encerra o
aplicativo gráfico.
2) Seletor de escala vertical para os canais 1 e 2, com uma faixa de
0,02 V a 0,5 V por divisão.
3) Seleção de escala horizontal em segundos por divisão.
4) Seletor de canais com três opções, CH1 – CH2 para visualização
simultânea dos canais 1 e 2, CH1 para visualizar somente o canal 1
e CH2 para visualizar somente canal 2.
5) Indicador dos valores de tensão instantânea, tensão máxima e
tensão mínima do quadro atual de plotagem, para os canais 1 e 2.
6) Opção de escolha da visualização gráfica, no modo dinâmico a tela
será constantemente atualizada e no modo estático o gráfico fica
congelado na plotagem atual da tela.
7) Tela de visualização gráfica dos canais 1 e 2, com dez divisões no
eixo “X” e no eixo “Y”.
xlvii
6.1.4 Driver do Dispositivo USB
No inicio dos estudos da parte de comunicação USB, constatamos que o
assunto envolvia conhecimentos mais aprofundados do protocolo gerenciador da
comunicação. O desenvolvimento do driver seria, com certeza, um desafio
extremamente interessante, mas envolveria um tempo de pesquisa muito maior do
que estava planejado em nosso cronograma.
Buscamos como alternativa, um software que simplifica bastante o
desenvolvimento, o EasyHID. Este gera a base do código fonte tanto no lado do
microcontrolador em linguagem “C”, quanto no lado do computador em Visual Basic.
O dispositivo USB seria reconhecido automaticamente pelo Windows como um
Dispositivo de Interface Humana (HID), não sendo necessário desenvolver driver
especiais para a aplicação.
A Microchip também disponibiliza em seu site, o driver para dispositivos
HID, relatando uma limitação na velocidade de transferência de 64 kB/s. Existe
também, outra opção de driver customizado que permite a comunicação USB sem a
limitação de velocidade do anterior, o qual foi adotado em nosso projeto. O driver faz
parte do pacote de instalação “MCHPFSUSSB_Setup”, que inclui a biblioteca
“mpusbapi.dll”, necessária para intermediar a nossa interface gráfica em Visual
Basic com o driver “mchpusb” do firmware do microcontrolador.
xlviii
7 CONCLUSÕES E PERSPECTIVAS
Neste trabalho foi desenvolvido um dispositivo de aquisição de dados
analógicos através da interface USB, visando a uma utilização semelhante à de um
osciloscópio digital.
O protótipo envolvendo a comunicação USB mostrou-se um grande desafio
mas ao mesmo tempo, extremamente interessante, sendo de grande valia para um
futuro aprofundamento nos estudos deste protocolo de comunicação, que é
atualmente um dos principais para transferência de dados entre microcomputadores
e periféricos. No decorrer do projeto tivemos contato com vários softwares,
proporcionando o aprendizado de linguagens de programação como “assembler”,
“C” e “Visual Basic”, além do conhecimento dos recursos a da grande versatilidade
disponíveis em um microcontrolador com interface USB.
Obteve-se sucesso na maioria dos itens especificados inicialmente, a saber:
desenvolvimento do protótipo funcional em dimensões reduzidas (formato
pen drive)
desenvolvimento do firmware do microcontrolador
desenvolvimento da interface gráfica no microcomputador
programação do microcontrolador via interface serial
aquisição de sinais analógicos em 2 canais e transferência para o
microcomputador via interface USB
seleção das escalas de tensão via software de controle
A taxa de amostragem de 1 MSPS prevista inicialmente não foi conseguida
devido à utilização do conversor A/D interno do PIC, que é limitado a taxas de
amostragem da ordem de 60 kSPS. O controle da base de tempo foi efetuado
unicamente no software em Visual Basic, o que limita o número de escalas
utilizadas e reduz a taxa de amostragem máxima. Estas limitações são
relativamente simples de serem contornadas, porém exigiriam um maior tempo de
desenvolvimento.
O protótipo desenvolvido pode ter a sua característica de velocidade de
conversão melhorada se forem implementadas memórias intermediárias entre o
xlix
conversor A/D externo e o PIC, com velocidades de clock compatíveis com a taxa de
transferência e conversão requeridas.
Sugere-se que o circuito eletrônico seja montado em uma placa que
permita isolar os sinais analógicos dos digital, reduzindo assim interferências e
possibilitando aumento da resolução do conversor A/D e melhoria da relação sinal
ruído.
Faz-se necessário implementar uma proteção contra picos de tensão acima
do valor tolerado pelo circuito, nas entradas dos canais.
A interface gráfica poderá ser otimizada com outras funções e análises do
sinal encontradas nos osciloscópios comerciais (FFT, cálculo de parâmetros dos
sinais, médias, etc), tornando-o mais versátil.
l
REFERÊNCIAS BIBLIOGRÁFICAS
ASSOCIAÇÃO BRASILEIRA DE NORMAS TÉCNICAS. NBR 6023: informação e documentação: citações em documentos: apresentação. Rio de Janeiro, 2002.
ASSOCIAÇÃO BRASILEIRA DE NORMAS TÉCNICAS. NBR 10520: informação e documentação: referências: elaboração. Rio de Janeiro, 2002.
ASSOCIAÇÃO BRASILEIRA DE NORMAS TÉCNICAS. NBR 14724: informação e documentação: trabalhos acadêmicos: apresentação. Rio de Janeiro, 2002.
MATIC, NEBOJSA, Basic for PIC microcontroller. 2003
LÓPEZ, ANDRÉS CÁNOVAS, MANUAL DE USUARIO DEL COMPILADOR PCW DE CCS.
USATEGUI, M. ÂNGELO, MARTINEZ, IGNÁCIO ÂNGULO, Microcontroladores PIC: Diseño práctico de aplicaciones., 3 ed, McGRAW – HILL
HELLEBUYCK, CKUCK, Programming PIC Microcontrollers with PicBasic. Editora Newnes.
CADSOFT COMPUTER, EAGLE: Easily Applicable Graphical Layout Editor – Manual V. 4.1. 2 ed, 2004
Universal Serial Bus Revision 2.0 specification. Disponível em 30/04/2007 no site http://www.usb.org/developers/docs/
Microcontroladores e informações. Disponível em 2/04/2007 no site http://www.microchip.com
Microcontroladores e informações. Disponível em 2/04/2007 no site http://www.ftdichip.com/
Microcontroladores e informações. Disponível em 2/04/2007 no site http://www.atmel.com/
Microcontroladores e informações. Disponível em 2/04/2007 no site http://www.cypress.com/index.html
Componentes semicondutores e informações. Disponível em 6/04/2007 no site http://www.analog.com/en/
Componentes semicondutores e informações. Disponível em 6/04/2007 no site http://www.national.com
Componentes semicondutores e informações. Disponível em 6/04/2007 no site http://www.ti.com
li
Componentes semicondutores e informações. Disponível em 8/04/2007 no site http://www.semiconductors.philips.com
Programado para PIC e informações sobre ICSP. Disponível em 20/04/2007 no site http://www.jdm.homepage.dk/newpic.htm
Software EasyHID e informações sobre dispositivos de interface humana. Disponível em 8/05/2007 no site http://www.mecanique.co.uk/products/usb/easyhid.html
Projetos com PIC usando interface USB. Disponível em 10/05/2007 no site http://picmania.garcia-cuervo.com/USB_0_Desencadenado.htm
Projeto de Pablo Hoffman e Martin Szmulewicz de um osciloscópio USB. Disponível em 20/05/2007 no site http://pablohoffman.com/cgi-bin/twiki/bin/view/Oscusb/WebHome
Projetos com PIC usando interface USB. Disponível em 11/05/2007 no site http://www.hobbypic.com/
Códigos em Visual Basic par downloud. Disponível em 22/05/2007 no site http://usbee.com/download.htm
Informações sobre enumeração do protocolo USB. Disponível em 15/05/2007 no site http://www.usbdeveloper.com/UnderstandUSB/understandusb.htm
Tutorial de projetos com PIC e interface USB. Disponível em 18/05/2007 no site Disponível em http://www.electronicfr.com/usb.html
Projetos de criação de uma interface USB. Disponível em 18/05/2007 no site http://www.create.ucsb.edu/~dano/CUI/
Informações e links sobre PIC e USB. Disponível em 19/05/2007 no site http://www.bensherlock.co.uk/projects/gadgets/usb-pic
Informações sobre o bootloader para o PIC18F2550. Disponível em 22/05/2007 no site http://www.techsanctuary.com/node/64
Temas e links relacionados com osciloscópios.. Disponível em 10/06/2007 no site http://www.mikrocontroller.net/articles/USB_Oszilloskop
lii
ANEXO A
liii
ANEXO B// *************************************************************************// PicUSB.c// Realizado com o compilador CCS PCWH 4.013// *************************************************************************#include <18F2550.h>#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN#use delay(clock=48000000) // Cristal de 20MHz
// =========================================================================// Definicões para a biblioteca dinamica CCS. Estão explicados em usb.h// =========================================================================
#define USB_HID_DEVICE FALSE// Desabilitamos o uso das diretivas HID#define USB_EP1_TX_ENABLE USB_ENABLE_BULK// Ativa EP1(EndPoint1) para as transferencias IN Bulk/Interrupt#define USB_EP1_RX_ENABLE USB_ENABLE_BULK// Ativa EP1(EndPoint1) para as transferencias OUT Bulk/Interrupt#define USB_EP1_TX_SIZE 4// Tamanho reservado para o Buffer Tx EndPoint1#define USB_EP1_RX_SIZE 3// Tamanho reservado para o Buffer Rx EndPoint1
// =========================================================================// Includes das bibliotecas USB do compilador CCS.// =========================================================================
#include <pic18_usb.h> //Microchip PIC18Fxx5x Hardware para o CCS PIC USB Driver#include <PicUSB.h> //Configuração do USB e dos descritores para dispositivo#include <usb.c> //Handles usb ,tokens e descritores
// =========================================================================
#define LED0 PIN_C1 // PORTC.1 Led0 #define LED1 PIN_C0 // PORTC.0 Led1 #define LED2 PIN_A2 // PORTA.2 Led2 #define LED3 PIN_A5 // PORTA.5 Led3#define LED5 PIN_A4 // PORTA.4 Led0 #define LED6 PIN_A3 // PORTA.3 Led0
#define LED_ON output_high // Saida em 1#define LED_OFF output_low // Saida em 0
#define modo recibe[0] // Byte que indica o modo de operacao#define param1 recibe[1] // Primeiro parametro recebibdo#define param2 recibe[2] // Segundo parametro recebibdo
#define entrada_0 envia[0] // Byte a envíar en las entradas#define entrada_1 envia[1] // Byte a envíar en las entradas#define entrada_2 envia[2] // Byte a envíar en las entradas#define entrada_3 envia[3] // Byte a envíar en las entradas
#define ACENDE_LED 1 // Modo de eacender leds#define APAGA_LED 2 // Modo de apagar leds#define ENTRADAS 3 // Modo de ler as entradas#define ANALOGICAS 4 // Modo de ler as entradas analogicas
liv
void main(void) // Programa Principal int8 recebe[3]; // Declaramos a variavel recibe com 3 bytes int8 envia[4]; // Declaramos a variavel envia com 4 bytes
set_tris_b(0x0F); // Nibble alto como saidas setup_adc_ports(AN0_TO_AN1); // configura entradas analogicas do conversor A/D setup_adc(ADC_CLOCK_INTERNAL); // configura clock interno para o ADC usb_init(); // Inicializamos o USB
usb_task(); // Habilita o periferico usb e as interrupções usb_wait_for_enumeration(); // Esperamos que o PicUSB seja configurado pelo PC
while (TRUE) // executa sempre (ciclo infinito) if(usb_enumerated()) // Se o PicUSB está configurado
if (usb_kbhit(1)) // Se o EndPoint de saida contem datos do PC usb_get_packet(1, recebe, 3); // esperamos o pacote de tamanho 3 bytes do EP1 // e o armazenamos na variavel recebe
if (modo==ACENDE_LED) // Modo acender Leds if (param1==1) LED_ON(LED0); // acendemos led 0 if (param1==2) LED_ON(LED1); // acendemos led 1 if (param1==3) LED_ON(LED2); // acendemos led 2 if (param1==4) LED_ON(LED4); // acendemos led 4 if (param1==5) LED_ON(LED5); // acendemos led 5 if (param1==6) LED_ON(LED6); // acendemos led 6
if (modo==APAGA_LED) // Modo Apagar Leds if (param1==1) LED_OFF(LED0); // Apagamos led 0 if (param1==2) LED_OFF(LED1); // Apagamos led 1 if (param1==3) LED_OFF(LED2); // Apagamos led 2 if (param1==4) LED_OFF(LED3); // Apagamos led 3 if (param1==5) LED_OFF(LED4); // Apagamos led 4 if (param1==6) LED_OFF(LED5); // Apagamos led 5 if (modo==ANALOGICAS) // Modo ler as entradas analógicas set_adc_channel(0); // Canal A0 delay_us(10); // Retardo entrada_0 = read_adc(); // Le o valor
set_adc_channel(1); // Canal A1 delay_us(10); // Retardo entrada_1 = read_adc(); // Le o valor
usb_put_packet(1,envia,4,USB_DTS_TOGGLE); // Enviamos o pacote de tamanho // 4 bytes do EP1 para o PC
lv
ANEXO C
Option Explicit Dim vetor1(0 To 1000) As Integer Dim vetor2(0 To 1000) As Integer Dim vetorhoriz As Integer Dim qtz(0 To 1) As Integer Dim FATOR As Single Dim x1 As Integer Dim x2 As Integer Dim x12 As Integer Dim x22 As Integer Dim aux2 As Byte Dim aux As Byte
Private Sub ANA() Dim Send_Buf(0 To 64) As Byte Dim Rec_Buf(0 To 64) As Byte Dim i As Byte Dim j As Integer
If (myOutPipe <> INVALID_HANDLE_VALUE) And (myInPipe <> INVALID_HANDLE_VALUE) Then
Send_Buf(0) = 4 If (Send_Receive(Send_Buf, 1, Rec_Buf, 4, 1000, 1000) <> 1) Then MsgBox "Falha na leitura" Else Select Case Slider1.Value Case 0 For i = 0 To 1 If i = 0 Then Picture1.Line (x1, aux)-(x2, Rec_Buf(i)), vbRed aux = Rec_Buf(i) x1 = x2 x2 = x1 + 1 Else Picture1.Line (x12, aux2)-(x22, Rec_Buf(i)), vbGreen aux2 = Rec_Buf(i) x12 = x22 x22 = x12 + 1 End If If x2 = 400 Then x2 = 0 x1 = 0 x12 = 0 x22 = 0 Picture1.Cls End If qtz(i) = Rec_Buf(i) Next i Case 1 Picture1.Line (x1, aux)-(x2, Rec_Buf(0)), vbRed aux = Rec_Buf(0) x1 = x2 x2 = x1 + 1 If x2 = 400 Then x2 = 0 x1 = 0
lvi
Picture1.Cls End If qtz(i) = Rec_Buf(i) Case 2 Picture1.Line (x12, aux2)-(x22, Rec_Buf(1)), vbGreen aux2 = Rec_Buf(1) x12 = x22 x22 = x12 + 1 If x22 = 400 Then x12 = 0 x22 = 0 Picture1.Cls End If qtz(i) = Rec_Buf(i) End Select End If End IfEnd Sub
Private Sub HORIZ() Select Case sldHor.Value Case 0 vetorhoriz = 1000 Case 1 vetorhoriz = 400 Case 2 vetorhoriz = 200 Case 3 vetorhoriz = 100 Case 4 vetorhoriz = 40 Case 5 vetorhoriz = 20 Case 6 vetorhoriz = 10 End Select End Sub
Private Sub cmdCiclo_Click() Dim i As Byte
For i = 1 To 6 Control_Leds 1, i Next i lblVmax(0) = -25 lblVmax(1) = -25 lblVmin(0) = 25 lblVmin(1) = 25 Do DoEvents ESCALA HORIZ ANA 'grafico LoopEnd Sub
lvii
Private Sub cmdTerminar_Click() Unload Me EndEnd Sub
Private Sub Control_Leds(Comando As Byte, Dato As Byte) Dim Send_Buf(0 To 64) As Byte
If (myOutPipe <> INVALID_HANDLE_VALUE) And (myInPipe <> INVALID_HANDLE_VALUE) Then
Send_Buf(0) = Comando Send_Buf(1) = Dato If (Send(Send_Buf, 2, 1000) <> 1) Then MsgBox "Falha de Seleçao" End If End IfEnd Sub
Private Sub Form_Load() myInPipe = INVALID_HANDLE_VALUE myOutPipe = INVALID_HANDLE_VALUE OpenMPUSBDeviceEnd Sub
Private Sub ESCALA() Dim i As Byte Dim min(0 To 1) As Single Dim max(0 To 1) As Single
For i = 0 To 1 Select Case Slider(i).Value Case 0 FATOR = 0.196 Case 1 FATOR = 0.078 Case 2 FATOR = 0.0391 Case 3 FATOR = 0.0195 Case 4 FATOR = 0.0078 Case 5 FATOR = 0.0039 Case 6 FATOR = 0.00195 Case 7 FATOR = 0.00078 End Select lblVinst(i) = ((qtz(i) - 128) * FATOR) max(i) = lblVinst(i) min(i) = lblVinst(i) If max(i) > lblVmax(i) Then lblVmax(i) = max(i) End If If min(i) < lblVmin(i) Then lblVmin(i) = min(i) End If Next iEnd Sub
lviii
Sub Slider_scroll(Index As Integer) Dim i As Byte For i = 0 To 1 Select Case Slider(i).Value Case 0 Control_Leds 1, (1 + (i * 3)) Control_Leds 1, (2 + (i * 3)) Control_Leds 1, (3 + (i * 3)) Case 1 Control_Leds 2, (1 + (i * 3)) Control_Leds 1, (2 + (i * 3)) Control_Leds 1, (3 + (i * 3)) Case 2 Control_Leds 1, (1 + (i * 3)) Control_Leds 2, (2 + (i * 3)) Control_Leds 1, (3 + (i * 3)) Case 3 Control_Leds 2, (1 + (i * 3)) Control_Leds 2, (2 + (i * 3)) Control_Leds 1, (3 + (i * 3)) Case 4 Control_Leds 1, (1 + (i * 3)) Control_Leds 1, (2 + (i * 3)) Control_Leds 2, (3 + (i * 3)) Case 5 Control_Leds 2, (1 + (i * 3)) Control_Leds 1, (2 + (i * 3)) Control_Leds 2, (3 + (i * 3)) Case 6 Control_Leds 1, (1 + (i * 3)) Control_Leds 2, (2 + (i * 3)) Control_Leds 2, (3 + (i * 3)) Case 7 Control_Leds 2, (1 + (i * 3)) Control_Leds 2, (2 + (i * 3)) Control_Leds 2, (3 + (i * 3)) End Select Next iEnd Sub