Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of ov7670 by
Revision 1:d82dbad9c06b, committed 2013-03-16
- Comitter:
- edodm85
- Date:
- Sat Mar 16 13:40:36 2013 +0000
- Parent:
- 0:810d59d0b843
- Child:
- 2:354a00023f79
- Commit message:
- Add QVGA and VGA reg
Changed in this revision
--- a/ov7670.cpp Sun Mar 10 13:01:45 2013 +0000
+++ b/ov7670.cpp Sat Mar 16 13:40:36 2013 +0000
@@ -80,7 +80,7 @@
wait_ms(200) ;
}
-int OV7670::Init(char c)
+int OV7670::Init(char c, int n)
{
if (ReadReg(REG_PID) != 0x76) // check id camera
@@ -88,62 +88,102 @@
return 0;
}
- Reset(); // Resets all registers to default values
-
- WriteReg(REG_CLKRC,0x80);
+ Reset(); // Resets all registers to default values
+ Reset(); // Resets all registers to default values
+
+ WriteReg(REG_RGB444, 0x00); // Disable RGB444
+ WriteReg(REG_COM10,0x02); // 0x02 VSYNC negative (http://nasulica.homelinux.org/?p=959)
+ WriteReg(REG_MVFP,0x27); // mirror image
+
+ WriteReg(REG_CLKRC,0x80); // prescaler x1
+ WriteReg(DBLV,0x0a); // bypass PLL
+
WriteReg(REG_COM11,0x0A) ;
- WriteReg(REG_TSLB,0x04); // 0D = UYVY 04 = YUYV
- WriteReg(REG_COM13,0x88); // connect to REG_TSLB
+ WriteReg(REG_TSLB,0x04); // 0D = UYVY 04 = YUYV
+ WriteReg(REG_COM13,0x88); // connect to REG_TSLB
- //WriteReg(REG_COM7,0x01) ; // output format: raw
- WriteReg(REG_RGB444, 0x00); // Disable RGB444
- WriteReg(REG_HSTART,0x16) ;
- WriteReg(REG_HSTOP,0x04) ;
- WriteReg(REG_HREF,0x24) ;
- WriteReg(REG_VSTART,0x02) ;
- WriteReg(REG_VSTOP,0x7a) ;
- WriteReg(REG_VREF,0x0a) ;
- WriteReg(REG_COM10,0x02) ; // 0x02 VSYNC negative (http://nasulica.homelinux.org/?p=959)
- WriteReg(REG_MVFP,0x27) ;
-
- if(c == 'y')
- {
- WriteReg(REG_COM7,0x00); // YUV
- WriteReg(REG_COM17,0x00); // color bar disable
- WriteReg(REG_COM3, 0x04);
- WriteReg(REG_COM14, 0x1a); // by 4
- WriteReg(REG_COM15, 0xC0); // Set normal rgb
- WriteReg(0x70, 0x3A);
- WriteReg(0x71, 0x35);
- WriteReg(0x72, 0x22);
- WriteReg(0x73, 0xf2);
- WriteReg(0xA2, 0x02);
- }else{ // RGB565
- WriteReg(REG_COM7,0x04); // RGB + color bar disable
- WriteReg(REG_RGB444, 0x00); // Disable RGB444
- WriteReg(REG_COM15, 0xD0); // Set rgb565 0xD0 or rgb555 0xD8
- WriteReg(REG_COM3, 0x04);
- WriteReg(REG_COM14, 0x1a); // by 4
- WriteReg(0x70, 0x3A);
- WriteReg(0x71, 0x35);
- WriteReg(0x72, 0x22);
- WriteReg(0x73, 0xf2);
- WriteReg(0xA2, 0x02);
- }
-
+
+ if(c == 'b' || c == 'y') // YUV
+ {
+ WriteReg(REG_COM7, 0x00); // YUV
+ WriteReg(REG_COM17, 0x00); // color bar disable
+ WriteReg(REG_COM3, 0x04);
+ WriteReg(REG_COM15, 0xC0); // Set normal rgb with Full range
+
+ }else
+ if(c == 'r') // RGB565
+ {
+ WriteReg(REG_COM7, 0x04); // RGB + color bar disable
+ WriteReg(REG_RGB444, 0x00); // Disable RGB444
+ WriteReg(REG_COM15, 0x10); // Set rgb565 with Full range 0xD0
+ WriteReg(REG_COM3, 0x04);
+ WriteReg(REG_CLKRC,0x80); // prescaler x1
+ }
+
+ WriteReg(0x70, 0x3A); // Scaling Xsc
+ WriteReg(0x71, 0x35); // Scaling Ysc
+ WriteReg(0xA2, 0x02); // pixel clock delay
+
+ if(n == 19200) // 160*120
+ {
+ WriteReg(REG_COM14, 0x1a); // divide by 4
+ WriteReg(0x72, 0x22); // downsample by 4
+ WriteReg(0x73, 0xf2); // divide by 4
+ WriteReg(REG_HSTART,0x16);
+ WriteReg(REG_HSTOP,0x04);
+ WriteReg(REG_HREF,0xa4);
+ WriteReg(REG_VSTART,0x02);
+ WriteReg(REG_VSTOP,0x7a);
+ WriteReg(REG_VREF,0x0a);
+ }
+ if(n == 76800) // 320*240
+ {
+ WriteReg(REG_COM14, 0x19);
+ WriteReg(0x72, 0x11);
+ WriteReg(0x73, 0xf1);
+ WriteReg(REG_HSTART,0x16);
+ WriteReg(REG_HSTOP,0x04);
+ WriteReg(REG_HREF,0x24);
+ WriteReg(REG_VSTART,0x02);
+ WriteReg(REG_VSTOP,0x7a);
+ WriteReg(REG_VREF,0x0a);
+ }
+ if(n == 307200) // 640*480
+ {
+ WriteReg(REG_COM3,0x00); // REG_COM3
+ WriteReg(0x3e,0x00); // REG_COM14
+ WriteReg(0x72,0x11); //
+ WriteReg(0x73,0xf0); //
+
+ WriteReg(0x32,0xb6); // HREF
+ WriteReg(0x17,0x13); // HSTART
+ WriteReg(0x18,0x01); // HSTOP
+ WriteReg(0x19,0x02); // VSTART
+ WriteReg(0x1a,0x7a); // VSTOP
+ WriteReg(0x03,0x0a); // VREF
+ WriteReg(0x70, 0x3a); // Scaling Xsc
+ WriteReg(0x71, 0x35); // Scaling Ysc
+ WriteReg(0xA2, 0x02); // pixel clock delay
+
+ WriteReg(REG_COM1, 0x00);
+ }
+
+
// COLOR SETTING
-
+
WriteReg(REG_COM8,0x8F); // AGC AWB AEC Enab
+ WriteReg(0xAA,0x14); // Average-based AEC algorithm
WriteReg(REG_BRIGHT,0x00); // 0x00(Brightness 0) - 0x18(Brightness +1) - 0x98(Brightness -1)
-
- WriteReg(MTX1,0x80);
- WriteReg(MTX2,0x80);
- WriteReg(MTX3,0x00);
- WriteReg(MTX4,0x22);
- WriteReg(MTX5,0x5e);
- WriteReg(MTX6,0x80);
WriteReg(REG_CONTRAS,0x40); // 0x40(Contrast 0) - 0x50(Contrast +1) - 0x38(Contrast -1)
- WriteReg(MTXS,0x9e);
+ WriteReg(0xB1,0xB1); // Automatic Black level Calibration
+
+ WriteReg(MTX1,0x80);
+ WriteReg(MTX2,0x80);
+ WriteReg(MTX3,0x00);
+ WriteReg(MTX4,0x22);
+ WriteReg(MTX5,0x5e);
+ WriteReg(MTX6,0x80);
+ WriteReg(MTXS,0x9e);
WriteReg(AWBC7,0x88);
WriteReg(AWBC8,0x88);
WriteReg(AWBC9,0x44);
@@ -152,14 +192,13 @@
WriteReg(AWBC12,0x0e);
WriteReg(REG_GFIX,0x00);
WriteReg(GGAIN,0x40);
- WriteReg(DBLV,0x0a);
WriteReg(AWBCTR3,0x0a);
WriteReg(AWBCTR2,0x55);
WriteReg(AWBCTR1,0x11);
WriteReg(AWBCTR0,0x9f);
WriteReg(0xb0,0x84);
-
+
return 1;
}
@@ -197,7 +236,6 @@
int B1;
rclk = 1;
B1 = (((data&0x07800000)>>19)|((data&0x078000)>>15));
- //B1 = data; // BusIn data(d0,d1,d2,d3,d4,d5,d6,d7)
rclk = 0;
return B1;
}
--- a/ov7670.h Sun Mar 10 13:01:45 2013 +0000
+++ b/ov7670.h Sat Mar 16 13:40:36 2013 +0000
@@ -40,7 +40,7 @@
void WriteReg(int addr,int data); // write to camera
int ReadReg(int addr); // read from camera
void Reset(void); // reset reg camera
- int Init(char c); // init reg
+ int Init(char c, int n); // init reg
void VsyncHandler(void); // vsync handler
void HrefHandler(void); // href handler
int ReadOnebyte(void); // Data Read
--- a/ov7670reg.h Sun Mar 10 13:01:45 2013 +0000 +++ b/ov7670reg.h Sat Mar 16 13:40:36 2013 +0000 @@ -94,7 +94,6 @@ #define COM17_AECWIN 0xc0 /* AEC window - must match COM4 */ #define COM17_CBAR 0x08 /* DSP Color bar */ -#define CMATRIX_LEN 6 #define REG_BRIGHT 0x55 /* Brightness */ #define REG_REG76 0x76 /* OV's name */ #define R76_BLKPCOR 0x80 /* Black pixel correction enable */
