www.mikrocontroller.net

Forum: Compiler & IDEs UART Empfangspuffer ignorieren


Autor: Uwe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe einen Atmega 128 und die UART per Pollen eingestellt. Nun 
möchte ich, dass mein Programm läuft, egal ob der Sensor über die UART 
angeschlossen ist oder nicht.

Ich sende Befehle über die UART aus, lese aber die Antwort nicht zurück.

Wenn der Sensor nicht angeschlossen ist, funktioniert das!
Sobald ich den Sensor anschließe, hängt sich mein Programm auf. Liegt 
das daran, dass ich den Empfangspuffer nicht leere, sondern eben einfach 
nur ignoriere??

Ich verwende bei der UART die Befehle getchar() und putchar und möchte 
diese aber nicht per Interrupt steuern.
Wie kann ich dann das Programm schreiben, dass ich in der Funktion 
getchar() nicht hängen bleibe, weil kein Zeichen kommt?

Autor: Uwe ... (uwegw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Irgendwie erscheint mir deine Beschreibung etwas widerspüchlich:
Du sendest nur, liest aber nichts ein, und trotzdem hast du ein 
getchar() im programm? Also liest du doch was ein? Und wie kommst du 
eigentlich an die Daten des Sensors, wenn du doch die Antworten 
ignorieren willst?

Autor: ahlol (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Überprüfst du überhaupts die Flags? Wenn du nicht weißt was das ist -> 
Datenblatt!

Autor: Thomas Weyhrauch (thomas100)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
getchar () liest, wie der Name schon sagt, ein Zeichen. Und wenn keins 
da ist, wartet die Funktion so lange, bis eins da ist.
Also vorher abfragen, ob in deinem Empfangsbuffer Zeichen liegen. Dann 
erst mit getchar() abfragen.

Autor: Uwe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aber einen Empfangspuffer habe ich nur, wenn ich die UART per Interrupt 
steuere. Ich möchte sie aber pollen. Wie geht das dann?

Kann ich die UART per pollen nutzen und was soll ich vorher abfragen, 
bevor ich die Funktion getchar dann aufrufe?

Rx_counter geht dann nicht, soweit ich das sehen kann.

Autor: Detlev T. (detlevt)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Uwe,

es hängt ja davon ab, was die Funktion getchar() macht. Wartet sie 
solange, bis tatsächlich ein Zeichen kommt? Wenn ja, dann musst du diese 
Routine ändern, da führt kein Weg dran vorbei. Dann brauchst du eine 
Unterscheidung, ob ein Zeichen empfangen wurde oder nicht.

Übliche Alternativen sind
1.) 0x00 zurückzugeben, wenn kein Zeichen empfangen wurde. Das setzt 
natürlich voraus, dass dieser Wert im Zeichenstrom nicht vorkommen kann. 
(z.B. ASCII)
2.) Der Rückgabewert ist nicht vom Typ char, sondern uint16_t. Das 
erlaubt auch den Wert 0x00 im Zeichenstrom, weil man dann bei keinem 
Zeichen z.B. 0x8000 zurückgeben kann.

Gruß, DetlevT

Autor: ahlol (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Uwe: Nochmals... Schau mals Datenblatt an, da steht das bestimmt mit 
den Flags passend drin ;-)

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.