I know that there is a lot in internet (<http://forum.arduino.cc/index.php?topic=159557.0> for example) about OV7670 and I read a lot about it, but seems something is missing.

First of all I took a look into the way how can we read pixel by pixel from the camera to build the rectangular 600 X 480 image, and this was quite easy to understand considering HREF, VSYNCH and PCLOCK described on documentation here: <http://www.voti.nl/docs/OV7670.pdf>. I understand XCLOCK as an input I need to give to OV7670 as a kind of cycle controller and RESET would be something to reset it.

So at this point I thought that the functionality of such camera would be covered by wiring the following pins:

* **D0..D7** - for data (pixel) connected to arduino digital pins 0 to 7 as INPUT on arduino board
* **XCLK** - for camera clock connected to arduino digital pin 8 as OUTPUT from arduino board
* **PCLK** - for pixel clock connected to arduino digital pin 9 as INPUT on arduino board
* **HREF** - to define when a line starts / ends connected to arduino digital pin 10 as INPUT on arduino board
* **VSYCH** - to define when a frame starts / ends connected to arduino digital pin 11 as INPUT on arduino board
* **GRD** - groud connected to arduino GRD
* **3V3** - 3,3 INPUT connected to arduino 3,3v
* **RESET** - connected to arduino RESET
* **PWDN** - connected to arduino GRD

The implementation for such approach from my point of view would be something like:
Code:

```
for each loop function do
   write high to XCLK

   if VSYNCH is HIGH 
      return;

   if HREF is LOW 
      return;

   if lastPCLOCK was HIGH and currentPCLOCK is LOW 
      readPixelFromDataPins();

end for

```

My `readPixelFromDataPins()` basically read just the first byte (as I'm just testing if I can even read something from the camera), and it is written as follows:

Code:

```
byte readPixelFromDataPins() {
  byte result = 0;
  for (int i = 0; i < 8; i++) {
    result = result << 1 | digitalRead(data_p[i]);
  }
  return result;
}

```

In order to check if something is being read from the camera I just print it to the Serial 9600, the byte read from data pins as a number. But currently I'm receiving only zero values. The code I'm using to retrieve an image is stored here: <https://gist.github.com/franciscospaeth/8503747>.

Did somebody that makes OV7670 work with Arduino already figure out what am I doing wrong? I suppose I'm using the XCLOCK wrongly right? What shall I do to get it working?

I searched a lot and I didn't found any SSCCE (<http://sscce.org/>) for this camera using arduino, if somebody have it please let me know.

---

This question is present on arduino forum (<http://forum.arduino.cc/index.php?topic=211741.0>) too.