Forum: Compiler & IDEs UART - Empfangs-Problem


von JK (Gast)


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!

von Karl H. (kbuchegg)


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.

von Karl H. (kbuchegg)


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.

von JK (Gast)


Lesenswert?

OK ich habe es gelöst :)

Es lag an den Fuses (RC Oscillator) war falsch eingestellt schäm ;-)



Danke trotzdem für euere Hilfe!

Gruß
Joh.

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.