usb pic java

42
UNIVERSIDADE FEDERAL DO PARANÁ DEPARTAMENTO DE ENGENHARIA ELÉTRICA CURSO DE ENGENHARIA ELÉTRICA BRUNO RICARDO DIAS FELIPE LUIS JAREK SISTEMA EMBARCADO PARA PROCESSAMENTO DE IMAGENS CURITIBA – 2011

Upload: carlos-felipe

Post on 12-Aug-2015

211 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: Usb Pic Java

UNIVERSIDADE FEDERAL DO PARANÁ

DEPARTAMENTO DE ENGENHARIA ELÉTRICA

CURSO DE ENGENHARIA ELÉTRICA

BRUNO RICARDO DIAS

FELIPE LUIS JAREK

SISTEMA EMBARCADO PARA PROCESSAMENTO DE

IMAGENS

CURITIBA – 2011

Page 2: Usb Pic Java

2

BRUNO RICARDO DIAS

FELIPE LUIS JAREK

SISTEMA EMBARCADO PARA PROCESSAMENTO DE

IMAGENS

Trabalho de Conclusão de Curso de

Engenharia Elétrica, Departamento de

Engenharia Elétrica, Setor de

Tecnologia, Universidade Federal do

Paraná.

Orientadora: Profa. Dra Giselle Lopes

Ferrari

CURITIBA - 2011

Page 3: Usb Pic Java

3

BRUNO RICARDO DIAS

FELIPE LUIS JAREK

SISTEMA EMBARCADO PARA PROCESSAMENTO DE

IMAGENS

TRABALHO APRESENTADO AO CURSO DE ENGENHARIA ELÉTRICA, DA

UNIVERSIDADE FEDERAL DO PARANÁ, COMO REQUISITO À OBTENÇÃO

DO TÍTULO DE GRADUAÇÃO.

COMISSÃO EXAMINADORA

PROF. DRA. GISELLE LOPES FERRARI – UFPR

PROF. M.SC. ADEMAR LUIZ PASTRO – UFPR

PROF. DR. ALESSANDRO ZIMMER – UFPR

CURITIBA, FEVEREIRO DE 2011.

Page 4: Usb Pic Java

4

AGRADECIMENTOS

Agradecemos a Deus que nos deu a vida e as oportunidades que no

decorrer de nossas histórias nos trouxeram até aqui. A nossas famílias que

torcem pela nossa felicidade e nosso sucesso e nos acompanham nessa

caminhada suportando junto às dificuldades que nos são impostas. Aos nossos

professores que ao dedicarem sua vida a educação estão diretamente

dedicando suas vidas para que o mundo melhore. Aos nossos amigos que

compreenderam nossas faltas que os estudos exigiram de nós. A professora

Giselle que teve paciência e disposição em nos orientar neste projeto mesmo

sabendo das nossas limitações.

A todos nosso sincero muito obrigado! Que Deus os abençoe!

Bruno Ricardo Dias e Felipe Luis Jarek

Page 5: Usb Pic Java

5

RESUMO

Sistemas embarcados e comunicação USB são dois tópicos estudados em

larga escala no contexto da eletrônica. Este projeto tenta unir estes dois ao

processamento de imagens, ou seja, conceber um dispositivo que seja capaz

de se comunicar via protocolo USB com um PC. Neste projeto teremos um

microcontrolador responsável pela parte de processamento, e no PC uma

interface que nos possibilite visualizar os resultados. É um projeto piloto, por

isso ainda há muito o que melhorar e corrigir, mas é um primeiro passo que

pode motivar outros a darem continuidade. Neste caso a tentativa foi de

processar imagens, porem é um trabalho que possui grande versatilidade em

se tratando de processamento embarcado, pois desde que o microcontrolador

suporte as demandas do processamento, qualquer outro tipo de dado pode ser

processado.

Palavras chave: USB, microcontrolador, processamento.

Page 6: Usb Pic Java

6

ABSTRACT

Embedded systems and USB communications are two topics widely studied in

the context of electronics. This project attempts to join these two characteristics

and image-processing, and create a device that is able to communicate via

USB protocol with a PC. In this project we will have a microcontroller

responsible for the processing part, and a PC interface that enables us to

visualize the results. It is a pilot project, so there is still much to improve and

correct, but it is a first step that could motivate others to give continuity. In this

case the attempt was to render images, but is a job that has great versatility

when it comes to on-board processing, as long as the microcontroller support

the demands of processing, any other type of data can be processed.

Keywords: USB, microcontroller, processing.

Page 7: Usb Pic Java

7

SUMÁRIO

1 INTRODUÇÃO ........................................................................................... 11

1.1 JUSTIFICATIVA ............................................................................................................. 11

1.2 OBJETIVO ..................................................................................................................... 12

2 CONCEITOS ............................................................................................. 13

2.1 USB .............................................................................................................................. 13

2.2 MICROCONTROLADOR ................................................................................................ 17

2.3 PROCESSAMENTO DIGITAL DE IMAGENS .................................................................... 19

3 DESENVOLVIMENTO DO DISPOSITIVO ................................................. 21

3.1 HARDWARE ................................................................................................................. 21

3.1.1 PIC18F4550 .......................................................................................................... 21

3.1.2 CONFECÇÃO DA PLACA ....................................................................................... 22

3.2 FIRMWARE .................................................................................................................. 26

3.3 INTERFACE GRÁFICA .................................................................................................... 31

4 RESULTADOS .......................................................................................... 33

5 CONCLUSÕES .......................................................................................... 34

6 APRIMORAMENTOS ................................................................................ 35

6.1 PIC DA FAMÍLIA 32F ..................................................................................................... 35

6.2 MEMÓRIA FLASH EXTERNA ......................................................................................... 35

