AVR Empfangspuffer leeren o. ser. Schnittstelle abschalten

Gast #155840
Lesenswert?

Hallo!

Ich habe folgendes Problem:

Mit einem ATMega8515 empfange ich Strings über die ser. Schnittstelle,
deren Länge ich nicht vorhersagen kann.

Die ser. Schnittstelle musste ich puffern, da die Strings teilweise
auch nur durch ein spez. Steuerzeichen getrennt gesendet werden und ich
zwischendurch den Empfangsstring leeren muss.

Bei einem bestimmten Inhalt im String soll eine bestimmte Aktion
ausgeführt werden.

Nach Beendigung soll der AVR wieder auf den Empfang eines speziellen
Strings warten.

Leider kommt es vor, das im Puffer noch Reste eines nachfolgenden
Strings sind, die nicht ausgewertet sondern verworfen werden sollen.

Wie kann ich den Puffer mit Bascom leeren?

Möglich wäre auch, dass der AVR einen Neustart macht. Wie kann ich das
realisieren?

Danke im voraus.

D. Kleinen
#155841
Lesenswert?

Wenn Du nicht weißt, wie lang die einzelnen Strings sind, dann must Du
eben jeden empfangen und zumindest dessen Ende erkennen.

Ganz schlimm wird es, wenn Du innerhalb eines Bytes die UART enablest.
Dann wird nichtmal das Startbit erkannt und die nächsten Bytes sind
völliger Murks.

Ein Neustart ist also absolut verboten, wenn Du keinen Müll empfangen
willst.


Peter
Gast #155842
Lesenswert?

Hallo!

Da zwischen den einzelnen Strings bzw. Stringgruppen immer wieder
Pausen sind, ist das kein Problem.

Wie kann ich denn die ser. Schnittstelle ab- und wieder einschalten?

Bzw. bei einem normalen Start kann es ja auch vorkommen, dass die
SChnittstelle mittendrin eingeschaltet wird. Da wäre doch auch ein
Neustart möglich, oder?

Wie setze ich das alles in Bascom um ? (Neusrat bzw. Ein/Ausschalten)

Werde es einfach ausprobieren.

Daniel
Gast #155843
Lesenswert?

Indem du einfach das UART-Enable Bit im UART-Kontrollregister
löscht/setzt. Scheint mir eine typische "Krankheit" von
BASCOM-Programmierern zu sein, dass so einfache Sachen zu Problemen
führen. In C setzt du dieses Bit manuell während der Init und
entsprechend stellt das Löschen auch kein Problem dar. In BASCOM müsste
man doch auch einfach auf die Systemregister zugreifen können?!
#155844
Lesenswert?

Du must in jedem Fall den Anfang eines Strings erkennen.

Und wenn das über die Pause zwischen den Strings geht, ist das auch
kein Problem:

Du zählst einfach im Timerinterrupt eine Variable hoch und der
UART-Empfangsinterrupt setzt diese Variable immer auf 0.
Erreicht nun die Variable einen bestimmten Wert, weißt Du daß eine
Pause ist und kannst dann den Empfangspuffer leeren.


Peter

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