C#: Werte vom uC einlesen

Gast #4373419
Hallo liebes Forum,

ich möchte Werte erfassen (es sind insgesamt 32 Byte), die jede Sekunde 
an den PC gesendet werden.

Dazu schreibe ich gerade eine Windows Forms-Anwendung in C#. Mein 
Problem ist, dass eigentlich Zahlen dargestellt werden sollten, 
allerdings gibt mir die TextBox irgendwelche Zeichen aus (siehe Bild im 
Anhang).

Ich weiß nicht genau woran es liegt. Erkennt jemand von euch einen 
Fehler in meinem Programm?

Der Code in C# lautet:

public Form1()
        {
            InitializeComponent();

        }

        private void timer1_Tick(object sender, EventArgs e)
        {

            string A = serialPort1.ReadExisting();
            if (A != "")
            {
                richTextBox1.AppendText(A);
            }
        }


        private void button1_Click(object sender, EventArgs e)
        {
            //Werte einlesen nach dem "Start" geklickt wurde

            try
            {
                serialPort1.PortName = comboBox1.Text;  //ausgewählte 
Port soll geöffnet werden
                serialPort1.BaudRate = Convert.ToInt32(comboBox2.Text); 
//ausgewählte Baudrate

                serialPort1.Open();

                if (serialPort1.IsOpen)
                {
                    button1einlesen.Enabled = false;
                    button2ausschalten.Enabled = true;
                }
                timer1.Start();
            }
            catch
            {
                MessageBox.Show("COMPORT ist geschlossen");
            }

        }
Angehängte Dateien:
Gast
Dietrich L. schrieb:
> Wo kommen die Daten her? Wie sind die Daten kodiert?
Daten kommen vom uC und werden über RS485 transferiert.


> Stimmt die Baudrate und die anderen Parameter der UART-Einstellung
beider Teilnehmer überein?
Baudraten-Einstellung sollte passen


Bastian Werner schrieb:
> Sendest du die Zahlen als ASCII Zeichen oder direkt als Zahl ?
Sie werden direkt als Zahl gesendet


Felix Adam schrieb:
> Eventuell fehlt auch nur die richtige Codierung
Habe deinen Code hinzugefügt, aber leider bleibt mein Problem weiterhin 
vorhanden!

Danke für eure bisherigen Antworten!
Wenn deine Zeichen direkt als Zahl gesendet werden, z. B. so:

a = 17
b = 243
uartSend(a,b);

dann musst du auf dem PC natürlich aus den Zeichen, die da ankommen, 
wieder Zahlen machen.

Ich mache das so:

  // Bytearray für die Daten anlegen
Byte[] data_received = new Byte[20];

  // Daten lesen
data_received_bytes = (Byte)serialPort.BytesToRead;
serialPort.Read(data_received, 0, data_received_bytes);

  // String mit der konvertierten Zahl füllen (hier wird ein byte in 
einen
  //String gewandelt.
string A = Convert.ToString((Byte)data_received[2]);

Hier steht in A jetzt z. B. eine "123" statt "{".

(Und ja, ich weiß, es gibt hier keine Fehlererkennung bezüglich der 
Datenlänge. Ist auch nur ein Beispiel.)


Ach ja, lasse den Code von mir bei dir drin. Sonst wandelt das Programm 
manche Bytes einfach in andere um, weil da eine andere Codierung 
standardmßig drauf läuft.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.