AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi PicoScope 2000 Signalgenerator [gelöst]
Thema durchsuchen
Ansicht
Themen-Optionen

PicoScope 2000 Signalgenerator [gelöst]

Ein Thema von nuclearping · begonnen am 3. Mär 2011 · letzter Beitrag vom 3. Mär 2011
Antwort Antwort
nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

PicoScope 2000 Signalgenerator [gelöst]

  Alt 3. Mär 2011, 07:51
Hallo!

Ich hoffe, mir kann hier jemand bei diesem speziellen Problem helfen.

Wir arbeiten schon seit einer Weile mit dem PicoScope 2000 (http://www.picotech.com) und haben es bisher nur genutzt, um Messungen durchzuführen.

Nun ist der Bedarf entstanden, auch den eingebauten Signalgenerator anzusprechen. Leider ist die Dokumentation im Programmer's Guide dazu sehr spärlich und Beispiele nicht vorhanden. Auch fehlt die Deklaration für den API Aufruf dieser Funktion in der Headerdatei.

Ich habe die Deklaration laut Programmer's Guide hinzugefügt und die Funktion in einem Testprogramm aufgerufen. Das funktioniert im Prinzip auch, aber leider nicht so, wie gedacht.

Wer das Gerät kennt und die mitgelieferte PicoScope6 Software, weiß, dass sie ebenfalls diesen Signalgenerator ansprechen kann. Die Resultate, die ich in der PicoScope Software erhalten, sind so wie erwartet. In meiner Testsoftware weichen sie komplett ab.

Wenn ich in der PicoScope Software ein 200Hz Sinus Signal mit 1V erzeuge, kommt auch ein 1V 200Hz Sinus Signal raus. In meiner Testsoftware sind die Parameter gleich gesetzt und es kommt zwar auch ein Signal, allerdings mit einem starken Rauschen, nur ca. 300-500mV (statt 1V) und mit aktivem "Sweeping", also das Signal schwingt, statt konstant zu sein, obwohl es so eingestellt ist (Startfrequenz = Endfrequenz).

Wir hocken hier schon seit mehreren Tagen einige Stunden, kommen aber auf keinen grünen Zweig. Google liefert auch nur Einträge aus dem Picotech Forum, wo Leute ähnliche Probleme haben, aber ohne konkrete Lösung. Bzw. waren die meisten Lösungen nur falsche Umrechnungen oder eine falsche Deklaration für die API.

Hier mein Code:

Deklaration laut Programmer's Guide
Code:
short ps2000_set_sig_gen_built_in (
  short handle,
  long offsetVoltage,
  unsigned long pkToPk,
  PS2000_WAVE_TYPE waveType,
  float startFrequency,
  float stopFrequency,
  float increment,
  float dwellTime,
  PS2000_SWEEP_TYPE sweepType,
  unsigned long sweeps
)

waveType values:
PS2000_SINE sine wave
PS2000_SQUARE square wave
PS2000_TRIANGLE triangle wave
PS2000_RAMP_UP rising sawtooth
PS2000_RAMP_DOWN falling sawtooth
PS2000_DC_VOLTAGE DC voltage

enPS2000SweepType:
PS2000_UP
PS2000_DOWN
PS2000_UPDOWN
PS2000_DOWNUP
Meine Deklaration
Delphi-Quellcode:
function ps2000_set_sig_gen_built_in
         (handle : smallint;
          offsetVoltage : integer;
          pkToPk : cardinal;
          waveType : smallint;
          startFrequency : double;
          stopFrequency : double;
          increment : double;
          dwellTime : double;
          sweepType : smallint;
          sweeps : cardinal)
          : smallint; stdcall; external 'ps2000.dll';

// Wave forms
PS2000_SINE = 0;
PS2000_SQUARE = 1;
PS2000_TRIANGLE = 2;
PS2000_RAMP_UP = 3;
PS2000_RAMP_DOWN = 4;
PS2000_DC_VOLTAGE = 5;

// Sweep types
PS2000_UP = 0;
PS2000_DOWN = 1;
PS2000_UPDOWN = 2;
PS2000_DOWNUP = 3;
Aufruf
Delphi-Quellcode:
ps2000handle := ps2000_open_unit();
r := ps2000_set_sig_gen_built_in(
    ps2000_handle,
    0 {Kein Offset},
    1000000 {1V},
    PS2000_SINE,
    200 {StartFreq},
    200 {EndFreq; StartFreq = EndFreq = Kein Sweeping},
    0, 0, PS2000_UP, 0 {Wir wollen kein Sweeping});
Die Funktion liefert 1 zurück (OK) und gibt das Signal aus. Wie schon beschrieben aber nicht das, was es soll. Im Fehlerfall (falsche Parameter oder ähnlich) liefert die Funktion 0 zurück.

Jemand eine Idee?

Geändert von nuclearping ( 3. Mär 2011 um 11:01 Uhr)
  Mit Zitat antworten Zitat
WoGe

Registriert seit: 16. Jun 2005
Ort: Kelkheim
178 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: PicoScope 2000 Signalgenerator

  Alt 3. Mär 2011, 08:56
In den Beispielen aus dem SDK wird immer das Handle überprüft.
Dann würde ich Testhalber den Erwerb des Handles und den Aufruf der Funktion entzerren und z.B. hinter 2 Knöpfe legen

Ich habe kein solches Teil. Meine Erfahrungen mit ähnlichen Teilen ist aber das man Anfangs erst mal einen definierten Zustand herstellen muss, z.B. über das initiieren einer Messung.

Grüsse
wo
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#3

AW: PicoScope 2000 Signalgenerator

  Alt 3. Mär 2011, 10:13
Du hast den c Typen float mit double übersetzt. Bist du dir sicher dass das stimmt? float hat normalerweise nur 4 Bytes, double jedoch 8.
  Mit Zitat antworten Zitat
nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

AW: PicoScope 2000 Signalgenerator

  Alt 3. Mär 2011, 10:55
Vielen dank für die Rückmeldungen.

In den Beispielen aus dem SDK wird immer das Handle überprüft.
Dann würde ich Testhalber den Erwerb des Handles und den Aufruf der Funktion entzerren und z.B. hinter 2 Knöpfe legen
Das Handle passt. Wie schon gesagt liefert die Funktion 1 zurück und ich das Signal wird - überprüfbar - erzeugt. Das Handle stimmt also und die Hardware klickert auch beim Initialisieren.

Ich habe kein solches Teil. Meine Erfahrungen mit ähnlichen Teilen ist aber das man Anfangs erst mal einen definierten Zustand herstellen muss, z.B. über das initiieren einer Messung.
Danke. Hab ich versucht, keine Besserung.

Du hast den c Typen float mit double übersetzt. Bist du dir sicher dass das stimmt? float hat normalerweise nur 4 Bytes, double jedoch 8.
Nein, leider nicht. Ich hab double jetzt mal durch real ersetzt und auch andere Typen nochmal angepasst.

Die Deklaration schaut nun so aus:
Delphi-Quellcode:
function ps2000_set_sig_gen_built_in
         (handle : smallint;
          offsetVoltage : longint;
          pkToPk : longword;
          waveType : integer;
          startFrequency : real;
          stopFrequency : real;
          increment : real;
          dwellTime : real;
          sweepType : integer;
          sweeps : longword)
          : smallint; stdcall; external 'ps2000.dll';
Resultat bleibt aber auch hier das gleiche ...

ABER ich hab grad mal ein kleines Testprojekt in Dev-C++ erstellt:
Code:
#include <stdio.h>
#include <stdlib.h>
#include "ps2000.h"

int main(int argc, char *argv[])
{
  short ps2000_hnd = 0;
  long ofsV = 0;
  unsigned long pkToPk = 1000000;
  PS2000_WAVE_TYPE wt = PS2000_SINE;
  float startF = 200, endF = 400, inc = 0, dT = 0;
  PS2000_SWEEP_TYPE st = PS2000_UP;
  unsigned long sweeps = 0;
  int r = 0;
 
  printf("Opening Pico device ...\n");
 
  ps2000_hnd = ps2000_open_unit();
  if (!ps2000_hnd) {
    printf("Error opening Pico device.\n");
    return -1;
  }

  printf("Device initialized: %d\n", ps2000_hnd);
 
  r = ps2000_set_sig_gen_built_in(
    ps2000_hnd,
    ofsV,
    pkToPk,
    wt,
    startF,
    endF,
    inc, dT, st, sweeps
  );
 
  printf("Result: %d\n", r);
 
  system("PAUSE");   
  return 0;
}
... und siehe da: Es kommt genau das raus, was soll, so wie in der PicoScope Software selbst. Schonmal ein riesen Fortschritt.

Das heisst, es muss irgendwie an der Deklaration liegen. Aber nur wo, wir haben doch schon alles Mögliche durchprobiert ...
  Mit Zitat antworten Zitat
nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

AW: PicoScope 2000 Signalgenerator

  Alt 3. Mär 2011, 11:01
WOOHOO! single statt double/real ist die Lösung.

Delphi-Quellcode:
function ps2000_set_sig_gen_built_in
         (handle : smallint;
          offsetVoltage : longint;
          pkToPk : longword;
          waveType : integer;
          startFrequency : single;
          stopFrequency : single;
          increment : single;
          dwellTime : single;
          sweepType : integer;
          sweeps : longword)
          : smallint; stdcall; external 'ps2000.dll';
Nun passt es 1:1 mit der PicoScope Software und der Tag ist gerettet. Vielen Dank euch!

  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:01 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz