コード例 #1
0
ファイル: device.cpp プロジェクト: gapost/rtlab-old
i16 device::selectTrigger(u32 PfiLineID)
{
	if (status==0)
	{
		if (PfiLineID==0)
			status = Select_Signal (deviceno, ND_START_TRIGGER, ND_LOW, ND_DONT_CARE);
		else
			status = Select_Signal (deviceno, ND_START_TRIGGER, PfiLineID, ND_LOW_TO_HIGH);
	}
	return status;
}
コード例 #2
0
void main(void)
{
    /*
     * Local Variable Declarations: 
     */

    i16 iStatus = 0;
    i16 iRetVal = 0;
    i16 iDevice = 1;
    u32 ulGpctrNum = ND_COUNTER_0;
    u32 ulGpctrOutput = ND_GPCTR0_OUTPUT;
    u32 ulLOWcount = 100;
    u32 ulHIGHcount = 10000;
    i16 iIgnoreWarning = 0;

    iStatus = GPCTR_Control(iDevice, ulGpctrNum, ND_RESET);

    iRetVal = NIDAQErrorHandler(iStatus, "GPCTR_Control/RESET",
     iIgnoreWarning);

    iStatus = GPCTR_Set_Application(iDevice, ulGpctrNum,
     ND_RETRIG_PULSE_GNR);

    iRetVal = NIDAQErrorHandler(iStatus, "GPCTR_Set_Application",
     iIgnoreWarning);

    iStatus = GPCTR_Change_Parameter(iDevice, ulGpctrNum, ND_SOURCE,
     ND_INTERNAL_100_KHZ);

    iRetVal = NIDAQErrorHandler(iStatus,
     "GPCTR_Change_Parameter/SOURCE", iIgnoreWarning);

    iStatus = GPCTR_Change_Parameter(iDevice, ulGpctrNum, ND_GATE,
     ND_DEFAULT_PFI_LINE);

    iRetVal = NIDAQErrorHandler(iStatus,
     "GPCTR_Change_Parameter/GATE", iIgnoreWarning);

    iStatus = GPCTR_Change_Parameter(iDevice, ulGpctrNum, ND_COUNT_1,
     ulLOWcount);

    iRetVal = NIDAQErrorHandler(iStatus,
     "GPCTR_Change_Parameter/COUNT1", iIgnoreWarning);

    iStatus = GPCTR_Change_Parameter(iDevice, ulGpctrNum, ND_COUNT_2,
     ulHIGHcount);

    iRetVal = NIDAQErrorHandler(iStatus,
     "GPCTR_Change_Parameter/COUNT2", iIgnoreWarning);

    /* To output a counter pulse, you must call Select_Signal. */

    iStatus = Select_Signal(iDevice, ulGpctrOutput, ulGpctrOutput,
     ND_LOW_TO_HIGH);

    iRetVal = NIDAQErrorHandler(iStatus, "Select_Signal/GpctrOutput",
     iIgnoreWarning);

    iStatus = GPCTR_Control(iDevice, ulGpctrNum, ND_PROGRAM);

    iRetVal = NIDAQErrorHandler(iStatus, "GPCTR_Control/PROGRAM",
     iIgnoreWarning);

    printf(" Apply trigger pulses to the GATE of your counter and you will see a pulse every time!\n");

    /* HINT: If you don't see pulses at the OUTPUT of your counter,
     check your connections. */

    printf(" Hit any key to stop.\n");

    iRetVal = NIDAQWaitForKey(0.0);

    /* CLEANUP - Don't check for errors on purpose. */

    /* Reset GPCTR. */

    iStatus = GPCTR_Control(iDevice, ulGpctrNum, ND_RESET);

    /* Disconnect GPCTR0_OUTPUT. */

    /* Note that the following Select_Signal call will cause the
     output to be high impedance which will most likely bring the logic
     level HIGH if there is a pull-up resistor on this pin. (Check your
     hardware user manual.)  If you do not want this behavior, comment out
     the next line. */

    iStatus = Select_Signal(iDevice, ND_GPCTR0_OUTPUT, ND_NONE,
     ND_DONT_CARE);

    printf(" Repeated triggered pulse generation done!\n");


}
コード例 #3
0
void main(void)
{
    /*
     * Local Variable Declarations: 
     */

    i16 iStatus = 0;
    i16 iRetVal = 0;
    i16 iDevice = 1;
    i16 iNumChans = 1;
    i16 iChan = 0;
    static i16 piChanVect[1] = {0};
    i16 iGroup = 1;
    static f64 pdBuffer[5000] = {0};
    static i16 piBuffer[5000] = {0};
    u32 ulCount = 5000;
    u32 ulIterations = 1;
    i16 iFIFOMode = 0;
    i16 iDelayMode = 0;
    i16 iUpdateTB = 0;
    u32 ulUpdateInt = 0;
    i16 iWhichClock = 0;
    i16 iUnits = 0;
    i16 iWFMstopped = 0;
    u32 ulItersDone = 0;
    u32 ulPtsDone = 0;
    i16 iOpSTART = 1;
    i16 iOpCLEAR = 0;
    i16 iIgnoreWarning = 0;
    i16 iYieldON = 1;

    iStatus = NIDAQMakeBuffer(pdBuffer, ulCount, WFM_DATA_F64);

    if (iStatus == 0) {


        /* If buffer was made correctly, then output it. */

        iStatus = WFM_Group_Setup(iDevice, iNumChans, piChanVect,
         iGroup);

        iRetVal = NIDAQErrorHandler(iStatus, "WFM_Group_Setup",
         iIgnoreWarning);

        iStatus = WFM_Scale(iDevice, iChan, ulCount, 1.0, pdBuffer,
         piBuffer);

        iRetVal = NIDAQErrorHandler(iStatus, "WFM_Scale",
         iIgnoreWarning);

        iStatus = WFM_Load(iDevice, iNumChans, piChanVect, piBuffer,
         ulCount, ulIterations, iFIFOMode);

        iRetVal = NIDAQErrorHandler(iStatus, "WFM_Load",
         iIgnoreWarning);

        /* Instead of calling WFM_Rate, just let iUpdateTB be 0 for
         external update timing. */

        iStatus = WFM_ClockRate(iDevice, iGroup, iWhichClock,
         iUpdateTB, ulUpdateInt, iDelayMode);

        iRetVal = NIDAQErrorHandler(iStatus, "WFM_ClockRate",
         iIgnoreWarning);

        /* Setup PFI lines for external updates. (PFI5 is setup by
         default in WFM_ClockRate) */

        iStatus = Select_Signal(iDevice, ND_OUT_UPDATE, ND_PFI_5,
         ND_HIGH_TO_LOW);

        iRetVal = NIDAQErrorHandler(iStatus, "Select_Signal",
         iIgnoreWarning);

        printf(" Apply your external update clock signal to PFI5 to output the waveform.\n");

        iStatus = WFM_Group_Control(iDevice, iGroup, iOpSTART);
        

        iRetVal = NIDAQErrorHandler(iStatus,
         "WFM_Group_Control/START", iIgnoreWarning);

        while ((iWFMstopped == 0) && (iStatus == 0)) {


            iStatus = WFM_Check(iDevice, iChan, &iWFMstopped,
             &ulItersDone, &ulPtsDone);

            iRetVal = NIDAQYield(iYieldON);

        }


        iRetVal = NIDAQErrorHandler(iStatus, "WFM_Check",
         iIgnoreWarning);

        /* CLEANUP - Don't check for errors on purpose. */

        /* Set group back to initial state. */

        iStatus = WFM_Group_Control(iDevice, iGroup, iOpCLEAR);
        

        /* Set output at 0 volts. */

        iStatus = AO_VWrite(iDevice, iChan, 0.0);

        /* Set PFI line back to initial state. */

        iStatus = Select_Signal(iDevice, ND_OUT_UPDATE,
         ND_INTERNAL_TIMER, ND_LOW_TO_HIGH);

        printf(" The waveform generation is done!\n");

    }
    else {

        printf(" The buffer was not made correctly. Check the parameters for NIDAQMakeBuffer.\n");

    }



}
コード例 #4
0
void main(void)
{
    /*
     * Local Variable Declarations: 
     */

    i16 iStatus = 0;
    i16 iRetVal = 0;
    i16 iDevice = 1;
    i16 iChan = 0;
    i16 iOutputPolarity = 0;
    i16 iIntOrExtRef = 0;
    i16 iUpdateModeEXT = 2;
    i16 iUpdateModeINT = 0;
    f64 dRefVolts = 10.0;
    f64 dVoltage = 2.5;
    i16 iIgnoreWarning = 0;

    /* For best results, look at the output with a scope. */

    /* Set output at 0 volts. */

    iStatus = AO_VWrite(iDevice, iChan, 0.0);

    /* Configure for bipolar mode, internal reference, and external
     updates. (The 'dRefVolts' is ignored since this is internally
     referenced.) */

    iStatus = AO_Configure(iDevice, iChan, iOutputPolarity,
     iIntOrExtRef, dRefVolts, iUpdateModeEXT);

    iRetVal = NIDAQErrorHandler(iStatus,
     "AO_Configure/ExternalUpdate", iIgnoreWarning);

    /* Setup PFI line for external updates. (PFI5 is setup by default
     with AO_Configure.) */

    iStatus = Select_Signal(iDevice, ND_OUT_UPDATE, ND_PFI_5,
     ND_HIGH_TO_LOW);

    iRetVal = NIDAQErrorHandler(iStatus, "Select_Signal",
     iIgnoreWarning);

    printf(" Apply the 'external update' pulse to output %lf volts and hit any key.\n", dVoltage);

    iStatus = AO_VWrite(iDevice, iChan, dVoltage);

    iRetVal = NIDAQErrorHandler(iStatus, "AO_VWrite", iIgnoreWarning);
    

    iRetVal = NIDAQWaitForKey(0.0);

    printf(" Did you see the voltage appear on analog output channel %d ?\n", iChan);

    /* Don't check for errors on purose. */

    /* Set update mode back to initial state. */

    iStatus = AO_Configure(iDevice, iChan, iOutputPolarity,
     iIntOrExtRef, dRefVolts, iUpdateModeINT);

    /* Set PFI line back to initial state. */

    iStatus = Select_Signal(iDevice, ND_OUT_UPDATE, ND_INTERNAL_TIMER,
     ND_LOW_TO_HIGH);


}
コード例 #5
0
void main(void)
{
    /*
     * Local Variable Declarations: 
     */

    i16 iStatus = 0;
    i16 iRetVal = 0;
    i16 iDevice = 1;
    u32 ulCount = 500;
    u32 ulLoopCount = 0;
    i16 iLineCount = 0;
    i16 iGroupSize = 1;
    i16 iPort = 0;
    i16 iNumLines = 8;
    i16 iIgnoreWarning = 0;
    i16 iReady = 0;
    i16 iPGmodeOn = 1;
    i16 iDIGroup = 1;
    i16 iDIReqSource = 3;
    i16 iInLineDirection = 4;
    i16 iInGroupDirection = 0;
    i16 iDIEdge = 0;
    i16 iDataPoint = 0;
    u32 ulGpctrNum = ND_COUNTER_0;
    u32 ulGpctrOutput = ND_GPCTR0_OUTPUT;
    u32 ulLOWcount = 500;
    u32 ulHIGHcount = 500;

    /* Configure the digital lines for the correct direction. */

    while (iLineCount < iNumLines) {


        iStatus = DIG_Line_Config(iDevice, iPort, iLineCount,
         iInLineDirection);

        iRetVal = NIDAQErrorHandler(iStatus, "DIG_Line_Config",
         iIgnoreWarning);

        ++iLineCount;

    }


    /* Configure Digital Input */

    iStatus = DIG_Grp_Config(iDevice, iDIGroup, iGroupSize, iPort,
     iInGroupDirection);

    iRetVal = NIDAQErrorHandler(iStatus, "Dig_Grp_Config",
     iIgnoreWarning);

    iStatus = DIG_Grp_Mode(iDevice, iDIGroup, 0, iDIEdge, 0, 0, 0);
    

    iRetVal = NIDAQErrorHandler(iStatus, "Dig_Grp_Mode",
     iIgnoreWarning);

    /* Correlate the input to the signal coming across the RTSI 0
     line. */

    iStatus = DIG_Block_PG_Config(iDevice, iDIGroup, iPGmodeOn,
     iDIReqSource, 0, 0, 0);

    iRetVal = NIDAQErrorHandler(iStatus, "Dig_Block_PG_Config",
     iIgnoreWarning);

    /* Route the output of GPCTR0 to RTSI 0 */

    iStatus = Select_Signal(iDevice, ND_RTSI_0, ND_GPCTR0_OUTPUT,
     ND_DONT_CARE);

    iRetVal = NIDAQErrorHandler(iStatus, "Select_Signal",
     iIgnoreWarning);

    /* Setup counter 0 to output a 100 Hz square wave. */

    iStatus = GPCTR_Control(iDevice, ulGpctrNum, ND_RESET);

    iRetVal = NIDAQErrorHandler(iStatus, "GPCTR_Control/RESET",
     iIgnoreWarning);

    iStatus = GPCTR_Set_Application(iDevice, ulGpctrNum,
     ND_PULSE_TRAIN_GNR);

    iRetVal = NIDAQErrorHandler(iStatus, "GPCTR_Set_Application",
     iIgnoreWarning);

    iStatus = GPCTR_Change_Parameter(iDevice, ulGpctrNum, ND_SOURCE,
     ND_INTERNAL_100_KHZ);

    iRetVal = NIDAQErrorHandler(iStatus,
     "GPCTR_Change_Parameter/SOURCE", iIgnoreWarning);

    iStatus = GPCTR_Change_Parameter(iDevice, ulGpctrNum, ND_COUNT_1,
     ulLOWcount);

    iRetVal = NIDAQErrorHandler(iStatus,
     "GPCTR_Change_Parameter/COUNT1", iIgnoreWarning);

    iStatus = GPCTR_Change_Parameter(iDevice, ulGpctrNum, ND_COUNT_2,
     ulHIGHcount);

    iRetVal = NIDAQErrorHandler(iStatus,
     "GPCTR_Change_Parameter/COUNT2", iIgnoreWarning);

    /* To output a counter pulse, you must call Select_Signal. */

    iStatus = Select_Signal(iDevice, ulGpctrOutput, ulGpctrOutput,
     ND_LOW_TO_HIGH);

    iRetVal = NIDAQErrorHandler(iStatus, "Select_Signal/GpctrOutput",
     iIgnoreWarning);

    iStatus = GPCTR_Control(iDevice, ulGpctrNum, ND_PROGRAM);

    iRetVal = NIDAQErrorHandler(iStatus, "GPCTR_Control/PROGRAM",
     iIgnoreWarning);

    printf(" Square wave generation started...\n");

    /* Input ulCount number of points. */

    while ((ulLoopCount < ulCount) && (iStatus == 0)) {


        iStatus = DIG_Grp_Status(iDevice, iDIGroup, &iReady);

        if ((iReady == 1) && (iStatus == 0)) {


            iStatus = DIG_In_Grp(iDevice, iDIGroup, &iDataPoint);
            

            iRetVal = NIDAQErrorHandler(iStatus, "DIG_In_Grp", 0);
            

            ++ulLoopCount;;

        }


        iRetVal = NIDAQErrorHandler(iStatus, "DIG_Grp_Status", 0);
        

    }


    /* Reset GPCTR. */

    iStatus = GPCTR_Control(iDevice, ulGpctrNum, ND_RESET);

    /* Disconnect GPCTR0_OUTPUT. */

    iStatus = Select_Signal(iDevice, ND_GPCTR0_OUTPUT, ND_NONE,
     ND_DONT_CARE);

    /* Remove any signal from RTSI 0. */

    iStatus = Select_Signal(iDevice, ND_RTSI_0, ND_NONE,
     ND_DONT_CARE);

    iRetVal = NIDAQErrorHandler(iStatus, "Select_Signal",
     iIgnoreWarning);

    /* Clear all operations and reset the board to its default state
     */

    iStatus = DIG_Grp_Config(iDevice, iDIGroup, 0, 0, 0);

    iRetVal = NIDAQErrorHandler(iStatus, "DIG_Grp_Config",
     iIgnoreWarning);


}