Forum: Mikrocontroller und Digitale Elektronik µCam und ATmega32.


von Daniel (Gast)


Lesenswert?

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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.