UART - Empfangs-Problem

Gast #1887090
Lesenswert?
• ▲
▼
Hallo,

ich habe ein Problem mit dem Empfangen von einer EINS über den UART zum 
Mikrocontroller (AVR).

Ich schicke über mein Terminal eine "1", daraufhin passiert nichts, 
obwohl eigentlich die Lampen angehen sollten (beim STK500 sind die LEDs 
bei PORTx = 0x00 AN).

Wo liegt mein Problem?


1
/****************   Empfängt ein Zeichen über die RS232 ********************/
2

3

4
#include <avr/io.h>
5

6

7

8
int main (void)
9
{
10
  
11
  DDRA = 0xFF;
12
  PORTA = 0xFF;
13

14

15
  char c;
16

17
  UCSRB |= (1<<RXEN) | (1<<TXEN);
18
  UCSRC |= (1<<URSEL) | (1<<UCSZ1);
19

20
  UBRRH = 00;
21
  UBRRL = 51;
22

23
     c = 0;
24
  while(1)
25
  {
26

27
    while(!(UCSRA & (1<<RXC)));  // warte, bis Zeichen empfangen 
28

29
    c = UDR;           // c = Empfangspuffer
30

31

32
    if(c == '1')         // wenn c = ASCII-'9'...
33
    {
34
      PORTA = 0x00;       // alle LEDs einschalten
35
    }
36

37
  }
38

39
}



Vielen Dank!
#1887103
Lesenswert?
• ▲
▼
JK schrieb:

> Wo liegt mein Problem?

Tja.
Das wird wieder mal das Übliche sein.
Dein µC arbeitet mit einer ganz anderen Taktfrequenz als der, die du bei 
der Berechnung der Baudrateneinstellung angenommen hast.
mehr als 95% aller UART Probleme entfallen auf dieses 'Problem'

Aber lass dir doch einfach mal das c auf dem kompletten Port A ausgeben 
(und häng 8 LED drann). Dann siehst du schon mal, ob und wenn ja was 
beim µC ankommt.
#1887111
Lesenswert?
• ▲
▼
Ich vergass.
Für deine ersten Experimente mit der UART ist es besser zunächst die 
umgekehrte Richtung zu nehmen: Vom µC zum PC zu senden.

Im Hyperterminal (oder einem anderen Terminalprogramm) siehst du nämlich 
ganz einfach ob etwas ankommt und ob es das richtige ist.
Von daher vermeidest du damit schon mal dein erstes großes Problem: Das 
Stochern im Nebel ob es jetzt eigentlich schon funktioniert oder ob 
vielleicht dein Kabel noch ausgekreuzt werden muss, ob die Baudrate 
stimmt etc.   Kurz und gut, genau das was dir jetzt Kopfzerbrechen 
macht: Nichts funktioniert und du hast keine Ahnung was genau nicht 
funktioniert, weil du keine Möglichkeit für gezieltere Rückmeldungen als 
eine einzelne simple LED hast.


Funktioniert erst mal µC->PC  dann wird auch die umgekehrte Richtung 
PC->µC auf Anhieb funktionieren, weil dann nämlich alle 
Hardware-Probleme schon mal ausgeräumt und beseitigt sind.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.