www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Tutorial UART-Routine geht nicht?


Autor: Tobias H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Ja, ich schon wieder :-)

Ich hab ein Problem mit der gaanz einfachen UART-Routine aus dem 
Tutorial.

uart_initialisieren(19200);
loop_until_bit_is_set(UCSRA,UDRE); //Bereit zum Senden?
UDR='-'; //Sende
loop_until_bit_is_set(UCSRA,UDRE); //Bereit zum Senden?
UDR='+'; //Sende
uart_senden("Ready to goyes");

Das minus kommt an, das plus kommt an, der Text nicht. Daher mal mein 
uart_senden Routine:

void uart_senden2(unsigned char zeichen)
{
  loop_until_bit_is_set(UCSRA,UDRE); //Bereit zum Senden?
  UDR=zeichen; //Sende
}

void uart_senden(char *zeichen)
{
  while (*zeichen)
  {
    uart_senden2(*zeichen);
    zeichen++;
  }
}

Das ist quasi genau das, was im Tutorial steht und auch das gleiche, was 
ich mit dem - und + manuell ohne Probleme ausführe.

Ich versteh nicht mehr, woran kann das liegen?

Ciao Tobias

Autor: Tobias H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wow, ich habs gefunden... Das muss man aber auch wissen!?!? Ich bin 
dafür, das wird im Tutorial aufgenommen!

Vielleicht kann ja auch noch einer erklären, warum das so ist?

Auf jeden Fall kommt nix an, bevor ich nicht einmal \r\n an den PC 
gesendet habe...

Ciao Tobias

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

Bewertung
0 lesenswert
nicht lesenswert
Das hängt davon ab, wer am anderen Ende der Leitung lauscht.
Das Problem ist nicht das senden, sondern was das Programm
am anderen Ende der Leitung macht. Ein Terminalprogramm
sollte eigentlich schon Zeichen ausgeben wie sie reinkommen.
Wenn am anderen Ende allerdings ein C Programm hängt, dass
auf die Daten von der Seriellen wartet: Es ist durchaus
üblich, dass die C-Runtime auf einem PC einen Zwischenbuffer
benutzt um dort erst mal die Zeichen zu sammeln und erst
bei Eintreffen eines Carriage Return die Zeichen an das
eigentliche Programm weitergibt.

Autor: Tobias H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Es handelt sich um das Windows Hyper Terminal aus XP SP2.

Komischerweise gibt es Zeichen einzeln aus, aber Strings erst, wenn 
VORHER ein Carriage Return gesendet wurde. Danach bringt auch nix, dann 
funktioniert erst der nächste String. Obwohl Strings ja auch nur 
aneinandergereihte einzelne Zeichen sind. Wirklich sehr verwunderlich.

Ciao Tobias

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.