Hi,
ich habe zur Zeit ein kleines Projekt und zwar möchte ich ganz gerne
eine Kamera (habe hier die µCam von 4D) per UART ansteuern.
Zur Zeit hänge ich an der Stelle, dass ich die Cam nicht synchroniert
bekomme, d.h. ich sende die Daten per UART raus, aber bekomme nichts
oder nur Mist von der Cam zurück.
Habe mir die Daten mit einem Logicanalysator angeschaut:
- hin werden die Daten wunderbar gesendet
- die Kamera sendet nur Mist zurück also kein ACK
Hier mal der Code bis jetzt:
1 | #ifndef F_CPU
|
2 | #define F_CPU 16000000UL
|
3 | #endif
|
4 |
|
5 | #define BAUD 57600UL
|
6 | #define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1)
|
7 |
|
8 | #include <avr/io.h>
|
9 | #include <util/delay.h>
|
10 |
|
11 |
|
12 | void initSerial();
|
13 | void syncCam();
|
14 | void blinkLED();
|
15 | void toggleLED();
|
16 |
|
17 | uint8_t syncStat=0;
|
18 |
|
19 | int main(void) {
|
20 |
|
21 |
|
22 | DDRD = (1 << DDD5) | (1 << DDD6) | (1 << DDD7); // PIN5 und PIN6 von PORTD auf Ausgang setzen
|
23 |
|
24 | initSerial();
|
25 | syncCam();
|
26 |
|
27 | while (1) {
|
28 |
|
29 | if (syncStat==0) blinkLED();
|
30 | if (syncStat==1) toggleLED();
|
31 |
|
32 | }
|
33 | return 0;
|
34 | }
|
35 |
|
36 | void initSerial(){
|
37 |
|
38 | UCSRC |= ((1 << URSEL) | (3 << UCSZ0)); //Frame 8bit lang
|
39 | UBRRH = UBRR_VAL >> 8;
|
40 | UBRRL = UBRR_VAL &0xFF; //BAUDRATE SETZEN
|
41 | UCSRB |= ((1 << TXEN)|(1 << RXEN));
|
42 | }
|
43 |
|
44 | void syncCam(){
|
45 | uint8_t i=0;
|
46 |
|
47 | PORTD |= (1 << 6); // Start, LED an
|
48 | for(i=0; i<180; i++){
|
49 | while(!(UCSRA & (1 << UDRE)));
|
50 | UDR = 0xAA;
|
51 | while(!(UCSRA & (1 << UDRE)));
|
52 | UDR = 0x0D;
|
53 | while(!(UCSRA & (1 << UDRE)));
|
54 | UDR = 0x00;
|
55 | while(!(UCSRA & (1 << UDRE)));
|
56 | UDR = 0x00;
|
57 | while(!(UCSRA & (1 << UDRE)));
|
58 | UDR = 0x00;
|
59 | while(!(UCSRA & (1 << UDRE)));
|
60 | UDR = 0x00;
|
61 | _delay_ms(2);
|
62 |
|
63 |
|
64 | if (i==30) _delay_ms(20);
|
65 | if (i==60) _delay_ms(20);
|
66 | if (i==90) _delay_ms(20);
|
67 | if (i==120) _delay_ms(20);
|
68 | if (i==150) _delay_ms(20);
|
69 | }
|
70 | PORTD &= ~(1 << 6); // Fertig, LED aus
|
71 | while(!(UCSRA & (1 << RXC)));
|
72 | syncStat = 1; // Wenn syncStat = 1, dann blinken LEDs
|
73 |
|
74 |
|
75 | }
|
Mache ich etwas grundlegendes falsch? Die ganzen Delays habe ich nur
testweise mit eingebaut.
Vllt kann ja jemand helfen
gruss daniel