OV7670 no FIFO Nucleo F411

Dependencies:   mbed OV7670 FastPWM

Committer:
rulla
Date:
Mon Apr 20 15:16:11 2020 +0000
Revision:
3:a73f9d592bf7
Parent:
2:9c5089ac2596
nm

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"
rulla 2:9c5089ac2596 5 #include <stdio.h>
rulla 2:9c5089ac2596 6 #include <stdlib.h>
rulla 2:9c5089ac2596 7 #include <string.h>
rulla 2:9c5089ac2596 8 #include "OV7670.h"
rulla 2:9c5089ac2596 9 #include "FastPWM.h"
mio 0:d69a19a5c0ff 10
rulla 2:9c5089ac2596 11 #define SIZEX 320
rulla 2:9c5089ac2596 12 #define SIZEY 240
rulla 2:9c5089ac2596 13
rulla 2:9c5089ac2596 14 OV7670 camera(
rulla 2:9c5089ac2596 15 D14,D15, // SDA,SCL(I2C / SCCB)
rulla 2:9c5089ac2596 16 // PortC,0x160, // VSYNC,HREF,pclk -> PC_5,PC_6,PC_8
rulla 2:9c5089ac2596 17 PortA,0x000000E0, // VSYNC,HREF,pclk -> PA_7,PA_6,PA_5
rulla 2:9c5089ac2596 18 PortB,0x0000E03E); //D7-D0: PB_15, PB_14, PB_13, PB_5, PB_4, PB_3, PB_2, PB_1
rulla 2:9c5089ac2596 19
rulla 2:9c5089ac2596 20 FastPWM xclk(D7);
mio 0:d69a19a5c0ff 21
rulla 1:b5475be96383 22 Serial pc(USBTX,USBRX);
rulla 2:9c5089ac2596 23 //Timer tempo;
rulla 2:9c5089ac2596 24 DigitalOut led(D10);
mio 0:d69a19a5c0ff 25
rulla 2:9c5089ac2596 26 double freq;
rulla 2:9c5089ac2596 27
rulla 1:b5475be96383 28
rulla 2:9c5089ac2596 29 void flushSerial(void) { char char1 = 0; while (pc.readable()) { char1 = pc.getc(); } return; }
rulla 2:9c5089ac2596 30
mio 0:d69a19a5c0ff 31
mio 0:d69a19a5c0ff 32 int main() {
mio 0:d69a19a5c0ff 33
rulla 2:9c5089ac2596 34 int k=0, rb=0, c, i;
mio 0:d69a19a5c0ff 35
rulla 2:9c5089ac2596 36 xclk.period(0.5e-7); //MAGIC VALUE 0.5e-7
rulla 2:9c5089ac2596 37 xclk.write(0.5);
rulla 2:9c5089ac2596 38
rulla 2:9c5089ac2596 39 pc.baud(921600);
rulla 2:9c5089ac2596 40
rulla 2:9c5089ac2596 41 uint8_t bank[76801];
rulla 2:9c5089ac2596 42
rulla 2:9c5089ac2596 43 for(i=0;i<76801;i++) bank[i]=0;
rulla 2:9c5089ac2596 44
rulla 2:9c5089ac2596 45 double fr=12000000.0;
rulla 2:9c5089ac2596 46 const char *temp="START";
rulla 2:9c5089ac2596 47
rulla 2:9c5089ac2596 48 wait(0.05);
rulla 2:9c5089ac2596 49
rulla 2:9c5089ac2596 50 camera.Reset(fr) ;
rulla 2:9c5089ac2596 51
rulla 2:9c5089ac2596 52 int cnt=0;
rulla 2:9c5089ac2596 53 char data1[OV7670_REGMAX],data2[OV7670_REGMAX];
rulla 2:9c5089ac2596 54
rulla 2:9c5089ac2596 55 for (i=0;i<OV7670_REGMAX;i++)
rulla 2:9c5089ac2596 56 {
rulla 2:9c5089ac2596 57 data1[i]=camera.ReadReg(i); // READ REG
rulla 2:9c5089ac2596 58 // if ((i & 0x0F) == 0) pc.printf("\r\n%02X : ",i);
rulla 2:9c5089ac2596 59 // pc.printf("Addr %02X = %02X ,",i,data1[i]);
rulla 2:9c5089ac2596 60 }
rulla 2:9c5089ac2596 61 camera.Init(0,SIZEX) ;
rulla 2:9c5089ac2596 62
rulla 2:9c5089ac2596 63 for (i=0;i<OV7670_REGMAX;i++)
mio 0:d69a19a5c0ff 64 {
rulla 2:9c5089ac2596 65 // data2[i]=camera.ReadReg(i); // READ REG
rulla 2:9c5089ac2596 66 // pc.printf("data2= %02X\n",data2[i]);
rulla 2:9c5089ac2596 67 // if ((i & 0x0F) == 0) pc.printf("\r\n%02X : ",i);
rulla 2:9c5089ac2596 68 // if(data1[i]!=data2[i]) pc.printf("CHANGED %02X = %02X/%02X ,",i,data1[i],data2[i]);
rulla 2:9c5089ac2596 69 }
rulla 2:9c5089ac2596 70
rulla 2:9c5089ac2596 71 wait(0.1);
rulla 2:9c5089ac2596 72
rulla 2:9c5089ac2596 73 // tempo.start();
rulla 2:9c5089ac2596 74 int j=0,idx=0,index=0;
rulla 2:9c5089ac2596 75 // float time, t0;
rulla 2:9c5089ac2596 76
rulla 2:9c5089ac2596 77 uint8_t ss, sss;
rulla 2:9c5089ac2596 78
rulla 2:9c5089ac2596 79 led=0;
rulla 2:9c5089ac2596 80
rulla 2:9c5089ac2596 81 // camera.shot(SIZEX,SIZEY,bank);
rulla 2:9c5089ac2596 82
rulla 2:9c5089ac2596 83 while(1){
rulla 2:9c5089ac2596 84
rulla 2:9c5089ac2596 85 /*
rulla 2:9c5089ac2596 86 time=tempo.read();
rulla 2:9c5089ac2596 87 if(j==0) t0=time;
rulla 2:9c5089ac2596 88 time-=t0;
rulla 2:9c5089ac2596 89 // printf("\n%f\n",time);
rulla 2:9c5089ac2596 90
rulla 2:9c5089ac2596 91 if(time>2.0) {
rulla 2:9c5089ac2596 92 tempo.stop();
rulla 2:9c5089ac2596 93 t0=tempo.read();
rulla 2:9c5089ac2596 94 // printf("%f Iteration n. %d, Freq= %.9f\n",time,i,1.0/freq);
rulla 2:9c5089ac2596 95 // i+=5;
rulla 2:9c5089ac2596 96 i+=0x01;
rulla 2:9c5089ac2596 97 }
rulla 2:9c5089ac2596 98
rulla 2:9c5089ac2596 99 if(i>0x8f) i=0x0;
rulla 2:9c5089ac2596 100 */
rulla 2:9c5089ac2596 101
rulla 2:9c5089ac2596 102 // pc.abort_write();
rulla 2:9c5089ac2596 103 flushSerial();
rulla 2:9c5089ac2596 104 // pc.send_break();
rulla 2:9c5089ac2596 105
rulla 2:9c5089ac2596 106
rulla 2:9c5089ac2596 107 char str[25], test[25];
rulla 2:9c5089ac2596 108 for (int g=0;g<25;g++) str[g]=0;
rulla 2:9c5089ac2596 109 uint8_t reg,dat;
rulla 2:9c5089ac2596 110
rulla 2:9c5089ac2596 111 uint8_t buf=pc.getc();
rulla 2:9c5089ac2596 112 k=0;
rulla 2:9c5089ac2596 113 str[k]=buf;
rulla 2:9c5089ac2596 114
rulla 2:9c5089ac2596 115
rulla 2:9c5089ac2596 116 while(str[k]!='\n'){
rulla 2:9c5089ac2596 117 k++;
rulla 2:9c5089ac2596 118 str[k]=pc.getc();
mio 0:d69a19a5c0ff 119 }
rulla 2:9c5089ac2596 120
rulla 2:9c5089ac2596 121 pc.printf("ECHO %s\n",str);
rulla 2:9c5089ac2596 122 if(sscanf(str,"R_%d,%u",&reg,&dat)!=0) {
rulla 2:9c5089ac2596 123 camera.WriteReg((int)reg,dat);
rulla 2:9c5089ac2596 124 pc.printf("ECHO REGACK\n");
rulla 2:9c5089ac2596 125 }
rulla 2:9c5089ac2596 126
rulla 2:9c5089ac2596 127 if(sscanf(str,"I_%d",&reg)!=0) {
rulla 2:9c5089ac2596 128 camera.Init2();
rulla 2:9c5089ac2596 129 pc.printf("ECHO INTACK\n");
rulla 2:9c5089ac2596 130 }
rulla 2:9c5089ac2596 131
rulla 2:9c5089ac2596 132 int n=0;
rulla 2:9c5089ac2596 133 for(i=0;i<k;i++){
rulla 2:9c5089ac2596 134 if (str[i]==temp[i]) n++;
rulla 2:9c5089ac2596 135 }
rulla 2:9c5089ac2596 136
rulla 2:9c5089ac2596 137 if(n==(strlen(temp))){
rulla 2:9c5089ac2596 138 // pc.printf("ECHO FOUND\n");
rulla 2:9c5089ac2596 139
rulla 2:9c5089ac2596 140 camera.shot(SIZEX,SIZEY,bank);
rulla 2:9c5089ac2596 141 c=0;
rulla 2:9c5089ac2596 142
rulla 2:9c5089ac2596 143 pc.printf("FrameStart\n");
rulla 2:9c5089ac2596 144 for(j=0;j<SIZEY;j++){
rulla 2:9c5089ac2596 145 for(i=0;i<SIZEX;i++) {
rulla 2:9c5089ac2596 146 pc.printf("%d ",bank[c]);
rulla 2:9c5089ac2596 147 wait_us(40);
rulla 2:9c5089ac2596 148 c++;
rulla 2:9c5089ac2596 149 }
rulla 2:9c5089ac2596 150 pc.printf("\n");
rulla 2:9c5089ac2596 151 }
rulla 2:9c5089ac2596 152 wait_ms(250);
rulla 2:9c5089ac2596 153 pc.printf("FrameEnd\n");
rulla 2:9c5089ac2596 154
rulla 2:9c5089ac2596 155 }
rulla 2:9c5089ac2596 156 led=!led;
rulla 2:9c5089ac2596 157
mio 0:d69a19a5c0ff 158 }
rulla 2:9c5089ac2596 159 }