Wykres wartości z ADC (STM32) Temat rozwiązany

Programowanie w C# pod Visual Studio
ODPOWIEDZ
ps19
Użytkownik
Posty: 18
Rejestracja: 16 paź 2017, 21:42
Lokalizacja: Opole

Wykres wartości z ADC (STM32)

Post autor: ps19 » 20 maja 2019, 15:49

Witajcie

Próbuje zrobić w c# wykres wartości, które przesyłam przez USART`a - "tablica" 100 wartości (bajtów) wysyłane co 1 milisekundę. Problem polega na tym, że wykres nie pokazuje "na żywo" danych tylko z bardzo dużym opóźnieniem bliżej nieokreślone wartości.

Dane idą dobre bo Terminal by Bray wyświetla wykres poprawnie.

Zmienne:
  1.         public int OscSamplesCount = 50;
  2.         public static readonly int RxFrameSize = (50)+1;
  3.         public byte[] RxBuff = new byte[RxFrameSize];
Inicjalizacja Timera
  1.             // Setup timer
  2.             _timer1.Interval = 1; //1000ms = 1sec
  3.             _timer1.Tick += timer1_Tick;
Obsługa Timera
  1.         private void timer1_Tick(object sender, EventArgs e)
  2.         {
  3.             try
  4.             {
  5.                 if (sender == _timer1 && _myserial.SerialPort1.IsOpen)
  6.                 {
  7.                     _ch1Data = Convert.ToDouble(_myserial.RxBuff[samples]);
  8.                     _ch1Data = _ch1Data * (3.3 / 255);
  9.                     _myChart.DrawChart(0, chart1, _ch1Data, _ticks, _myserial.OscSamplesCount);
  10.                     _ticks += 1;
  11.                     samples++;
  12.                     graphUpdate++;
  13.                     if (samples >= _myserial.OscSamplesCount) samples = 0;
  14.                     if (graphUpdate == _myserial.OscSamplesCount)
  15.                     {
  16.                         chart1.Series.ResumeUpdates();
  17.                         chart1.Series.Invalidate();
  18.                         chart1.Series.SuspendUpdates();
  19.                         graphUpdate = 0;
  20.                     }
  21.                 }
  22.             }
  23.             catch (Exception exception)
  24.             {
  25.                 MessageBox.Show("Error: " + exception);
  26.             }
  27.         }
Rysowanie wykresu:
  1.         public void DrawChart(int seriesNumber, Chart chartName, double data, double ticks, int samples)
  2.         {
  3.             try
  4.             {
  5.                 chartName.Series[seriesNumber].Points.AddXY(ticks, data);
  6.  
  7.                 if (chartName.Series[seriesNumber].Points.Count >= samples) chartName.Series[seriesNumber].Points.RemoveAt(0);
  8.  
  9.                 chartName.ChartAreas[0].AxisX.Minimum = chartName.Series[0].Points[0].XValue;
  10.                 chartName.ChartAreas[0].AxisX.Maximum = ticks + 1;
  11.             }
  12.             catch (Exception e)
  13.             {
  14.                 MessageBox.Show("Error: " + e);
  15.             }
  16.         }
Odbiór danych:
  1.         private void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
  2.         {
  3.            // string rxdata = null;
  4.             try
  5.             {
  6.                 SerialPort sp = (SerialPort)sender;
  7.  
  8.                 sp.Read(RxBuff, 0, RxFrameSize);
  9.             }
  10.             catch (Exception ex)
  11.             {
  12.                 MessageBox.Show("Błąd:\n" + ex.Message);
  13.             }
  14.         }

Awatar użytkownika
SunRiver
Administrator
Posty: 763
Rejestracja: 08 paź 2017, 11:27
Lokalizacja: Opole
Kontakt:

Re: Wykres wartości z ADC (STM32)

Post autor: SunRiver » 20 maja 2019, 16:32

a czego używasz Wizualnie do przeglądu ??

dataChart ?? czy wypluwasz w konsole ??
.... z każdym bitem serca ....
💫SunDUINO
💦GitHUB
💦Google Drive
💦Sotton

ps19
Użytkownik
Posty: 18
Rejestracja: 16 paź 2017, 21:42
Lokalizacja: Opole

Re: Wykres wartości z ADC (STM32)

Post autor: ps19 » 20 maja 2019, 16:39

Podgląd przez terminal

Awatar użytkownika
SunRiver
Administrator
Posty: 763
Rejestracja: 08 paź 2017, 11:27
Lokalizacja: Opole
Kontakt:

Re: Wykres wartości z ADC (STM32)

Post autor: SunRiver » 20 maja 2019, 16:41

zaraz będe miał chwilę to coś na szybko scrobnę ....
żeby mieć jakiś wgląd do całokształtu

Dodano po 1 godzinie 15 minutach 20 sekundach:
zakomentuj linie init dla timeratimera a we właściwościach Timera ustaw interwał na 100 (właściwości z okna designera)

w przycisku połączenia z serialem uruchom Timer
  1.        SerialPort1.Open()
  2.         Timer1.Start()
zaś całość przypisania danych które nadlatują wrzuć do handlera timer_tic włacznie z rysowanie , nie buforuj danych
powinno lecieć na żywo , ew wyreguluj interwałem w ustawieniach Timer1

to powinno pomóc ...
.... z każdym bitem serca ....
💫SunDUINO
💦GitHUB
💦Google Drive
💦Sotton

ps19
Użytkownik
Posty: 18
Rejestracja: 16 paź 2017, 21:42
Lokalizacja: Opole

Re: Wykres wartości z ADC (STM32)

Post autor: ps19 » 20 maja 2019, 22:42

Dziękuję pomogło, działa nawet z buforowaniem i odświeżaniem 1 kHz

Awatar użytkownika
SunRiver
Administrator
Posty: 763
Rejestracja: 08 paź 2017, 11:27
Lokalizacja: Opole
Kontakt:

Re: Wykres wartości z ADC (STM32)

Post autor: SunRiver » 21 maja 2019, 9:52

proszę bardzo :)
.... z każdym bitem serca ....
💫SunDUINO
💦GitHUB
💦Google Drive
💦Sotton

ODPOWIEDZ