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.
Revision 4:2c412c97678c, committed 2013-02-18
- Comitter:
- diasea
- Date:
- Mon Feb 18 07:53:46 2013 +0000
- Parent:
- 3:e23726af9d38
- Commit message:
- fix
Changed in this revision
--- a/main.cpp Sun Feb 17 12:42:55 2013 +0000
+++ b/main.cpp Mon Feb 18 07:53:46 2013 +0000
@@ -1,4 +1,5 @@
#define BITMAPFILE
+#undef BAYERBITMAPFILE
#undef HEXFILE
#undef COLORBAR
@@ -19,7 +20,8 @@
int sizex = 0;
int sizey = 0;
-#ifdef BITMAPFILE
+#if defined(BITMAPFILE) || defined(BAYERBITMAPFILE)
+
#define FILEHEADERSIZE 14 //ファイルヘッダのサイズ
#define INFOHEADERSIZE 40 //情報ヘッダのサイズ
#define HEADERSIZE (FILEHEADERSIZE+INFOHEADERSIZE)
@@ -92,38 +94,31 @@
pc.printf("Before Init...\r\n");
camera.PrintRegister();
-
- camera.InitForFIFOWriteReset();
pc.printf("Select color format.\r\n") ;
pc.printf("1: RGB444.\r\n");
pc.printf("2: RGB555.\r\n");
pc.printf("3: RGB565.\r\n");
pc.printf("4: YUV(UYVY).\r\n");
- pc.printf("5: Bayer RGB(GBGB... RGRG...).\r\n");
+ pc.printf("5: Bayer RGB(BGBG... GRGR...).\r\n");
while(!pc.readable());
char color_format = pc.getc();
switch (color_format) {
case '1':
camera.InitRGB444();
- camera.InitDefaultReg();
break;
case '2':
camera.InitRGB555();
- camera.InitDefaultReg();
break;
case '3':
camera.InitRGB565();
- camera.InitDefaultReg();
break;
case '4':
camera.InitYUV();
- camera.InitDefaultReg();
break;
case '5':
camera.InitBayerRGB();
- camera.InitDefaultReg();
break;
}
pc.printf("select %c\r\n", color_format);
@@ -174,6 +169,9 @@
}
pc.printf("select %c\r\n", screen_size);
+ camera.InitForFIFOWriteReset();
+ camera.InitDefaultReg();
+
#ifdef COLORBAR
camera.InitSetColorbar();
#endif
@@ -184,7 +182,7 @@
// CAPTURE and SEND LOOP
while(1)
{
-#if defined(BITMAPFILE) || defined(HEXFILE)
+#if defined(BITMAPFILE) || defined(BAYERBITMAPFILE) || defined(HEXFILE)
pc.printf("Hit Any Key %dx%d Capture Data.\r\n", sizex, sizey) ;
while(!pc.readable());
pc.printf("*\r\n");
@@ -203,7 +201,7 @@
bmp_line_data[i] = 0;
}
#endif
-#ifdef BITMAPFILE
+#if defined(BITMAPFILE) || defined(BAYERBITMAPFILE)
FILE *fp;
char *filename = "/local/test.bmp";
if((fp = fopen(filename, "wb")) == NULL){
@@ -267,33 +265,6 @@
// RGB
pc.printf ("%2X%2X%2X", r, g, b) ;
*/
-#ifdef COLOR_TRACKING
- int colorR = 210, colorG = 120, colorB = 120;
- int diffR, diffG, diffB;
- diffR = abs(colorR - r);
- diffG = abs(colorG - g);
- diffB = abs(colorB - b);
- if(diffR < 50 && diffG < 120 && diffB < 120) {
- target = 1;
-
- xmin = min(xmin, x);
- xmax = max(xmax, x);
- ymin = min(ymin, y);
- ymax = max(ymax, y);
-#endif
-
-#ifdef DISPLAY
- if( oled_x_start < x && x < oled_x_end && oled_y_start < y && y < oled_y_end) {
- oled_color = r;
- oled_color = (oled_color << 8) | g;
- oled_color = (oled_color << 8) | b;
- oled.pixel(x-oled_x_start, y-oled_y_start, oled_color);
- }
-#endif
-
-#ifdef COLOR_TRACKING
- }
-#endif
}
#ifdef BITMAPFILE
fwrite(bmp_line_data, sizeof(unsigned char), real_width, fp);
@@ -340,14 +311,6 @@
// RGB
pc.printf ("%2X%2X%2X", r, g, b) ;
*/
-#ifdef DISPLAY
- if( oled_x_start < x && x < oled_x_end && oled_y_start < y && y < oled_y_end) {
- oled_color = r;
- oled_color = (oled_color << 8) | g;
- oled_color = (oled_color << 8) | b;
- oled.pixel(x-oled_x_start, y-oled_y_start, oled_color);
- }
-#endif
index++;
}
#ifdef BITMAPFILE
@@ -373,50 +336,65 @@
}
for (int x=0; x<sizex; x++) {
- // odd line GBGB... even line RGRG...
+ // odd line BGBG... even line GRGR...
bayer_line_data[0][x] = (unsigned char)camera.ReadOneByte();
+#ifdef BAYERBITMAPFILE
+ bmp_line_data[x*3] = (unsigned char)bayer_line_data[0][x];
+ bmp_line_data[x*3 + 1] = (unsigned char)bayer_line_data[0][x];
+ bmp_line_data[x*3 + 2] = (unsigned char)bayer_line_data[0][x];
+#endif
}
+#ifdef BAYERBITMAPFILE
+ fwrite(bmp_line_data, sizeof(unsigned char), real_width, fp);
+#endif
bayer_line[1] = bayer_line_data[0];
for (int y=1; y<sizey; y++) {
int line = y%2;
for (int x=0; x<sizex; x++) {
- // odd line GBGB... even line RGRG...
+ // odd line BGBG... even line GRGR...
bayer_line_data[line][x] = (unsigned char)camera.ReadOneByte();
+#ifdef BAYERBITMAPFILE
+ bmp_line_data[x*3] = (unsigned char)bayer_line_data[line][x];
+ bmp_line_data[x*3 + 1] = (unsigned char)bayer_line_data[line][x];
+ bmp_line_data[x*3 + 2] = (unsigned char)bayer_line_data[line][x];
+#endif
}
-
+#ifdef BAYERBITMAPFILE
+ fwrite(bmp_line_data, sizeof(unsigned char), real_width, fp);
+#endif
bayer_line[0] = bayer_line[1];
bayer_line[1] = bayer_line_data[line];
for (int x=0; x<sizex - 1; x++) {
if(y%2==1) {
if(x%2==0) {
- // GB
- // RG
- b = bayer_line[0][x+1];
- g = ((int)bayer_line[0][x] + bayer_line[1][x+1])>>1;
- r = bayer_line[1][x];
- } else {
// BG
// GR
b = bayer_line[0][x];
g = ((int)bayer_line[0][x+1] + bayer_line[1][x])>>1;
r = bayer_line[1][x+1];
+ } else {
+ // GB
+ // RG
+ b = bayer_line[0][x+1];
+ g = ((int)bayer_line[0][x] + bayer_line[1][x+1])>>1;
+ r = bayer_line[1][x];
}
} else {
if(x%2==0) {
+ // GR
+ // BG
+ b = bayer_line[1][x];
+ g = ((int)bayer_line[0][x] + bayer_line[1][x+1])>>1;
+ r = bayer_line[0][x+1];
+ } else {
// RG
// GB
b = bayer_line[1][x+1];
g = ((int)bayer_line[0][x+1] + bayer_line[1][x])>>1;
r = bayer_line[0][x];
- } else {
- // GR
- // BG
- b = bayer_line[1][x];
- g = ((int)bayer_line[0][x] + bayer_line[1][x+1])>>1;
- r = bayer_line[0][x+1];
}
}
#if defined(BITMAPFILE) || defined(HEXFILE)
@@ -447,7 +425,7 @@
}
camera.ReadStop();
-#ifdef BITMAPFILE
+#if defined(BITMAPFILE) || defined(BAYERBITMAPFILE)
free(bmp_line_data);
fclose(fp);
#endif
--- a/ov7670.h Sun Feb 17 12:42:55 2013 +0000
+++ b/ov7670.h Mon Feb 18 07:53:46 2013 +0000
@@ -14,16 +14,16 @@
class OV7670
{
public:
- I2C camera ;
+ I2C camera;
InterruptIn vsync,href;
- DigitalOut wen ;
- BusIn data ;
- DigitalOut rrst,oe,rclk ;
- volatile int LineCounter ;
- volatile int LastLines ;
- volatile bool CaptureReq ;
- volatile bool Busy ;
- volatile bool Done ;
+ DigitalOut wen;
+ BusIn data;
+ DigitalOut rrst,oe,rclk;
+ volatile int LineCounter;
+ volatile int LastLines;
+ volatile bool CaptureReq;
+ volatile bool Busy;
+ volatile bool Done;
OV7670(
PinName sda,// Camera I2C port
@@ -44,74 +44,74 @@
PinName rc // RCLK
) : camera(sda,scl),vsync(vs),href(hr),wen(we),data(d0,d1,d2,d3,d4,d5,d6,d7),rrst(rt),oe(o),rclk(rc)
{
- camera.stop() ;
- camera.frequency(OV7670_I2CFREQ) ;
- vsync.fall(this,&OV7670::VsyncHandler) ;
- href.rise(this,&OV7670::HrefHandler) ;
- CaptureReq = false ;
- Busy = false ;
- Done = false ;
- LineCounter = 0 ;
- rrst = 1 ;
- oe = 1 ;
- rclk = 1 ;
- wen = 0 ;
+ camera.stop();
+ camera.frequency(OV7670_I2CFREQ);
+ vsync.fall(this,&OV7670::VsyncHandler);
+ href.rise(this,&OV7670::HrefHandler);
+ CaptureReq = false;
+ Busy = false;
+ Done = false;
+ LineCounter = 0;
+ rrst = 1;
+ oe = 1;
+ rclk = 1;
+ wen = 0;
}
// capture request
void CaptureNext(void)
{
- CaptureReq = true ;
- Busy = true ;
+ CaptureReq = true;
+ Busy = true;
}
// capture done? (with clear)
bool CaptureDone(void)
{
- bool result ;
+ bool result;
if (Busy) {
- result = false ;
+ result = false;
} else {
- result = Done ;
- Done = false ;
+ result = Done;
+ Done = false;
}
- return result ;
+ return result;
}
// write to camera
void WriteReg(int addr,int data)
{
// WRITE 0x42,ADDR,DATA
- camera.start() ;
- camera.write(OV7670_WRITE) ;
+ camera.start();
+ camera.write(OV7670_WRITE);
wait_us(OV7670_WRITEWAIT);
- camera.write(addr) ;
+ camera.write(addr);
wait_us(OV7670_WRITEWAIT);
- camera.write(data) ;
- camera.stop() ;
+ camera.write(data);
+ camera.stop();
}
// read from camera
int ReadReg(int addr)
{
- int data ;
+ int data;
// WRITE 0x42,ADDR
- camera.start() ;
- camera.write(OV7670_WRITE) ;
+ camera.start();
+ camera.write(OV7670_WRITE);
wait_us(OV7670_WRITEWAIT);
- camera.write(addr) ;
- camera.stop() ;
+ camera.write(addr);
+ camera.stop();
wait_us(OV7670_WRITEWAIT);
// WRITE 0x43,READ
- camera.start() ;
- camera.write(OV7670_READ) ;
+ camera.start();
+ camera.write(OV7670_READ);
wait_us(OV7670_WRITEWAIT);
- data = camera.read(OV7670_NOACK) ;
- camera.stop() ;
+ data = camera.read(OV7670_NOACK);
+ camera.stop();
- return data ;
+ return data;
}
// print register
@@ -129,12 +129,12 @@
}
void Reset(void) {
- WriteReg(REG_COM7,0x80) ; // RESET CAMERA
- wait_ms(200) ;
+ WriteReg(REG_COM7,COM7_RESET); // RESET CAMERA
+ wait_ms(200);
}
void InitForFIFOWriteReset(void) {
- WriteReg(REG_COM10,0x02);
+ WriteReg(REG_COM10, COM10_VS_NEG);
}
void InitSetColorbar(void) {
@@ -388,7 +388,11 @@
void InitBayerRGB(void){
int reg_com7 = ReadReg(REG_COM7);
- WriteReg(REG_COM7, reg_com7|COM7_PBAYER);
+ // odd line BGBG... even line GRGR...
+ WriteReg(REG_COM7, reg_com7|COM7_BAYER);
+ // odd line GBGB... even line RGRG...
+ //WriteReg(REG_COM7, reg_com7|COM7_PBAYER);
+
WriteReg(REG_RGB444, RGB444_DISABLE);
WriteReg(REG_COM15, COM15_R00FF);
@@ -404,7 +408,7 @@
int reg_com7 = ReadReg(REG_COM7);
WriteReg(REG_COM7,reg_com7|COM7_VGA);
-
+
WriteReg(REG_HSTART,HSTART_VGA);
WriteReg(REG_HSTOP,HSTOP_VGA);
WriteReg(REG_HREF,HREF_VGA);
@@ -425,7 +429,7 @@
int reg_com7 = ReadReg(REG_COM7);
WriteReg(REG_COM7,reg_com7|COM7_VGA);
-
+
WriteReg(REG_HSTART,HSTART_VGA);
WriteReg(REG_HSTOP,HSTOP_VGA);
WriteReg(REG_HREF,HREF_VGA);
@@ -451,7 +455,7 @@
int reg_com7 = ReadReg(REG_COM7);
WriteReg(REG_COM7,reg_com7|COM7_VGA);
-
+
WriteReg(REG_HSTART,HSTART_VGA);
WriteReg(REG_HSTOP,HSTOP_VGA);
WriteReg(REG_HREF,HREF_VGA);
@@ -519,57 +523,57 @@
{
// Capture Enable
if (CaptureReq) {
- wen = 1 ;
- Done = false ;
- CaptureReq = false ;
+ wen = 1;
+ Done = false;
+ CaptureReq = false;
} else {
- wen = 0 ;
+ wen = 0;
if (Busy) {
- Busy = false ;
- Done = true ;
+ Busy = false;
+ Done = true;
}
}
// Hline Counter
- LastLines = LineCounter ;
- LineCounter = 0 ;
+ LastLines = LineCounter;
+ LineCounter = 0;
}
// href handler
void HrefHandler(void)
{
- LineCounter++ ;
+ LineCounter++;
}
// Data Read
int ReadOneByte(void)
{
- int result ;
- rclk = 1 ;
-// wait_us(1) ;
- result = data ;
- rclk = 0 ;
- return result ;
+ int result;
+ rclk = 1;
+// wait_us(1);
+ result = data;
+ rclk = 0;
+ return result;
}
// Data Start
void ReadStart(void)
{
- rrst = 0 ;
- oe = 0 ;
- wait_us(1) ;
- rclk = 0 ;
- wait_us(1) ;
- rclk = 1 ;
- wait_us(1) ;
- rrst = 1 ;
+ rrst = 0;
+ oe = 0;
+ wait_us(1);
+ rclk = 0;
+ wait_us(1);
+ rclk = 1;
+ wait_us(1);
+ rrst = 1;
}
// Data Stop
void ReadStop(void)
{
- oe = 1 ;
- ReadOneByte() ;
- rclk = 1 ;
+ oe = 1;
+ ReadOneByte();
+ rclk = 1;
}
};
--- a/ov7670reg.h Sun Feb 17 12:42:55 2013 +0000 +++ b/ov7670reg.h Mon Feb 18 07:53:46 2013 +0000 @@ -18,7 +18,7 @@ #define COM7_VGA 0x00 #define HSTART_VGA 0x13 #define HSTOP_VGA 0x01 -#define HREF_VGA 0x36 +#define HREF_VGA 0x36 //0xb6 0x36 #define VSTART_VGA 0x02 #define VSTOP_VGA 0x7a #define VREF_VGA 0x0a