www.mikrocontroller.net

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


Autor: Paddy (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

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

Bewertung
0 lesenswert
nicht 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
char uart_gets( char* Buffer, char MaxLen )
{
  char NextChar;
  char StringLen = 0;
 
  NextChar = uart_getc();         // Warte auf und empfange das n�chste Zeichen
  uart_putc( NextChar );   // Zu Debug-Zwecken
 
                                  // Sammle solange Zeichen, bis:
                                  // * entweder das String Ende Zeichen kam
                                  // * oder das aufnehmende Array voll ist
  while( NextChar != '\n' && StringLen < MaxLen - 1 ) {
    *Buffer++ = NextChar;
    StringLen++;
    NextChar = uart_getc();

    uart_putc( NextChar );   // Zu Debug-Zwecken
  }

  uart_puts( " Verlasse Schleife\n" ); 
                                  // Noch ein '\0' anh�ngen um einen Standard
                                  // C-String daraus zu machen
  *Buffer = '\0';
  return UDR;
}

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.

Autor: F. Reiling (freiling)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Paddy (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

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

Bewertung
0 lesenswert
nicht 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.

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.