UART Char empfangen und auswerten funktioniert nicht

OP #4496365
Hallo Leute,

ich habe ein Problem bei meinem ATmega32 ein Char über die serielle 
Schnittstelle zu empfangen.

Die Aufgabenstellung ist wie folgt:
Wird ein definiertes Zeichen (z.B c) übers Terminalprogramm geschickt 
soll eine LED angehen.

Im Anhang habe ich mal meinen Code eingefügt.
Dazu ist zu sagen, dass das Senden uart_putc (Char senden) und uart_puts 
(String senden) ohne Probleme funktioniert.
Somit kann es nur noch an der Interrupt Routine oder der Routine zum 
Empfangen liegen.

Leider bekomme ich es nicht hin, etwas zu empfangen und auszuwerten.
Mir ist bewusst, das solche Themen hier schon hundert mal abgehandelt 
wurden doch ich habe seit Tagen das Forum durchsucht, aber leider nichts 
gefunden was mir weiter hilft.

Noch kurz die Rahmenbedingungen:
-Als Entwicklungsumbegung benutze ich Atmel Studio 6
-Als Programmierboard benutze ich das Atmel Evaluationboard V2.01
-Verbunden mit einem USB<-->Serial Wandler
-Mit PonyProg2000 wird programmiert
-Als Terminalprogramm benutze ich Termite 3.2

Hoffe ihr könnt mir helfen.
Angehängte Dateien:
#4496429
Besorge Dir ein C-Buch und lies es erstmal. Du machst viele 
Anfängerfehler!

Dein Programm versucht gleichzeitig via Interrupt und via Polling auf 
den UART zuzugreifen, da sollte man sich für eine Variante 
entscheiden.

Wieso das überhaupt durch den Compiler geht ist mir auch unklar. Es 
müsste nämlich als
1
  c = uart_getc();

umgeschrieben werden.
OP #4496476
@Jim Meba
Ist natürlich richtig das es
1
c = uart_getc();
sein muss. Erster fehler.

@Jope
Danke für diese Antwort. Ist richtig, dass ich vergessen habe den 
Empfang einzuschalten.

ich habe den Code jetzt wie folgt geändert und es funktioniert.
Allerdings bin ich noch ein bisschen überfragt was ich mit dem Interrupt 
machen soll. So wie hier geschrieben nutze ich diesen ja trotzdem nicht, 
oder?
1
int main(void)
2
{
3
  
4
  DDRD = (1<<PD5) | (1<<PD6);
5
  USART_init();
6
  sei();  
7

8
while(1)
9
  {
10
    LED1();
11
    
12
    if ( (UCSRA & (1<<RXC)) )
13
    {
14
      uint8_t c;
15
      c = uart_getc();
16
      if (c == 'a')
17
      {
18
        LED2();
19
      }
20
      
21
    }  
22
  } 
23
}

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.