public int Initialize(string SigGenLOaddr, string SigGenRFaddr, Instr10MHzReference SigGenRef, bool enhArb_avail) { int status = -1; int isActive = 0; const uint bufferLength = 24; string serialNoRF = ""; // Signal Generator RF serial number string serialNoLO = ""; // Signal Generator LO serial number Console.WriteLine("Signal generator is booting..."); status = SigGen.ClearErrors(); status = SigGen.EepromCacheEnable_Set(1); // Must set before instrument is booted status = SigGen.BootInstrument(SigGenLOaddr, SigGenRFaddr, 0); CheckSigGenStatus(status); status = SigGen.IsActive_Get(ref isActive); if (isActive == -1 && status == 0) // Signal Generator booted, no warning or error { // Get serial numbers, verifiy resource is created status = SigGen.RF.Resource.SerialNumber_Get(ref serialNoRF, bufferLength); status = SigGen.LO.Resource.SerialNumber_Get(ref serialNoLO, bufferLength); Console.WriteLine("Signal generator booted successfully"); Console.WriteLine("Signal generator RF serial number: {0}", serialNoRF); Console.WriteLine("Signal generator LO serial number: {0}", serialNoLO); } else if (isActive == 0 || status < 0) // Signal Generator did not boot, fatal error { Console.WriteLine("Signal generator did not boot\n"); return -1; } status = SigGen.VCO.ExternalReference_Set(1); // 1 = enable use of external 10MHz reference CheckSigGenStatus(status); // Setup 301x reference for Signal Generator if (SigGenRef == Instr10MHzReference.OCXO) // Use internal OCXO reference (3011 only) { status = SigGen.LO.Reference_Set(afSigGenDll_lormReferenceMode_t.afSigGenDll_lormOCXO); CheckSigGenStatus(status); Console.WriteLine("Signal generator 10 MHz reference is set to internal OCXO\n"); } else if (SigGenRef == Instr10MHzReference.intern) // Use internal reference { status = SigGen.LO.Reference_Set(afSigGenDll_lormReferenceMode_t.afSigGenDll_lormInternal); CheckSigGenStatus(status); Console.WriteLine("Signal generator 10 MHz reference is set to internal\n"); } else if (SigGenRef == Instr10MHzReference.externTerm) // Use external reference and terminate it { status = SigGen.LO.Reference_Set(afSigGenDll_lormReferenceMode_t.afSigGenDll_lormExternalTerminated); CheckSigGenStatus(status); Console.WriteLine("Signal generator 10 MHz reference is set to external terminated\n"); } else if (SigGenRef == Instr10MHzReference.externDaisy) // Use external reference and daisy chain it { status = SigGen.LO.Reference_Set(afSigGenDll_lormReferenceMode_t.afSigGenDll_lormExternalDaisy); CheckSigGenStatus(status); Console.WriteLine("Signal generator 10 MHz reference is set to external daisy chain\n"); } status = SigGen.LO.Trigger.Mode_Set(afSigGenDll_lotmTriggerMode_t.afSigGenDll_lotmNone); CheckSigGenStatus(status); status = SigGen.Mode_Set(afSigGenDll_mMode_t.afSigGenDll_mFull); CheckSigGenStatus(status); status = SigGen.RF.CurrentLevel_Set(-136); //status = SigGen.RF.CurrentFrequency_Set(100e6); status = SigGen.RF.ModulationSource_Set(afSigGenDll_msModulationSource_t.afSigGenDll_msCW); //afSigGenDll_msARB if (enhArb_avail) // Enhanced ARB control is not supported for the AF3020, AF3020A and AF3025 models { status = SigGen.ARBControlMode_Set(afSigGenDll_amArbControlMode_t.afSigGenDll_amEnhanced); // Enhanced ARB functionality status = SigGen.EnhARB.PlayMode_Set(afSigGenDll_eaEnhArbPlayMode_t.afSigGenDll_eaContinuous); //afSigGenDll_eaSingle status = SigGen.EnhARB.TerminationMode_Set(afSigGenDll_eaEnhArbPlayTermination_t.afSigGenDll_eaptImmediate); status = SigGen.EnhARB.ExternalTrigger.Enable_Set(0); status = SigGen.EnhARB.StopPlaying(); } else // Standard ARB control { status = SigGen.ARBControlMode_Set(afSigGenDll_amArbControlMode_t.afSigGenDll_amStandard); // Standard ARB functionality status = SigGen.ARB.SingleShotMode_Set(1); status = SigGen.ARB.ExternalTrigger.Enable_Set(0); status = SigGen.ARB.StopPlaying(); } // Trigger routing: ARB marker at beginning of waveform is sent out SMB status = SigGen.RF.Routing.Reset(); status = SigGen.RF.Routing.SetConnect(afSigGenDll_rmRoutingMatrix_t.afSigGenDll_rmPXI_TRIG_0, afSigGenDll_rmRoutingMatrix_t.afSigGenDll_rmARB_MARKER_1); status = SigGen.RF.Routing.SetOutputEnable(afSigGenDll_rmRoutingMatrix_t.afSigGenDll_rmPXI_TRIG_0, 1); //status = SigGen.RF.Routing.SetConnect(afSigGenDll_rmRoutingMatrix_t.afSigGenDll_rmFRONT_SMB, afSigGenDll_rmRoutingMatrix_t.afSigGenDll_rmARB_MARKER_1); //status = SigGen.RF.Routing.SetOutputEnable(afSigGenDll_rmRoutingMatrix_t.afSigGenDll_rmFRONT_SMB, 1); status = SigGen.RF.CurrentOutputEnable_Set(1); // RF on return status; }
public int Initialize(string DigitizerLOaddr, string DigitizerRFaddr, Instr10MHzReference DigitizerRef) { int status = -1; int isActive = 0; const int bufferLength = 24; string serialNoRF = ""; // Digitizer RF serial number string serialNoLO = ""; // Digitizer LO serial number Console.WriteLine("Digitizer is booting..."); status = Digitizer.ClearErrors(); status = Digitizer.EepromCacheEnable_Set(1); // Must set before instrument is booted status = Digitizer.BootInstrument(DigitizerLOaddr, DigitizerRFaddr, 0); CheckDigitizerStatus(status); status = Digitizer.IsActive_Get(ref isActive); if (isActive == -1 && status == 0) // Digitizer booted, no warning or error { // Get serial numbers, verifiy resource is created status = Digitizer.RF.Resource.SerialNumber_Get(ref serialNoRF, bufferLength); status = Digitizer.LO.Resource.SerialNumber_Get(ref serialNoLO, bufferLength); Console.WriteLine("Digitizer booted successfully"); Console.WriteLine("Digitizer RF serial number: {0}", serialNoRF); Console.WriteLine("Digitizer LO serial number: {0}", serialNoLO); } else if (isActive == 0 || status < 0) // Digitizer did not boot, fatal error { Console.WriteLine("Digitizer did not boot\n"); return(-1); } status = Digitizer.RF.Reference_Set(afDigitizerDll_rfrmReferenceMode_t.afDigitizerDll_rfrmExternalDaisy); CheckDigitizerStatus(status); status = Digitizer.RF.ExternalReference_Set(afDigitizerDll_erExternalReference_t.afDigitizerDll_erLockTo10MHz); CheckDigitizerStatus(status); // Setup 301x reference for Digitizer if (DigitizerRef == Instr10MHzReference.OCXO) // Use internal OCXO reference (3011 only) { status = Digitizer.LO.Reference_Set(afDigitizerDll_lormReferenceMode_t.afDigitizerDll_lormOCXO); CheckDigitizerStatus(status); Console.WriteLine("Digitizer 10 MHz reference is set to internal OCXO\n"); } else if (DigitizerRef == Instr10MHzReference.intern) // Use internal reference { status = Digitizer.LO.Reference_Set(afDigitizerDll_lormReferenceMode_t.afDigitizerDll_lormInternal); CheckDigitizerStatus(status); Console.WriteLine("Digitizer 10 MHz reference is set to internal\n"); } else if (DigitizerRef == Instr10MHzReference.externTerm) // Use external reference and terminate it { status = Digitizer.LO.Reference_Set(afDigitizerDll_lormReferenceMode_t.afDigitizerDll_lormExternalTerminated); CheckDigitizerStatus(status); Console.WriteLine("Digitizer 10 MHz reference is set to external terminated\n"); } else if (DigitizerRef == Instr10MHzReference.externDaisy) // Use external reference and daisy chain it { status = Digitizer.LO.Reference_Set(afDigitizerDll_lormReferenceMode_t.afDigitizerDll_lormExternalDaisy); CheckDigitizerStatus(status); Console.WriteLine("Digitizer 10 MHz reference is set to external daisy chain\n"); } status = Digitizer.RF.RFInputLevel_Set(30); //status = Digitizer.RF.CentreFrequency_Set(centerFrequency); status = Digitizer.RF.InputSource_Set(afDigitizerDll_isInputSource_t.afDigitizerDll_isRFInput); status = Digitizer.RF.FrontEndMode_Set(afDigitizerDll_femFrontEndMode_t.afDigitizerDll_femAuto); // Trigger setup status = Digitizer.Trigger.Source_Set(afDigitizerDll_tsTrigSource_t.afDigitizerDll_tsPXI_TRIG_0); //status = Digitizer.Trigger.Source_Set(afDigitizerDll_tsTrigSource_t.afDigitizerDll_tsFRONT_SMB); status = Digitizer.Trigger.TType_Set(afDigitizerDll_ttTrigType_t.afDigitizerDll_ttEdge); status = Digitizer.Trigger.EdgeGatePolarity_Set(afDigitizerDll_egpPolarity_t.afDigitizerDll_egpPositive); //status = Digitizer.Trigger.PreEdgeTriggerSamples_Set(preTrigSamples); //status = Digitizer.Trigger.PostGateTriggerSamples_Set(0); //status = Digitizer.Trigger.OffsetDelay_Set(trigDelaySamples); status = Digitizer.Trigger.SwTriggerMode_Set(afDigitizerDll_swtSwTrigMode_t.afDigitizerDll_swtArmed); // Sampling setup status = Digitizer.Modulation.Mode_Set(afDigitizerDll_mmModulationMode_t.afDigitizerDll_mmGeneric); status = Digitizer.Modulation.GenericDecimationRatio_Set(1); //status = Digitizer.Modulation.GenericSamplingFrequency_Set(31e6); //status = Digitizer.Modulation.DecimatedSamplingFrequency_Get(ref decimatedSampleFreq); status = Digitizer.RF.RemoveDCOffset_Set(1); status = Digitizer.Capture.SampleDataType_Set(afDigitizerDll_sdtSampleDataType_t.afDigitizerDll_sdtIQData); status = Digitizer.Capture.IQ.Resolution_Set(afDigitizerDll_iqrIQResolution_t.afDigitizerDll_iqrAuto); //status = Digitizer.RF.GetBandwidth(centerFreq, span, afDigitizerDll_frFlatnessRequired_t.afDigitizerDll_frLessThanOnedB, ref bandwidth); // Correction status = Digitizer.RF.OptimizeTemperatureCorrection(); status = Digitizer.RF.AutoTemperatureOptimization_Set(afDigitizerDll_atoAutoTemperatureOptimization_t.afDigitizerDll_atoEnable); //status = Digitizer.RF.LevelCorrection_Get(ref correction); status = Digitizer.Capture.PipeliningEnable_Set(0); return(status); }