7 BIBLIOGRAFIA .......................................................................................... 36

8 ANEXO I – Firmware (main.c) ................................................................... 39

9 ANEXO II - Gravador de PIC ICD2 Clone .................................................. 42

Page 8: Usb Pic Java

8

LISTA DE ILUSTRAÇÕES

Ilustração 1: Modelos de conectores USB ....................................................... 16

Ilustração 2: Diagrama de pinos: 1=Vcc / 2=D- / 3=D+ / 4=GND ..................... 16

Ilustração 3: Diagrama de blocos de um circuito com microprocessador ......... 17

Ilustração 4: Diag. de blocos com itens que o microcontrolador disponibiliza. . 18

Ilustração 5: Imagem em tons de cinza e seu respectivo histograma .............. 20

Ilustração 6: Pinagem do PIC18F4550 ............................................................. 22

Ilustração 7: Esquemático do dispositivo. ....................................................... 23

Ilustração 8: Netlist e visualização 3D de componentes .................................. 23

Ilustração 9: Arranjo dos componentes e trilhas ............................................... 24

Ilustração 10: Arranjo da placa em 3D ............................................................. 24

Ilustração 11: Foto da placa depois de confeccionada ..................................... 25

Ilustração 12: Fluxograma de tarefas do microcontrolador .............................. 27

Ilustração 13: Dispositivo USB reconhecido ..................................................... 28

Ilustração 14: Fluxograma de ações da interface gráfica ................................. 31

Ilustração 15: Interface Gráfica ........................................................................ 32

Ilustração 16: Gravador de PIC ICD2 Clone .................................................... 42

Page 9: Usb Pic Java

9

LISTA DE TABELAS

Tabela 1: Lista de componentes ...................................................................... 25

Tabela 2: Trecho de código: Laço principal. ..................................................... 29

Tabela 3: Trecho de código: Funções de transferência de dados .................... 30

Page 10: Usb Pic Java

10

LISTA DE SIGLAS

AD - Analógico/Digital

CDC - Comunication Device Class

CI - Circuito Integrado

CPU - Central Processing Unit

DA - Digital/Analógico

DIN - Modelo de conector

EEPROM - Electrically-Erasable Programmable Read-Only Memory

HID - Human Interface Device

I/O - Input/Output

LED - Light Emitting Diode

MIPS - Milhões de Instruções por Segungo

PC - Personal Computer

PDA - Personal Digital Assistant

PDI - Processamento Digital de Imagem

PID - Product Identification

PnP - Plug and Play

PS2 - Modelo de conector

RAM - Random Access Memory

ROM - Read Only Memory

SD - Storage Device

USB - Universal Serial Bus

USB OTG - Universal Serial Bus On-The-Go

VID - Vendor Identification

Page 11: Usb Pic Java

11

1 INTRODUÇÃO

Sistemas embarcados cada vez mais tomam espaço em uma infinidade de

contextos e incontáveis aplicações. São sistemas inteligentes portáteis, ou

então que são parte de um outro equipamento maior, não havendo mais a

necessidade de se ter um PC para constituir a parte de processamento de um

sistema. Por isso cada vez mais se desenvolvem microprocessadores e

microcontroladores que são os principais agentes destes tipos de sistema.

Como estes componentes trabalham com sinais digitais, daí também a grande

convergência que existe hoje de se trabalhar com estes, pois todo

processamento requer a digitalização de sinais caso os mesmos não o sejam.

Uma característica quase que geral destes sistemas, é que de alguma

forma há a possibilidades de se comunicarem com um PC, seja para

transferência de dados, configurações, ou então para que possa se obter

alguma visualização por uma interface gráfica que só um computador pode

oferecer.

1.1 JUSTIFICATIVA

Os principais motivos que nos levaram a trabalhar sobre este projeto foram:

• Trabalhar tanto em hardware como em software, o que nos faria adquirir

conhecimento e experiência prática nesse âmbito;

• Ampliar os conhecimentos em sistemas embarcados, em especial no

trabalho com microcontroladores que por sua versatilidade e variedade

permite várias áreas de estudo e aplicação;

• Desenvolver a capacidade de programação, no nosso caso com a

linguagem C;

• Pesquisar sobre tratamento digital de imagens com estudos

direcionados à aplicação;

Page 12: Usb Pic Java

12

• Aprimorar e aplicar conhecimento sobre comunicação via USB

(Universal Serial Bus), protocolo para o qual a maioria dos

equipamentos tem convergido.

1.2 OBJETIVO

Unindo as justificativas citadas anteriormente em um único trabalho,

tivemos por objetivo desenvolver um equipamento que nos levasse a trabalhar

nestas questões. Sendo assim, colocando em tópicos, podemos considerar

nossos objetivos como sendo:

• Desenvolver uma placa microprocessada com interface de comunicação

USB;

• Estabelecer a comunicação entre um microcontrolador e um PC via

protocolo USB;

• Implementar uma ferramenta de processamento de imagens: um

programa para obter o histograma de uma imagem, elaborado em

linguagem C;

• Tornar um microcontrolador capaz de processar imagens.

Page 13: Usb Pic Java

13

2 CONCEITOS

Neste capítulo explanaremos a respeito de alguns conceitos que nos foram

necessários adquirir conhecimento ao longo deste projeto.

2.1 USB

As principais características que hoje levam a maioria dos equipamentos

a possuírem integrados um módulo de comunicação USB são a facilidade na

utilização, a confiabilidade na transmissão de dados, a boa velocidade de

comunicação, a versatilidade que esta interface possui, o padrão PnP (plug and

play), ou seja, a capacidade de se conectar a outro equipamento sem que o

mesmo precise ser desligado. Tudo isso faz com que o USB possa ser utilizado

