C# Byte an uC senden

Gast #417335
Lesenswert?

Hallo!

Habe da folgendes Problem:

Ich habe in Visual C# ein numericUpDown-Feld mit möglichen Werten von
0...255 (=1 Byte).
Jetzt will ich diesen Wert über die serielle Schnittstelle an meinen
Mega8 senden (dort wird es per cast nach uint8_t übernommen).

Bis zum Wert 127 funktioniert alles prima, danach springt der Wert auf
63 (128 eingestellt - uC empfängt 63).

Denke der Fehler liegt irgendwo in der Typkonvertierung? Habe schon
vieles ausprobiert (Convert.ToChar, ushort usw.).

Jemand eine Idee?

Grüße
Markus
Gast #417336
Lesenswert?

Tag Markus,

also das Problem liegt eher im Encoding. Defaultmäßig wir meiner
bescheidenen Meinung nach ASCII verwendet (7Bit, daher max. 0x63).
Diese soltest du vielleicht folgendermaßen umstellen:

<code>
this.serialPort1.Encoding = Encoding.UTF8;
</code>

Gruß, Slowflyer
Gast #417337
Lesenswert?

Ich denke Du hast ein durcheinander mit den Datentypen. Es ist nötig das
auf dem PC und auf dem uC unsigned datentypen, also ohne Vorzeichen,
verwendet werden.

Das Encoding muss normalerweise nicht angepasst werden.
Gast #417338
Lesenswert?

Nachtrag: In C# ist ein "char" ein UTF-8 Zeichen. Also für so ein
Vorhaben sehr ungeeignet. Ich würde den Index des verwendeten UpDown
Controls in ein "byte" wandeln und dann dieses an die serielle
Schnittstelle schicken. Dann sollte es eigentlich klappen.
Gast #417339
Lesenswert?

Hmm...

@ Johnny

Hast Recht! Wenn man Write(char[]..) oder Write(string) oder
WriteLine(string) verwendet, so scheint es als ob intern der Encoder
verwendet wird. Benutzt man dagegen Write(byte[]...) werden die Bytes
ohne Encoder an die serielle Schnittstelle übergeben.

Gruß, Slowflyer
Gast #417343
Lesenswert?

Ja, es funktioniert.

Hatte zunächst probiert mir vorher einen String zusammen zu bauen, weil
ich ein paar Chars vorher senden muss. Geht natürlich nicht...

also zunächst
....Write("...");
und dann
Write(temp)

Encoding muss man dann auch nicht umstellen.

Danke für eure Tipps!
Gruß
Markus

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren