www.mikrocontroller.net

Forum: Compiler & IDEs UART - Empfangs-Problem


Autor: JK (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?


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


#include <avr/io.h>



int main (void)
{
  
  DDRA = 0xFF;
  PORTA = 0xFF;


  char c;

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

  UBRRH = 00;
  UBRRL = 51;

     c = 0;
  while(1)
  {

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

    c = UDR;           // c = Empfangspuffer


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

  }

}






Vielen Dank!

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: JK (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.