Upload
phamnga
View
215
Download
0
Embed Size (px)
Citation preview
i
APERFEIÇOAMENTO DE UM SENSOR DE IMAGENS
CMOS PARA OPERAÇÃO COM TEMPO DE
INTEGRAÇÃO VARIÁVEL
Gabriel de Oliveira Beskow
Projeto de Graduação apresentado ao Curso de
Engenharia Eletrônica e de Computação da Escola
Politécnica, Universidade Federal do Rio de
Janeiro, como parte dos requisitos necessários à
obtenção do título de Engenheiro.
Orientador: José Gabriel Rodríguez Carneiro
Gomes
Rio de Janeiro
Agosto de 2015
ii
APERFEIÇOAMENTO DE UM SENSOR DE IMAGENS
CMOS PARA OPERAÇÃO COM TEMPO DE
INTEGRAÇÃO VARIÁVEL
Gabriel de Oliveira Beskow
PROJETO DE GRADUAÇÃO SUBMETIDO AO CORPO DOCENTE DO CURSO
DE ENGENHARIA ELETRÔNICA E DE COMPUTAÇÃO DA ESCOLA
POLITÉCNICA DA UNIVERSIDADE FEDERAL DO RIO DE JANEIRO COMO
PARTE DOS REQUISITOS NECESSÁRIOS PARA A OBTENÇÃO DO GRAU DE
ENGENHEIRO ELETRÔNICO E DE COMPUTAÇÃO
Autor:
_________________________________________________
Gabriel de Oliveira Beskow
Orientador:
_________________________________________________
Prof. José Gabriel Rodríguez Carneiro Gomes, Ph. D.
Examinador:
_________________________________________________
Prof. Antonio Petraglia, Ph. D.
Examinador:
_________________________________________________
Prof. Carlos Fernando Teodósio Soares, D. Sc.
Rio de Janeiro – RJ, Brasil
Agosto de 2015
iii
UNIVERSIDADE FEDERAL DO RIO DE JANEIRO
Escola Politécnica – Departamento de Eletrônica e de Computação
Centro de Tecnologia, bloco H, sala H-217, Cidade Universitária
Rio de Janeiro – RJ CEP 21949-900
Este exemplar é de propriedade da Universidade Federal do Rio de Janeiro, que
poderá incluí-lo em base de dados, armazená-lo em computador, microfilmá-lo ou adotar
qualquer forma de arquivamento.
É permitida a menção, reprodução parcial ou integral e a transmissão entre
bibliotecas deste trabalho, sem modificação de seu texto, em qualquer meio que esteja
ou venha a ser fixado, para pesquisa acadêmica, comentários e citações, desde que sem
finalidade comercial e que seja feita a referência bibliográfica completa.
Os conceitos expressos neste trabalho são de responsabilidade do(s) autor(es).
iv
DEDICATÓRIA
Dedico este projeto à memória de meu tio Mílton Antônio de Oliveira, o qual
infelizmente, não pode fazer parte deste momento tão especial. É impossível não tentar
imaginar sua reação. Tenho a certeza que estaria tão feliz como eu estou agora. Levarei
sempre comigo sua alegria e carinho. Seu jeito simples de ver a vida.
v
AGRADECIMENTO
Em primeiro lugar agradeço à minha mãe, Eliane Cristina de Oliveira, por ter me
dado a oportunidade de me dedicar a este curso. Sei o quanto foi difícil e a quantidade
de pessoas que não possuem a mesma sorte. Agradeço pelo apoio e incentivo, por ser
meu chão e meu porto, meu abrigo durante as tempestades que vieram e que ainda virão.
Agradeço ao meu orientador, Professor José Gabriel Rodríguez Carneiro Gomes,
por me guiar durante este projeto, por sua paciência e disposição em ajudar, por colocar
sobre mim um fardo que eu conseguiria carregar.
Agradeço aos professores da UFRJ pelos conhecimentos transmitidos e aos
colegas de curso por tornarem mais amenos estes longos anos. Aqui, um agradecimento
especial aos meus amigos Igor Cunha Bragança, Bruno Ramos e Álvaro da Silva Júnior,
parceiros de laboratório e projetos durante o curso.
Finalmente, agradeço aos companheiros de trabalho e amigos que fiz durante
meus dois anos de estágio na equipe de OSS da Oi pelos conhecimentos práticos
adquiridos e os bons momentos vividos.
Existe um pouco de todos vocês neste trabalho.
vi
RESUMO
Este projeto trata da implementação de um método para transferir o valor de um
parâmetro de um computador para um microcontrolador PIC. O parâmetro é o tempo de
integração que se deseja para um fotodiodo e será utilizado pelo microcontrolador para
gerar os sinais de controle de um sensor de imagens CMOS implementado no PADS
(Laboratório de Processamento Analógico de Digital de Sinais, COPPE/UFRJ).
No computador, a interface gráfica de usuário define as ações a serem
executadas pelo PIC e interpreta os resultados obtidos. O microcontrolador recebe os
comandos da interface, gera os sinais de controle para o funcionamento do sensor e
envia os resultados ao computador. Esta comunicação é feita via USB.
Neste trabalho, foram feitas as alterações no código-fonte da interface gráfica de
usuário e no firmware do PIC para que o sistema funcione com o novo tempo de
integração. Além disso, foi feita a validação do método no circuito de testes do sistema.
Os resultados obtidos mostraram que o microcontrolador passou a utilizar o
novo valor do parâmetro, lido de um arquivo-texto e enviado pela interface gráfica de
usuário, para gerar os sinais de controle do sensor de imagens. Apesar disso, houve um
acréscimo nos valores medidos devido ao tempo de execução do laço de repetição que
foi implementado para gerar o tempo de integração desejado. O maior erro relativo
medido experimentalmente é de seis por cento para o método escolhido.
Palavras-Chave: sensor CMOS, USB, microcontrolador, interface gráfica.
vii
ABSTRACT
This project is the implementation of a method that transfers the value of a
parameter from a computer to a PIC microcontroller. The parameter is the integration
period wanted for a photodiode and it will be used by the microcontroller to generate
the control signals of a CMOS image sensor implemented at PADS (Laboratório de
Processamento Analógico de Digital de Sinais, COPPE/UFRJ).
On the computer, the graphical user interface defines the actions to be
performed by the PIC and interprets the results. The microcontroller receives commands
from the interface, generates the control signals for the sensor operation and sends the
results to the computer. This communication is done via USB.
In this project, changes were made in the graphical user interface source code
and in the PIC firmware for the system to function with the integration time.
Furthermore, the method validation was made in the experimental circuit test set-up.
The results showed that the microcontroller has been using the new parameter
value, read from a text file and sent by the graphical user interface, to generate the
image sensor control signals. Nevertheless, there was a slight increase in the measured
figures due to the repetition loop runtime, implemented to generate the desired
integration time. The largest experimentally measured error is six percent for the chosen
method.
Keywords: CMOS camera, USB, microcontroller, graphical interface.
viii
SIGLAS
CCD – Charge Coupled Device
CDS – Correlated Digital Sampling
CI – Circuito Integrado
CMOS – Complementary Metal Oxide Semiconductor
COPPE – Instituto Alberto Luiz Coimbra de Pós-Graduação e Pesquisa de Engenharia
DEL – Departamento de Eletrônica
DPCM – Differential Pulse Code Modulation
EPOLI – Escola Politécnica
MTF – Modulation Transfer Function
PADS – Laboratório de Processamento Analógico e Digital de Sinais
PEE – Programa de Engenharia Elétrica
PIC – Peripheral Interface Controller
UFRJ – Universidade Federal do Rio de Janeiro
USB – Universal Serial Bus
As seguintes expressões não pertencem ao idioma português, mas serão escritas
sem o uso de caracteres em itálico, por que seu uso agora ser muito frequente em nosso
idioma: chip; clock; firmware; pixel; pixels; software.
ix
Sumário
Capítulo 1 ........................................................................................................................ 1
Introdução ....................................................................................................................... 1
1.1 – Tema ................................................................................................................................. 1
1.2 – Objetivo ............................................................................................................................ 1
1.3 – Justificativa ....................................................................................................................... 2
1.4 – Metodologia ..................................................................................................................... 2
1.5 – Descrição .......................................................................................................................... 3
Capítulo 2 ........................................................................................................................ 4
Fundamentos Teóricos ................................................................................................... 4
2.1 – O Imageador CMOS .......................................................................................................... 4
2.2 – Circuito de Leitura do Fotodiodo ..................................................................................... 5
2.3 – O Chip Fabricado .............................................................................................................. 6
2.4 – O Aparato de Testes ......................................................................................................... 7
2.5 – O Circuito de Controle ...................................................................................................... 8
2.6 – A Interface Gráfica de Usuário ......................................................................................... 9
2.7 – O Firmware do Microcontrolador .................................................................................. 11
Capítulo 3 ...................................................................................................................... 13
Métodos ......................................................................................................................... 13
3.1 – Origem do Parâmetro ..................................................................................................... 13
3.2 – Definição e Obtenção do Parâmetro .............................................................................. 14
3.3 – Envio do Parâmetro pela Interface Gráfica .................................................................... 15
3.4 – Recebimento do Parâmetro pelo Microcontrolador ...................................................... 16
3.5 – O Uso do Parâmetro pelo Sensor CMOS ........................................................................ 17
Capítulo 4 ...................................................................................................................... 19
Resultados ..................................................................................................................... 19
4.1 – O Sistema Anterior ......................................................................................................... 19
4.2 – O Novo Sistema .............................................................................................................. 21
4.3 – Aumentando o Tamanho do Passo ................................................................................ 24
Capítulo 5 ...................................................................................................................... 28
Conclusões ..................................................................................................................... 28
Bibliografia .................................................................................................................... 29
x
Lista de Figuras
Figura 1: Circuito de leitura do fotodiodo ..................................................................................... 5
Figura 2: Formas de onda dos sinais Reset, P1 e P2 ao longo do tempo ...................................... 6
Figura 3: Fotos do chip tiradas por um microscópio óptico (a) e por uma câmera (b) ................. 7
Figura 4: Diagrama de blocos do sistema de comunicação ........................................................... 7
Figura 5: Diagrama esquemático do circuito de controle .............................................................. 8
Figura 6: Interface gráfica de usuário............................................................................................ 9
Figura 7: Fluxograma do software da interface gráfica .............................................................. 10
Figura 8: Fluxograma do firmware ............................................................................................. 12
Figura 9: Código-fonte para leitura do arquivo-texto. ................................................................ 14
Figura 10: Arquivo ―definicoes.h‖ .............................................................................................. 15
Figura 11: Trecho do código-fonte para o envio do parâmetro ................................................... 16
Figura 12:Trecho do códifo-fonte da função ―user.h‖ no firmware ............................................ 16
Figura 13: Trecho do código-fonte que recebe e altera o tempo de integração........................... 17
Figura 14: Trecho do código-fonte que gera o tempo de integração ........................................... 18
Figura 15: Trecho do código-fonte em que P1 e P2 são configurados ........................................ 19
Figura 16: Pinagem do PIC 18LF4550 ....................................................................................... 20
Figura 17: Tempo de integração é de 800 µs .............................................................................. 20
Figura 18: Trecho do código-fonte onde é gerado o tempo de integração de 800 µs ................. 21
Figura 19: Tempo de Integração é de 126 µs .............................................................................. 22
Figura 20: Tempo de integração é de 544 µs .............................................................................. 22
Figura 21: Tempo de integração é de 860 µs .............................................................................. 22
Figura 22: Tempo de integração é de 1280 µs ............................................................................ 23
Figura 23: Tempo de integração é de 1910 µs ............................................................................ 23
Figura 24: Tempo de integração é de 2640 µs ............................................................................ 23
Figura 25: Tempo de integração é de 3160 µs ............................................................................ 24
Figura 26: Tempo de integração é de 106 µs .............................................................................. 25
Figura 27: Tempo de integração é de 512 µs .............................................................................. 25
Figura 28: Tempo de integração é de 820 µs .............................................................................. 25
Figura 29: Tempo de integração é de 1230 µs ............................................................................ 26
Figura 30: Tempo de integração é de 1840 µs ............................................................................ 26
Figura 31: Tempo de integração é de 2560 µs ............................................................................ 26
Figura 32: Tempo de integração é de 3060 µs ............................................................................ 27
1
Capítulo 1
Introdução
1.1 – Tema
Este trabalho tem como origem um sensor de imagens CMOS, implementado e
testado no PADS (Laboratório de Processamento Analógico de Digital de Sinais,
COPPE/UFRJ) e detalhado no Projeto de Graduação de Fernanda Duarte Vilela Reis de
Oliveira [1] e na Dissertação de Mestrado de Hugo de Lemos Haas [2].
Existe, no laboratório, um circuito de teste do sensor ligado a um computador
através de uma porta USB. No computador, o usuário controla as tarefas realizadas pelo
circuito através de uma interface gráfica. Para gerar os sinais de controle do chip e ler
seus dados de saída existe, no circuito de teste, um microcontrolador PIC com interface
USB. O computador também recebe e grava em um arquivo a sequência de bits de saída
do chip, enviados pelo PIC. Toda a comunicação entre computador e o
microcontrolador é feita via interface USB.
Assim, neste trabalho abordaremos o sensor de imagens CMOS, o
microcontrolador PIC, seu firmware e a sua comunicação com computadores via
interface USB, além da interface gráfica de usuário e sua programação.
1.2 – Objetivo
O projeto tratará da implementação de um método que transfere do computador
o valor de um parâmetro, no caso o tempo de integração, para o microcontrolador PIC.
Para isso, serão feitas as alterações no código da interface gráfica de usuário e no
firmware do microcontrolador. O objetivo é que o sistema passe a utilizar o valor
recebido para gerar o intervalo de tempo entre os sinais de controle necessários para a
operação do sensor CMOS. Por fim, será feita a validação do método no circuito de
testes em laboratório e serão apresentados os resultados obtidos com intuito de verificar
se o nosso objetivo foi alcançado.
2
1.3 – Justificativa
Existe uma forma muito usada para avaliar sistemas ópticos, visando medir as
limitações de desempenho, chamada de Modulation Transfer Function ou MTF [3]. Ela
mede a fidelidade com que o sistema reproduz detalhes do objeto na imagem capturada.
A MTF é função de um parâmetro chamado tempo de integração (tempo que o sensor
fica exposto à luz até que a amostragem seja realizada). Este tempo é o intervalo entre
dois pulsos de controle, chamados no projeto da câmera de P1 e P2, gerados pelo
microcontrolador. Este intervalo foi escolhido e fixado em 800 µs no sistema de
controle existente para o sensor de imagens CMOS.
Há o interesse em tornar o sistema automático quanto ao tempo de integração,
permitindo que a MTF seja maximizada para diferentes condições de iluminação sem
interferência do usuário. O objetivo é encontrar um valor ótimo para o tempo de
integração em determinada condição de iluminação. Assim, o tempo de integração que
atualmente é fixo passará a ser variável. Este valor será determinado, enviado ao
microcontrolador e utilizado para a ativação dos sinais de controle do sensor. Este
sistema de controle será implementado em um trabalho futuro.
1.4 – Metodologia
Como já existe a interface gráfica de usuário e a comunicação via interface USB
com o microcontrolador, será estudada a melhor maneira para transferir o parâmetro
desejado com poucas modificações no sistema existente.
Em primeiro lugar, é necessário o entendimento desse sistema. Ele é dividido
em dois programas: um que é gravado no microcontrolador e o outro que implementa,
no computador, a interface gráfica de usuário. Será também estudado como esses dois
programas se comunicam através da interface USB.
Então, será definido e implementado um método para transmitir, da interface
gráfica de usuário, um valor de tempo de integração para o microcontrolador. Serão
também implementadas as mudanças no sistema de controle do sensor CMOS para que
este passe a atuar com o valor recebido do computador.
Por fim, será feita a validação do método em laboratório. Para isso, será
utilizado o aparato de testes descrito na Seção 2.4 onde será verificado se os resultados
obtidos estão de acordo com o esperado.
3
1.5 – Descrição
No Capítulo 2 será apresentada a câmera existente no PADS que serviu de base
para a implementação deste projeto. Este capítulo constitui o embasamento teórico que
torna possível a resolução do problema proposto.
O Capítulo 3 apresenta o desenvolvimento do projeto. Serão mostrados os
métodos aplicados, os problemas encontrados e as soluções propostas.
Os resultados obtidos são apresentados e analisados no Capítulo 4. Nele também
serão explicados os testes realizados no laboratório. Será mostrado o comportamento do
sistema anterior, comparado ao atual para verificar se o objetivo final foi alcançado.
O Capítulo 5 mostra a conclusão deste trabalho.
4
Capítulo 2
Fundamentos Teóricos
Neste capítulo abordaremos os temas necessários ao entendimento do projeto da
câmera CMOS que já existia no PADS. Este entendimento se fez necessário e foi a
maior dificuldade encontrada neste trabalho. Ela consistiu em entender a lógica e a
estrutura de um projeto já implementado e, assim, tornar possível o seu
aperfeiçoamento. Um dos objetivos foi alterar pouco a estrutura do sistema a fim de
aproveitar ao máximo o trabalho já feito.
Abordaremos o imageador CMOS, explicaremos como é feita a leitura do
fotodiodo, como foi fabricado e funciona o chip projetado, o circuito desenvolvido para
testá-lo e para controlá-lo, a interface gráfica de usuário e o código que faz a
comunicação entre o computador e o PIC, e finalmente, o programa que gera os sinais e
comandos necessários no microcontrolador para que o sensor CMOS funcione da
maneira desejada.
2.1 – O Imageador CMOS
Anos atrás, quando a fotografia digital começava a se disseminar, os sensores
CMOS, de produção mais barata e resolução limitada, eram sinônimo de câmera
popular. Já os CCDs, então capazes de resoluções mais altas do que os CMOS do
mesmo período e muito menos suscetíveis a ruído, ficaram tradicionalmente associados
às câmeras ―de verdade‖. Hoje em dia os sensores CMOS alcançaram em termos de
qualidade de imagem, nível de ruído e consumo de potência os sensores CCDs [5].
Uma diferença entre CCD e CMOS é onde os sinais elétricos gerados em cada
um dos fotodiodos responsáveis por capturar os fótons que compõem uma imagem são
amplificados, convertidos e digitalizados. Nos CCDs, isso acontece fora do sensor
propriamente dito, enquanto nos CMOS o processo se dá separadamente para cada pixel
da imagem, bem no ponto do sensor em que ele é registrado.
No PADS foi implementado e testado um imageador CMOS de 32x32 pixels
capaz de realizar a compressão, com perdas, de imagens em escala de cinza no plano
5
focal. O sensor possui saída digital e cada bloco de 4x4 pixels é representado por 15
bits. O método de compressão utiliza quantização vetorial e DPCM. Para saber mais
detalhes sobre o método de compressão consulte [1] e [2].
2.2 – Circuito de Leitura do Fotodiodo
A princípio precisamos entender como funciona a leitura do fotodiodo, ou seja,
o procedimento necessário para tirar uma foto. São utilizados três sinais de controle
gerados pelo microcontrolador – Reset, P1 e P2. Para entendimento do leitor, a Figura 1
mostra o circuito de leitura e como estes sinais são aplicados a ele.
Figura 1: Circuito de leitura do fotodiodo
O sinal de Reset fica em nível lógico alto por 80 µs, tempo necessário para
carregar a capacitância associada ao catodo do fotodiodo. Esta capacitância irá se
descarregar de acordo com a intensidade da luz incidente. O tempo que o fotodiodo fica
exposto até que a amostragem seja realizada, ou seja, o intervalo entre as descidas dos
sinais P1 e P2, é o tempo de integração do sensor.
São realizadas uma amostragem no início e outra no final da integração do
fotodiodo. A primeira é feita através do sinal P1 logo após o sinal de Reset ir para o
nível lógico baixo. O Sinal P2 é desligado após 800 µs que é o tempo de integração
escolhido no projeto do circuito de controle. A Figura 2 ilustra o comportamento dos
sinais Reset, P1 e P2 ao longo do tempo através de suas formas de onda.
6
Figura 2: Formas de onda dos sinais Reset, P1 e P2 ao longo do tempo
Essa técnica de leitura, que consiste em realizar a diferença entre uma
amostragem inicial e uma final, é chamada de correlated double sampling (CDS) e tem
como objetivo a redução de ruído. Historicamente, a qualidade de imagem gerada pelos
sensores CMOS aumentou significativamente após a introdução do CDS, permitindo
que a qualidade de imagem gerada alcançasse a dos sensores CCDs [1].
2.3 – O Chip Fabricado
O circuito integrado projetado no laboratório possui 8x8 blocos de 4x4 pixels.
Ele tem saída serial, ou seja, os bits de saída são ligados a um único barramento. A
saída da matriz de pixels é digital e comprimida. A Figura 3 mostra fotos tiradas do chip
fabricado. Além do bloco principal, foram acrescentadas algumas estruturas de teste
para caracterizá-lo.
Existe um par de pixels nos quatro cantos da matriz principal. O objetivo é
verificar se a matriz está iluminada de maneira uniforme, encontrar a curva de resposta
do fotodiodo e confirmar a importância da técnica CDS. Por isso, um dos pixels possui
saída que é dada pela diferença entre uma amostragem inicial e uma final (P1 e P2) e no
outro a saída é dada somente pela amostragem final do fotodiodo, ou seja, sem CDS.
Eles possuem os mesmos sinais de controle da matriz principal e são chamados de
pixels de teste no sistema do imageador CMOS.
Existe também um pixel independente separado do restante do circuito. Ele é um
pixel sem CDS em que os sinais de controle (P2_I e #P2_I) não são os mesmos do
restante do circuito. Os pinos de leitura do pixel independente estão diretamente ligados
aos pads do circuito integrado e o objetivo é verificar o estado do chip caso ele não
apresente nenhuma resposta.
7
(a) (b)
Figura 3: Fotos do chip tiradas por um microscópio óptico (a) e por uma câmera (b)
Existe ainda uma terceira estrutura de testes que são dois blocos de 4x4 pixels,
um com CDS e o outro sem CDS, que também servem para descobrir falhas caso o chip
não apresente resposta. Essa estrutura também é controlada por Reset, P1 e P2 e é
chamada de blocos de teste.
2.4 – O Aparato de Testes
Foi projetado e montado em [1] um aparato de testes para o sensor de imagens.
Ele consiste em um circuito capaz de gerar os sinais de controle do circuito integrado,
gravar os bits de saída e enviar esses bits para o computador que realizará a
decodificação da imagem. Para a realização destas tarefas foi usado um
microcontrolador PIC 18LF4550 fabricado pela Microchip Solutions [6] que possui
interface USB.
O circuito é controlado por um computador através de uma interface gráfica de
usuário. Nela é possível escolher a tarefa a ser realizada pelo chip, como tirar uma foto,
ativar uma estrutura de teste ou trabalhar no modo Viewfinder, detalhadas na Seção 2.5.
A Figura 4 mostra o diagrama de blocos que representa a comunicação entre o PIC, o
sensor CMOS e o computador.
Figura 4: Diagrama de blocos do sistema de comunicação
8
O firmware utilizado para programar o microcontrolador, assim como a interface
gráfica de usuário foram programados com base no USB Framework que são exemplos
disponíveis no site da Microchip [6] que implementam a comunicação via interface
USB entre o computador e o PIC.
2.5 – O Circuito de Controle
A Figura 5 representa o diagrama esquemático do circuito de controle do sensor
CMOS. O chip está ligado à alimentação através da chave Sw1 controlada pelo PIC. O
microcontrolador liga o chip CMOS fechando esta chave quando recebe algum
comando da interface gráfica de usuário. Os sinais S1, S2 e S3 selecionam a linha da
matriz de pixels a ser lida no imageador.
Figura 5: Diagrama esquemático do circuito de controle
O PIC gera os sinais de controle Reset, P1 e P2 utilizados na leitura do
fotodiodo. Os sinais de Load e Clock controlam o registrador de deslocamento para a
leitura dos bits gerados por cada linha dos blocos.
Os resistores e os outros sinais que não foram citados anteriormente fazem parte
das estruturas de testes descritas na Seção 2.3 e não serão aprofundados neste trabalho.
Detalhes sobre o seu funcionamento podem ser encontrados em [1].
9
2.6 – A Interface Gráfica de Usuário
Para controlar o PIC existe uma interface gráfica mostrada na Figura 6. Ela foi
escrita utilizando a linguagem de programação C++ e a biblioteca gráfica MSDN,
desenvolvida pela Microsoft.
Figura 6: Interface gráfica de usuário
A interface foi desenvolvida em [1] e posteriormente alterada no projeto final de
Leandro d’Oliveira do Rêgo [4] para que fosse possível o aumento da taxa de captura de
quadros da câmera. Para isso, foi implementado um novo decodificador. Este trabalho
trata da comunicação entre a interface gráfica e o microcontrolador PIC. Portanto, essas
mudanças não serão detalhadas. Para saber detalhes consulte [4]. A Figura 7 mostra o
fluxograma do código executado pela versão original da interface encontrado em [1].
No início do programa são definidas as configurações para a comunicação via
interface USB com o microcontrolador. Após isso, é verificado se ele está conectado ao
computador. Se a resposta for positiva, os botões são ativados e o programa entra em
um laço, que verifica a cada repetição se algum deles foi clicado.
O primeiro botão, ―Ativar bloco principal‖, faz com que o programa da interface
gráfica envie ao microcontrolador o comando para ligar a matriz de pixels principal e
realizar a leitura dos resultados. Os bits resultantes da compressão de uma foto são
recebidos e gravados em um arquivo-texto que será usado pelo decodificador.
O segundo botão faz com que o pixel independente seja ativado. Este comando é
enviado repetidamente até que o botão de parar seja selecionado. Isto serve para que o
sinal de saída do pixel independente possa ser observado no osciloscópio. O botão
10
―Ativar pixels de teste‖ funciona da mesma maneira para que os pares de pixels de teste
também possam ser observados no instrumento.
Figura 7: Fluxograma do software da interface gráfica
O botão ―Ativar blocos de teste‖ realiza a leitura dos 15 bits do bloco de teste
com CDS e outros 15 bits sem CDS. Os 30 bits resultantes são enviados para o
computador e gravados em um arquivo-texto.
O modo ―Iniciar disparos‖ faz com que qualquer um dos comandos citados
anteriormente seja repetido um determinado número de vezes. O comando é escolhido
11
na caixa de seleção à esquerda e a quantidade de repetições é definida na caixa de texto
à direita do botão.
Por fim, o modo ―Viewfinder‖ realiza o comando do botão ―Ativar bloco
principal‖ repetidamente. Este é o modo utilizado junto com o decodificador projetado
em [4]. Ele acessa o arquivo-texto gravado pela interface gráfica. Através deste modo é
possível observar com um pequeno atraso as imagens capturadas pelo chip, o que nos
permite alinhar a imagem e fazer ajustes de foco e luminosidade.
2.7 – O Firmware do Microcontrolador
O programa do PIC é mais complexo que o da interface gráfica. Como já foi
dito, foi utilizado um exemplo implementado pelo fabricante do microcontrolador. Nele,
foram feitas as configurações do dispositivo e da interface de comunicação USB.
Assim, com as configurações implementadas, foi necessário modificar algumas funções
para que o sistema de controle operasse da maneira desejada. Podemos observar o
fluxograma do código escrito na Figura 8 que também pode ser encontrado em [1].
Primeiro, são definidas as entradas analógicas e digitais do microcontrolador e
os pinos de saída analógicas e digitais. São inicializadas as saídas digitais e é
configurada a comunicação USB para verificar se existe um dispositivo ligado a ela.
É a interface gráfica que definirá o modo de operação do chip através do envio
ao microcontrolador de um vetor de bytes. A primeira posição deste vetor contém o
valor que define a operação a ser realizada. Os comandos que o PIC pode executar são
os vistos na interface. O programa executa um laço infinito, verificando a cada repetição
se o computador enviou alguma informação. Uma função do tipo switch faz a seleção
onde cada case representa um modo e executa as operações necessárias no circuito.
O comando ―Ativar bloco principal‖ é usado para tirar uma foto. Ao recebê-lo o
microcontrolador gera os sinais de leitura do fotodiodo e de controle do registrador de
deslocamento, realizando a leitura de uma linha da matriz de pixels. A linha a ser lida
vem também no vetor de bytes. O tempo de integração do fotodiodo não pode variar de
uma leitura pra outra, por isso todos os sinais de controle são executados dentro de uma
interrupção do microcontrolador. Assim, não há interferência de outros processos
executados no PIC.
O comando ―Ativar o pixel independente‖ faz com que o microcontrolador gere
os sinais necessários para o teste do mesmo. Os sinais de controle são: Reset_I, P2_I e
12
#P2_I. A saída é observada utilizando um osciloscópio para medir a tensão no terminal
do resistor ligado ao pino do chip.
Figura 8: Fluxograma do firmware
Os dois comandos restantes, ―Ativar blocos de teste‖ e ―Ativar pixels de teste‖,
geram os mesmos sinais de controle do primeiro comando, necessário para ligar a
matriz de pixels principal. No caso dos pixels de teste as saídas serão observadas no
osciloscópico como o pixel independente. Nos blocos de teste o PIC irá ler e enviar ao
computador os 30 bits de saída, sendo 15 bits para o bloco com CDS e 15 bits para o
bloco sem CDS. O computador grava esses bits em um arquivo-texto que será utilizado
pelo decodificador.
13
Capítulo 3
Métodos
Neste capítulo serão expostos os problemas encontrados e as soluções propostas
durante este trabalho. Perceberemos que as alterações necessárias no projeto do sistema
de controle da câmera CMOS foram poucas. Porém, o objetivo era justamente esse.
Após analisar e entender o que havia sido feito no projeto original foi preciso decidir
onde e como seria modificado o sistema para alcançar o objetivo proposto.
Mostraremos como foi definida a origem do tempo de integração, sua
especificação, como ele é obtido e enviado ao microcontrolador, como o PIC recebe
este valor e como ele o utiliza para controlar o sensor CMOS.
3.1 – Origem do Parâmetro
O primeiro problema encontrado foi em relação à origem do parâmetro a ser
transmitido. Uma solução proposta seria modificar a interface gráfica, adicionando um
novo campo de texto, para que o usuário definisse o tempo de integração. Porém, não
era mais possível acrescentar botões ou campos na interface gráfica, o que, pelo
conhecimento que temos no laboratório, parece ser devido a uma limitação existente na
versão do Microsoft Visual Studio — software utilizado para implementar a solução.
Ou seja, por esta hipótese, para acrescentar um botão seria necessário retirar algum
outro existente. Isto implicaria em jogar uma parte do trabalho feito nos projetos
anteriores fora. Desta maneira, esta solução foi descartada. Outra ideia seria fazer uma
nova versão da interface usando aplicativos gratuitos, tais como Qt ou wxWidgets, mas
esta possibilidade não foi tratada neste projeto.
Foi, então, proposto que esse valor fosse lido de um arquivo-texto. Essa solução
fez todo o sentido, pois a interface gráfica já manipulava alguns arquivos deste tipo.
Assim, o programa ficaria coerente. Além disso, existia a ideia de implementar um
método de controle onde o tempo de integração fosse definido de acordo com as
condições de iluminação da imagem a ser capturada. Esse controle seria realizado por
um outro sistema a ser implementado em um trabalho futuro. Portanto, faria todo o
sentido que este método escrevesse o valor encontrado em um arquivo-texto,
14
possibilitando a integração com a interface gráfica sem depender do usuário. Pelos
motivos expostos, esta foi a solução adotada.
3.2 – Definição e Obtenção do Parâmetro
No projeto original o valor do tempo de integração era fixado em 800 µs. Para o
novo sistema foi decidido que o parâmetro estaria dentro de uma faixa de valores entre
100 µs e 3000 µs. Foi decidido também que sempre seriam enviados quatro bytes para o
microcontrolador. Assim, se o valor estivesse entre 100 µs e 999 µs, ou seja, tivesse
apenas três caracteres, seria adicionado um zero como primeiro caractere.
Como já foi dito, este valor será definido em um arquivo-texto. Assim, em
primeiro lugar, precisamos realizar a leitura do tempo de integração neste arquivo que
foi chamado de “tempoIntegracao.txt”. A Figura 9 mostra o trecho do programa que
usado para obter este valor.
#include <fstream>
ifstream arquivoTempo;
char tempInteg[5];
int index;
arquivoTempo.open("tempoIntegracao.txt");
if(arquivoTempo.is_open()){
arquivoTempo.get(tempoInteg,5);
if(arquivoTempo.gcount()==3){
tempoInteg[3]=tempoInteg[2];
tempoInteg[2]=tempoInteg[1];
tempoInteg[1]=tempoInteg[0];
tempoInteg[0]='0';
}
arquivoTempo.close();
}
else{
tempoInteg[0]='0';
tempoInteg[1]='8';
tempoInteg[2]='0';
tempoInteg[3]='0';
}
Figura 9: Código-fonte para leitura do arquivo-texto.
Foi utilizada a biblioteca fstream que é um manipulador de fluxo de dados de
arquivos. Ela permite ler e escrever em modo texto ou binário. Dentro desta biblioteca
existe a classe ifstream que define um fluxo a ser usado para ler dados de caracteres de
15
byte único em série. Caso o arquivo-texto contendo o tempo de integração desejado não
exista ou, por algum motivo, não consiga ser aberto, o sistema irá, por definição,
trabalhar com o valor do projeto original de 800 µs.
O método get foi utilizado para a leitura. Por especificação, o tempo de
integração teria três ou quatro caracteres – entre 100 µs e 3000 µs. Por isso, foi passado
o número cinco como argumento. Desta forma, a função realizará a leitura de, no
máximo, quatro caracteres até encontrar o fim da linha ou o final do arquivo. O método
gcount, que retorna o número de bytes lidos na última iteração da função get, foi
utilizado como condição para adicionar o quarto caractere aos casos necessários.
Este trecho do código-fonte foi escrito no arquivo “form.h”, que implementa a
interface gráfica de usuário, antes do programa entrar no laço infinito que espera o
comando da interface. Isto foi feito para evitar que o arquivo-texto fique sendo aberto e
fechado para a leitura durante toda a execução do sistema.
3.3 – Envio do Parâmetro pela Interface Gráfica
Como foi dito na Seção 2.7, é a interface gráfica que definirá o modo de
operação do chip. Ela envia ao microcontrolador um vetor de bytes. A primeira posição
deste vetor contém o valor do comando a ser executado. Assim, foi preciso definir no
arquivo “definicoes.h” uma nova constante para representar o comando de leitura do
valor do novo tempo de integração. A Figura 10 mostra o arquivo já modificado.
#ifndef DEFINICOES_H
#define DEFINICOES_H
#define ATIVAR_BLOCO_PRINCIPAL 0x31
#define ATIVAR_PIXEL_INDEP 0x32
#define ATIVAR_BLOCOS_TESTE 0x33
#define ATIVAR_PIXELS_TESTE 0x34
#define DEFINIR_TEMPO_INTEGRACAO 0X35
#endif
Figura 10: Arquivo “definicoes.h”
Todo o processo de comunicação da interface com o microcontrolador é baseado
nos exemplos fornecidos pela Microchip Solutions. Assim, todas as configurações e as
bibliotecas utilizadas foram implementadas pelo fabricante do PIC. Para que o sistema
funcione como desejamos apenas foram feitas as modificações necessárias.
16
A biblioteca usada para a comunicação com o microcontrolador é a MPUSBAPI
e a função utilizada para enviar dados da interface para ele é a MPUSBWrite. Um laço
transfere o tempo de integração à variável Buffer que é enviada ao PIC. A Figura 11
mostra o trecho do código-fonte responsável pelo envio do parâmetro.
for(index=0;index<=3;index++)
Buffer[index+2]=tempoInteg[index];
Buffer[0]=DEFINIR_TEMPO_INTEGRACAO
MPUSBWrite(EP1OUTHandle, Buffer, 6, &ActualLength, INFINITE);
Figura 11: Trecho do código-fonte para o envio do parâmetro
A função MPUSBWrite recebe cinco argumentos. O primeiro identifica o
endpoint para onde os dados serão enviados, no caso o endereço do microcontrolador. O
segundo é a variável Buffer – vetor de bytes que contém os dados. O terceiro é um
número que representa a quantidade de bytes que serão transferidos. O quarto aponta o
número de bytes que a função escreveu e o último define um intervalo de tempo para a
execução da função.
3.4 – Recebimento do Parâmetro pelo Microcontrolador
O firmware do microcontrolador também foi escrito baseado em um exemplo
fornecido pelo fabricante para um dispositivo genérico. Para atender o nosso objetivo,
três arquivos sofreram modificações. A primeira alteração é feita no arquivo “user.h” e
consiste em adicionar a constante DEFINIR_TEMPO_INTEGRACAO, como foi feito
dentro do programa da interface gráfica de usuário. A Figura 12 mostra o trecho do
código-fonte do firmware em que é feita esta definição.
typedef enum
{
READ_VERSION = 0x00,
ATIVAR_BLOCO_PRINCIPAL = 0x31,
ATIVAR_PIXEL_INDEP = 0x32,
ATIVAR_BLOCOS_TESTE = 0x33,
ATIVAR_PIXELS_TESTE = 0x34,
DEFINIR_TEMPO_INTEGRACAO = 0x35,
RD_POT = 0x37,
RESET = 0xFF
}TYPE_CMD;
Figura 12:Trecho do códifo-fonte da função “user.h” no firmware
17
No arquivo “user.c” foi modificada a função ServiceRequests. Nela é executado
o switch que alterna entre os comandos que podem ser passados pela interface gráfica ao
microcontrolador no vetor de bytes. Foi adicionado um novo case para alterar o valor do
tempo de integração. O trecho do código pode ser visto na Figura 13.
int valorTempoInt;
case DEFINIR_TEMPO_INTEGRACAO:
{
int index;
unsigned char tempoChar[4];
int tempoInt[4];
for(index=0;index<=3;index++){
tempoChar[index]==OUTPacket._byte[index+2];
tempoInt[index]=tempoChar[index]-48;
}
valorTempoInt=tempoInt[0]*1000+tempoInt[1]*100+tempoInt[2]*10+tempoInt[3];
}
break;
Figura 13: Trecho do código-fonte que recebe e altera o tempo de integração
O valor enviado pela interface gráfica é recebido no objeto OUTPacket.
Passamos esse valor para um vetor de caracteres. Após isso, esse valor é convertido para
um vetor de inteiros. Para isso, basta subtrairmos o valor 48 de cada caractere, pois na
tabela ASCII eles são representados por valores inteiros deslocados de quarenta e oito
unidades. Para termos o valor total na base decimal multiplicamos os valores de cada
caractere por mil, cem, dez respectivamente e somamos os resultados.
3.5 – O Uso do Parâmetro pelo Sensor CMOS
Como já foi dito na Seção 2.7 o tempo de integração do fotodiodo não pode
variar de uma leitura pra outra, por isso todos os sinais de controle são executados
dentro de uma interrupção do microcontrolador. Assim, não há interferência de outros
processos executados no PIC.
A interrupção é executada no arquivo “main.c” dentro da função
YourHighPriorityISRCode. Para esperar o tempo de integração utilizamos a função do
compilador de delay. Ela espera um certo número de instruções (TCY), onde cada
18
instrução dura quatro ciclos de clock (detalhes sobre esta abordagem serão dados no
Capítulo 4). O microcontrolador trabalha com uma frequência de clock de 48 MHz.
A princípio, foi estabelecido que os valores do tempo de integração seriam
múltiplos inteiros de cinquenta. Esta decisão foi necessária, pois é preciso estabelecer o
tamanho do passo que será dado para gerar o atraso especificado. Assim, foi feito um
laço que executa a função Delay10TC(60), ou seja, 50 µs de atraso a cada repetição até
que o valor desejado seja atingido.
Declaramos a variável valorTempoInt como do tipo extern. Assim, trazemos o
valor que é atribuído a ela no arquivo “user.c” para ser utilizado dentro da interrupção.
A Figura 14 mostra como é gerado o tempo de integração. Este trecho é inserido dentro
do código da interrupção.
extern int valorTempoInt
int dividendo=0;
int passo;
divindendo=(valorTempoInt)/50;
for(passo=0;passo<dividendo;passo++)
Delay10TCYx(60);
Figura 14: Trecho do código-fonte que gera o tempo de integração
O laço que executa a função do compilador de delay e verifica se o tempo de
integração atingiu o valor desejado é localizado entre os comandos P1_Off() e P2_Off().
O ideal seria que somente a função delay estivesse entre os dois comandos. Porém,
como desejamos implementar uma faixa de valores, isso não foi possível.
Assim, espera-se uma distorção no valor gerado dentro do circuito devido ao
tempo de execução dos comandos de verificação e incremento do passo. Quanto maior o
valor definido no arquivo-texto, maior será a quantidade de repetições destes comandos
e, portanto, maior o erro associado a ele.
19
Capítulo 4
Resultados
Neste capítulo, serão apresentados os resultados dos testes feitos em laboratório.
Mostraremos os valores do tempo de integração no sistema antigo e no atual.
Desejamos verificar que o intervalo entre os sinais de controle que fazem a amostragem
do fotodiodo (P1 e P2) no sistema antigo é de 800 µs e que no sistema atual este
intervalo de tempo assume os valores lidos do arquivo-texto “tempoIntegracao.txt”.
Para isso, foi utilizado um osciloscópio que nos mostra as tensões nos pinos do circuito
integrado que implementa estes sinais ao longo do tempo.
4.1 – O Sistema Anterior
Em primeiro lugar, para realizarmos os testes necessários, foi preciso descobrir
as configurações que foram estabelecidas para relacionar os pinos do PIC aos sinais
gerados no circuito de controle. Esta relação é definida em um dos arquivos escritos no
firmware do microcontrolador.
No projeto que já existia, o arquivo “HardwareProfile – PICDEM FSUSB.h”
contém as definições das portas do PIC e os sinais atribuídos a elas. A Figura 15 mostra
o trecho do código-fonte do arquivo em que P1 e P2 são configurados.
#define RESET1 PORTDbits.RD7 // Reset na saída D7.
#define P1 PORTDbits.RD6 // P1 na saída D6.
#define P2 PORTDbits.RD5 // P2 na saída D5.
#define Switch1 PORTDbits.RD2 // S1 na saída D2.
#define Switch2 PORTDbits.RD3 // S2 na saída D3.
#define Switch3 PORTDbits.RD4 // S3 na saída D4.
Figura 15: Trecho do código-fonte em que P1 e P2 são configurados
Pela figura, podemos concluir que os sinais de controle que fazem a amostragem
do fotodiodo devem ser observados nas portas RD6 e RD5, respectivamente. Para
descobrir quais pinos representam estas portas, consultamos o datasheet do PIC
20
18LF4550. A Figura 16 mostra a pinagem do chip do microcontrolador. Nela
verificamos que os pinos 29 e 28 representam, respectivamente, P1 e P2.
Figura 16: Pinagem do PIC 18LF4550
Desejamos verificar com o osciloscópio o comportamento dos sinais P1 e P2 ao
longo do tempo. Para isso, na interface gráfica de usuário, selecionamos o modo
“Viewfinder”. Isso faz com que estes sinais sejam gerados repetidamente e possam ser
observados através do equipamento de medidas nos respectivos pinos do PIC.
Esperamos encontrar algo semelhante ao que foi descrito na Seção 2.2, onde são
detalhados os sinais de controle do fotodiodo. A Figura 17 mostra a imagem dos sinais
de controle no tempo, obtida com o osciloscópio para o sistema antigo, onde o valor do
tempo de integração é fixo e equivale a 800 µs.
Figura 17: Tempo de integração é de 800 µs
21
Podemos notar que o valor medido é precisamente o que é esperado. Isto ocorre
porque somente os comandos da função do compilador de delay são executados entre
P1_Off() e P2_Off(), como podemos observar na Figura 18.
P1_Off();
Delay10TCYx(120);//100us
Delay10TCYx(120);//100us
Delay10TCYx(120);//100us
Delay10TCYx(120);//100us
Delay10TCYx(120);//100us
Delay10TCYx(120);//100us
Delay10TCYx(120);//100us
Delay10TCYx(120);//100us
P2_Off();
Figura 18: Trecho do código-fonte onde é gerado o tempo de integração de 800 µs
A função é chamada oito vezes seguidas, gerando um atraso de 100 µs a cada
execução. O tempo desejado foi gerado desta forma por escolha do autor do projeto
anterior [1]. Além desta solução, poderia ter sido usado o temporizador do
microcontrolador para gerar este atraso. Outra forma seria usar a própria função do
compilador de delay, chamada apenas uma vez, com o valor do argumento passado a ela
gerando o tempo desejado. Neste momento, as fontes de erro associadas a cada uma
destas soluções alternativas não são bem conhecidas no nosso laboratório. Neste
trabalho não serão analisadas estas possíveis soluções.
4.2 – O Novo Sistema
Com o projeto já modificado, desejamos verificar se o tempo de integração,
intervalo entre os sinais de controle que fazem a amostragem do fotodiodo P1 e P2,
estão assumindo os valores que são definidos no arquivo-texto.
Para isso, o procedimento realizado é o mesmo descrito na Seção 4.1 com a
diferença que aqui criamos o arquivo “tempoIntegração.txt” e escrevemos nele o valor
que desejamos observar. Nas Figuras 19 a 25 temos imagens capturadas com o
osciloscópio para os seguintes valores de tempo de integração: 100 µs, 500 µs, 800 µs,
1200 µs, 1800 µs, 2500 µs e 3000 µs respectivamente.
22
Figura 19: Tempo de Integração é de 126 µs
Figura 20: Tempo de integração é de 544 µs
Figura 21: Tempo de integração é de 860 µs
23
Figura 22: Tempo de integração é de 1280 µs
Figura 23: Tempo de integração é de 1910 µs
Figura 24: Tempo de integração é de 2640 µs
24
Figura 25: Tempo de integração é de 3160 µs
Podemos perceber uma discrepância entre os valores medidos e os definidos no
arquivo-texto. Esta diferença era esperada devido ao tempo de execução do laço de
repetição que gera o tempo de integração (soluções alternativas, como as mencionadas
no final da Seção 4.1, não foram investigadas). Quanto maior o valor do tempo de
integração maior será a diferença absoluta encontrada. Isto ocorre devido à verificação e
ao incremento do passo que acontece mais vezes para valores maiores.
Notamos também que já para o valor de 800 µs o erro no valor supera o tamanho
do passo. Para o valor limite de 3000 µs a diferença é de mais de cinco por cento ou três
vezes o passo de 50 µs. Isto não é desejado e torna o sistema pouco confiável.
Para reduzir o efeito percebido nos exemplos acima, devemos aumentar o
tamanho do passo, ou seja, o valor do atraso gerado em cada execução da função delay.
Porém, ao fazermos isso diminuímos a quantidade de valores que podem ser definidos
no arquivo-texto e implementados no sistema de controle do sensor CMOS.
4.3 – Aumentando o Tamanho do Passo
Pelos motivos expostos na Seção 4.2 decidimos aumentar o tamanho do passo de
50 µs para 100 µs e realizar as mesmas metidas feitas anteriormente. Essa escolha foi
puramente intuitiva e levou em consideração apenas os valores que podem ser gerados
através deste passo. Nas Figuras 26 a 32 podemos observar os resultados medidos para
os valores definidos no arquivo “tempoIntegração.txt” de: 100 µs, 300 µs, 500 µs, 800
µs, 1200 µs, 1800 µs, 2500 µs e 3000 µs respectivamente.
25
Figura 26: Tempo de integração é de 106 µs
Figura 27: Tempo de integração é de 512 µs
Figura 28: Tempo de integração é de 820 µs
26
Figura 29: Tempo de integração é de 1230 µs
Figura 30: Tempo de integração é de 1840 µs
Figura 31: Tempo de integração é de 2560 µs
27
Figura 32: Tempo de integração é de 3060 µs
Perceba como o erro encontrado diminui significativamente. Agora, para toda a
faixa de valores possíveis, a diferença entre os valores definidos no arquivo-texto e os
valores medidos é sempre menor que o tamanho do novo passo. Para o maior valor
implementado, que é de 3000 µs, o acréscimo é de apenas dois por cento em relação ao
valor esperado.
É possível que exista um valor ótimo para o tamanho do passo e um método para
se chegar a este valor. Porém, devido ao limite de tempo para a conclusão, este trabalho
limitou-se à implementação da forma aqui apresentada.
Outra forma de variar o valor do tempo de integração, dentro da faixa desejada,
também poderia ser pensada, de maneira a eliminar o uso do laço de repetição e
consequentemente o erro associado a ele. Minha sugestão seria usar a própria função do
compilador de delay recebendo como entrada o valor necessário para gerar o intervalo
de tempo desejado. Embora a função Delay10TCYx() aparente possuir um limite para o
valor do argumento passado a ela, existe a função Delay100TCYx() para implementar
esses intervalos maiores, mas também com outros erros possíveis. O estudo desta
solução poderá ser feito em investigações posteriores à conclusão deste trabalho.
28
Capítulo 5
Conclusões
Ao final deste trabalho podemos concluir que o projeto atingiu o principal
objetivo proposto, como pôde ser visto no Capítulo 4. O sistema agora funciona com o
tempo de integração para o fotodiodo, intervalo entre os sinais P1 e P2, assumindo o
valor estabelecido no arquivo-texto “tempoIntegracao.txt”.
Ao longo do projeto, como já foi dito, a maior dificuldade encontrada talvez
tenha sido o entendimento do sistema que já existia e que foi base para este novo
projeto. Esta etapa foi a que consumiu o maior tempo deste trabalho.
A solução encontrada foi simples e coerente com o sistema existente. Sua
implementação em si foi bastante rápida, com uma ou outra tentativa frustrada. Houve
alguma dificuldade para adequar o sistema físico e realizar os testes no laboratório,
devido à falta de familiaridade com o circuito e os programas utilizados no projeto
anterior. Isso demandou um certo tempo de aprendizado no laboratório e resultou em
algumas tentativas mal sucedidas.
Também durante a validação do método percebemos, através dos resultados
medidos, que a especificação inicial para a variação dos valores possíveis para o tempo
de integração não gerou resultados satisfatórios. O passo inicial de 50 µs resultou em
erros muito grandes para os valores medidos. Assim, adotamos um passo de 100 µs que
apesar de diminuir a quantidade de valores possíveis tornou o erro bem menor.
Seria interessante, como sugestão para um trabalho futuro, o desenvolvimento
de um sistema que gere automaticamente o tempo de integração ideal para fotodiodo e o
escreva no arquivo-texto. Este valor seria baseado nas condições de iluminação e
contraste da imagem a ser capturada pelo sensor de imagens CMOS.
Além disso, outra sugestão seria diminuir o erro encontrado, durante as medidas
realizadas, nos valores gerados para o tempo de integração. Para isso, seria necessário a
implementação de um método que elimine o laço de repetição para produzir o intervalo
de tempo desejado, como é o caso das soluções sugeridas no final da Seção 4.3.
29
Bibliografia
[1] F. D. V. R. de Oliveira, Circuito Integrado para Compressão de Imagens no Plano
Focal utilizando Quantização Vetorial e DPCM, Projeto Final de Graduação,
DEL/EPOLI/UFRJ, janeiro de 2012.
[2] Hugo L. Haas, Projeto de Circuitos para Compressão de Imagens no Plano Focal
de Câmeras CMOS, Dissertação de Mestrado, DEL/EPOLI/UFRJ, janeiro de 2012.
[3] G. D. Boreman, Modulation Transfer Function in Optical and Eletro-Optical
Systems, 1st ed. Bellingham, Washington: SPIE, 2001.
[4] Leando d’Oliveira do Rêgo, Configuração de um Sensor de Imagens CMOS com
Compressão de Imagens no Plano Focal para Operação em Modo de Vídeo, Projeto
Final de Graduação, DEL/EPOLI/UFRJ, abril de 2013.
[5] Julio Preuss, Qual a diferença entre CCD e CMOS? Disponível em
http://www.techtudo.com.br/platb/fotografia/2011/03/21/qual-a-diferenca-entre-ccd-e-
cmos/ Acesso em 11 de agosto de 2015.
[6] https://www.microchip.com/
[7] http://www.cplusplus.com/