Very sorry to double post but this is important.Previously I have told you all that you would need either external spi ram or the fifo version to get data. For the most part that is true.Today I decided to get out the 0v7670 module (I admit I haven't done anything with it for a while) and write some code that only uses only the ov7670 and the buffer for 5v to 3.3v conversion. What the code does is it will send the data from the ov7670 to uart and you can receive it using your pc.https://github.com/ComputerNerd/ov7670-no-ram-arduino-unoIt also generates a 8mhz clock on pin 11 that you get from 5v to 3.3v and plug into the ov7670.I called it no-ram but I just mean external ram.This should be a simpler example of the ov7670 using newer register functions.Tell me what you think. One thing I think people seem to be forgetting is that I am always open to pull requests.
To answer your questions.1. You could try a voltage resistor divider. I have not tested it myself but it won't hurt to try. Also you need pulls ups for i2c. The resistor value does matter. I have found 10k to work just fine, I also remember testing 4.7k and that worked fine too. However using a resistor that has too much or too little does not work for example when I tried a 1k it would not work. The two resistors will be a pull up resistor to 3.3v. The way this works is you plug in the i2c pins to 3.3v using the resistor and then plug that into the ov7670 all wired up together. Another thing is to disable the internal pull up resistors, they are off by default however the arduino wiring library enables them please follow my instructions on how to disable the internal pull up resistors if using the wiring library.
2. When I first got the ov7670 I also made that mistake and it works just fine. I do not think this will cause any damage I am more concerned about the internal pullup resistors causing damage however when I first got the module (if I remember right) I did not disable the internal pull resistors and the ov7670 still works but when enabled I do not remember having any luck with writing and reading resistors. However just because I got lucky does not mean you will.
3. Why are you bitbanging? Use the hardware i2c peripheral. Try my code, it uses hardware i2c and it works fine for me. Also the ov7670's i2c address is 0x42 the LSB (bit 0) is set to 0 when writing and 1 when reading so yes you do use 0x43 to read. Also when using the wiring library you must specify the 7bit address so use 0x21.
I've quickly browsed the pages of this thread and maybe I've lost some useful link, so I need a simple schematic (I would like to try with resistors to pull-up the pins and to match the 3,3 V level inputs of OV7670) to connect the camera to arduino.
The code I've seen on github is C or C++ (objective C) : can I copy that code and paste into the editor of arduino IDE?