Vorverstärkung (Gain) für CEBO-LC programmieren (C#, Winforms)

      Vorverstärkung (Gain) für CEBO-LC programmieren (C#, Winforms)

      Ich versuche die Vorverstärkung für die analogen Kanäle eines CEBO-LC programmatisch einzustellen.
      Leider will mir dies nicht gelingen. Ich würde mich sehr freuen, wenn Sie einen Blick auf den
      Codeausschnitt werfen könnten, ob da ggf. irgendwo ein Fehler steckt. Vielen Dank im Vorraus.

      "_gain" ist der SelectedIndex einer Combobox (integer) der Verstäkungswerte ("x1 = 0, x10 = 1, x100 = 2")

      public void OpenDevice()
      {
      if (_device == null)
      return;

      _device.Open();
      _dp0 = _device.DigitalPorts[0];
      _dp0.OutputEnableMask = 30;

      _inputs = new IInput[] {
      _device.SingleEndedInputs[0],
      _device.SingleEndedInputs[1],
      _device.SingleEndedInputs[2],
      _device.SingleEndedInputs[3]
      };

      _device.SetupInputFrame(_inputs);
      if (_gain >= 0 && _gain < _device.SingleEndedInputs[0].SupportedRanges.Count)
      _device.SingleEndedInputs[0].SetParameters(_device.SingleEndedInputs[0].SupportedRanges[_gain]);
      if (_gain >= 0 && _gain < _device.SingleEndedInputs[1].SupportedRanges.Count)
      _device.SingleEndedInputs[1].SetParameters(_device.SingleEndedInputs[1].SupportedRanges[_gain]);
      if (_gain >= 0 && _gain < _device.SingleEndedInputs[2].SupportedRanges.Count)
      _device.SingleEndedInputs[2].SetParameters(_device.SingleEndedInputs[2].SupportedRanges[_gain]);
      if (_gain >= 0 && _gain < _device.SingleEndedInputs[3].SupportedRanges.Count)
      _device.SingleEndedInputs[3].SetParameters(_device.SingleEndedInputs[3].SupportedRanges[_gain]);

      _device.Triggers[0].Config = Trigger.TriggerConfig.InputRisingEdge;
      }

      Im Datenaquise Thread dann (dieses funktioniert alles):
      [...]
      _ceboLC.OpenDevice();
      [...]
      _ceboLC.Device.StartContinuousDataAcquisition(_sampleFrequency, true);
      {...]
      frames = _ceboLC.Device.ReadNonBlocking();
      [...]

      Mit freundlichen Grüßen
      Heiko Kießling
      Hallo Herr Kießling,

      > Ich versuche die Vorverstärkung für die analogen Kanäle eines CEBO-LC programmatisch einzustellen.
      > Leider will mir dies nicht gelingen.

      leider schreiben Sie nicht, was für einen Fehler Sie bekommen. Kompiliert Ihr Programm nicht?
      Wenn ja, welche Fehlermeldungen bekommen Sie? Bekommen Sie einen Laufzeitfehler? Wenn ja,
      welche Fehlermeldungen bekommen Sie? Oder sind die Werte, die Sie von Ihrem Programm
      geliefert bekommen, fehlerhaft? Wenn ja, in welcher Weise?

      Mit freundlichen Grüßen

      Manfred R.
      Software Development
      Cesys GmbH
      Hallo Manfred,
      vielen Dank für die Antwort. Kurz zu den Umständen. Der CEBOLC wird in einem med. Gerät zur Messung von Hirnströmen eingesetzt und schon Anfang des Jahres an unseren Kunden ausgeliefert.
      Nun wurden wir gebeten die Option Verstärkung nachträglich zu integrieren, nur haben wir das Gerät leider nicht zum Testen hier, da dieses momentan täglich im Einsatz ist. Nach nochmaligen
      Studium des Progammier Referenz konnte ich kein geeignetes Beispiel zum Thema finden, daher die Implementierung nach 'gefühl' und ohne test.

      - Der Fehler besteht in der Kundenaussage: die Vorverstärkung geht nicht wenn wir die Einstellung ändern (bzw. bleibt immer bei x1).
      - Kompilierung und sonstige Funtionen des CEBO LC alles ok.
      - Keine Laufzeitfehler

      Mir ging es nur darum, ob die prinzipielle Vorgehensweise zur Konfiguration der Vorverstärkung oben im soucecode so korrekt ist, da ich eben leider kein Programmbeispiel im Netz oder Handbuch finden konnte.

      Vielen Dank für Ihre Mühe
      H. Kießling
      Hallo Herr Kießling,

      oben haben Sie einen Ausschnitt der C#-Programmierung beim Start der Datenerfassung für das CEBO-LC
      beschrieben. Das sieht soweit ganz gut aus, aber wie wechseln Sie die Einstellungen? Stoppen Sie die
      Datenerfassung komplett durch eine Art Close-Methode, und fahren Sie sie dann via _CeboLC.OpenDevice()
      wieder komplett hoch, oder wie machen Sie das?

      Mit freundlichen Grüßen

      Manfred R.
      Software Development
      Cesys GmbH
      Hallo Manfred,
      muss das Thema noch mal aufgreifen, da trotz weiterer Tests sich noch kein Erfolg eingestellt hat. Das hat etwas gedauert. Zunächst beantworte ich gern Ihre Fragen aus Ihrer letzten Zuschrift.
      Es ist genauso wie sie es beschrieben haben. Der Benutzer hat in der Real-Time Ansicht 3 Buttons - Start / Stop / Record. 'Start' startet den Datenerfassungs - Thread, wobei als erstes oben beschriebene Methode _CeboLC.OpenDevice() aufgerufen wird. Wird mittels 'Stop' der Thread beendet kommt als letztes Kommando _ceboLC.CloseDevice();. Die Methode sieht so aus:
      public void CloseDevice()
      {
      if (_device != null)
      _device.Close();
      }
      Der 'Record' Button setzt nur ein Flag zum speichern der Daten. Ist alles gestoppt kann der Benutzer auf einer anderen Tabpage (Settings) u.a. mittels einer Combobox die Vorverstärkung wählen. Der Wert wird dann in die Variable _gain (siehe 1. Posting oben) übernommen. Ich habe nochmal alles debugged. Die 4 Ranges sind vorhanden (+-10, +-1....) und der Wert in _gain stimmt auch. Die Einstellung wird auch in die '_device.SingleEndedInputs' übernommen. Nur wird eben nichts verstärkt. Gerne sende ich auch den ganzen sourcecode. Oder vielleicht könnten sie auch einen Codeauszug senden wie es im cebolc_lab gemacht wird. Ich hoffe auch dass ich keinen Denkfehler habe, d.h. ich gehe davon aus dass wenn v = +-1 gesetzt wird die Eingansspannung x10 verstärkt wird; dementsprechen z.B. y = frames.GetSingleEnded(0); einen höheren Spannungswert aufweisen sollte (beim Vergleich mit v = +-10 und konstanter Eingangsspannung).

      Vielen Dank für Ihre Mühe im Voraus

      Mit freundlichen Grüßen
      Heiko Kießling
      Hallo Herr Kießling,

      um Ihr Problem einzuordnen, habe ich das Beispiel-Programm InfoExample.cs aus cebomsrapi-windows-1.6.zip
      von unserem Downloadbereich etwas abgewandelt. In der Methode PrintInformation() nach der for-Schleife für
      die Anzeige der verfügbaren Ranges habe ich ab Zeile 87 vier Zeilen eingefügt:

      // MRA addition: measurement in 100 mV range
      se0.SetParameters(se0.SupportedRanges[2]);
      float voltageValue = se0.Value;
      Console.WriteLine("Voltage:" + voltageValue + " V");

      Damit ich etwas im 100 mV-Range messen kann, habe ich AI-0 via 47 Ohm-Widerstand mit GND verbunden
      und AI-0 via 3900 Ohm-Widerstand mit 5 V verbunden. Dann habe ich mit einem externen Multimeter 61 mV
      an AI-0 gemessen. Und dann ist die Ausgabe des modifizierten InfoExample.cs:

      .\cebomsrapi-windows-1.6\net\bin\debug>.\infoexample.exe
      Device type: CeboLC
      API vers: 1.6
      Firmware ver: 1.4
      Identifier: b3-p0-p0-p1
      Serial number: CeboLC@A381xxxxx
      Temperature: 30.80469
      Reference current of 200uA: 204.329 uA
      Reference current of 10uA: 10.156 uA
      Info for single ended input AI-0:
      Min. ICD: 11 us
      Current range: -10 V to 10 V
      Supported ranges:
      Range #0 range: -10 V to 10 V, Def. ICD: 16 us
      Range #1 range: -1 V to 1 V, Def. ICD: 28 us
      Range #2 range: -0.1 V to 0.1 V, Def. ICD: 150 us
      Range #3 range: -0.01 V to 0.01 V, Def. ICD: 500 us
      Voltage:0.06084278 V <<== SIEHE HIER !!!
      Info for digital port DP-0:
      Count of I/O's: 8
      I/O #0:IO-0
      I/O #1:IO-1
      I/O #2:IO-2
      I/O #3:IO-3
      I/O #4:IO-4
      I/O #5:IO-5
      I/O #6:IO-6
      I/O #7:IO-7

      Die Messung mit 100 mV-Range stimmt, damit funktioniert die Auswahl der Ranges grundsätzlich.
      Um herauszufinden, warum die Auswahl der Messbereiche in Ihrem Programm nicht funktioniert,
      müsste man es debuggen. Bitte haben Sie Verständnis dafür, dass wir die Dienstleistung, Programme
      von Kunden zu debuggen, nur kostenpflichtig anbieten. Wenn Sie z.B. ein Paket von 20 Support-Stunden
      bei uns einkaufen möchten, wenden Sie sich bitte an sales@cesys.com.

      Mit freundlichen Grüßen

      Manfred R.
      Software Development
      Cesys GmbH