Einzelnen Beitrag anzeigen

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