Explorando o módulo OV7670-FIFO: Interface SCCB

VGA palette with black borders
Este post faz parte da série Explorando o módulo OV7670-FIFO. Leia também os outros posts da série:

Olá, caro leitor. Neste artigo, apresentarei os procedimentos necessários para acessar o módulo de câmera VGA OV7670. O artigo será dividido em duas partes, sendo a segunda referente ao processo para capturar imagens.

Módulo de câmera VGA

O módulo de câmera VGA utiliza o sensor de CMOS OV7670. As principais características desse sensor são indicadas a seguir [1]:

  • Resolução máxima: 640 x 480;
  • Taxa de transferência: Máximo de 30 fps em modo VGA;
  • Tensão de operação: 2.5 V à 3.0 V;
  • Alta sensibilidade em ambientes com pouca luz;
  • Interface SCCB (Serial Camera Control Bus), compatível com interface I2C;
  • Suporta VGA, CIF – Formatos de saída: YUV/YCBCr 4:2:2, RGB 565/555, GRB 4:2:2, RAW RGB Data;
  • Controle automático de funções de imagem;
  • Controle automático de qualidade de imagem, como saturação, matiz, gama, nitidez e anti-blooming;
  • Auto detecção de flicker (50/60 Hz);
  • Tamanho da lente: 1/6 ”;
  • Ângulo de visão: 24 graus.

As características descritas são referentes ao sensor de imagem. Outras informações podem ser obtidas tanto no Application Note quanto no Datasheet do OV7670.

Em relação ao módulo, duas versões podem ser encontradas. A primeira utiliza somente o sensor OV7670 e apresenta os pinos para conexão entre o sensor e outro dispositivo. Essa versão é mostrada na Figura 1.

Câmera VGA - OV7670
Figura 1: Câmera VGA – OV7670 [1].

A pinagem do módulo é mostrada na Figura 2.

Pinagem do módulo de câmera VGA
Figura 2: Pinagem do módulo de câmera VGA [1].

Já na segunda versão, um buffer (FIFO – First In First Out) é utilizado para armazenar os dados do sensor CMOS. O dispositivo utilizado é o CI AL422, próprio para tratar sinais de vídeo. Essa versão é mostrada nas Figura 3 e 4.

Módulo de câmera VGA + FIFO - Frente.
Figura 3: Módulo de câmera VGA + FIFO – Frente.
Módulo de câmera VGA + FIFO - Verso.
Figura 4: Módulo de câmera VGA + FIFO – Verso.

A pinagem do módulo é mostrada na Figura 5.

Pinagem do módulo de câmera VGA + FIFO.
Figura 5: Pinagem do módulo de câmera VGA + FIFO.

A diferença da pinagem entre os módulos é que o segundo apresenta sinais de controle do módulo FIFO.

Interface de Comunicação SCCB

Independente do módulo, a interface de comunicação com o sensor é a mesma. Tal interface é chamada de SCCB e é compatível com o protocolo I2C. Assim, dois pinos são utilizados na comunicação, sendo um para a sincronização e outro para transferência de dados. Essa configuração é ilustrada na Figura 6.

Sistema SCCB.
Figura 6: Sistema SCCB [2].

Para estruturar a interface SCCB foram definidas cinco funções:

  • SCCB_Init: Determina condição inicial dos sinais de controle da interface SCCB;
  • SCCB_Start: Inicia comunicação;
  • SCCB_Stop: Finaliza comunicação;
  • SCCB_ReadByte: Faz a leitura de um byte;
  • SCCB_WriteByte: Escreve um byte.

Tais funções foram declaradas no arquivo de cabeçalho SCCB.h. Cabe ressaltar que o projeto pode ser encontrado neste link.

O sinal SIO_C é controlado pelo dispositivo master, indicando a transferência de 1 bit quando o sinal passa do nível lógico 0 para 1. Quando o barramento está ocioso, o sinal SIO_C deve permanecer em nível lógico 1. Assim, quando uma transferência é iniciada, o sinal SIO_C é colocado em nível lógico 0. Considerando isso, a condição dos sinais é definida na função SCCB_INIT.

