C#: Werte vom uC einlesen

Gast #4373419
Lesenswert?
• ▲
▼
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 #4374449
Lesenswert?
• ▲
▼
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!
#4374477
Lesenswert?
• ▲
▼
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

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