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?