mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVR Empfangspuffer leeren o. ser. Schnittstelle abschalten


Autor: Daniel Kleinen (Gast)
Datum:

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

Autor: Peter Dannegger (peda)
Datum:

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

Autor: Daniel Kleinen (Gast)
Datum:

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

Autor: Mike (Gast)
Datum:

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

Autor: Peter Dannegger (peda)
Datum:

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

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.