por qualquer pessoa na instalação de periféricos. Porém toda essa facilidade

existente para o usuário destes equipamentos não acontece para o

desenvolvedor como poderemos ver a partir das características técnicas que

seguem descritas.

Um sistema de comunicação USB é composto por 3 módulos:

interconexão, dispositivo, e “host”. O primeiro é o modo como os dispositivos

USB se conectam ao “host”, levando em consideração alguns aspectos como a

topologia do barramento, a relação entre as camadas (capacidade de cada

tarefa ser executada dentro da pilha USB), o modo de fluxo de dados dentro do

sistema sobre o protocolo USB, e a rede física que utiliza topologia estrela

onde cada HUB é o centro de uma estrela e host e hub se conectam ponto a

ponto.

Há somente um “host” no barramento USB (chamado “Host Controller”).

Este pode ser feito através de hardware, firmware ou software.

Existem dispositivos USB do tipo Hub e do tipo Funções. Hubs servem

para disponibilizar pontos extras de acesso a rede USB. As funções

disponibilizam novas capacidades ao sistema, como exemplo controle de

games, caixas de som, etc.

Page 14: Usb Pic Java

14

Um dispositivo USB pode ser alimentado por duas formas:

• Self-powered, quando um dispositivo tem fonte própria;

• Bus-powered, quando a alimentação ocorre pelo barramento.

As configurações de velocidade que o USB possui são:

• High-Speed – 480 Mbps

• Full-Speed – 12 Mbps

• Low-Speed – 1,5 Mbps

A comunicação USB pode ser feita por meio de três métodos. São eles:

CDC (Comunication Device Class) – consiste em um driver que emula uma

porta serial, assim se estabelece uma comunicação entre o PC e o

microcontrolador como se a porta USB fosse uma porta serial padrão. Esta é a

forma mais simples de comunicação por USB, porém com uma velocidade

baixa, em torno de 115kbps.

HID (Human Interface Device) – faz com que um dispositivo USB, neste

caso um microcontrolador, possa ser reconhecido automaticamente por

qualquer sistema operacional (Windows, Linux, etc.), sem a necessidade de um

driver próprio para o caso. A velocidade de comunicação neste caso é limitada

a 64kB/s.

Bulk – é a forma de comunicação de maior velocidade, porém este é o

método mais complexo, pois trata-se de um driver customizado. Neste método

há o envio de dados em massa por meio de uma transferência sequencial. A

velocidade neste caso é limitada pela própria interface USB 2.0, que é de

480Mbps. Impressoras e Scanners trabalham desta forma.

USB possui vantagens e limitações como pode se ver a seguir.

• Vantagens:

• Fácil conexão e configuração do dispositivo;

Page 15: Usb Pic Java

15

• Rápida interface;

• Baixa taxa de erros;

• Versatilidade;

• Baixo custo;

• Pode servir como fonte de alimentação;

• Suporta grande parte dos sistemas operacionais

• Limitações:

• Cabo não deve ter mais de 5 metros de comprimento;

• Broadcasting: A porta USB não pode enviar dados

simultaneamente para dispositivos diferentes. O “host” só manda

mensagens para cada dispositivo individualmente;

• Dispositivos USB são bem mais complexos para desenvolvedor

se comparados a dispositivos de comunicação serial.

A interconexão de um sistema USB é realizada através de portas

padronizadas, que são exibidas na figura a seguir.

Page 16: Usb Pic Java

16

Ilustração 1: Modelos de conectores USB.

Como pode ser observado na figura acima, há quatro modelos de

conectores USB. Neste trabalho para conexão do dispositivo, foi usado o

conector tipo B, enquanto que para a conexão com o host (PC) o conector deve

ser do tipo A, que é o conector padrão para computadores. Na figura abaixo

podemos visualizar mais claramente a disposição dos pinos dos conectores.

Ilustração 2: Diagrama de pinos: 1=Vcc / 2=D- / 3=D+ / 4=GND.

Page 17: Usb Pic Java

17

2.2 MICROCONTROLADOR

Para entender um microcontrolador podemos fazer uma analogia com um

computador, pois ele possui uma CPU (unidade central de processamento),

memória RAM (memória de acesso aleatório), entradas e saídas (em um PC

temos teclado, mouse, monitor, etc.). O diferencial de um microcontrolador em

relação a um computador é que o microcontrolador é um dispositivo que possui

um propósito específico, ou seja, processa um único programa, que fica

armazenado na memória ROM (memória apenas para leitura), ou memória de

programa. Além disso, um microcontrolador pode se comunicar com outros

equipamentos por meio de comunicação serial e atualmente também por USB.

A diferença entre um microcontrolador e um microprocessador

caracteriza-se pelos periféricos que o microntrolador traz agregado, como por

exemplo, conversores A/D, temporizadores, contadores, memórias ROM e

RAM, etc. Um microprocessador, apesar da sua grande capacidade de

processamento, não possui dispositivos imprescindíveis para o funcionamento

de um sistema.

Para fazer um circuito de controle de um elevador, por exemplo,

precisaríamos de um microprocessador, memória ROM e RAM, uma porta

paralela para dar saída aos acionamentos, de outra para receber sinais dos

sensores, de uma porta serial para fazer as configurações e rodar os

resultados, de um conversor AD para ler o sensor de carga, de um

temporizador para o tempo que a porta deve ficar aberta, etc. Com essa lista,

temos um circuito com o diagrama de blocos abaixo.

Ilustração 3: Diagrama de blocos de um circuito com microprocessador.

Page 18: Usb Pic Java

18

Nesse circuito, teríamos uma placa de tamanho razoável e com vários

CI´s. O circuito seria caro e sem robustez devido ao grande número de

