Test Code for OV7670 Camera module with FIFO AL422

Dependencies:   MODSERIAL mbed ov7670

Dependents:   OV7670_Test_Code

You can find more information in this page: https://mbed.org/users/edodm85/notebook/ov7670-camera-module/

Files at this revision

API Documentation at this revision

Comitter:
edodm85
Date:
Sun Mar 10 13:03:52 2013 +0000
Child:
1:922cfb5e36ba
Commit message:
First Version

Changed in this revision

MODSERIAL.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
main.h Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
ov7670.lib Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MODSERIAL.lib	Sun Mar 10 13:03:52 2013 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/AjK/code/MODSERIAL/#ae0408ebdd68
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Sun Mar 10 13:03:52 2013 +0000
@@ -0,0 +1,155 @@
+/*
+ * Author: Edoardo De Marchi
+ * Date: 10/03/13
+ * Notes: OV7670 + FIFO AL422B camera test
+*/
+
+#include "main.h"
+
+#define QQVGA 4         //320*240
+#define QVGA 2          //160*120
+
+
+void rxCallback(MODSERIAL_IRQ_INFO *q) 
+{
+     new_send = true;
+}
+
+int main() 
+{  
+    pc.baud(921600);       
+    pc.printf("SystemCoreClock: %dMHz\r\n", SystemCoreClock/1000000);       // print the clock frequency
+    led4 = 0;
+  
+    t.start();
+    pc.attach(&rxCallback, MODSERIAL::RxIrq);
+
+    while(1) 
+    { 
+        if(new_send){
+            int i = 0;
+       
+            while(pc.readable())
+            {
+                word[i] = pc.getc();
+                i++;
+            }
+            parse_cmd(); 
+        }            
+        wait_ms(50);
+    }
+}
+
+
+
+void parse_cmd(){
+            new_send = false;
+            
+            if(strcmp("snap_yuv", word) == 0)              
+            {
+                    CameraSnap('y');
+                    memset(word, 0, sizeof(word));      
+            }else
+            if(strcmp("snap_rgb", word) == 0)              
+            {
+                    CameraSnap('r');
+                    memset(word, 0, sizeof(word));
+                   
+            }else        
+            if(strcmp("init_yuv", word) == 0)              
+            {
+                    // Reset camera on power up
+                    camera.Reset();
+                            // Set up for 160*120 pixels YUV (Only Y)
+                    pc.printf("Initializing ov7670 - Format YUV & QQVGA Mode\r\n");
+                    if(camera.Init('y') != 1)
+                    {
+                      pc.printf("Init Fail\r\n");
+                    }
+                    pc.printf("Initializing done\r\n");
+                    memset(word, 0, sizeof(word));
+            }else
+            if(strcmp("init_rgb", word) == 0)              
+            {
+                    // Reset camera on power up
+                    camera.Reset();
+                            // Set up for 160*120 pixels RGB565
+                    pc.printf("Initializing ov7670 - Format RGB & QQVGA Mode\r\n");
+                    if(camera.Init('r') != 1)
+                    {
+                      pc.printf("Init Fail\r\n");
+                    }
+                    pc.printf("Initializing done\r\n");
+                    memset(word, 0, sizeof(word));
+            }else
+            if(strcmp("reset", word) == 0)              
+            {
+                    mbed_reset();        
+            }else
+            if(strcmp("time", word) == 0)              
+            {
+                    pc.printf("Time Acq from camera: %dms - Time Send to pc: %dms - Time Tot: %dms\r\n", t2-t1, t3-t2, t3-t1);
+                    memset(word, 0, sizeof(word));
+            } 
+            memset(word, 0, sizeof(word));
+            
+}
+
+
+
+void CameraSnap(char c){
+        led4 = 1;
+        int var2 = 0;
+        int var = 0;
+        t1 = t.read_ms();
+         
+                // wait until the image has been captured
+        camera.CaptureNext();
+        while(camera.CaptureDone() == false);
+       
+                // Start reading in the image data from the camera hardware buffer                   
+        camera.ReadStart();  
+        
+               // Read the first half of the image
+        for (int q = 0; q < SIZE; q++) 
+        {
+                bank0[q] =  camera.ReadOnebyte();
+        }
+               // Read the Second half of the image
+        for (int q = 0; q < SIZE; q++) 
+        {
+                bank1[q] =  camera.ReadOnebyte();
+        }
+        
+                // Stop reading the image
+        camera.ReadStop() ; 
+        t2 = t.read_ms();          
+        
+        if(c == 'y')
+        {
+            var = 2;                    // set YUV QQVGA
+            var2 = 1;
+        }
+        else{
+            var = 1;                    // set RGB565 QQVGA  
+            var2 = 0;
+        }
+        
+        for (int i = 0; i < SIZE/var; i++) {
+            pc.putc(bank0[(i*var)+var2]);       
+        }
+        for (int i = 0; i < SIZE/var; i++) {
+            pc.putc(bank1[(i*var)+var2]);       
+        }
+     
+                 // Immediately request the next image to be captured
+        camera.CaptureNext();                             
+        while (camera.CaptureDone() == false);
+        t3 = t.read_ms();
+        
+        pc.printf("Grab done\r\n"); 
+            
+        led4 = 0;
+}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.h	Sun Mar 10 13:03:52 2013 +0000
@@ -0,0 +1,46 @@
+#pragma once 
+#include "mbed.h"
+#include "ov7670.h"
+#include "MODSERIAL.h"
+
+
+
+MODSERIAL pc(USBTX,USBRX);
+Timer t;
+bool new_send = false;
+
+DigitalOut led1(LED1);
+DigitalOut led2(LED2);
+DigitalOut led3(LED3);
+DigitalOut led4(LED4);
+
+
+//Camera
+#define SIZEX (160)
+#define SIZEY (120)
+#define SIZE (SIZEX*SIZEY)
+
+OV7670 camera
+(
+    p28,p27,            // SDA,SCL(I2C / SCCB)
+    p23,p24,p25,        // VSYNC,HREF,WEN(FIFO)  
+    Port0,0x07878000,   // PortIn data        p18(P0.26),p17(P0.25),p16(P0.24),p15(P0.23),p11(P0.18),p12(P0.17),p14(P0.16),p13(P0.15)
+    p26,p29,p30         // RRST,OE,RCLK
+); 
+
+unsigned char bank0 [SIZE];
+unsigned char *bank1 = (unsigned char *)(0x2007C000);
+
+//RESET
+extern "C" void mbed_reset();
+
+//Serial
+char word[8];
+int t1 = 0; 
+int t2 = 0;
+int t3 = 0;
+
+//
+void parse_cmd();
+void CameraSnap(char c);
+void CameraGrab();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Sun Mar 10 13:03:52 2013 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/5e5da4a5990b
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ov7670.lib	Sun Mar 10 13:03:52 2013 +0000
@@ -0,0 +1,1 @@
+ov7670#810d59d0b843