Ov7670camera not working

wire:

applied pull up resistor + voltage divider on SIOD, SIOC (component command IO + clock)
used 5kohm for pull up, + 10kohm resistors for dividing

used voltage divider on systemclock out(XCLK)
also used 5kohm / 10kohm for dividing

here is my simple code

const int PIN_I_SIOC = 0;
const int PIN_IO_SIOD = 1;

const int PIN_O_VSYNC = 3;
const int PIN_O_HREF = 2;

const int PIN_O_PCLK = 5;
const int PIN_I_XCLK = 4;

const int PIN_O_D0 = 6;
const int PIN_O_D1 = 7;
const int PIN_O_D2 = 8;
const int PIN_O_D3 = 9;
const int PIN_O_D4 = 10;
const int PIN_O_D5 = 11;
const int PIN_O_D6 = 12;
const int PIN_O_D7 = 13;


bool pixel_triggered;
bool href_triggered;

String stacked_pixel;

void setup() {
  pinMode(PIN_I_SIOC, INPUT);
  pinMode(PIN_IO_SIOD, INPUT);

  pinMode(PIN_O_VSYNC, INPUT);
  pinMode(PIN_O_HREF, INPUT);

  pinMode(PIN_O_PCLK, INPUT);
  pinMode(PIN_I_XCLK, OUTPUT);
  analogWrite(PIN_I_XCLK, 1024 / 2);

  pinMode(PIN_O_D0, INPUT);
  pinMode(PIN_O_D1, INPUT);
  pinMode(PIN_O_D2, INPUT);
  pinMode(PIN_O_D3, INPUT);
  pinMode(PIN_O_D4, INPUT);
  pinMode(PIN_O_D5, INPUT);
  pinMode(PIN_O_D6, INPUT);
  pinMode(PIN_O_D7, INPUT);

  pixel_triggered = false;
  href_triggered = false;
  stacked_pixel = "";
  Serial.begin(921600);
}

uint8_t read() {
  uint8_t returnval = 0;
  returnval |= digitalRead(PIN_O_D0) << 0;
  returnval |= digitalRead(PIN_O_D1) << 1;
  returnval |= digitalRead(PIN_O_D2) << 2;
  returnval |= digitalRead(PIN_O_D3) << 3;
  returnval |= digitalRead(PIN_O_D4) << 4;
  returnval |= digitalRead(PIN_O_D5) << 5;
  returnval |= digitalRead(PIN_O_D6) << 6;
  returnval |= digitalRead(PIN_O_D7) << 7;
  return returnval;
}

void loop() {
  int pclk = digitalRead(PIN_O_PCLK);
  int href = digitalRead(PIN_O_HREF);

  if (href == LOW) {
    if (href_triggered) {
      Serial.println("total: " + stacked_pixel);
      href_triggered = false;
      pixel_triggered = false;
      stacked_pixel = "";
    } else {
      // Serial.println("href==LOW, continue..");
      pixel_triggered = false;
      href_triggered = false;
      stacked_pixel = "";
    }
    return;
  } else {
    href_triggered = true;
  }

  if (pclk == LOW) {
    pixel_triggered = false;
  } else {
    /*high*/
    if (!pixel_triggered) {
      pixel_triggered = true;
      /*read pixel*/
      stacked_pixel += String(read()) + "|";
      Serial.println("pixel triggered");
    }
  }
}

it print something on serial only when I touching the wire

here is timing explanation on datasheet

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.