componentes. Seria um processamento muito sofisticado para o problema

proposto.

Surgiram, então, os Microcontroladores, que possuem em apenas um

circuito integrado grande parte dos periféricos do exemplo acima. Num

microcontrolador, as mémorias RAM e ROM, conversor AD, temporizadores,

controladores serial e paralelo e a CPU estão todos integrados em um chip. Por

ser apenas uma peça, microcontroladores tem muito maior robustez, baixo

custo, consomem menos energia, têm a fase de projeto reduzida e manutenção

facilitada. São muitas vantagens em relação a um microprocessador para o

caso.

Como não haverá processamento sofisticado, a CPU não precisa ter

uma grande capacidade de processamento, mas deve oferecer um grupo de

instruções simples, que nos permita ter programas pequenos de rápida

execução. Além disso o microcontrolador oferece uma forma simples de

interface com outros periféricos que possam ser acrescentados ao circuito.

Com tudo que foi dito, temos outro diagrama de blocos, onde se

apresenta a típica arquitetura de um microcontrolador. Lembrando que de

acordo com a finalidade do microcontrolador, é possível integrar mais recursos.

Ilustração 4: Diagrama de blocos com itens que o microcontrolador

disponibiliza num só encapsulamento.

Page 19: Usb Pic Java

19

Além dos estudos pertinentes a hardware e comunicação entre

dispositivos, foi necessário pesquisar sobre processamento digital de imagens

para alcançar um dos objetivos do projeto, que era conceber uma ferramenta

que realizasse o histograma de uma imagem. Por tal motivo, o próximo tópico

traz conceitos básicos pesquisados pela equipe.

2.3 PROCESSAMENTO DIGITAL DE IMAGENS

Por Processamento Digital de Imagens (PDI) entende-se a manipulação

de uma imagem por computador de modo que a entrada e a saída do processo

sejam imagens. A informação de interesse é caracterizada em função das

propriedades dos objetos ou padrões que compõem a imagem. Portanto,

extrair informação de imagens envolve o reconhecimento de objetos ou

padrões.

O sistema visual humano possui uma notável capacidade de reconhecer

padrões. Contudo, ele dificilmente é capaz de processar o enorme volume de

informação presente numa imagem. Vários tipos de degradações e distorções,

inerentes aos processos de aquisição, transmissão e visualização de imagens,

contribuem para limitar ainda mais essa capacidade do olho humano.

O objetivo principal do processamento de imagens é o de remover essas

barreiras, inerentes ao sistema visual humano, facilitando a extração de

informações a partir de imagens.

As formas possíveis de manipulação de imagens são teoricamente infinitas.

Entretanto, de um modo geral, podem ser categorizadas em um ou mais

procedimentos que incluem quatro tipos abrangentes de operações

computacionais:

• Retificação e Restauração de Imagens: operações realizadas para

minimizar as distorções e degradações dos dados de uma imagem, com

a finalidade de criar uma representação mais fiel da cena.

• Realce de Imagens: procedimentos aplicados aos dados de uma

imagem com o objetivo de melhorar efetivamente a visualização da

cena, para subseqüente interpretação visual.

Page 20: Usb Pic Java

20

• Classificação de Imagens: estas operações têm a finalidade de

substituir a análise visual dos dados por técnicas quantitativas de análise

automática, visando à identificação das regiões presentes na cena.

• Combinação de Dados (data merging): procedimentos utilizados para

combinar os dados de uma imagem, referente à uma certa área

geográfica, com outros conjuntos de dados referenciados

geograficamente, para a mesma área.

Um recurso bastante utilizado para auxiliar o processamento de imagens é

o histograma, que consiste numa representação estatística do número de

ocorrência de pixels em determinados níveis (tonalidades) que se encontram

na imagem. Ele é muito utilizado para facilitar a visualização de dados, para

termos uma base para a identificação de ruídos, para tratamentos e seleções

de faixas de luminosidade ou ainda para selecionarmos partes da imagem para

substituição de cores. A figura a seguir mostra uma imagem e seu respectivo

histograma.

Ilustração 5: Imagem em tons de cinza e seu respectivo histograma

Na ilustração 5 temos uma imagem em 256 níveis de cinza. O histograma

apresentado mostra a função densidade de probabilidade de tons de cinza

distribuídos numa escala de 0 a 255, onde a tonalidade correspondente ao zero

é a cor preta, e ao 255, a branca. Isto nos permite identificar, por exemplo, os

níveis de cinza predominantes na imagem. Tal informação é útil, pois pode

gerar parâmetros para avaliações de qualidade, como nitidez, luminosidade e

profundidade.

Page 21: Usb Pic Java

21

3 DESENVOLVIMENTO DO DISPOSITIVO

3.1 HARDWARE

A fase desenvolvimento do hardware deste projeto foi dividida em duas

partes. Primeiramente foi feita uma pesquisa a respeito de qual seria o

microcontrolador que satisfaria as demandas do projeto. São vários os

fabricantes, como Atmel, Microchip, Texas Instruments, etc., com

características diversas. Os critérios de escolha adotados foram o

conhecimento que tínhamos em relação ao componente, o custo e a sua

obtenção no mercado. Levando em conta essas considerações o

microcontrolador escolhido foi o PIC18F4550. A segunda fase, após a

aquisição do microcontrolador, foi a confecção da placa. A seguir será descrito

mais detalhadamente cada fase do projeto do hardware.

3.1.1 PIC18F4550

O PIC18F550 foi selecionado por ser o que melhor atendia as

necessidades demandadas pelo projeto, alem da fácil aquisição e do baixo

custo. Dentre suas principais características, o seu diferencial é o fato de

apresentar um módulo de comunicação específico para USB em sua estrutura,

ou seja, não há necessidade de se criar um programa complexo para se

