OV7670 no FIFO Nucleo F411

Dependencies:   mbed OV7670 FastPWM

Committer:
mio
Date:
Tue Feb 14 13:25:25 2012 +0000
Revision:
0:d69a19a5c0ff
Child:
1:b5475be96383
First Version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mio 0:d69a19a5c0ff 1 //
mio 0:d69a19a5c0ff 2 // OV7670 + FIFO AL422B camera board test
mio 0:d69a19a5c0ff 3 //
mio 0:d69a19a5c0ff 4 #include "mbed.h"
mio 0:d69a19a5c0ff 5 #include "ov7670.h"
mio 0:d69a19a5c0ff 6
mio 0:d69a19a5c0ff 7 OV7670 camera(
mio 0:d69a19a5c0ff 8 p28,p27, // SDA,SCL(I2C / SCCB)
mio 0:d69a19a5c0ff 9 p21,p22,p20, // VSYNC,HREF,WEN(FIFO)
mio 0:d69a19a5c0ff 10 p19,p18,p17,p16,p15,p14,p13,p12, // D7-D0
mio 0:d69a19a5c0ff 11 p23,p24,p25) ; // RRST,OE,RCLK
mio 0:d69a19a5c0ff 12
mio 0:d69a19a5c0ff 13 Serial pc(USBTX,USBRX) ;
mio 0:d69a19a5c0ff 14
mio 0:d69a19a5c0ff 15 #define SIZEX (160)
mio 0:d69a19a5c0ff 16 #define SIZEY (120)
mio 0:d69a19a5c0ff 17
mio 0:d69a19a5c0ff 18 int main() {
mio 0:d69a19a5c0ff 19 int i ;
mio 0:d69a19a5c0ff 20 pc.baud(115200) ;
mio 0:d69a19a5c0ff 21 pc.printf("Camera resetting..\r\n") ;
mio 0:d69a19a5c0ff 22
mio 0:d69a19a5c0ff 23 camera.Reset() ;
mio 0:d69a19a5c0ff 24
mio 0:d69a19a5c0ff 25 pc.printf("Before Init...\r\n") ;
mio 0:d69a19a5c0ff 26 pc.printf("AD : +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F") ;
mio 0:d69a19a5c0ff 27 for (i=0;i<OV7670_REGMAX;i++) {
mio 0:d69a19a5c0ff 28 int data ;
mio 0:d69a19a5c0ff 29 data = camera.ReadReg(i) ; // READ REG
mio 0:d69a19a5c0ff 30 if ((i & 0x0F) == 0) {
mio 0:d69a19a5c0ff 31 pc.printf("\r\n%02X : ",i) ;
mio 0:d69a19a5c0ff 32 }
mio 0:d69a19a5c0ff 33 pc.printf("%02X ",data) ;
mio 0:d69a19a5c0ff 34 }
mio 0:d69a19a5c0ff 35 pc.printf("\r\n") ;
mio 0:d69a19a5c0ff 36
mio 0:d69a19a5c0ff 37 camera.InitQQVGA() ;
mio 0:d69a19a5c0ff 38
mio 0:d69a19a5c0ff 39 pc.printf("After Init...\r\n") ;
mio 0:d69a19a5c0ff 40 pc.printf("AD : +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F") ;
mio 0:d69a19a5c0ff 41 for (i=0;i<OV7670_REGMAX;i++) {
mio 0:d69a19a5c0ff 42 int data ;
mio 0:d69a19a5c0ff 43 data = camera.ReadReg(i) ; // READ REG
mio 0:d69a19a5c0ff 44 if ((i & 0x0F) == 0) {
mio 0:d69a19a5c0ff 45 pc.printf("\r\n%02X : ",i) ;
mio 0:d69a19a5c0ff 46 }
mio 0:d69a19a5c0ff 47 pc.printf("%02X ",data) ;
mio 0:d69a19a5c0ff 48 }
mio 0:d69a19a5c0ff 49 pc.printf("\r\n") ;
mio 0:d69a19a5c0ff 50
mio 0:d69a19a5c0ff 51 // CAPTURE and SEND LOOP
mio 0:d69a19a5c0ff 52 while(1)
mio 0:d69a19a5c0ff 53 {
mio 0:d69a19a5c0ff 54 pc.printf("Hit Any Key to send RGBx160x120 Capture Data.\r\n") ;
mio 0:d69a19a5c0ff 55 while(!pc.readable()) ;
mio 0:d69a19a5c0ff 56 pc.getc() ;
mio 0:d69a19a5c0ff 57 camera.CaptureNext() ;
mio 0:d69a19a5c0ff 58 while(camera.CaptureDone() == false) ;
mio 0:d69a19a5c0ff 59 pc.printf("*\r\n") ;
mio 0:d69a19a5c0ff 60 camera.ReadStart() ;
mio 0:d69a19a5c0ff 61 i = 0 ;
mio 0:d69a19a5c0ff 62 for (int y = 0;y < SIZEY;y++) {
mio 0:d69a19a5c0ff 63 int r,g,b,d1,d2 ;
mio 0:d69a19a5c0ff 64 for (int x = 0;x < SIZEX;x++) {
mio 0:d69a19a5c0ff 65 d1 = camera.ReadOneByte() ; // upper nibble is XXX , lower nibble is B
mio 0:d69a19a5c0ff 66 d2 = camera.ReadOneByte() ; // upper nibble is G , lower nibble is R
mio 0:d69a19a5c0ff 67 b = (d1 & 0x0F) ;
mio 0:d69a19a5c0ff 68 g = (d2 & 0xF0) >> 4 ;
mio 0:d69a19a5c0ff 69 r = (d2 & 0x0F) ;
mio 0:d69a19a5c0ff 70 pc.printf ("%1X%1X%1X",r,g,b) ;
mio 0:d69a19a5c0ff 71 }
mio 0:d69a19a5c0ff 72 pc.printf("\r\n") ;
mio 0:d69a19a5c0ff 73 }
mio 0:d69a19a5c0ff 74 camera.ReadStop() ;
mio 0:d69a19a5c0ff 75 }
mio 0:d69a19a5c0ff 76 }