Das Problem dürfte nicht an der Baudrate liegen. Wenn ich mir das Signal mit dem PUTTY ansehe, kommen die Werte perfekt.
Das Problem dürfte nicht an der Baudrate liegen. Wenn ich mir das Signal mit dem PUTTY ansehe, kommen die Werte perfekt.
Meinst du nicht, dass es wirklich daran liegen könnte, dass während dem Zurücksetzen des Buffer schon wieder neue
Daten hineingeschrieben wurden, so wie lokirobotics schrieb.
Hast du es schon einmal auf die Weise probiert, die lokirobotics dir geraten hat?
Also mit dem Zwischenspeichern einiger Werte auf dem µC und dem Übertragen von mehreren Werten auf einmal an den
PC.
Ich hatte auch mal ein Buffer Problem das der Buffer schon wieder beschrieben wird werde er noch gelesen wird Mach zwei Buffer ! Die wie ein Flipflop funzen.
In der Zeit wo der eine Buffer gelesen wird, wird der ander Buffer beschrieben !
Eft hilft das.
MFG Oliver G
OK mach ich aber ich würde aber auch gerne mas sehn wie du die Daten von Comport holst. ( Event-Handler usw.. )
Buffer erstellen:
Wenn du die Daten hast werden sie abwechselnd in M_byte_Buffer_01 / M_byte_Buffer_02 geschickt ! Und zu gleich holst du die Daten von M_byte_Buffer_01 / M_byte_Buffer_02. Aber nicht von den die gerade beschrieben werdenCode:byte[] M_byte_Buffer_01 = new byte[5]; byte[] M_byte_Buffer_02 = new byte[5];![]()
PS: Wenn man es jetzt genau nimmt ist es 3 fach gepuffert! Ich hab vergessen das beim:
( serialPort1 System.IO.Ports.SerialPort ) Puffer dabei sind?
Wie gross ist "ReadBufferSize" bei dir ?
MFG Oliver G
Danke für die Antwort. Ich überlege aber auf USB umzusteigen, dann Hatte ich die Übertragungsprobleme nicht mehr. Kennt sich da jemand aus mit der USB-Kommunikation in C#. Und auch wie ich das mit einem USB-Fähigem Atmell µC mache?
Aber Vielleicht bleibe ich doch bei RS232. Hier ist mein Code. Hoffentlich weiß jemand, wie ich es verbessern könnte. Ich verwende einen 6 Byte buffer und das Data_Recive Event wird nach 5 empfangenen Bytes ausgelöst.
Code:using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO.Ports; using NationalInstruments; using NationalInstruments.UI; namespace WindowsFormsApplication2 { public partial class Form1 : Form { public static double Messwert; public static int werte = 0; public static double[] dataValues = new double[200]; public Form1() { InitializeComponent(); serialPort1.Open(); } private delegate void SetTextDeleg(double text); public void serialPort1_DataReceived_1(object sender, SerialDataReceivedEventArgs e) { double messval = messen(); this.BeginInvoke(new SetTextDeleg(si_DataReceived), new object[] { messval }); waveformGraph1.PlotY(dataValues, 0, 10, 0, 5); } private void si_DataReceived(double data) { label1.Text = data.ToString(); meter1.Value = data; } public double messen() { string mess = ""; mess = serialPort1.ReadTo("a"); serialPort1.DiscardInBuffer(); try { Messwert = Convert.ToDouble(mess) / 1023 * 5.07*2.794; dataValues[i] = Messwert; i++; } catch { serialPort1.DiscardInBuffer(); } return Messwert; } } }
Geändert von didi34 (05.02.2012 um 13:46 Uhr)
Lesezeichen