estabelecer a comunicação, basta algumas configurações para que

consigamos isso. A interface USB permite velocidades de comunicação de até

480 Mbps para a configuração de high speed, mas por limitações técnicas esta

velocidade não é possível para o PIC, portanto os modos de configuração que

ele aceita são low speed e full speed que correspondem a velocidades de até

1,5 Mbps e 12 Mbps respectivamente.

Além das características referentes à comunicação USB citadas

anteriormente, o PIC18F4550 também possui:

• Arquitetura Harvard (barramento de memória de dados distinto do

barramento de memória de programa);

• Clock de até 48MHz;

• 13 canais de AD de 10 bits;

Page 22: Usb Pic Java

22

• 35 Linhas de I/O;

• 32kB de memória de programa;

• 2kB de memória de dados;

• 256 Bytes de memória não volátil EEPROM.

Outra facilidade de se utilizar microcontroladores PIC é a de que o seu

fabricante, a Microchip, disponibiliza inteiramente grátis o MPLAB, que é um

ambiente de programação próprio.

A figura a seguir mostra a pinagem do PIC18F4550.

Ilustração 6: Pinagem do PIC18F4550

Conforme a figura anterior pode-se observar que os pinos 23 e 24 são

os utilizados na comunicação USB (D+ e D-).

3.1.2 CONFECÇÃO DA PLACA

O software utilizado para projetar a placa foi o KiCad, software livre. O

procedimento de criação por meio deste programa se deu através dos passos a

seguir:

• Primeiramente é construído um esquemático, onde selecionamos os

componentes, que estão representados de maneira didática, e

montamos o nosso circuito como podemos ver na gravura que segue.

Page 23: Usb Pic Java

23

Ilustração 7: Esquemático do dispositivo.

• Num segundo passo é gerada uma netlist, ou seja, um descritivo que

lista todos os componentes que farão parte do circuito e suas

respectivas conexões, conforme a ilustração a seguir.

Ilustração 8: Netlist e visualização 3D do componente.

• Finalmente, a partir da netlist, o KiCad gera automaticamente a placa

dupla face com os componentes arranjados sobre ela e suas respectivas

trilhas. Às vezes é possível rearranjar os componentes sobre a placa

Page 24: Usb Pic Java

24

manualmente, para então obter uma placa face simples, para facilitar

sua confecção. Após essa sequência de procedimentos chegamos a um

arranjo conforme as próximas figuras.

• Ilustração 9: Arranjo de componentes e trilhas

Ilustração 10: Arranjo da placa em 3D

Page 25: Usb Pic Java

25

Ilustração 11: Foto da placa depois de confeccionada.

A lista de componentes utilizados na placa está a seguir:

Componente Quantidade

PIC18F4550 1

Cristal 4MHz 1

Conector USB tipo B 1

Conector tipo KR2 1

Transformador 127/12V (500mA) 1

Botão pequeno NA 2

Resistor 1/4W 1k 2

Resistor 1/4W 10k 2

Placa circuito impresso 5x10cm 1

Pinos conectores 5x1 1

LED 5mm Verde 1

LED 5mm Vemelho 1

Diodo 1N4007 2

Capacitor eletrolítico 100uF 1

Page 26: Usb Pic Java

26

Capacitor eletrolítico 2200uF 1

Capacitor cerâmico 100nF 4

Capacitor eletrolítico 10uF 1

Capacitor eletrolítico 0,47uF 1

Capacitor cerâmico 22pF 2

Tabela 1 – Lista de componentes

É importante salientar que como a placa foi confeccionada no início do

projeto e não estava definido se utilizaríamos ou não uma fonte própria para o

dispositivo, optamos por projetar a placa com uma fonte própria por segurança.

A fonte acabou sendo inutilizada, pois optamos porta configurar a placa para

que recebesse a alimentação diretamente pelo barramento USB.

3.2 FIRMWARE

O programa desenvolvido para o dispositivo utilizou linguagem C, e foi

compilado pelo MPLAB C18 C Compiler, que é integrado ao MPLAB (versão

8.50), ambiente de programação de microcontroladores da família PIC,

disponibilizado no site da Microchip.

A função do microcontrolador é receber os dados que o computador

envia por USB, realizar o processamento programado, e devolver ao PC os

resultados do processamento, para exibição em tela. O processamento

consiste em receber os valores de todos os pixels de uma imagem selecionada

no computador (valor que varia de 0 a 255), agrupá-los em grupos de quatro

níveis (totalizando 64 intervalos de valores), e devolver ao computador a

quantidade de pixels contida em cada um desses intervalos. Para tal, é criado

um vetor com 64 posições (0 a 63) na memória do PIC, e à cada ocorrência de

um pixel de determinado intervalo, a respectiva variável no vetor é

incrementada. A seguir um fluxograma para melhor esclarecer o funcionamento

do programa:

Page 27: Usb Pic Java

27

Ilustração 12 – Fluxograma de tarefas do microcontrolador

Como mostra o fluxograma, a primeira tarefa a ser executada é conectar

a placa ao computador através de um cabo USB. Assim que conectado, o

dispositivo recebe a alimentação (+5V e GND) do barramento e inicia seu

funcionamento. Com o auxílio dos arquivos usbdrv.h e usbdrv.c, que também

são disponibilizados pela Microchip em seu site, no exemplos de códigos, o

microcontrolador é reconhecido pelo computador como um dispositivo USB,

conforme a figura abaixo:

Conexão ao PC

Sincronizar USB

Piscar LED

Valor Recebido?

‘xX’ ou ‘xT’?

x ÷ 4

Incrementa

vetor[x]

Envia

vetor[x]

Sim

‘xT’

‘xX’

Não

Page 28: Usb Pic Java

