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
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
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.
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.
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
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
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.