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


von Tobias H. (Gast)


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

von Tobias H. (Gast)


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

von Karl H. (kbuchegg)


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.

von Tobias H. (Gast)


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

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.