UART Empfangspuffer ignorieren

Gast #1853233
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?
#1853237
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?
Gast #1853254
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.
#1853266
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren