quarta-feira, 1 de maio de 2013

Review OV7670 300KP VGA Camera

Introdução:

Esse modulo de câmera do modelo OV7670 é bem complexo, não é muito simples criar interfaces com esse dispositivo utilizando um microcontrolador de 8/16 bits, qualquer processamento de imagem/cor necessita de um tratamento e um código para processar isso tudo.
O que estamos mostrando aqui esta disponível na internet, o assunto é pouco comentado e tem pouca informação de como fazer, já que existem diferentes tipos de módulos como esse, com diferentes funcionalidades.
Esse post é mais apara aguçar as infinitas possibilidades!



Características:
  • Modelo: OV7670
  • Cor: preto + azul
  • Material: PCB + plástico + metal
  • Matriz fotossensível: 640 x 480
  • Tensão: 2.5V - 3.0V;
  • Potência de operação: 60mW/15fpsVGAYUV;
  • Modo Sleep: <20 uA;
  • Temperatura de Operação: -30 a 70 ° C.
  • Formato de Saída: YUV/YCbCr4: 2 2 RGB565/555/444 GRB4: 02:02 Raw RGB de Dados (8 dígitos); 
  • Tamanho da lente: 1/6 ", Ângulo de visão: 25 graus
  • Max frame Rate:. 30fps VGA 
  • Sensibilidade: 1,3 V / (Lux-sec )
  • Signal to Noise Ratio: 46 dB;
  • DynamicRange: 52 dB
  • Modo de Browse: por linha; exposição eletrônico: 1-510 linha
  • Cobertura Pixel: 3.6um x 3.6um
  • Alta sensibilidade para a operação com pouca luz
  • Baixa tensão de operação para aplicação embarcada, interface SCCB padrão compatível com a interface I2C; Raw RGB, RGB (GRB4: 2:2, RGB565/555/444), YUV (4:02:02) e , YCbCr (04:02:02) formato de saída
  • Suporte VGA, CIF e de CIF a 40 x 30, formato, método Pixel Vario para sub-amostragem; 
  • Auto Controle de Imagem: AEC, AGC, AWB, ABF, ABLC, Controle de Qualidade da Imagem : A saturação de cor, matiz, gama, nitidez e anti-blooming; ISP inclui redução de ruído e correção do ruido
  • Suporte image scaling; correção sombreamento Lens; Flicker 50/60Hz detecção automática; 
  • Cor de saturação com ajuste automático
  • Borda de aprimoramento com ajuste automático



Pinos:
SignalsDescriptionSignalsDescription
+3.3V+3.3V from shield+5V+5V from Arduino
D13.3V logic version of D1D03.3V logic version of D0
D33.3V logic version of D3D23.3V logic version of D2
D53.3V logic version of D5D43.3V logic version of D4
D73.3V logic version of D7D63.3V logic version of D6
D93.3V logic version of D9D83.3V logic version of D8
+3.3V+3.3V from shieldGNDGround
IO1Expansion GPIO1IO0Expansion GPIO0
D113.3V logic version of D11D133.3V logic version of D13
IO2Expansion GPIO2D123.3V logic version of D12
IO3Expansion GPIO3D103.3V logic version of D10
IO5Expansion GPIO5IO4Expansion GPIO4
A03.3V logic version of A0A13.3V logic version of A1
A23.3V logic version of A2A33.3V logic version of A3
A43.3V logic version of A4A53.3V logic version of A5
GNDGroundGNDGround

O Arduino usa as IOs para emular o barramento paralelo para acessar os registros internos ArduChip  e registros LCD externo. O usuário deve criar uma instância da classe ArduCAM e UTFT que utilizam barramento paralelo antes da rotina de instalação. A função de cada pino:



SignalsFunctions
D[7:0]Parallel bus data[7:0]
A0Parallel bus RD, active low
A1Parallel bus WR, active low
A2Parallel bus RS
A3Parallel bus CS, active low
A4I2CSDA for Camera Module
A5I2CSCL for Camera Module
D10LCD chipselect, active low
D9SD/TF chipselect, active low
D11SPI MOSI
D12SPI MISO
D13SPI SCLK

Essa parte é um código para a demonstração do instanciar o ArduCAM e classe UTFT.
01#define SD_CS 9
02
03//UTFT(byte model, int RS, int WR, int RD, int CS)
04UTFT myGLCD(ITDB32S,A2,A1,A0,10);  
05//ArduCAM(byte model,int RS, int WR, int RD, int CS)
06ArduCAM myCAM(OV7670,A2,A1,A0,A3);
07
08void setup()
09{
10  // Setup I2C port
11  Wire.begin();  
12  if (!SD.begin(SD_CS))
13  {
14    while (1);
15  }
16  // Setup ArduChip
17  myCAM.InitCAM();
18  // Setup the LCD
19  myGLCD.InitLCD();
20  ShowStart();
21  delay(2000);
22}
Registradores ArduChip:
ArduChip é o núcleo do ArduCAM, que incorpora um FPGA Altera MAXII CPLD EPM240 como processador principal. A principal tarefa do ArduChip é fazer o real tempo de transferência DMA entre o módulo da câmera e o display 3.2 "LCD e interagir como Arduino, Camera e LCD. Ele também fornece AVR como expansão GPIO, ele pode ser configurado como entrada ou saída e resolver o problema dos recursos limitados IO na placa do Arduino. Os GPIOs pode ser usado como gatilho e desencadear outros eventos(no Arduino por exemplo)
AddressNameModeDescription
0×00DDRR/WData Direction RegisterBit[7:6]: ReservedBit[5]: IO5 input/output selectionBit[4]: IO4 input/output selectionBit[3]: IO3 input/output selectionBit[2]: IO2 input/output selectionBit[1]: IO1 input/output selectionBit[0]: IO0 input/output selection1 = output, 0 = input
0×01PORTR/WOutputPortRegisterThe value will reflect on the Pin IO0~IO6 correspondinglyBit[7:6]: ReservedBit[5]: IO5 output valueBit[4]: IO4 output valueBit[3]: IO3 output valueBit[2]: IO2 output valueBit[1]: IO1 output valueBit[0]: IO0 output value1 = High, 0 = Low
0×03MODER/WBus ModeDetermine who is owner of the data bus, only one owner is allowed.Bit[7:3]: ReservedBit[2]: MCU read LCD busBit[1]: Camera write LCD busBit[0]: MCU write LCD bus
0×80PINROInput Pin RegisterThe value will reflect the IO0~IO6 Pin status correspondinglyBit[7:6]: ReservedBit[5]: IO5 input valueBit[4]: IO4 input valueBit[3]: IO3 input valueBit[2]: IO2 input valueBit[1]: IO1 input valueBit[0]: IO0 input value1 = High, 0 = Low
0×81TriggerROTrigger input RegisterBit[7:2]: ReservedBit[1]: Capture button status, 0 = pressed, 1 = releasedBit[0]: Frame start signal, equal to VSYNC
0×82Revision IDROBit[7:6]: Revision integer partBit[5:0]: Revision decimal partFirst revision released ID is 0×40, means V1.00


ArduCAM GPIO demo(escrevendo):

01// ArduCAM GPIO Write demo (C)2012 Lee
03// This program is a demo of how to use GPIOs in ArduCAM to turn on/off
04// LEDs or trigger any ohter devices.
05//
06// This program requires the ArduCAM library.
07//
08#include <Wire.h>
09#include <ArduCAM.h>
10#include <avr/pgmspace.h>
11#include <SoftwareSerial.h>
12
13#define ARDUCHIP_DDR       0x00  //GPIO direction register
14#define ARDUCHIP_PORT      0x01  //GPIO output register
15#define ARDUCHIP_PIN       0x80  //GPIO input register
16//ArduCAM(byte model,int RS, int WR, int RD, int CS)
17ArduCAM myCAM(OV7670,A2,A1,A0,A3);
18//Uncomment if use software serial
19SoftwareSerial mySerial(8, 9); // RX, TX
20void setup()
21{
22  mySerial.begin(9600);
23  mySerial.println("hello");
24  myCAM.write_reg( ARDUCHIP_DDR, 0xff);     //Set GPIO as output
25
26}
27
28void loop()
29{
30  uint8_t val = 0xff;
31  uint8_t read_val;
32  while(1)
33  {
34    delay(1000);
35    myCAM.write_reg( ARDUCHIP_PORT, val);       //Output Register
36    val = val ^ 0xff;                           //toggle output value
37    read_val = myCAM.read_reg(ARDUCHIP_PORT);   //Read it back
38    mySerial.write(read_val);
39  }
40  return;
41
42}



 ArduCAM GPIO demo(lendo):
01// ArduCAM GPIO Read demo (C)2012 Lee
03// This program is a demo of how to use GPIOs in ArduCAM to read
04// trigger signals from any ohter devices.
05//
06// This program requires the ArduCAM library.
07//
08#include <Wire.h>
09#include <ArduCAM.h>
10#include <avr/pgmspace.h>
11#include <SoftwareSerial.h>
12
13#define ARDUCHIP_DDR       0x00  //GPIO direction register
14#define ARDUCHIP_PORT      0x01  //GPIO output register
15#define ARDUCHIP_PIN       0x80  //GPIO input register
16
17//ArduCAM(byte model,int RS, int WR, int RD, int CS)
18ArduCAM myCAM(OV7670,A2,A1,A0,A3);
19//Uncomment if use software serial
20SoftwareSerial mySerial(8, 9); // RX, TX
21void setup()
22{
23  mySerial.begin(9600);
24  mySerial.println("hello");
25  myCAM.write_reg( ARDUCHIP_DDR, 0x00);     //Set GPIO as input
26}
27
28void loop()
29{
30  uint8_t temp;
31  while(1)
32  {
33    temp = myCAM.read_reg(ARDUCHIP_PIN);      //Read from GPIO
34    mySerial.write(temp);                  //Send value read from GPIO
35    delay(1000);
36  }
37  return;
38
39}



2 comentários:

  1. Bom dia! É possivel você postar a conexões deste shield com arduino uno?

    ResponderExcluir
    Respostas
    1. Fala parceiro, com arduino so funciona usando esse outro modulo em conjunto http://www.arducam.com/

      Excluir