Forum: Mikrocontroller und Digitale Elektronik [Atmega 8] Uart sendet nichts zurück


von Paddy (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,
hab da ein Problem und hoffe ihr könnt mir vielleicht weiter helfen!
Hab die Musterlösung des UART von microcontroller.net ein wenig 
abgeändert und jetzt funktioniert der UART nicht mehr.
Wenn ich mit dem Terminal - Programm einen String sende,soll der UART 
genau denselben String wieder zuück senden über RS232 aber das tut er 
nicht.
Wäre für Tipps und Ratschläge sehr dankbar,
Paddy

von Karl H. (kbuchegg)


Lesenswert?

Paddy schrieb:

> abgeändert und jetzt funktioniert der UART nicht mehr.

Hat er schon funktioniert?

> Wenn ich mit dem Terminal - Programm einen String sende,soll der UART
> genau denselben String wieder zuück senden über RS232 aber das tut er
> nicht.

(Du hast 'Return' gedrückt als Kennzeichnung, dass der String zu Ende 
ist?)

Könnte ein Problem sein, wenn dein Terminal Programm eine Zeile nicht 
mit \n abschliesst, sondern mit \r. In dem Falle ist es eine Frage der 
Einstellung des Terminals

Verändere mal deine uart_gets, so dass sie sofort nach Empfang eines 
Zeichens dieses Zeichen zurückschickt, damit du siehst ob und was von 
der uart_gets empfangen wird
1
char uart_gets( char* Buffer, char MaxLen )
2
{
3
  char NextChar;
4
  char StringLen = 0;
5
 
6
  NextChar = uart_getc();         // Warte auf und empfange das n�chste Zeichen
7
  uart_putc( NextChar );   // Zu Debug-Zwecken
8
 
9
                                  // Sammle solange Zeichen, bis:
10
                                  // * entweder das String Ende Zeichen kam
11
                                  // * oder das aufnehmende Array voll ist
12
  while( NextChar != '\n' && StringLen < MaxLen - 1 ) {
13
    *Buffer++ = NextChar;
14
    StringLen++;
15
    NextChar = uart_getc();
16
17
    uart_putc( NextChar );   // Zu Debug-Zwecken
18
  }
19
20
  uart_puts( " Verlasse Schleife\n" ); 
21
                                  // Noch ein '\0' anh�ngen um einen Standard
22
                                  // C-String daraus zu machen
23
  *Buffer = '\0';
24
  return UDR;
25
}

Diese Technik solltest du dir angewöhnen: Wenn du nicht weißt, was genau 
in einem Programm vor sich geht, dann bau dir irgendwelche Ausgaben ein, 
die dir mitteilen was vor sich geht.
Das kann sein, dass du eine LED an bestimmten Programmpunkten 
aufleuchten lässt. Das kann sein, dass du einen Text auf dem LCD 
ausgibst. Das kann aber auch sein, dass du etwas über die UART ausgibst. 
Hauptsache, das Programm 'erzählt' dir, was es mit welchen Daten macht.

Hast du alles zufriedenstellend lauffähig, dann entfernst du diese 
zusätzlichen Ausgaben wieder.

von F. R. (freiling)


Lesenswert?

Wie schon kbuchegg gemeint hat, bau dir irgendwelche Anzeigen ein, am 
einfachsten ist eine LED.
Des Weiteren, funktioniert das Senden eines Strings für sich alleine? 
Kannst ja einfach versuchen, indem du die gets-Funktion mal 
auskommentierst und einen festen String ausgibts.

von Paddy (Gast)


Lesenswert?

hallo
es hat schon mal funktioniert ein einzelnes zeichen zu senden und wieder 
zu empfangen..das ging so wie bei µ.net beschrieben war..
ich habe den code so geändert wie kbuchegg vorgeschlagen hat, leider 
ohne erfolg.
wie schlagt ihr vor das mit der led zu machen?

von Karl H. (kbuchegg)


Lesenswert?

Paddy schrieb:
> hallo
> es hat schon mal funktioniert ein einzelnes zeichen zu senden und wieder
> zu empfangen..das ging so wie bei µ.net beschrieben war..
> ich habe den code so geändert wie kbuchegg vorgeschlagen hat, leider
> ohne erfolg.


Was heisst: Kein Erfolg?

Empfängst du nichts, oder sendet der µC nicht

> wie schlagt ihr vor das mit der led zu machen?

Einfach einschalten.
Kommt ein Zeichen an, wird die LED eingeschaltet. ganz einfach.

Jetzt gibt es 2 Möglichkeiten:
du tippst auf deinem Terminal und die LED bleibt dunkel.
Dann weißt du, das der Empfang nicht klappt.

Oder die LED geht an. Dann weißt du, das etwas empfangen wurde und das 
Senden nicht klappt.


Ein bischen Phaantasie musst du schon auch selber aufbringen. Wenn alles 
was du hast eine lange Stange ist und du Gegenstände in einer Kiste 
identifizieren sollst in die du nicht hineinsiehst und auch nicht mit 
der Hand hineingreifen kannst, dann musst du dir überlegen wie man mit 
einer Stange die gesuchte Information bekommen kann. Umgemünzt auf dich 
bedeutet das:
Die erste Frage lautet: Welche Information würde mir weiterhelfen?
Die nächste Frage lautet: Wie kann ich mir diese Information 
verschaffen? Und zwar mit den banalen Mitteln die ich habe. Wenn ich nur 
eine LED zur Verfügung habe, dann muss ich die Frage so stellen, dass 
nur eine Ja/Nein Antwort möglich ist, denn die kann ich mit der LED 
darstellen.

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.