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
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
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
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?!
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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.