mikrocontroller.net

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


Autor: Tester (Gast)
Datum:

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

Autor: Läubi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Programm??

Autor: Tester (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Programm:

Autor: Tester (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Sorry!

Autor: Gerd L. (gerd)
Datum:

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





Autor: klugscheissender Rahul, manchmal auch fies (Gast)
Datum:

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

Autor: Tester (Gast)
Datum:

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

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.