PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : USART Senden und Empfangen von Daten.



Ferdinand
01.02.2009, 18:03
Hallo

Ich habe das stk500 und ATmega8 mit 8 MHz,
Ich habe bei einem UART Programm das Problem das ich bei diesem Programm.: http://www.avrbuch.de/index.php?view=article&catid=3%3Aprojekte&id=6%3Aserielle-kommunikation-rs232&option=com_content&Itemid=3
Daten empfangen kann Ader keine senden z.B "version",
Ich verwende das Terminal.: http://www.compuphase.com/software_termite.htm

Das Programm geht.: https://www.roboternetz.de/wissen/index.php/Sourcevergleich#GCC_.28Hello.2C_world.29
Aber da sendet der µC nur,

wie nennt man das eigentlich wen der PC sendet oder der µC sendet gibt’s da einen Unterschied?

Mit freundlichen Grüßen Ferdinand.

Hubert.G
02.02.2009, 09:38
Auf der roboternetz Seite gibt es aber auch eine Empfangsfunktion. Die Auswertung der Zeichen musst du dir selbst schreiben.
In der Datenrichtung gibt es keinen Unterschied, das musst du dir selbst definieren.

Ferdinand
05.02.2009, 14:36
Hi,

Ich hab’s jetzt getestet und das Funktioniert.

https://www.roboternetz.de/wissen/index.php/Sourcevergleich#GCC_.28Tastatur-Echo.29

also die Hardware tut.
aber das Bsp. geht trotzdem nicht.

Mit freundlichen Grüssen Ferdinand Haug.

McJenso
05.02.2009, 16:26
Hallo,

stell mal in deinem Terminalprogramm in dem Fenster "Serial Port settings" unter "Transmittet test" "Append CR" ein. Das Programm ließt solange Zeichen ein, bis es die 13, also ein CR, empfängt. Wenn dein Terminalprogramm das nicht mitschickt, klappt das nicht.

Gruß

Jens

Ferdinand
05.02.2009, 21:53
Hi

ich weis nicht genau was dabei ableuftaber es tut,
könndest du mir das mit dem RC noch mal genauer erkleren.

THX

by Ferdinand

McJenso
05.02.2009, 22:13
Hallo,

hier erst einmal der wichtige Codeschnipsel aus deinem Programm mit ein paar eingefügten Kommentaren.



while (1) //Schleife bis ein Enter/CR/13 empfangen wird
{
c = uart_getchar(); //Zeichen abholen
if (c != -1) //Ist ein Zeichen da?
{
if (c == 13) //Is das Zeichen Enter/CR/13
{
/* Ende der Zeile erreicht,
also String abschließen */
str[index] = 0;

/* Funktion beenden */
return; // hier wird die Schleife verlassen
}
else /* Normales Zeichen, anhängen an die Zeichenkette */
{
str[index] = c;
index++;
}
}
}


Jetzt zu Enter/CR/13. Wenn du die Entertaste drückst, ist das auch nur ein Zeichen, wie zum Beispiel das A. Jedes Zeichen hat einen ASCII-Code. Der ist bei dem A 65, für Enter 13. Jetzt ist es ja möglich das A als A darzustellen. Das geht bei Enter nicht, darum hat man sich darauf geeinigt, dass Enter als CR dargestellt wird. CR kommt noch von den alten Druckern und bedeutet carrige return, Wagenrücklauf.
Wenn du bisher in deinem Terminal nach der Zeichenkette Enter gedrückt hast, hat das T-Programm die Zeichenkette abgeschickt. Aber das Enter für sich behalten! Dadurch ist das Programm auf dem Controller nie aus der Schleife gekommen. Wenn du jetzt dem T-Programm gesagt hast, schicke jeder Zeichenkette ein CR nach, schickt es das Enter mit und die Schleife kann verlassen werden.

Gruß

Jens