Forum: Mikrocontroller und Digitale Elektronik C#: Werte vom uC einlesen


von Peter (Gast)


Angehängte Dateien:

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");
            }

        }

von Dietrich L. (dietrichl)


Lesenswert?

Wo kommen die Daten her? Wie sind die Daten kodiert?
Stimmt die Baudrate und die anderen Parameter der UART-Einstellung 
beider Teilnehmer überein? Dabei dürfen die Baudraten nur wenige Prozent 
voneinander abweichen.

Gruß Dietrich

von Bastian W. (jackfrost)


Lesenswert?

Sendest du die Zahlen als ASCII Zeichen oder direkt als Zahl ?

Gruß JackFrost

von Felix A. (madifaxle)


Lesenswert?

Eventuell fehlt auch nur die richtige Codierung.

serialPort.BaudRate = 9600; // 115200;
    // Sonst Zeichenmurks
serialPort.Encoding = Encoding.GetEncoding(28591);
serialPort.DataBits = 8;
serialPort.Parity = Parity.None;

von Peter (Gast)


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!

von Felix A. (madifaxle)


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.

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
Noch kein Account? Hier anmelden.