O início da transmissão é dado quando o sinal SIO_D passa do nível lógico 1 para 0, e na sequência o sinal de clock também vai a zero. Já o final da transmissão ocorre quando o sinal SIO_D é posto em nível lógico 1 enquanto o sinal SIO_C está em nível lógico 1. Essas duas situações são ilustradas na Figura 7.

Transferência de dados na interface SCCB.
Figura 7: Transferência de dados na interface SCCB [2].

Essas funções são usadas pelo módulo OV7670 para as operações de escrita e leitura dos registradores de controle. Para tal, foram definidas as funções de transferência de dados entre os dispositivos.

Registradores de Controle

Com a interface SCCB implementada é possível configurar os registradores de controle do chip para o modo de operação desejado. Essas configurações são realizadas a partir de uma sequência correta de operações, chamadas ciclos de transmissão, que são classificadas da seguinte maneira:

  • Ciclo de escrita dividido em três fases;
  • Ciclo de escrita dividido em duas fases;
  • Ciclo de leitura dividido em duas fases.

De modo geral, cada fase de transmissão envolve a transferência de 8 bits de dados e um nono bit X, com função Don’t Care. Além disso, na primeira fase da transmissão ocorre a escrita do endereço do dispositivo no barramento SCCB.

Ciclo de escrita dividido em três fases

Esse ciclo é utilizado para escrever em um registrador do dispositivo. Assim, a segunda informação transferida corresponde ao endereço do registrador seguido do valor que será armazenado.

SCCB 3W
Figura 8: Ciclo de escrita dividido em três fases.

Ciclo de escrita e leitura dividido em duas fases

Esse procedimento é utilizado para indicar o endereço de um registrador que será acessado para função de leitura. Cabe ressaltar que essa etapa ocorre no ciclo de escrita dividido em três fases. 

SCCB 2W
Figura 9: Ciclo de escrita [2].

Para ler o valor do registrador é necessário determinar novamente o ID do dispositivo e, em seguida, capturar o valor.

SCCB 2R
Figura 9: Ciclo de leitura [2].

Próximo artigo

No próximo artigo será apresentado o procedimento para capturar um frame do módulo OV7670 utilizando o buffer AL422. Além do controle o buffer, a interface SCCB será utilizada para realizar a configuração dos registradores de controle do módulo OV7670.

O projeto pode ser acessado neste link.

Saiba mais

Aplicação com câmera usando Qt5

Calibração de câmeras – Parte 1

Utilizando Câmeras em Sistemas Linux Embarcado

Referências

[1] Módulo câmera VGA OV7670

[2] Serial Camera Control Bus Functional Specification

Imagem destacada: https://en.wikipedia.org/wiki/Mode_13h#/media/File:VGA_palette_with_black_borders.svg

Outros artigos da série

Explorando o módulo OV7670-FIFO: Video Frame Buffer >>
Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Comentários:
Notificações
Notificar
guest
3 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Leonardo
Leonardo
16/09/2019 16:39

olá, vamos ver se voce consegue me ajudar, preciso fazer reconhecimento facial com essa câmera, acoplada a um Arduíno uno, é possível? algum site que o senhor indica?

Gustavo
Gustavo
Reply to  Leonardo
13/11/2019 04:06

É possível sim, porem o arduino possibilita a captura de um frame a cada 3 – 5 segundos. Utilizei o arduino junto com o modulo OV7670 para adquirir e enviar os dados para o PC.
Checa esse link:
https://github.com/tensorflow/models/tree/master/research/object_detection

Utilizei TensorFlow para a detecção de objetos e pessoas, voce pode treinar uma rede neural para fazer o reconhecimento facial.

Thiago
Thiago
13/07/2018 01:34

Estou tentando ha um tempão botar pra funcionar os módulos OV9655 e OV2640. Consegui com resolução 320×240. Acho que a documentação das câmeras é bem limitada e de acordo com algumas pessoas as datasheets disponíveis estão erradas. O fabricante nunca retorna quando solicito guias de usuário e datasheets. Agora, estou tentando com resoluções maiores. Para isso, estou usando uma memoria externa. Aguardo a próxima parte pra ver se entendo melhor alguns pontos que não ficaram tao claros pra mim enquanto trabalhava no projeto.

Talvez você goste:

Nenhum resultado encontrado.

Séries



Outros da Série

Menu