0

大家好,

首先让我说我是 C# 新手,因为我更喜欢嵌入式 C。

我正在尝试使用 MSP430FR5739(TI 微控制器)从信号发生器读取 2Hz 信号。我使用板载 ADC 以 1MHz 周期以 1024 个样本对模拟值进行采样,并使用 USB 转串口以 9600 波特率通过 UART 通信发送。我让这一切工作得非常完美......(因为我已经通过超级终端和arduino的串行监视器对此进行了测试)

发送的数据,如下所示:(每个都换行)

0

0

0

16

51

123

157

227

250

315

338

384

404……

如您所见,每个数据都显示在一个新行上......但这是我的问题。

目前,我正在使用此 C# 代码在显示数据的应用程序中读取和解析数据,如下所示:

[接收数据][1]

这是UI应用程序的问题:

当 2Hz 信号发生变化时(例如从正弦波变为方波,或峰峰值发生变化),我的应用程序中的数据需要永远发生变化。如果我通过超级终端或 arduino 的串行监视器读取信号数据,一旦信号值发生变化,数据也会发生变化……但不在此应用程序中。我认为,我正在正确读取串行端口,但我认为有某种缓冲区已填满,然后该缓冲区需要永远到达信号更改的点,然后显示它。我真的需要了解发生了什么......我试图在互联网上找到可能的解决方案以寻求解决方案,但我没有找到任何有意义的解决方案。

为什么我不能像串行控制台那样实时读取它?

/***function for listening incoming data on the serial COM port***/
    private void ComPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
        try
        { 
            if (serialPort.ReadBufferSize != 0)
            {
                ReceivedData = ComPort.ReadLine();      //read each data line whenever the buffer size is not zero
                this.Invoke(new EventHandler(DisplayData)); //call another thread to write data on rtxtDisplay
            }
        }
        catch(TimeoutException)
        {
            MessageBox.Show(this, "Buffer error!", "TIMEOUT EXCEPTION", MessageBoxButtons.OK, MessageBoxIcon.Warning);
        }
    }

    /***function to display the received***/
    private void DisplayData(object sender, EventArgs e)
    {
        try
        {
            if (ckBoxAutoscroll.Checked == true)
            {
                rtxtDataRx.AppendText(ReceivedData);   //display each data received
                rtxtDataRx.SelectionStart = rtxtDataRx.Text.Length - 1;
                rtxtDataRx.ScrollToCaret();                     //auto scroll the rich textbox with incoming data
            }
            else
            {
                rtxtDataRx.AppendText(ReceivedData);   //display each data received
                rtxtDataRx.SelectionStart = rtxtDataRx.Text.Length - 1;
            }                

            //for testing the signal generator
            val1 = Convert.ToDouble(ReceivedData);
            val1 = (val1 * 0.00352);
            num1 = Math.Round(val1, 2);
            voltage = Convert.ToString(num1);
        }
        catch (Exception)
        {
            //catch any bug and display this message
            MessageBox.Show(this, "Transmission jammed!", "UART COMs ERROR", MessageBoxButtons.OK, MessageBoxIcon.Warning);
        }
    }
4

0 回答 0