-
-
Save freespace/2585921 to your computer and use it in GitHub Desktop.
#define SIO_C 2 | |
#define SIO_D 4 | |
#define SIO_CLOCK_DELAY 100 | |
void setup() | |
{ | |
pinMode(8,OUTPUT); | |
// while(1) | |
// { | |
// digitalWrite(8,HIGH); | |
// delayMicroseconds(SIO_CLOCK_DELAY); | |
// digitalWrite(8,LOW); | |
// delayMicroseconds(SIO_CLOCK_DELAY); | |
// } | |
Serial.begin(9600); | |
Serial.println("Start InitOV7670 test program"); | |
digitalWrite(8,HIGH);delayMicroseconds(SIO_CLOCK_DELAY); | |
digitalWrite(8,LOW);delayMicroseconds(SIO_CLOCK_DELAY); | |
digitalWrite(8,HIGH);delayMicroseconds(SIO_CLOCK_DELAY); | |
if(InitOV7670()) | |
Serial.println("InitOV7670 OK"); | |
else | |
Serial.println("InitOV7670 NG"); | |
} | |
void loop() | |
{ | |
} | |
void InitSCCB(void) //SCCB初期化 | |
{ | |
pinMode(SIO_C,OUTPUT); | |
pinMode(SIO_D,OUTPUT); | |
digitalWrite(SIO_C,HIGH); | |
digitalWrite(SIO_D,HIGH); | |
Serial.println("InitSCCB - PortDirectionSet & Set High OK"); | |
} | |
void StartSCCB(void) //SCCBスタート | |
{ | |
Serial.println("StartSCCB"); | |
digitalWrite(SIO_D,HIGH); | |
delayMicroseconds(SIO_CLOCK_DELAY); | |
digitalWrite(SIO_C,HIGH); | |
delayMicroseconds(SIO_CLOCK_DELAY); | |
digitalWrite(SIO_D,LOW); | |
delayMicroseconds(SIO_CLOCK_DELAY); | |
digitalWrite(SIO_C,LOW); | |
delayMicroseconds(SIO_CLOCK_DELAY); | |
} | |
void StopSCCB(void) //SCCBストップ | |
{ | |
//Serial.println("StopSCCB"); | |
digitalWrite(SIO_D,LOW); | |
delayMicroseconds(SIO_CLOCK_DELAY); | |
digitalWrite(SIO_C,HIGH); | |
delayMicroseconds(SIO_CLOCK_DELAY); | |
digitalWrite(SIO_D,HIGH); | |
delayMicroseconds(SIO_CLOCK_DELAY); | |
} | |
char SCCBWrite(byte m_data) | |
{ | |
unsigned char j,tem; | |
//Serial.print("SCCBWrite 0x"); | |
//Serial.println(m_data,HEX); | |
//Serial.print("SCCBWrite"); | |
for(j=0;j<8;j++) //循环8次发送数据 | |
{ | |
if((m_data<<j)&0x80) | |
{ | |
digitalWrite(SIO_D,HIGH); | |
} | |
else | |
{ | |
digitalWrite(SIO_D,LOW); | |
} | |
delayMicroseconds(SIO_CLOCK_DELAY); | |
digitalWrite(SIO_C,HIGH); | |
delayMicroseconds(SIO_CLOCK_DELAY); | |
digitalWrite(SIO_C,LOW); | |
delayMicroseconds(SIO_CLOCK_DELAY); | |
} | |
//Serial.println(""); | |
//delayMicroseconds(SIO_CLOCK_DELAY); | |
digitalWrite(8,LOW); //debug | |
pinMode(SIO_D,INPUT); //SIO_Dのバスをスレーブ(OV7670)に渡す | |
digitalWrite(SIO_D,LOW); //プルアップ防止 | |
delayMicroseconds(SIO_CLOCK_DELAY); | |
digitalWrite(8,HIGH); //debug | |
digitalWrite(SIO_C,HIGH); | |
delayMicroseconds(SIO_CLOCK_DELAY); | |
//Serial.println(" Write done"); | |
digitalWrite(8,LOW); //debug | |
if(digitalRead(SIO_D)==HIGH) | |
{ | |
//SIO_D=Hなら失敗 | |
tem=0; | |
Serial.println("SCCBWrite NG"); | |
} | |
else | |
{ | |
//SIO_D=Lなら成功 | |
tem=1; | |
//Serial.println("SCCBWrite OK"); | |
} | |
digitalWrite(SIO_C,LOW); | |
delayMicroseconds(SIO_CLOCK_DELAY); | |
pinMode(SIO_D,OUTPUT); //SIO_Dのバスをマスター(Arduino)に戻す | |
//delayMicroseconds(SIO_CLOCK_DELAY); | |
//digitalWrite(SIO_D,LOW); | |
//delayMicroseconds(SIO_CLOCK_DELAY); | |
//pinMode(SIO_C,OUTPUT); //SIO_Cのバスをマスター(Arduino)に戻す | |
return tem; | |
} | |
int InitOV7670(void) | |
{ | |
char temp; | |
int i=0; | |
InitSCCB(); | |
temp=0x80; | |
if(WriteOV7670(0x12, temp)==0) //Reset SCCB | |
{ | |
Serial.println("Resetting SCCB NG"); | |
return 0 ; | |
} | |
//Serial.println("Resetting SCCB OK"); | |
//delayMicroseconds(10); | |
// for(i=0;i<CHANGE_REG_NUM;i++) | |
// { | |
// if( 0==wrOV7670Reg(pgm_read_byte( &change_reg[i][0]),pgm_read_byte( &change_reg[i][1]) )) | |
// { | |
// return 0; | |
// } | |
// } | |
return 0x01; //ok | |
} | |
//////////////////////////// | |
//機能:OV7660レジスタに書き込む | |
//返値:成功=1 失敗=0 | |
int WriteOV7670(char regID, char regDat) | |
{ | |
StartSCCB(); | |
if(SCCBWrite(0x42)==0) | |
{ | |
Serial.println(" Write Error 0x42"); | |
StopSCCB(); | |
return(0); | |
} | |
delayMicroseconds(SIO_CLOCK_DELAY); | |
if(SCCBWrite(regID)==0) | |
{ | |
StopSCCB(); | |
return(0); | |
} | |
delayMicroseconds(SIO_CLOCK_DELAY); | |
if(SCCBWrite(regDat)==0) | |
{ | |
StopSCCB(); | |
return(0); | |
} | |
StopSCCB(); | |
return(1); | |
} |
Why bitbang when the hardware i2c works just fine? I have a few examples that you can check out that use the avr's hardware i2c. The code is simpler.
Hi,
i want to interface arduino with camera and then want to save the taken picture on SD card. Can anyone help me out in this regards ?
Thanks
Oh boy... I completely forgot about this.
This is NOT MY CODE. I found it on the Internet randomly, and felt it should be backed up somewhere, so I put it here so it doesn't disappear into the memory hole.
I am very happy for those that have managed to get it to work, and I can't help anyone having trouble with it because I don't have one of these modules any more. Sorry!
hello,
I would use your code because i find it good, but i have a electronical problem..
Please can you give me a diagram of the electrical system required.
thanks.
Ne0ratek
What voltages are you guys using on the Arduino? The OV7670 IO voltages are rated at 3V max (uno,nano etc). In my opinion this will only work on a Due Arduino because the avr is just way too slow.
Can you give me a full code about interface between ov7670 and Uno R3 or Mega2560. (and wiring circuit please) Thanks!
Can you give me a full code about interface between ov7670
. (and wiring circuit please) Thanks!
hello all, can you help me on OV7670 camera interface with Arduino?
hi i dont know a bout interface ov7670 and arduino uno? mail: [email protected]
TekuConcept, could you tell me how you did it?
Hello everyone,
Has anybody tried to implement the ReadOV7670 function and ReadSCCB ?
I am having issue with the first writing of 0x43 on the SCCB :
https://gist.github.com/Near32/225cdca19ad55c6d8306
The rest of it seems to be working fine...
By the way, thank you very much, I might have not gotten that far without this starting code..