Guten Abend liebes Forum, leider habe ich ein Problem mit meinem ADNS3090 auf einem STM32F4, und zwar es wird nur jede zweite Zeile übertragen. Ich habe das SPI-Zeitdiagramm (siehe Bild) wie folgt implementiert: Funktion adns_FrameCapure_Config:
1 | void adns3090_FrameCapure_Config(void) |
2 | {
|
3 | ADNS3090_NSS_LOW; |
4 | delay_us(1); |
5 | /*FRAME_CAPTURE = 0x13*/
|
6 | adns3090_Write(SPI2,ADNS3090_FRAME_CAPTURE|0x80); |
7 | delay_us(50); |
8 | adns3090_Write(SPI2,0x83); |
9 | delay_us(50); |
10 | ADNS3090_NSS_HIGH; |
11 | /*Warte 3 Frames + 10 µs = 1/2000 * 3 + 10 = 1510 µs*/
|
12 | delay_us(1510); |
13 | }
|
und die Pixelübertragung:
1 | {
|
2 | bool is_first_pixel = false; |
3 | adns3090_FrameCapure_Config(); |
4 | ADNS3090_NSS_LOW; |
5 | //adns3090_Read(SPI2, ADNS3090_FRAME_CAPTURE);
|
6 | delay_us(50); /*t_SRAD*/ |
7 | |
8 | for (i=0; i<ADNS3090_RESOLUTION;) |
9 | {
|
10 | for (j=0; j<ADNS3090_RESOLUTION;) |
11 | {
|
12 | register_val = adns3090_Read(SPI2,ADNS3090_FRAME_CAPTURE); |
13 | if(!is_first_pixel && (register_val&0x40)) |
14 | {
|
15 | i=0; |
16 | j=0; |
17 | /* Wird der Firstframemarker 0x40 nicht gefunden,
|
18 | wird meine DEBUG-LED aktiviert, welche in der Funktion
|
19 | implementiert ist */
|
20 | adns3090_fail(); |
21 | }
|
22 | else
|
23 | {
|
24 | is_first_pixel = true; |
25 | *image = (register_val<<2); |
26 | USART_SendData(USART3, *image); /*Sende Pixel an die USART*/ |
27 | delay_us(10); /*t_LOAD*/ |
28 | image++; |
29 | }
|
30 | delay_us(50); |
31 | j++; |
32 | }
|
33 | if(is_first_pixel) |
34 | {
|
35 | i++; |
36 | }
|
37 | }
|
38 | ADNS3090_NSS_HIGH; |
39 | delay_us(14); /*t_BEXIT*/ |
40 | }
|
Und die main:
1 | uint8_t picture[1536]; |
2 | |
3 | int main (void) |
4 | {
|
5 | startUp(); |
6 | USART_config(); |
7 | adns3090_STARTUP(); |
8 | SysTick_Init(); |
9 | |
10 | while(1) |
11 | {
|
12 | SystemCoreClockUpdate(); |
13 | adns3090_Pixel_Burst(picture); |
14 | }
|
15 | }
|
Das Bildergebnis sieht irgendwie komisch aus. Die Übertragungsgeschwindigkeit passt, aber irgendwie wird etwas verschluckt. Kann mir da einer einen Rat geben? Danke und Gruß Daniel