OV7670 + 23LC1024 + Bluetooth

Dependencies:   FastPWM MODSERIAL mbed

Committer:
sampullman
Date:
Mon Jul 22 23:55:34 2013 +0000
Revision:
0:f309a2b2f27b
Child:
1:6e4d2cff76e8
Successful OV7670 camera test with QQVGA resolution and no peripherals.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sampullman 0:f309a2b2f27b 1 #include "mbed.h"
sampullman 0:f309a2b2f27b 2 #include "OV7670.h"
sampullman 0:f309a2b2f27b 3 #include "FastPWM.h"
sampullman 0:f309a2b2f27b 4
sampullman 0:f309a2b2f27b 5 #define SIZEX (160)
sampullman 0:f309a2b2f27b 6 #define SIZEY (120)
sampullman 0:f309a2b2f27b 7 #define SIZE 19200
sampullman 0:f309a2b2f27b 8
sampullman 0:f309a2b2f27b 9 OV7670 camera(
sampullman 0:f309a2b2f27b 10 p28, p27, // SDA,SCL(I2C / SCCB)
sampullman 0:f309a2b2f27b 11 p21, p22, p23, p24, // XCLK, PCLK, VSYNC, HREF
sampullman 0:f309a2b2f27b 12 Port0, 0x07878000); // D0-D7 -> P11-p18
sampullman 0:f309a2b2f27b 13
sampullman 0:f309a2b2f27b 14 Serial host(USBTX, USBRX);
sampullman 0:f309a2b2f27b 15 DigitalOut status(p20);
sampullman 0:f309a2b2f27b 16
sampullman 0:f309a2b2f27b 17 unsigned char bank0[SIZE];
sampullman 0:f309a2b2f27b 18 unsigned char *bank1 = (unsigned char *)(0x2007C000);
sampullman 0:f309a2b2f27b 19
sampullman 0:f309a2b2f27b 20 int hexToInt(int i) {
sampullman 0:f309a2b2f27b 21 if(i >= '0' && i <= '9') return i - '0';
sampullman 0:f309a2b2f27b 22 else if(i >= 'A' && i <= 'F') return i - 55;
sampullman 0:f309a2b2f27b 23 else return 0;
sampullman 0:f309a2b2f27b 24 }
sampullman 0:f309a2b2f27b 25
sampullman 0:f309a2b2f27b 26 int getHexWord(Serial *ser) {
sampullman 0:f309a2b2f27b 27 int b1 = ser->getc();
sampullman 0:f309a2b2f27b 28 int b2 = ser->getc();
sampullman 0:f309a2b2f27b 29 return (hexToInt(b1) << 4) | hexToInt(b2);
sampullman 0:f309a2b2f27b 30 }
sampullman 0:f309a2b2f27b 31
sampullman 0:f309a2b2f27b 32 void sendImage() {
sampullman 0:f309a2b2f27b 33 // Write the image to the serial host
sampullman 0:f309a2b2f27b 34 for (int i = 0; i < SIZE; i++) {
sampullman 0:f309a2b2f27b 35 while(!(host.writeable())) {}
sampullman 0:f309a2b2f27b 36 host.putc(bank0[i]);
sampullman 0:f309a2b2f27b 37 while(!(host.writeable())) {}
sampullman 0:f309a2b2f27b 38 host.putc(bank1[i]);
sampullman 0:f309a2b2f27b 39 }
sampullman 0:f309a2b2f27b 40 }
sampullman 0:f309a2b2f27b 41
sampullman 0:f309a2b2f27b 42 int main() {
sampullman 0:f309a2b2f27b 43 host.baud(115200);
sampullman 0:f309a2b2f27b 44
sampullman 0:f309a2b2f27b 45 // Initialize a 12Mhz XCLK for the camera
sampullman 0:f309a2b2f27b 46 camera.Init();
sampullman 0:f309a2b2f27b 47
sampullman 0:f309a2b2f27b 48 // Reset camera on power up
sampullman 0:f309a2b2f27b 49 camera.Reset();
sampullman 0:f309a2b2f27b 50
sampullman 0:f309a2b2f27b 51 // Set up for 160*120 pixels RGB565
sampullman 0:f309a2b2f27b 52 camera.InitQQVGA();
sampullman 0:f309a2b2f27b 53
sampullman 0:f309a2b2f27b 54 char c;
sampullman 0:f309a2b2f27b 55 while(1) {
sampullman 0:f309a2b2f27b 56 if(host.readable()) {
sampullman 0:f309a2b2f27b 57 c = host.getc();
sampullman 0:f309a2b2f27b 58 } else {
sampullman 0:f309a2b2f27b 59 continue;
sampullman 0:f309a2b2f27b 60 }
sampullman 0:f309a2b2f27b 61 if(c == 'r') {
sampullman 0:f309a2b2f27b 62 int reg = getHexWord(&host);
sampullman 0:f309a2b2f27b 63 host.printf("%d\n\r", camera.ReadReg(reg));
sampullman 0:f309a2b2f27b 64 } else if(c == 'w') {
sampullman 0:f309a2b2f27b 65 int reg = getHexWord(&host);
sampullman 0:f309a2b2f27b 66 int val = getHexWord(&host);
sampullman 0:f309a2b2f27b 67 camera.WriteReg(reg, val);
sampullman 0:f309a2b2f27b 68 host.printf("%d\n\r", camera.ReadReg(reg));
sampullman 0:f309a2b2f27b 69 } else if(c == 't') {
sampullman 0:f309a2b2f27b 70 camera.scopeTest(&host);
sampullman 0:f309a2b2f27b 71 } else if(c == 'c') {
sampullman 0:f309a2b2f27b 72 status = 1;
sampullman 0:f309a2b2f27b 73 int bytes = camera.captureImage(bank0, bank1);
sampullman 0:f309a2b2f27b 74 //host.printf("%d\n", bytes);
sampullman 0:f309a2b2f27b 75 sendImage();
sampullman 0:f309a2b2f27b 76 status = 0;
sampullman 0:f309a2b2f27b 77 }
sampullman 0:f309a2b2f27b 78 }
sampullman 0:f309a2b2f27b 79 }
sampullman 0:f309a2b2f27b 80