Ich habe diesen ov7670 code und bekomme damit eine Art "Bild".
1 | void getPic(void){ |
2 | u8 zl_y=0,zl_Sp,n,ii; |
3 | u16 i; |
4 | u16 index=0; |
5 | |
6 | |
7 | for(n=0;n<4;n++){ |
8 | |
9 | |
10 | |
11 | //Bild aufnehmen
|
12 | if(!vsync)while(!vsync); |
13 | while(vsync); |
14 | zl_buf=0; |
15 | while(!vsync && (zl_y<max_y)){//start frame |
16 | while(!href); |
17 | //start row
|
18 | |
19 | //offset
|
20 | if (pclk){while(pclk);} |
21 | for(ii=0;ii<44*n*2;ii++){ |
22 | while(!pclk); |
23 | while(pclk); |
24 | }
|
25 | |
26 | |
27 | while(href){ |
28 | // if (pclk){while(pclk);}
|
29 | while(zl_buf<((zl_y*max_x+max_x)*2)){//start row |
30 | //Warten auf steigende Flanke pclk
|
31 | while(!pclk); |
32 | buffer[zl_buf]=PINA; |
33 | zl_buf++; |
34 | while(pclk); |
35 | }
|
36 | ;//rest row |
37 | }//row |
38 | zl_y++; |
39 | }//frame |
40 | |
41 | |
42 | //Bild malen:
|
43 | for(i=0;i<max_y;i++){ |
44 | lcd_setcursor(n*44+10,120+i); |
45 | lcd_write_index(0x0022); |
46 | |
47 | cs_lcd_off; |
48 | LCD_Write_Data_Start(); |
49 | for( index = i*max_x*2; index < ((i*max_x+max_x)*2); index+=2 ) { |
50 | lcd_write_data_only((buffer[index]<<8)+buffer[index+1]); |
51 | }
|
52 | cs_lcd_on; |
53 | //_delay_ms(10);// wait;
|
54 | }//i |
55 | }//n |
56 | }//getPic |
der ov ist auf QCIF = 176 x 144 Pixel eingestellt. Das Bild soll in vier Durchläufen jeweils um 44Pixel versetzt aufgenommen und gezeichnet werden. Irgendwas klappt mit der versetzten Aufnahme nicht. Der buffer wird bei den Durchgängen n>0 nicht überschrieben, so dass das erste Teilbild 4fach dargestellt wird. Was stimmt an meinem Aufnahme-Offset nicht?