Laden...

SerialPort schickt beim Öffnen Daten zum µC

Erstellt von Mettwurstfan vor 10 Jahren Letzter Beitrag vor 10 Jahren 1.480 Views
M
Mettwurstfan Themenstarter:in
8 Beiträge seit 2012
vor 10 Jahren
SerialPort schickt beim Öffnen Daten zum µC

Hallo,

ich versuche mich gerade daran große Datenmengen an einen µC zu schicken, habe aber bereits beim Öffnen des Ports ein Problem:

Sobald ich den Port öffne, schickt er zufällig 0-3 mal das Zeichen MINUS, also eine 240 zum µC.

Ich habe in den Einstellungen des Ports nichts gefunden, was mir dieses Verhalten erklären könnte, da es bereits beim Öffnen passiert. Ich starte das Programm, öffne den Port und schon schickt er 240 raus. Das Programm hat nicht mal Code, es ist nur der Port, den ich über eine Checkbox öffne und schließe 😦

Habt ihr eine Idee, was da los ist? Ist das ein normales Protokoll?

T
708 Beiträge seit 2008
vor 10 Jahren

Habt ihr eine Idee, was da los ist? Ist das ein normales Protokoll?

Hallo Mettwurstfan,

das ist gut möglich. Es gibt eine Fanstastillion Kombinationen der Konfigurationen der Seriellen Schnittstelle.
Der Handshake wäre z.B. ein möglicher Verursacher.
Bist Du denn sicher, dass der µC nicht Daten sendet, die Dein Programm nur quittiert?

Gruß,
trib

M
Mettwurstfan Themenstarter:in
8 Beiträge seit 2012
vor 10 Jahren

Handshake ist aus.

Ich schicke alles, was zum µC kommt wieder sofort zurück. Wenn ich das Zurückschicken rausnehme, kommt auch nichts zurück. Deshalb bin ich ziemlich sicher, dass erst etwas vom PC kommt.

T
708 Beiträge seit 2008
vor 10 Jahren

Funktioniert denn die anschließende Übertragung problemlos?
Also kommen gesendete Zeichen und/oder Zeichenketten so zurück wie Du sie sendest? Sonst sorgt vielleicht eine falsche Parität o.ä. für das Verhalten.

Um ganz sicher zu gehen woher welche Daten kommen, verwende ich gerne den Free Serial Port Monitor. Der hat mir häufig beim Trouble-Shooting geholfen.

Wie sprichst Du den Port denn an? Verwendest Du eine fertige Library, liest Du die Zeichen einzeln aus oder nutzt du das Received-Event?

M
Mettwurstfan Themenstarter:in
8 Beiträge seit 2012
vor 10 Jahren

Ja, die Daten nach diesen ersten merkwürdigen Bytes kommen genau wie erwartet an und wieder zurück.

Ich frage im Recieved-Event die Anzahl der Zeichen im Eingangspuffer ab und lese, sobald die eingestellte Blockgröße erreicht ist, einen Block mit .Read aus:

serialPort1.Read(buffer_in, data_in_count, blockgroesse);

Den Monitor schaue ich mir mal an.

T
708 Beiträge seit 2008
vor 10 Jahren

Hmm, komisch.
Was ich etwas anders mache ist das auslesen im Event. Da spare ich mir Buffer, Offset & Größe mitzugeben, sondern lese immer alles mit:

        void comPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {                      
               string input = comPort.ReadExisting();
        }

Vielleicht hast Du noch irgendwelche "Leichen" im SerialPort-Controller, die du mit ausliest.

185 Beiträge seit 2005
vor 10 Jahren

Das Lesen bei einer bestimmten Blockgrösse würde ich nicht empfehlen.
Schau dir mal an, wie üblicherweise serielle Übertragungsprotokolle aufgebaut sind.

STX|Daten|ETX|CRC

Damit kannst du immer auf den Start und das Ende Triggern.
Wenn bei dir mal was schiefgeht, kommt deine ganze Kommunikation durcheinander.