-
-
Save zackhaikal/596e5305b2c51a160449eb972bbe38a2 to your computer and use it in GitHub Desktop.
Backup of some arduino code to handle OV7670
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment