Dependencies:   mbed

Committer:
Keisuke_Fujii
Date:
Sun Feb 12 03:47:23 2012 +0000
Revision:
0:6c241f54042f

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Keisuke_Fujii 0:6c241f54042f 1 void tran_frame( void );
Keisuke_Fujii 0:6c241f54042f 2 void camera( void );
Keisuke_Fujii 0:6c241f54042f 3 void i2c( char, int, int, char );
Keisuke_Fujii 0:6c241f54042f 4 void write( char );
Keisuke_Fujii 0:6c241f54042f 5 void read( int );
Keisuke_Fujii 0:6c241f54042f 6 void start( void );
Keisuke_Fujii 0:6c241f54042f 7 void stop( void );
Keisuke_Fujii 0:6c241f54042f 8
Keisuke_Fujii 0:6c241f54042f 9 const char WRITE = 0x42;
Keisuke_Fujii 0:6c241f54042f 10 const char READ = 0x43;
Keisuke_Fujii 0:6c241f54042f 11 const char TWO-WIRE = 0;
Keisuke_Fujii 0:6c241f54042f 12 const char THREE-WIRE = 1;
Keisuke_Fujii 0:6c241f54042f 13 unsigned char data[201];
Keisuke_Fujii 0:6c241f54042f 14 unsigned short int byte = 0x00;
Keisuke_Fujii 0:6c241f54042f 15
Keisuke_Fujii 0:6c241f54042f 16 void reset( void )
Keisuke_Fujii 0:6c241f54042f 17 {
Keisuke_Fujii 0:6c241f54042f 18 OV7670.stop();
Keisuke_Fujii 0:6c241f54042f 19 OV7670.frequency( 300000 );
Keisuke_Fujii 0:6c241f54042f 20 wait_ms( 10 );
Keisuke_Fujii 0:6c241f54042f 21
Keisuke_Fujii 0:6c241f54042f 22 i2c( WRITE, 0x12, THREE-WIRE, 0x80 ); //reset
Keisuke_Fujii 0:6c241f54042f 23 }
Keisuke_Fujii 0:6c241f54042f 24
Keisuke_Fujii 0:6c241f54042f 25 void tran_frame( void )
Keisuke_Fujii 0:6c241f54042f 26 {
Keisuke_Fujii 0:6c241f54042f 27 OV7670.stop();
Keisuke_Fujii 0:6c241f54042f 28 OV7670.frequency( 200000 );
Keisuke_Fujii 0:6c241f54042f 29 wait_ms( 10 );
Keisuke_Fujii 0:6c241f54042f 30
Keisuke_Fujii 0:6c241f54042f 31 i2c( WRITE, 0x12, THREE-WIRE, 0x80 ); //reset
Keisuke_Fujii 0:6c241f54042f 32 wait_ms( 10 );
Keisuke_Fujii 0:6c241f54042f 33 /*i2c( WRITE, 0x12, 1, 0x08 );
Keisuke_Fujii 0:6c241f54042f 34 wait_ms( 10 );
Keisuke_Fujii 0:6c241f54042f 35 //i2c( WRITE, 0x18, 1, 0x27 ); //HSTOP
Keisuke_Fujii 0:6c241f54042f 36 wait_ms( 10 );
Keisuke_Fujii 0:6c241f54042f 37 //i2c( WRITE, 0x1A, 1, 0x27 ); //VSTOP*/
Keisuke_Fujii 0:6c241f54042f 38 //i2c( WRITE, 0x11, 1, 0x83 ); //48[MHz] -> 12[MHz]
Keisuke_Fujii 0:6c241f54042f 39 //i2c( WRITE, 0x11, 1, 0x80 ); //24[MHz] -> 24[MHz]
Keisuke_Fujii 0:6c241f54042f 40 }
Keisuke_Fujii 0:6c241f54042f 41
Keisuke_Fujii 0:6c241f54042f 42 void camera( void )
Keisuke_Fujii 0:6c241f54042f 43 {
Keisuke_Fujii 0:6c241f54042f 44 OV7670.stop();
Keisuke_Fujii 0:6c241f54042f 45
Keisuke_Fujii 0:6c241f54042f 46 wait_ms( 10 );
Keisuke_Fujii 0:6c241f54042f 47 for( int a = 0; a < 202; a ++ )
Keisuke_Fujii 0:6c241f54042f 48 {
Keisuke_Fujii 0:6c241f54042f 49 i2c( WRITE, a, TWO-WIRE, 0 );
Keisuke_Fujii 0:6c241f54042f 50 i2c( READ, a, TWO-WIRE, 0 );
Keisuke_Fujii 0:6c241f54042f 51 }
Keisuke_Fujii 0:6c241f54042f 52 for( int b = 1; b <= 202; b ++ )
Keisuke_Fujii 0:6c241f54042f 53 {
Keisuke_Fujii 0:6c241f54042f 54 device.printf("|%s : %2x ", address_name[b], data[b - 1]);
Keisuke_Fujii 0:6c241f54042f 55 if( ( b % 6 ) == 0 ) device.printf("|\n");
Keisuke_Fujii 0:6c241f54042f 56 if( b == 202 ) device.printf("|\n");
Keisuke_Fujii 0:6c241f54042f 57 }
Keisuke_Fujii 0:6c241f54042f 58 }
Keisuke_Fujii 0:6c241f54042f 59
Keisuke_Fujii 0:6c241f54042f 60 void i2c( char mode, int a, int flag, char data )
Keisuke_Fujii 0:6c241f54042f 61 {
Keisuke_Fujii 0:6c241f54042f 62 OV7670.start();
Keisuke_Fujii 0:6c241f54042f 63
Keisuke_Fujii 0:6c241f54042f 64 while( !( OV7670.write( mode ) ) );
Keisuke_Fujii 0:6c241f54042f 65 wait_ms( 10 );
Keisuke_Fujii 0:6c241f54042f 66
Keisuke_Fujii 0:6c241f54042f 67 if( mode == 0x42 )
Keisuke_Fujii 0:6c241f54042f 68 {
Keisuke_Fujii 0:6c241f54042f 69 write( a );
Keisuke_Fujii 0:6c241f54042f 70 if( flag == 1 ) write( data );
Keisuke_Fujii 0:6c241f54042f 71 }
Keisuke_Fujii 0:6c241f54042f 72 else if( mode == 0x43 ) read( a );
Keisuke_Fujii 0:6c241f54042f 73
Keisuke_Fujii 0:6c241f54042f 74 OV7670.stop();
Keisuke_Fujii 0:6c241f54042f 75 wait_ms( 10 );
Keisuke_Fujii 0:6c241f54042f 76 }
Keisuke_Fujii 0:6c241f54042f 77
Keisuke_Fujii 0:6c241f54042f 78 void write( char reg_add )
Keisuke_Fujii 0:6c241f54042f 79 {
Keisuke_Fujii 0:6c241f54042f 80 while( !( OV7670.write( reg_add ) ) );
Keisuke_Fujii 0:6c241f54042f 81 }
Keisuke_Fujii 0:6c241f54042f 82
Keisuke_Fujii 0:6c241f54042f 83 void read( int a )
Keisuke_Fujii 0:6c241f54042f 84 {
Keisuke_Fujii 0:6c241f54042f 85 data[a] = OV7670.read( 0 );
Keisuke_Fujii 0:6c241f54042f 86 }