It is only writing and initialization.

Dependents:   ov7670_dma_nucleo_f4 NUCLEO-F446RE_testDCMI

Committer:
tmnt
Date:
Fri Apr 29 13:37:13 2016 +0000
Revision:
0:754d49cac336
Add OV7670_SCCB library.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tmnt 0:754d49cac336 1
tmnt 0:754d49cac336 2 #include <mbed.h>
tmnt 0:754d49cac336 3 #include "SCCB.h"
tmnt 0:754d49cac336 4
tmnt 0:754d49cac336 5 ov7670_sccb::ov7670_sccb(PinName _SDA,PinName _SCL) : SDA(_SDA),SCL(_SCL) {}
tmnt 0:754d49cac336 6
tmnt 0:754d49cac336 7
tmnt 0:754d49cac336 8 void ov7670_sccb::I2cstart(void)
tmnt 0:754d49cac336 9 {
tmnt 0:754d49cac336 10 SDA=1;SCL=1; /* SCL,SDAは常時Highとする */
tmnt 0:754d49cac336 11 wait_us(2);
tmnt 0:754d49cac336 12 SDA=0;
tmnt 0:754d49cac336 13 wait_us(2); // SDA出力
tmnt 0:754d49cac336 14 }
tmnt 0:754d49cac336 15
tmnt 0:754d49cac336 16 void ov7670_sccb::I2cstop(void)
tmnt 0:754d49cac336 17 {
tmnt 0:754d49cac336 18 SCL=0; // 先にSDA Low
tmnt 0:754d49cac336 19 wait_us(2);
tmnt 0:754d49cac336 20 SDA=0; // SCL Low
tmnt 0:754d49cac336 21 wait_us(2);
tmnt 0:754d49cac336 22 SCL=1; // SDA Low // 出力モードに戻す SDA =Low
tmnt 0:754d49cac336 23 wait_us(2);
tmnt 0:754d49cac336 24 SDA=1; // 先にSCLをHigh
tmnt 0:754d49cac336 25 wait_us(2);
tmnt 0:754d49cac336 26 // 後からSDAをHigh
tmnt 0:754d49cac336 27
tmnt 0:754d49cac336 28 }
tmnt 0:754d49cac336 29 void ov7670_sccb::I2cout(unsigned char datar)
tmnt 0:754d49cac336 30 {
tmnt 0:754d49cac336 31 int ia;
tmnt 0:754d49cac336 32 for(ia=0;ia<8;ia++){
tmnt 0:754d49cac336 33 SCL=0;
tmnt 0:754d49cac336 34 if(datar & 0x80){SDA=1;}
tmnt 0:754d49cac336 35 else SDA=0;
tmnt 0:754d49cac336 36 datar<<=1;
tmnt 0:754d49cac336 37 wait_us(1);
tmnt 0:754d49cac336 38 SCL=1;
tmnt 0:754d49cac336 39 wait_us(2);
tmnt 0:754d49cac336 40 SCL=0;
tmnt 0:754d49cac336 41 wait_us(1);//wait();
tmnt 0:754d49cac336 42 }
tmnt 0:754d49cac336 43 wait_us(1);
tmnt 0:754d49cac336 44
tmnt 0:754d49cac336 45 SCL=1;
tmnt 0:754d49cac336 46 datar<<=1;
tmnt 0:754d49cac336 47 wait_us(2);
tmnt 0:754d49cac336 48 SCL=0;
tmnt 0:754d49cac336 49
tmnt 0:754d49cac336 50 wait_us(1);
tmnt 0:754d49cac336 51 }
tmnt 0:754d49cac336 52
tmnt 0:754d49cac336 53 void ov7670_sccb:: c(unsigned char adrs,unsigned char datak)
tmnt 0:754d49cac336 54 {
tmnt 0:754d49cac336 55 I2cstart();
tmnt 0:754d49cac336 56 I2cout(0x42);
tmnt 0:754d49cac336 57 I2cout(adrs);
tmnt 0:754d49cac336 58 I2cout(datak);
tmnt 0:754d49cac336 59 I2cstop();
tmnt 0:754d49cac336 60 wait_ms(10);
tmnt 0:754d49cac336 61 }
tmnt 0:754d49cac336 62 void ov7670_sccb::cam_init(){
tmnt 0:754d49cac336 63 c(REG_COM7, COM7_RESET); //0x12:COM7(Reset,QCIF,Cbar,RGBformat)
tmnt 0:754d49cac336 64 wait_ms(200); //200ms
tmnt 0:754d49cac336 65
tmnt 0:754d49cac336 66 c(REG_COM7,COM7_RGB|COM7_FMT_QCIF); //0x12:COM7 , 0x0C) //QCIF, RGB
tmnt 0:754d49cac336 67
tmnt 0:754d49cac336 68 c(REG_RGB444, 0x00); //0x8c:RGB 444 control
tmnt 0:754d49cac336 69 c(REG_COM1, 0x00); //0x40 //0x04:COM1(CCIR656,AEC) //0) //0x40)
tmnt 0:754d49cac336 70 c(REG_COM15, COM15_R01FE|COM15_RGB565); //0x40:COM15
tmnt 0:754d49cac336 71
tmnt 0:754d49cac336 72 c(REG_COM9, 0x68); // 38 0x14:COM9=max AGC gain ceiling, Freeze AGC/AEC
tmnt 0:754d49cac336 73
tmnt 0:754d49cac336 74 //c(0x3d,0xc3); //(REG_COM13, COM13_GAMMA|COM13_UVSAT|0x2) //0x3d:COM13
tmnt 0:754d49cac336 75 c(REG_HAECC7,0x94); //0xaa:Hist AEC/AGC control 7 c(0xAA,0x94) //AEC algorithm
tmnt 0:754d49cac336 76
tmnt 0:754d49cac336 77 c(REG_TSLB,0x04); //0x3a:Neg,UVval,YUYV,window TSLB_YLAST) //0x04) //0x0C) //0x80) //0x00) //0x04)
tmnt 0:754d49cac336 78 c(0x20,0x04); //ADCCTR0, A/D range&ref, mu0102
tmnt 0:754d49cac336 79
tmnt 0:754d49cac336 80 /******* ringo *********/
tmnt 0:754d49cac336 81 c(REG_COM8,0xfd); //AGC,AWB OFF,res OK
tmnt 0:754d49cac336 82
tmnt 0:754d49cac336 83 c(0x10,0x0f);//AECコントロール(中位ビット)
tmnt 0:754d49cac336 84 c(0x07,0x00);//AECコントロール(上位ビット)
tmnt 0:754d49cac336 85 //by Mr.Shiono
tmnt 0:754d49cac336 86
tmnt 0:754d49cac336 87 c(0x01,0x40);
tmnt 0:754d49cac336 88 c(0x02,0x60);
tmnt 0:754d49cac336 89 c(0x03,0x0a);
tmnt 0:754d49cac336 90 c(0x0c,0x00);
tmnt 0:754d49cac336 91 c(0x0e,0x61);
tmnt 0:754d49cac336 92 c(0x0f,0x4b);
tmnt 0:754d49cac336 93 c(0x15,0x00);
tmnt 0:754d49cac336 94 c(0x16,0x02);
tmnt 0:754d49cac336 95 c(0x17,0x18); //HSTART
tmnt 0:754d49cac336 96 c(0x18,0x01);
tmnt 0:754d49cac336 97 c(0x19,0x02);
tmnt 0:754d49cac336 98 c(0x1a,0x7a);
tmnt 0:754d49cac336 99 c(0x1e,0x07);
tmnt 0:754d49cac336 100 c(0x21,0x02);
tmnt 0:754d49cac336 101 c(0x22,0x91);
tmnt 0:754d49cac336 102 c(0x29,0x07);
tmnt 0:754d49cac336 103 c(0x32,0xb6);
tmnt 0:754d49cac336 104 c(0x33,0x0b);
tmnt 0:754d49cac336 105 c(0x34,0x11);
tmnt 0:754d49cac336 106 c(0x35,0x0b);
tmnt 0:754d49cac336 107 c(0x37,0x1d);
tmnt 0:754d49cac336 108 c(0x38,0x71);
tmnt 0:754d49cac336 109 c(0x39,0x2a);
tmnt 0:754d49cac336 110 c(0x3b,0x92);//com11 ナイトモード
tmnt 0:754d49cac336 111 c(0x3c,0x78);
tmnt 0:754d49cac336 112 c(0x3d,0xc3);
tmnt 0:754d49cac336 113 c(0x3e,0x00);
tmnt 0:754d49cac336 114 c(0x3f,0x00);
tmnt 0:754d49cac336 115 c(0x41,0x08);
tmnt 0:754d49cac336 116 c(0x41,0x38);
tmnt 0:754d49cac336 117 c(0x43,0x0a);
tmnt 0:754d49cac336 118 c(0x44,0xf0);
tmnt 0:754d49cac336 119 c(0x45,0x34);
tmnt 0:754d49cac336 120 c(0x46,0x58);
tmnt 0:754d49cac336 121 c(0x47,0x28);
tmnt 0:754d49cac336 122 c(0x48,0x3a);
tmnt 0:754d49cac336 123 c(0x4b,0x09);
tmnt 0:754d49cac336 124 c(0x4c,0x00);
tmnt 0:754d49cac336 125 c(0x4d,0x40);
tmnt 0:754d49cac336 126 c(0x4e,0x20);
tmnt 0:754d49cac336 127 c(0x4f,0x80);//c(0x4f,0x80); 彩度調整
tmnt 0:754d49cac336 128 c(0x50,0x80);//c(0x50,0x80);
tmnt 0:754d49cac336 129 c(0x51,0x00);
tmnt 0:754d49cac336 130 c(0x52,0x22);//c(0x52,0x22);
tmnt 0:754d49cac336 131 c(0x53,0x5e);//c(0x52,0x5e);
tmnt 0:754d49cac336 132 c(0x54,0x80);//c(0x54,0x80);
tmnt 0:754d49cac336 133 c(0x56,0x40);
tmnt 0:754d49cac336 134 c(0x58,0x9e);
tmnt 0:754d49cac336 135 c(0x59,0x88);
tmnt 0:754d49cac336 136 c(0x5a,0x88);
tmnt 0:754d49cac336 137 c(0x5b,0x44);
tmnt 0:754d49cac336 138 c(0x5c,0x67);
tmnt 0:754d49cac336 139 c(0x5d,0x49);
tmnt 0:754d49cac336 140 c(0x5e,0x0e);
tmnt 0:754d49cac336 141 c(0x69,0x00);
tmnt 0:754d49cac336 142 c(0x6a,0x40);
tmnt 0:754d49cac336 143 c(0x6b,0x0a);
tmnt 0:754d49cac336 144 c(0x6c,0x0a);
tmnt 0:754d49cac336 145 c(0x6d,0x55);
tmnt 0:754d49cac336 146 c(0x6e,0x11);
tmnt 0:754d49cac336 147 c(0x6f,0x9f);
tmnt 0:754d49cac336 148 c(0x70,0x3a);
tmnt 0:754d49cac336 149 c(0x71,0x35);
tmnt 0:754d49cac336 150 c(0x72,0x11);
tmnt 0:754d49cac336 151 c(0x73,0xf0);
tmnt 0:754d49cac336 152 c(0x74,0x10);
tmnt 0:754d49cac336 153 c(0x75,0x05);
tmnt 0:754d49cac336 154 c(0x76,0xe1);
tmnt 0:754d49cac336 155 c(0x77,0x01);
tmnt 0:754d49cac336 156 c(0x78,0x04);
tmnt 0:754d49cac336 157 c(0x79,0x01);
tmnt 0:754d49cac336 158 c(0x8d,0x4f);
tmnt 0:754d49cac336 159 c(0x8e,0x00);
tmnt 0:754d49cac336 160 c(0x8f,0x00);
tmnt 0:754d49cac336 161 c(0x90,0x00);
tmnt 0:754d49cac336 162 c(0x91,0x00);
tmnt 0:754d49cac336 163 c(0x96,0x00);
tmnt 0:754d49cac336 164 c(0x96,0x00); //?
tmnt 0:754d49cac336 165 c(0x97,0x30);
tmnt 0:754d49cac336 166 c(0x98,0x20);
tmnt 0:754d49cac336 167 c(0x99,0x30);
tmnt 0:754d49cac336 168 c(0x9a,0x00);
tmnt 0:754d49cac336 169 c(0x9a,0x84); //?
tmnt 0:754d49cac336 170 c(0x9b,0x29);
tmnt 0:754d49cac336 171 c(0x9c,0x03);
tmnt 0:754d49cac336 172 c(0x9d,0x4c);
tmnt 0:754d49cac336 173 c(0x9e,0x3f);
tmnt 0:754d49cac336 174 c(0xa2,0x02);
tmnt 0:754d49cac336 175 c(0xa4,0x88);
tmnt 0:754d49cac336 176 c(0xb0,0x84);
tmnt 0:754d49cac336 177 c(0xb1,0x0c);
tmnt 0:754d49cac336 178 c(0xb2,0x0e);
tmnt 0:754d49cac336 179 c(0xb3,0x82);
tmnt 0:754d49cac336 180 c(0xb8,0x0a);
tmnt 0:754d49cac336 181 c(0xc8,0xf0);
tmnt 0:754d49cac336 182 c(0xc9,0x60);
tmnt 0:754d49cac336 183 c(0x6b,0x40);//入力クロックx4
tmnt 0:754d49cac336 184 c(REG_CLKRC,0x40); //0xaf //PCLK*(1/48)
tmnt 0:754d49cac336 185
tmnt 0:754d49cac336 186 }