capstone_finish

Dependencies:   BufferedSerial motor_sn7544

Revision:
7:152fba230106
Parent:
6:fe8b32cb9357
--- a/ov7670.h	Tue Aug 13 07:51:37 2019 +0000
+++ b/ov7670.h	Thu Sep 05 13:04:01 2019 +0000
@@ -6,11 +6,11 @@
 #define OV7670_WRITEWAIT (20)
 #define OV7670_NOACK (0)
 #define OV7670_REGMAX (201)
-#define OV7670_I2CFREQ (40000)
+#define OV7670_I2CFREQ (10000)
 
 //
 // OV7670 + FIFO AL422B camera board test
-//
+//wen =1일 때 read시작 wen = 0일때 안읽음
 class OV7670
 {
 public:
@@ -18,7 +18,7 @@
     InterruptIn vsync,href;
     DigitalOut wen ;
     PortIn data ;
-    DigitalOut rrst,oe,rclk ;
+    DigitalOut rrst,oe,rclk,wrst ;
     volatile int LineCounter ;
     volatile int LastLines ;
     volatile bool CaptureReq ;
@@ -35,18 +35,20 @@
         int mask, // 0b0000_0M65_4000_0321_L000_0000_0000_0000 = 0x07878000
         PinName rt, // /RRST
         PinName o,  // /OE
-        PinName rc  // RCLK
-    ) : _i2c(sda,scl),vsync(vs),href(hr),wen(we),data(port,mask),rrst(rt),oe(o),rclk(rc)
+        PinName rc,
+        PinName wt  // RCLK
+    ) : _i2c(sda,scl),vsync(vs),href(hr),wen(we),data(port,mask),rrst(rt),oe(o),rclk(rc),wrst(wt)
     {
         _i2c.stop() ;
         _i2c.frequency(OV7670_I2CFREQ) ;
         vsync.fall(this,&OV7670::VsyncHandler) ;
-        href.rise(this,&OV7670::HrefHandler) ;
+//        vsync.rise(this,&OV7670::VsyncHandler) ;
         CaptureReq = false ;
         Busy = false ;
         Done = false ;
         LineCounter = 0 ;
         rrst = 1 ;
+ 
         oe = 1 ;
         rclk = 1 ;
         wen = 0 ;
@@ -75,30 +77,31 @@
     // write to camera
     void WriteReg(int addr,int data)
     {
-     int status;
-     char data_write[2];
-    data_write[0]= addr;
-    data_write[1]= data;
-    status = _i2c.write(OV7670_WRITE,data_write,2,0);
-    if(status!=0){
-//        printf("I2C configuration error(adr: %x)!\r\n",addr);
-        while(1){
+        wait_us(10);
+        int status;
+        char data_write[2];
+        data_write[0]= addr;
+        data_write[1]= data;
+        status = _i2c.write(OV7670_WRITE,data_write,2,0);
+        if(status!=0) {
+            printf("I2C configuration error(adr: %x)!\r\n",addr);
+            while(1) {
+            }
         }
     }
-    }
 
     // read from camera
     int ReadReg(int addr)
     {
-       char data_write[2];
-    char data_read[2];
-    int data;
-    int status;
-   
-    data_write[0]=addr;
-    _i2c.write(OV7670_WRITE, data_write, 1, 0);
-    status =_i2c.read(OV7670_READ, data_read, 1, 0);
-    data = (int)data_read[0];
+        char data_write[2];
+        char data_read[2];
+        int data;
+        int status;
+
+        data_write[0]=addr;
+        _i2c.write(OV7670_WRITE, data_write, 1, 0);
+        status =_i2c.read(OV7670_READ, data_read, 1, 0);
+        data = (int)data_read[0];
 //    printf("Data is %x\r\n",data);
 //    printf("Status is %d\r\n",status);
         return data ;
@@ -106,15 +109,18 @@
 
     void Reset(void)
     {
+
         WriteReg(0x12,0x80) ; // RESET CAMERA
         wait_ms(200) ;
+        wait_us(1) ;
+
     }
 
     void InitQQVGA565(bool flipv,bool fliph)
     {
         // QQVGA RGB565
         WriteReg(REG_CLKRC,0x80);
-        WriteReg(REG_COM11,0x0A) ;          
+        WriteReg(REG_COM11,0x0A) ;
         WriteReg(REG_TSLB,0x04);
         WriteReg(REG_COM7,0x04) ;
         WriteReg(REG_RGB444, 0x00);
@@ -206,37 +212,35 @@
         WriteReg(0xb0,0x84);
     }
     void  InitQQVGAYUV(bool flipv,bool fliph)
-    { 
-        WriteReg(0x11,0x01);
+    {   
+        WriteReg(REG_COM10,0x02) ;
+//        WriteReg(0x11,0x81);
+        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_COM14, 0x1a);
+        WriteReg(0x72, 0x22);
+        WriteReg(0x73, 0xf2);
+        WriteReg(0x70,0x3A);
+        WriteReg(0x71,0x35);
+        WriteReg(REG_TSLB,0x0C);
+        WriteReg(0xA2,0x02);
+        
+
         WriteReg(REG_COM7, 0x00);           // YUV
         WriteReg(REG_COM17, 0x00);          // color bar disable
         WriteReg(REG_COM3, 0x04);
-        WriteReg(0x12, 0x00);//COM7
-       
+        WriteReg(0x8C, 0x00);//RGB444
+        WriteReg(0x04, 0x00);//COM1
+        WriteReg(0x40, 0xC0);//COM15
         WriteReg(0x14, 0x1A);//COM9
         WriteReg(0x3D, 0x40);//COM13
-        WriteReg(REG_COM15, 0xC0);
-        WriteReg(REG_TSLB,0x0C);
-        WriteReg(REG_COM14, 0x1a);          // divide by 4
-        WriteReg(0x72, 0x22);               // downsample by 4
-        WriteReg(0x73, 0xf2);               // divide by 4
-//        WriteReg(REG_HREF, 0xa4);
-//        WriteReg(REG_HSTART, 0x16);
-//        WriteReg(REG_HSTOP, 0x04);
-//        WriteReg(REG_VREF, 0x0a);   
-//        WriteReg(REG_VSTART, 0x02);
-//        WriteReg(REG_VSTOP, 0x7a); 
-        WriteReg(0x70,0x3A);
-        WriteReg(0x71,0x35);
+    
 
-        WriteReg(0xA2,0x02);
-                  
-       
-       
-       
-       
-       
-         /* END MARKER */    
+        /* END MARKER */
     }
 
 
@@ -245,12 +249,15 @@
     {
         // Capture Enable
         if (CaptureReq) {
+            wrst=0;
+            wait_us(1);
             wen = 1 ;
+            wrst=1;
             Done = false ;
             CaptureReq = false ;
         } else {
             wen = 0 ;
-            if (Busy) {
+            if (Busy) { //next exit
                 Busy = false ;
                 Done = true ;
             }
@@ -272,8 +279,8 @@
     {
         int result ;
         rclk = 1 ;
-//        wait_us(1) ;
-        result = data ;
+        wait_us(1);
+        result = data.read() ;
         rclk = 0 ;
         return result ;
     }
@@ -299,29 +306,36 @@
 
         int r,r1,r2;
         rclk=1;
-        r = data;
+        wait_us(1);
+        r = data.read();
         rclk=0;
-        r1 = r<<8;
+//        wait_us(50);
+        r1 = r;
+        wait_us(1);
         rclk=1;
-        r= data;
+        wait_us(1);
+        r= data.read();
         rclk=0;
         r2 = r;
 
-
-        return r2+r1 ;
+//        wait_us(50);
+      return r2 ;
     }
 
     // Data Start
     void ReadStart(void)
     {
-        rrst = 0 ;
+        rrst=0;
         oe = 0 ;
-        wait_us(1) ;
         rclk = 0 ;
+        wait_us(1); 
+        rclk = 1 ; 
         wait_us(1) ;
-        rclk = 1 ;
-        wait_us(1) ;
-        rrst = 1 ;
+        rclk = 0 ; 
+        rrst=1;
+
+//        wait_us(1);
+        
     }
 
     // Data Stop
@@ -332,3 +346,4 @@
         rclk = 1 ;
     }
 };
+ 
\ No newline at end of file