Forum: Mikrocontroller und Digitale Elektronik Bascom: serieller Datenempfang hängt sich auf


von Tester (Gast)


Lesenswert?

Hallo,

ich hab ein Problem mit dem seriellen Datenempfang.

Ich empfange serielle Kommndos und muss diese im uC entsprechend 
auswerten.

Beipsiele:
<SET+X:043>    --> Speichern eines Parameters ins EEPROM
<EIN>          --> Der ADC Wandler soll eingeschaltet werden und sendet 
seine Werte über die RS232 an den PC

Vorgehensweise:
Wenn ich das Zeichen "<" empfange erzeuge ich einen Interrupt und setzte 
eine Variable auf null. In dieser Variable werden ab diesem Moment alle 
empfangenen Zeichen gespeichert und später mit einem vorgebenen String 
verglichen.

Nun kann es sein, dass der uC nicht mehr auf die Kommandos reagiert.



Vielen Dank schon mal im voraus.

von Läubi (Gast)


Lesenswert?

Programm??

von Tester (Gast)


Lesenswert?

Programm:

von Tester (Gast)


Angehängte Dateien:

Lesenswert?

Sorry!

von Gerd L. (gerd)


Lesenswert?

Hallo Tester,

ich habe Dein Programm nicht ganz durchschaut, insbesondere da Du nur
einen Teil des Programms angehängt hast. Ich könnte mir aber vorstellen,
dass Dein Vorgehen mit dem Interrupt beim "<"-Zeichen zu Problemen 
führt.

Du modifizierst "Empfangene_daten" im Interrupt "Serial0charmatch:"
sowie in der Sub "Serieller_datenempfang()". Was passiert, wenn ein 
Interrupt auftritt während das Programm in der Sub ist? Das könnte Ärger 
machen.

Gruß
Gerd





von klugscheissender Rahul, manchmal auch fies (Gast)


Lesenswert?

Warum empfängst du nicht einfach solange die Daten (und schreibst sie in 
einen Puffer), bis du ">" empfängst? Danach könnte man den Befehl dann 
auswerten.
Ich würde einen Rinpuffer verwenden und beim Empfang von ">" ein Flag 
setzen. Daraufhin würde ich den String seit des letzten ">"-Empfangs 
auswerten. Sobald der Lesezeiger beim ">" angekommen ist und der Befehl 
abgearbeitet wurde, wird auf den nächsten gewartet.

von Tester (Gast)


Lesenswert?

Danke für die Antworten.

Ich hab mir schon so etwas wie mit dem Interrupt gedacht. Denn das 
Problem tritt nur auf, wenn ich innerhal kürzester Zeit mehrere 
Kommandos sende.

Die Lösung mit dem Rinpuffer finde ich gut. Ich werde sie auf alle Fälle 
mal ausprobieren. Denn hier bin ich mir sicher, dass das komplette 
Kommando gesendet sein müsste. Ich muss dann halt nur von hinten das 
Kommando asuwerten.


Gruß

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
Noch kein Account? Hier anmelden.