Jump to content
  • 0

Csharp Waveform SDK Help!!


CAM C

Question

Hello, I am trying to use the waveform generator to generate a pulse and use the analog IN channels to get me data about that pulse. I currently have code that generates one pulse which is what I want, but I am having trouble setting up the trigger and logging the data. I think I am confused on how to actually set up the trigger correctly and how to log data correctly with Csharp.

Here is what I am after, I want to generate One pulse of desired length and then to read that pulse data. I want the ADC to start reading once it has seen the rising edge of the pulse, maybe even a few milliseconds before. Any help is greatly appreciated. 

Another way of saying this is, I want code that will grab me data for a desired period of time but starts grabbing the data based on a rising edge trigger. 

Here is the code that generates one pulse for me. 

dwf.FDwfDeviceOpen(-1, out HDWF);

dwf.FDwfDeviceAutoConfigureSet(HDWF, 0);

dwf.FDwfAnalogOutNodeEnableSet(HDWF, channel1, dwf.AnalogOutNodeCarrier, 0);

dwf.FDwfAnalogOutNodeEnableSet(HDWF, channel1, dwf.AnalogOutNodeCarrier, 1);

dwf.FDwfAnalogOutIdleSet(HDWF,channel1, dwf.DwfAnalogOutIdleDisable);

dwf.FDwfAnalogOutNodeFunctionSet(HDWF,channel1, dwf.AnalogOutNodeCarrier, dwf.funcPulse);

dwf.FDwfAnalogOutNodeFrequencySet(HDWF,channel1,dwf.AnalogOutNodeCarrier,25.0);

dwf.FDwfAnalogOutNodeAmplitudeSet(HDWF, channel1, dwf.AnalogOutNodeCarrier, 3.3);

dwf.FDwfAnalogOutRunSet(HDWF,channel1,.03);

dwf.FDwfAnalogOutWaitSet(HDWF,channel1,0.1);

dwf.FDwfAnalogOutRepeatSet(HDWF,channel1,1);

This generates me a pulse but I cannot get a accurate data to be read. 

Here is the code I have been trying to use to give me the data of that pulse. 

dwf.FDwfAnalogInChannelEnableSet(HDWF, 1, 1); //enable channel 1

dwf.FDwfAnalogInChannelRangeSet(HDWF, -1, 10.0);

dwf.FDwfAnalogInAcquisitionModeSet(HDWF, dwf.acqmodeRecord);

double freqeuncy = 100000.0;

double samples = 200000.0;

double record = samples / freqeuncy;

dwf.FDwfAnalogInFrequencySet(HDWF, freqeuncy);

dwf.FDwfAnalogInRecordLengthSet(HDWF, record);

dwf.FDwfAnalogInTriggerPositionSet(HDWF, (-0.25) * record);

//Setting up the trigger
            dwf.FDwfAnalogInTriggerAutoTimeoutSet(HDWF, 10.0);
            dwf.FDwfAnalogInTriggerSourceSet(HDWF, dwf.trigsrcDetectorAnalogIn);
            dwf.FDwfAnalogInTriggerTypeSet(HDWF, dwf.trigtypeEdge);
            dwf.FDwfAnalogInTriggerChannelSet(HDWF, 1);

            dwf.FDwfAnalogInTriggerLevelSet(HDWF, 0.1);
            dwf.FDwfAnalogInTriggerHysteresisSet(HDWF, 0.1);
            dwf.FDwfAnalogInTriggerConditionSet(HDWF, dwf.DwfTriggerSlopeRise);

Thread.Sleep(2000);

//Starting Trigger for ADC
            dwf.FDwfAnalogInConfigure(HDWF, 0, 1);

//Start of pulse
            dwf.FDwfAnalogOutConfigure(HDWF, channel1, 1);

int index = 0;
            int lost = 0;
            int available = 0;

            int acqState0 = 0;
            while (cSamples < nSamples || acqState == 2)
            {

                dwf.FDwfAnalogInStatus(HDWF, 1, out acqState);
                //Console.WriteLine("Aquisition: {0}",acqState);
                dwf.FDwfAnalogInStatusRecord(HDWF, out cAvailable, out cLost, out cCorrupted);
                Console.WriteLine("Data Available: {0}", cAvailable);
                lost += cLost;
                available += cAvailable;

                if (cAvailable == 0)
                {
                    acqState0 += 1;
                    continue;
                }


                double[] values = new double[cAvailable];
                dwf.FDwfAnalogInStatusData2(HDWF, 1, values, index, cAvailable);

                cSamples += cAvailable;
                adcValues.AddRange(values.ToList<double>());

            }

This does not return the desired samples I want. I thought it would be easy to set the amount of data you want for a given period of time which starts grabbing data based on a trigger. 

 

 

Link to comment
Share on other sites

1 answer to this question

Recommended Posts

  • 0

Hi @CAM C

The record mode uses data streaming. Since it doesn't know when the trigger will arrive it starts streaming immediately and stop after the given 'length'. This is why the samples collected in the software buffer need to be aligned at the end, see AnalogIn_Record_Trigger.py example. With position 0 the streaming starts with the trigger.
The acqmode single returns a buffered aligned capture, up to maximum sample rate and device buffer size.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...