Upload
nguyencong
View
213
Download
0
Embed Size (px)
Citation preview
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
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
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.
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
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.
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.
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
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
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
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
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;
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.
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.
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;
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.
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.
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.
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.
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.
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.
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;
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.
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
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
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
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:
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
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:
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 } }
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. } } }
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
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.
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.
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.
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.
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.
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.
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.
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
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; } } }
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; } } } }
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