Forum: PC-Programmierung C# FTDI - Daten erfassen alle 10ms


von Stefan (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich muss folgendes in C# programmieren. Von einem uC bekomme ich Daten 
alle 10ms über einen FTDI chip. Ich habe die Schnittstelle zwischen PC 
und FTDI mit Hilfe von FTD2XX_NET aufgebaut und funktioniert bestens. 
Beim senden der Daten von PC reagiert der uC und ich empfange auch Daten 
von uC. Mein Problem ist nun, dass es bei FTD2XX_NET keine 
SerialDataReceivedEvent gibt wie bei C# standard COM Bibliothek. 
Deswegen habe ich einen Timer definiert mit Hilfe von Multimedia.dll, 
weil dieser angeblich genauer sein soll, wie der von Windows.
1
this.mmTimer.Mode = Multimedia.TimerMode.Periodic;
2
this.mmTimer.Period = 10;
3
this.mmTimer.Resolution = 10;
4
this.mmTimer.Tick += new System.EventHandler(this.mmTimer_Tick);
5
6
counter_1ms = 0;
7
mmTimer.Start();

Der Timer wird auch aufgerufen.
1
private void mmTimer_Tick(object sender, System.EventArgs e)
2
{
3
  counter_1ms++;
4
  reiceveBuffer = device.FTDI_Read();
5
  MessageBox.Show(reiceveBuffer);
6
  updateReceivedMSG();
7
}

Nun wenn ich die Daten weiterverarbeiten mit updateReceivedMSG() 
Funktion möchte, einfach in RichTExt reinschreiben, bekomme ich einen 
Fehler den ich gar nicht verstehe. Dabei tritt der Fehler auf nicht beim 
compilieren, sonder wenn die Software startet und die Daten bekommt. Ich 
bin recht neu bei PC Programmierung, komme von uC.

Ich habe versucht Lösung und andere Wege zu 
finden(http://www.codeproject.com/Articles/685749/Data-Acquisition-Library), 
bin aber gescheitert, da ich besonders bei der anderen Lösung wie im 
Link, gar nichts verstanden habe. Der Fehler tritt auf wegen 
Thread-Klassen und deren Behandlung, aber wie löse ich das Problem, ist 
mir bisher nicht klar.

Kann mir einer Helfen und sagen was ich falsch machen?

Gruss Stefan

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Stefan schrieb:
> Mein Problem ist nun, dass es bei FTD2XX_NET keine
> SerialDataReceivedEvent gibt wie bei C# standard COM Bibliothek.

Und warum benutzt Du "FTD2XX_NET"? Benötigst Du denn irgendeine 
Funktionalität, die über die einer normalen seriellen Schnittstelle 
hinausgeht?

von Willi (Gast)


Lesenswert?


von Moritz (Gast)


Lesenswert?

Der Timer Event wird aus einem anderen Thread aufgerufen. Deswegen 
kannst du nicht auf deine GUI zugreifen. Du muss "Invoke" verwenden. 
Dazu gibts im Internet genug Beispiele.

von bluppdidupp (Gast)


Lesenswert?

Wird das Timing PC-seitig denn überhaupt benötigt?
Könntest du nicht PC-seitig einfach in Endlosschleife (z.B. in einem 
BackgroundWorker) vom Port lesen und brauchst eigentlich gar keinen 
Timer?

Oder sind die Daten die der µC raussendet völlig unstrukturiert bzw. die 
Struktur ergibt sich erst durch das Timing?
(Was für Verarbeitung auf PCs ohne Echtzeitbetriebssystem eigentlich 
recht ungünstig wäre ;D)

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.