ov7670 FIFO data taking program

Dependencies:   OV7670 with FIFO ST7735_TFT mbed

Fork of OV7670_Testing by Martin Smith

Committer:
rulla
Date:
Wed Nov 16 10:38:37 2016 +0000
Revision:
2:4ebec58ffaca
Parent:
1:c98598814170
a

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ms523 0:aabbf2286bf2 1 //
ms523 0:aabbf2286bf2 2 // OV7670 + FIFO AL422B camera board test
ms523 0:aabbf2286bf2 3 //
ms523 0:aabbf2286bf2 4 #include "mbed.h"
rulla 2:4ebec58ffaca 5 #include "OV7670.h"
rulla 2:4ebec58ffaca 6 #include "ST7735_TFT.h"
ms523 0:aabbf2286bf2 7
rulla 2:4ebec58ffaca 8 OV7670 cam(
ms523 0:aabbf2286bf2 9 p28,p27, // SDA,SCL(I2C / SCCB)
rulla 2:4ebec58ffaca 10 p23,NC,p25, // VSYNC,HREF,WEN(FIFO)
rulla 2:4ebec58ffaca 11 Port0,0x07878000,
rulla 2:4ebec58ffaca 12 p26,p29,p30) ; // RRST,OE,RCLK
ms523 0:aabbf2286bf2 13
rulla 2:4ebec58ffaca 14 ST7735_TFT TFT(p5, p6, p7, p8, p9, p10,"TFT"); // mosi, miso, sclk, cs, rs, reset
rulla 2:4ebec58ffaca 15
ms523 0:aabbf2286bf2 16 Serial pc(USBTX,USBRX);
ms523 0:aabbf2286bf2 17
ms523 0:aabbf2286bf2 18 #define SIZEX (160)
ms523 0:aabbf2286bf2 19 #define SIZEY (120)
rulla 2:4ebec58ffaca 20 #define SIZE SIZEX*SIZEY
ms523 1:c98598814170 21
rulla 2:4ebec58ffaca 22 //unsigned char bank0[SIZE];
rulla 2:4ebec58ffaca 23 //unsigned char *bank1 = (unsigned char *)(0x2007C000);
rulla 2:4ebec58ffaca 24 unsigned char bank0,bank1,bank2,bank3;
ms523 0:aabbf2286bf2 25
ms523 0:aabbf2286bf2 26 int main() {
ms523 0:aabbf2286bf2 27
rulla 2:4ebec58ffaca 28 pc.baud(115200);
rulla 2:4ebec58ffaca 29
ms523 0:aabbf2286bf2 30 // Set up the TFT
rulla 2:4ebec58ffaca 31 /*
ms523 0:aabbf2286bf2 32 TFT.claim(stdout); // Send stdout to the TFT display
ms523 0:aabbf2286bf2 33 TFT.background(Black); // Set background to black
ms523 0:aabbf2286bf2 34 TFT.foreground(White); // Set chars to white
ms523 0:aabbf2286bf2 35 TFT.cls(); // Clear the screen
ms523 0:aabbf2286bf2 36 TFT.set_orientation(3); // Select orientation
rulla 2:4ebec58ffaca 37 */
rulla 2:4ebec58ffaca 38 TFT.set_orientation(3);
rulla 2:4ebec58ffaca 39
rulla 2:4ebec58ffaca 40 cam.Reset() ;
rulla 2:4ebec58ffaca 41 pc.printf("\r\nDefault\r\n");
rulla 2:4ebec58ffaca 42 int i;
rulla 2:4ebec58ffaca 43 char data1[OV7670_REGMAX],data2[OV7670_REGMAX];
rulla 2:4ebec58ffaca 44 for (i=0;i<OV7670_REGMAX;i++)
rulla 2:4ebec58ffaca 45 {
rulla 2:4ebec58ffaca 46 data1[i]=cam.ReadReg(i); // READ REG
rulla 2:4ebec58ffaca 47 //if ((i & 0x0F) == 0) pc.printf("\r\n%02X : ",i);
rulla 2:4ebec58ffaca 48 //pc.printf("Add %02X = %02X ,",i,data);
rulla 2:4ebec58ffaca 49 }
rulla 2:4ebec58ffaca 50 cam.InitQQVGA() ;
rulla 2:4ebec58ffaca 51 pc.printf("\r\nDefault\r\n");
rulla 2:4ebec58ffaca 52 for (i=0;i<OV7670_REGMAX;i++)
rulla 2:4ebec58ffaca 53 {
rulla 2:4ebec58ffaca 54 data2[i]=cam.ReadReg(i); // READ REG
rulla 2:4ebec58ffaca 55 // if ((i & 0x0F) == 0) pc.printf("\r\n%02X : ",i);
rulla 2:4ebec58ffaca 56 if(data1[i]!=data2[i]) pc.printf("Add %02X = %02X/%02X ,",i,data1[i],data2[i]);
rulla 2:4ebec58ffaca 57 }
rulla 2:4ebec58ffaca 58 int j=0;
rulla 2:4ebec58ffaca 59
rulla 2:4ebec58ffaca 60 //while(j<15){
rulla 2:4ebec58ffaca 61 while(1){
rulla 2:4ebec58ffaca 62 // Kick things off by capturing an image
rulla 2:4ebec58ffaca 63 cam.CaptureNext() ;
rulla 2:4ebec58ffaca 64 while (cam.CaptureDone()==0) ;
ms523 0:aabbf2286bf2 65
rulla 2:4ebec58ffaca 66 pc.printf("Done %d\n",cam.CaptureDone());
rulla 2:4ebec58ffaca 67 int x=0,y=0, r=0,g=0,b=0,colour;
rulla 2:4ebec58ffaca 68 char rr,gg,bb;
ms523 1:c98598814170 69 // Start reading in the image data from the camera hardware buffer
rulla 2:4ebec58ffaca 70 cam.ReadStart();
rulla 2:4ebec58ffaca 71
ms523 1:c98598814170 72 for (int i = 0; i < SIZE; i++) {
rulla 2:4ebec58ffaca 73 //if(i==0) cam.ReadOneByte();
ms523 0:aabbf2286bf2 74
rulla 2:4ebec58ffaca 75 bank0 = cam.ReadOneByte();
rulla 2:4ebec58ffaca 76 bank1 = cam.ReadOneByte();
rulla 2:4ebec58ffaca 77 //bank1=0;
rulla 2:4ebec58ffaca 78 //RGB
rulla 2:4ebec58ffaca 79
rulla 2:4ebec58ffaca 80 rr=(bank1 & 0x1f) ;
rulla 2:4ebec58ffaca 81 gg= ((bank0<<3) & 0x38) | ((bank1>>5)&0x07);
rulla 2:4ebec58ffaca 82 b=(bank0 & 0xf8)>>3 ;
rulla 2:4ebec58ffaca 83 //444
rulla 2:4ebec58ffaca 84 /*
rulla 2:4ebec58ffaca 85 b = (bank0 & 0x0F) ;
rulla 2:4ebec58ffaca 86 g = (bank1 & 0xF0) >> 4 ;
rulla 2:4ebec58ffaca 87 r = (bank1 & 0x0F) ;
rulla 2:4ebec58ffaca 88 */
rulla 2:4ebec58ffaca 89 colour = ((r<<11)+(g<<5)+b);
rulla 2:4ebec58ffaca 90 if(i%200==0) pc.printf("RGB %d %d %d, B0 %d, B1 %d\n",rr,gg,b,bank0,bank1);
rulla 2:4ebec58ffaca 91 // TFT.pixel(x,y,colour);
rulla 2:4ebec58ffaca 92 TFT.pixel(x,y,rr);
rulla 2:4ebec58ffaca 93
rulla 2:4ebec58ffaca 94 x++;
rulla 2:4ebec58ffaca 95 if(i%SIZEX==0) x=0,y++;
rulla 2:4ebec58ffaca 96 }
ms523 1:c98598814170 97
rulla 2:4ebec58ffaca 98 cam.ReadStop() ;
rulla 2:4ebec58ffaca 99 //TFT.Bitmap(0,0,160,60,bank1);
rulla 2:4ebec58ffaca 100 //TFT.Bitmap(0,60,160,60,bank0);
rulla 2:4ebec58ffaca 101 x=0;y=0;
rulla 2:4ebec58ffaca 102 /*
rulla 2:4ebec58ffaca 103 for (int i = 0; i <= SIZE; i++) {
rulla 2:4ebec58ffaca 104 if(i==SIZEX) x=0,y++;
rulla 2:4ebec58ffaca 105 r=(bank0[i]&0xF8)>>3;
rulla 2:4ebec58ffaca 106 // TFT.pixel(x,y,bank0[i]);
rulla 2:4ebec58ffaca 107 }
rulla 2:4ebec58ffaca 108 */
rulla 2:4ebec58ffaca 109 //j++;
ms523 0:aabbf2286bf2 110 }
rulla 2:4ebec58ffaca 111 }