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 0:19429e334b75, committed 2013-03-10
- Comitter:
- edodm85
- Date:
- Sun Mar 10 13:03:52 2013 +0000
- Child:
- 1:922cfb5e36ba
- Commit message:
- First Version
Changed in this revision
--- /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