Seriell Daten Empfangen

#4047582
Lesenswert?

Hallo,

ich versuche gearde seriell Daten zu Empfangen.
Ich verwende HTERM und gebe unten als ASCII eine 1 ein und sende diese 
an mein selbst entwickeltes Board. Das Board funktioniert soweit. Senden 
funktioniert aufjedenfall.

Ich habe mich an das Tutorial  angelehnt, aber sscheibar funktioniert es 
nicht.
Später sollen auch mehr stellige Zahlen übertragen werden z.B. 4010.

Zum überprüfen ob ich den gesendeten wert 1 erhalte, habe ich eine LED 
test Routine programmiert.

1
//+++++++++++++++UART Init+++++++++++++++
2

3
void uart_init(void) {
4
   UBRR0H = UBRR_VAL >> 8;              
5
   UBRR0L = UBRR_VAL & 0xFF;            
6
 
7
   UCSR0B |= (1<<TXEN0) |(1<<RXEN0);          
8
   UCSR0C |= (1<<UCSZ01)|(1<<UCSZ00);      
9
}
10

11

12
//+++++++++++++++Get Werte+++++++++++++++
13

14
uint8_t uart_getc(void) {
15
    while (!(UCSR0A & (1<<RXC0)))   // warten bis Zeichen verfuegbar
16
        ;
17
    return UDR0;                   // Zeichen aus UDR an Aufrufer zurueckgeben
18
}
19
 
20

21
void uart_gets( char* Buffer, uint8_t MaxLen ) {
22
  uint8_t NextChar;
23
  uint8_t StringLen = 0;
24
 
25
  NextChar = uart_getc();         // Warte auf und empfange das nächste Zeichen
26
 
27
                                  // Sammle solange Zeichen, bis:
28
                                  // * entweder das String Ende Zeichen kam
29
                                  // * oder das aufnehmende Array voll ist
30
  while( NextChar != '\n' && StringLen < MaxLen - 1 ) {
31
    *Buffer++ = NextChar;
32
    StringLen++;
33
    NextChar = uart_getc();
34
  }
35
 
36
                                  // Noch ein '\0' anhängen um einen Standard
37
                                  // C-String daraus zu machen
38
  *Buffer = '\0';
39
}
40

41

42

43
//+++++++++++++++MAIN+++++++++++++++
44

45

46
int main (void) {        
47

48
//+++++++++++++++Variablen+++++++++++++++
49

50
  char Line[4];
51
  int16_t get;
52

53
//+++++++++++++++Initalisiere+++++++++++++++
54
  
55
  uart_init();
56

57
//+++++++++++++++Start+++++++++++++++
58

59
   while (1){
60

61

62
//+++++++++++++++Get Werte+++++++++++++++
63
  
64
  
65

66
  if (UCSR0A & (1<<RXC0)){
67

68
    uart_gets( Line, sizeof( Line ) );
69

70
    get = atoi (Line);
71
      
72
      if (get == 1){
73

74
      //+++++++++++++++++LED TEST+++++++++++++++++//
75
      PORTC |= (1<<PC0);    // Ausgang auf 1
76
      _delay_ms(500);
77
      PORTC |= (1<<PC1);      
78
      _delay_ms(500);
79
      PORTC |= (1<<PC2);
80
         _delay_ms(500);         
81
    
82
      PORTC &= ~(1<<PC0);    // Ausgang auf 0
83
      _delay_ms(500);
84
            PORTC &= ~(1<<PC1);
85
      _delay_ms(500);         
86
      PORTC &= ~(1<<PC2);
87
          _delay_ms(500); 
88
      //+++++++++++++++++LED TEST+++++++++++++++++//
89
      }
90

91
  }
92
  { 
93
  }
94

95
  }             
96
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren