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; }
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"); }
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"); } }
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); }
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); }