Tutorial UART-Routine geht nicht?

Gast #465612
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
Gast #465649
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
#465667
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.
Gast #465935
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

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.