28

Ilustração 13 – Dispositivo USB reconhecido

Com o dispositivo funcionando corretamente, suas funções são agora

coordenadas pela interface gráfica, que será descrita no próximo tópico.

O programa principal (main.c – Anexo I) cria um vetor de 64 posições

após iniciar alguns bits de configuração, conforme mostrado na tabela a seguir:

Page 29: Usb Pic Java

29

Tabela 2 – Trecho de código: Laço principal

As funções de sincronismo do USB são executadas dentro da função

USBTasks(), no laço infinito de execução do programa (‘while(1)’), enquanto

que as funções de troca de dados entre o microcontrolador e o PC são

executadas dentro da função ProcessIO(). O quadro a seguir mostrará as

funções executadas para a troca de dados com o computador.

void main(void) { TRISBbits.TRISB0 = 0 ; // Define PORTB como saída #define LED LATBbits.LATB0 // Define pino B0 como “LED”

for(x=0;x<64;x++) // Criação do vetor tamanho [64] {

p[x]=0; }

InitializeUSBDriver(); // Função do usbdrv.h

while(1) {

USBTasks(); // Tarefas USB ProcessIO(); // Funções de envio e recebimento } }

Page 30: Usb Pic Java

30

Tabela 3 – Trecho de código: Funções de transferência de dados

As funções de usuário mostradas na Tabela 3 trabalham na leitura e na

escrita de valores (bytes) diretamente do USBUSART, que trabalha como um

buffer de comunicação serial, porém através de uma porta USB.

Os dados que serão enviados pela interface (PC) vêm acompanhados

de um caractere ‘X’ ou ‘T’. Quando o byte for acompanhado por ‘X’, trata-se de

um pixel de uma imagem que está sendo enviada. Nesse caso, o

microcontrolador vai ler esse valor (que está na faixa de 0 a 255, por ser 8 bits),

dividi-lo por quatro, para enquadrá-lo no respectivo intervalo de valores pré-

void ProcessIO(void) { BlinkUSBStatus(); // Piscar o LED if((usb_device_state < CONFIGURED_STATE)||(UCONbits.SUSPND==1)) return; User_Process(); // Funções do usuário } void User_Process(void) { if(getsUSBUSART(input_buffer,3)) { if(input_buffer[1]=='X') // Se o bite vem acompanhado de ‘X’, { // trata-se do valor de um pixel. valor = input_buffer[0]; input_buffer[0]=0; // Zera buffer. input_buffer[1]=0; y=(valor/4); // 256/4=64 (64 intervalos de níveis) p[y]++; // Incrementa respectiva posição } // do vetor. if(input_buffer[1]=='T') // Se o bite vem acompanhado de ‘T’, { // trata-se do valor de um intervalo. a = p[input_buffer[2]]; ultoa(a,resultado); // Transforma “unsigned long int” putsUSBUSART(resultado); // em uma string. input_buffer[0]=0; // Envia o valor da variável input_buffer[1]=0; // correspondente ao intervalo input_buffer[2]=0; // e zera o buffer. } } }

Page 31: Usb Pic Java

31

determinado, e então incrementar a variável (do vetor) da posição

correspondente ao intervalo obtido. Por exemplo, se o byte da posição ‘0’ do

buffer for 20, e o byte da posição ‘1’ for ‘X’, o PIC irá incrementar a variável da

posição 5 do vetor (no caso, posição [4], pois a contagem inicia-se em zero).

Quando o segundo byte recebido for ‘T’, significa que a interface está

enviando o valor de um dos intervalos (0 a 63), para saber o valor de sua

contagem. Então, o PIC escreverá na USART o valor armazenado naquela

posição do vetor.

No próximo tópico será explicado o funcionamento da interface gráfica

desenvolvida para trabalhar em conjunto com o dispositivo.

3.3 INTERFACE GRÁFICA

A interface gráfica do projeto foi criada a partir do software LabVIEW

2010, utilizando uma licença trial válida por trinta dias, disponível para

download no site da National Instruments. Sua forma de programação é gráfica

a partir da montagem de fluxogramas que representam funções, hierarquias, e

a seqüência em que os comandos são executados. No decorrer da

programação, automaticamente a interface de controle vai sendo criada em

outra tela, o que permite com que os resultados do que está sendo feito

possam ser vistos de maneira imediata. A seguir temos um fluxograma que

descreve numa visão macro, as ações realizadas pela interface gráfica criada:

Ilustração 14 – Fluxograma de ações da Interface Gráfica

Seleciona

Imagem

Envia Imagem

Pixel a Pixel

Recebe dados

do histograma

Plota o gráfico

do histograma

Page 32: Usb Pic Java

32

Além destas funções a interface também apresenta a resolução da

imagem e a possibilidade de se consultar ponto a ponto a curva do histograma,

permitindo saber quantos pixels há em cada faixa de cores.

Ilustração 15 – Interface Gráfica

Algumas características técnicas dessa interface são:

• Trabalha apenas com imagens de 8 bits (256 cores) e com extensão

Bitmap;

• Deve-se selecionar a porta “COM” respectiva à porta em que o

dispositivo USB ocupa;

• O gráfico do histograma que a interface apresenta mostra uma escala de

64 cores (0 a 63) e não 256 que é o que se espera de imagens de 8 bits.

Isto se dá pelo fato de que o PIC18F4550 não possui memória suficiente

para realizar um processamento considerando uma escala de 256 cores.

Page 33: Usb Pic Java

33

4 RESULTADOS

Tendo como primícia os objetivos firmados para este trabalho, obtiveram-se os seguintes resultados:

• Hardware desenvolvido com o objetivo de comunicá-lo com um PC via USB funcionando de acordo com as necessidades demandadas pelo projeto;

• Interface gráfica desenvolvida no PC para trabalho em conjunto com o periférico;

• Comunicação de desempenho eficaz entre PC e dispositivo em termos de software e hardware.

• Realização do processamento de imagens com o objetivo de fornecer o histograma da mesma por parte de um microcontrolador e exibição dos resultados em um PC.

Page 34: Usb Pic Java

34

5 CONCLUSÕES

Os sistemas embarcados são uma área muito versátil que pode abranger,

se não todas, quase todas as áreas de aplicação da engenharia elétrica.

Quando se planeja projetar um sistema embarcado, deve se ter um

cuidado minuncioso na definição dos elementos de processamento e seus

periféricos. Primeiramente deve se fazer um levantamento das necessidades

da aplicação que precisam ser satisfeitas. Isto posto, na escolha dos

componentes de circuito, além de levar em conta o dimensionamento e as

vantagens que um componente pode oferecer, é necessário conhecer suas

limitações.

O conhecimento a respeito do protocolo USB é de grande valia em se

tratando de sistemas embarcados, e de qualquer outro dispositivo que se

deseje realizar a comunicação com um PC, ou então com outro dispositivo.

Este é um protocolo que traz grande facilidade na aplicação e por isso ganha

mercado com muita velocidade e credibilidade. Porém, para quem atua no

desenvolvimento de dispositivos, não se trada de algo simples, muito pelo

contrário, demanda tempo de estudo, pesquisas e tentativas. Isto acontece

justamente para que o usuário deste tipo de interface não encontre dificuldades

na sua utilização, pois toda interface tem uma série de limitações físicas de

hardware, e para que essas limitações sejam diminuidas ao máximo facilitando

a vida do usuário, as correções e ajustes devem ser feitos em software e

firmware.

Page 35: Usb Pic Java

35

6 APRIMORAMENTOS

Como trata-se de um projeto piloto, constatamos que ainda há muito o

que ser feito para que se chegue a um equipamento robusto. Neste capítulo

seguem alguns tópicos de melhoramentos e desenvolvimentos que precisam

ser feitos.

6.1 PIC DA FAMÍLIA 32F

Como o os PIC’s da família 18 possuem somente 32kB de memória de

programa e isso acaba sendo pouca memória quando se trata de

processamento de imagens, uma saída para eliminar este empecilho é trocar

para PIC’s da família 32. Estes possuem muitos diferenciais em relação à

família 18 a começar pela memória de programa que é de 512kB. Como as

imagens que gostaríamos de tratar neste projeto são de 23kB. Alem disso

outras características são:

• A maior velocidade de execução 80 MIPS

• Uma instrução por ciclo de clock de execução

• Permite a execução a partir da RAM

• Full Speed Host / bivalente e capacidades USB OTG

• rastreamento em tempo real

As adversidades encontradas em relação a esse PIC são a dificuldade

de aquisição do componente e o custo mais elevado.

6.2 MEMÓRIA FLASH EXTERNA

Caso seja mantido no projeto o PIC18F4550, será necessário inserir no

circuito uma memória flash, podendo ser um pen drive, um cartão SD, etc. Isso

eliminaria o problema de falta de memória que encontramos.

Page 36: Usb Pic Java

36

7 BIBLIOGRAFIA

[1] ZEMBOVICI, Kleiton Chochi; FRANCO, Marcelo Gonçalves. Dispositivo

para aquisição de sinais e controle digital via USB. Trabalho de conclusão

de curso (Graduação em Engenharia Elétrica) – UFPR, Curitiba. 2009

[2] Topologia do USB. Disponível em:

http://www.gta.ufrj.br/grad/07_1/wusb/TopologiadoUSB.html. Acesso em: 26 de

setembro de 2010.

[3] Arquitetura USB. Disponível em:

http://www.pads.ufrj.br/~rapoport/usb/usb4.html. Acesso em: 17 de setembro

de 2010.

[4] Interfaces e Periféricos USB. Disponível em:

http://www.laercio.com.br/artigos/hardware/hard-051/hard-051c.htm. Acesso

em: 8 de outubro de 2010.

[5] Diferença entre Microprocessador e Microcontrolador. Disponível em:

http://www.ee.pucrs.br/~dbarros/d2005_1/Microproc/Grupo_1/diferencas.htm.

Acesso em: 22 de novembro de 2010.

[6] BRAIN, Marshall, Como funcionam as portas USB. Disponível em:

http://informatica.hsw.uol.com.br/portas-usb1.htm. Acesso em: 8 de outubro de

2010.

[7] The HID Page. Disponível em: http://lvr.com/hidpage.htm#MyExampleCode.

Acesso em: 8 de outubro de 2010.

[8] LAFEBRE, Giovanni, Conectando un PIC al PC utilizando USB.

Disponível em: http://rapidshare.com/files/7938169/EasyHID.rar.html. Acesso

em: 15 de outubro de 2010.

Page 37: Usb Pic Java

37

[9] SILVA, Erick F. C., DESENVOLVIMENTO DE UMA METODOLOGIA PARA

CAPTURA DE IMAGENS USANDO MICROCONTROLADORES. Disponível

em: http://dsc.upe.br/~tcc/20052/ErickFranklin.pdf. Acesso em: 20 de outubro

de 2010.

[10] CLAYTON, Mat, Basic USB – Using Microchip Stack and C#.Net –

Hardware. Disponível em: http://www.piccoder.co.uk/content/view/42/26/1/4/.

Acesso em: 20 de novembro de 2010.

[11] 11º Seminário técnico MICROCHIP, USB: Inplementação de hardware e

software. Disponível em: http://www.scribd.com/doc/485998/apostila-curso-

proramacao-de-dispositivos. Acesso em: 1 de novembro de 2010.

[12] SOUZA, Vitor Amadeu, Comunicação USB com o PIC, retirado das

páginas: http://www.ebah.com.br/comunicacao-usb-com-o-pic18f4550-parte-1-

pdf-a16008.html e http://www.ebah.com.br/comunicacao-usb-com-o-

pic18f4550-parte-2-pdf-a16008.html

[13] BAUERMANN, Gabriela, Histogramas de Imagem. Disponível em:

http://www.imagesurvey.com.br/2010/11/histogramas-de-imagem/. Acesso em

30 de novembro de 2010.

[14] Processamento de imagens. Disponível em:

http://www.labgis.uerj.br/gis_atualizada/pdi/01_pdi.htm. Acesso em: 2 de

dezembro de 2010.

[15] Jonis Project, PIC+USB. Disponível em:

http://www.jonis.com.br/novo/index.php?option=com_content&view=article&id=

53:pic-usb-bootloaderfacil&catid=38:eletronica. Acesso em: 24 de setembro de

2010.

[16] MICROCHIP. Microchip Advanced Parts Selection. Disponível em:

http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=

1924. Acesso em: 11 de novembro de 2010.

Page 38: Usb Pic Java

38

[17] Programas de PIC com USB. Disponível em:

http://www.electronicfr.com/index.php/Microcontrollers-and-USB/-Part-3-Howto-

build-a-USB-thermometer-and-barometer-with-PIC-18F4550-or-18F2550.html.

Acesso em: 23 de setembro de 2010.

[18] USB Boot-Loader on a PIC 18F2550. Disponível em:

http://techsanctuary.com/node/64. Acesso em 23 de setembro de 2010.

[19] USB Specifications. Disponível em:

http://www.usb.org/developers/usb20/developers/whitepapers/usb_20g.pdf.

Acesso em: 21 de setembro de 2010.

[20] USB Explicação. Disponível em:

http://www.rogercom.com/PortaUSB/MotorPasso.htm. Acesso em: 24 de

setembro de 2010.

[21] ASSOCIAÇÃO BRASILEIRA DE NORMAS TÉCNICAS. NBR 14724:

informação e documentação: trabalhos acadêmicos: apresentação. Rio de

Janeiro, 2002.

Page 39: Usb Pic Java

39

8 ANEXO I – Firmware (main.c)

#include <p18f4550.h> #include <string.h> #include <delays.h> #include "system\typedefs.h" #include "system\usb\usb.h" #include "system\usb\usbdrv\usbdrv.h " #include "mod_lcd.c" #pragma udata char input_buffer[5]; char output_buffer[5]; unsigned char buffer[20]; unsigned char resultado[7]; unsigned int p[64]; unsigned char valor; unsigned char x,y; int contador=0; unsigned int a,b; void USBTasks(void); void BlinkUSBStatus(void); void User_Process(void); void ProcessIO(void); #pragma code void main(void) { TRISBbits.TRISB0 = 0 ; #define LED LATBbits.LATB0 y=0; for(x=0;x<64;x++) { p[x]=0; } InitializeUSBDriver(); // See usbdrv.h

Page 40: Usb Pic Java

40

while(1) { USBTasks(); // USB Tasks ProcessIO(); } } void USBTasks(void) { USBCheckBusStatus(); if(UCFGbits.UTEYE!=1) USBDriverService(); CDCTxService(); } void ProcessIO(void) { BlinkUSBStatus(); if((usb_device_state < CONFIGURED_STATE)||(UCONbits.SUSPND==1)) return; User_Process(); } void User_Process(void) { if(getsUSBUSART(input_buffer,3)) { if(input_buffer[1]=='X') { valor = input_buffer[0]; input_buffer[0]=0; input_buffer[1]=0; y=(valor/4); p[y]++; } if(input_buffer[1]=='T') { a = p[input_buffer[2]]; ultoa(a,resultado); putsUSBUSART(resultado); input_buffer[0]=0; input_buffer[1]=0; input_buffer[2]=0; } } }

Page 41: Usb Pic Java

41

void BlinkUSBStatus(void) { static word led_count=0; if(led_count == 0) { led_count = 10000U; } led_count--; if(UCONbits.SUSPND == 1) { if(led_count==0) LED=!LED; } else { switch(usb_device_state) { case DETACHED_STATE: LED=0; case ATTACHED_STATE: LED=1; case POWERED_STATE: LED=0; case DEFAULT_STATE: LED=0; case ADDRESS_STATE: { if(led_count == 0) LED=!LED; } case CONFIGURED_STATE: { if(led_count == 0) LED=!LED; } } } }

Page 42: Usb Pic Java

42

9 ANEXO II - Gravador de PIC ICD2 Clone

CARACTERÍTICAS TÉCNICAS:

• Programador e depurador de microcontroladores PIC, Comunicação via

cabo USB;

• Programação em Linguagem C ou Assembly;

• Integrado ao MPLAB;

• Suporta microcontroladores das famílias PIC10, PIC12, PIC16, PIC18,

PIC24 e PIC30F.

APLICAÇÕES:

O ICD2 da Netcom conecta com o PC usando USB e atua como uma

interface inteligente entre os dois permitindo ao projetista acompanhar a

execução do programa desenvolvido em tempo real através de variáveis de

acompanhamento e breakpoints no firmware que está rodando na aplicação.

Além disso tudo, com o ICD2 também é possível gravar microcontroladores

PIC com memória FLASH e dsPICs.

Permite a inserção de breakpoints, execução passo- a-passo,

visualização de variáveis, etc. Ou seja, atua como uma interface inteligente,

permitindo ao projetista acompanhar a execução do programa desenvolvido em

tempo real.

Ilustração 15: Gravador de PIC ICD2 Clone