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

