www.mikrocontroller.net

Forum: PC-Programmierung C# Byte an uC senden


Autor: MarkusW (Gast)
Datum:

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

Autor: Slowflyer (Gast)
Datum:

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

Autor: Johnny (Gast)
Datum:

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

Autor: Johnny (Gast)
Datum:

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

Autor: Slowflyer (Gast)
Datum:

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

Autor: Johnny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sehr gut wenn's geklappt hat. Solche Dinge muss jeder mal durchmachen
;-)

Autor: Slowflyer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ähm..

Ob es bei Markus funzt weiss ich leider nicht ;)

Autor: Johnny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oh ja ;-)

Autor: MarkusW (Gast)
Datum:

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

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.