public void LoopPinTest() { Stopwatch timer = new Stopwatch(); long expectedTime; if (FX3.ActiveFX3.BoardType < FX3BoardType.iSensorFX3Board_C) { Console.WriteLine("The connected boards do not have loop back pins"); return; } for (double freq = 100; freq < 2000; freq += 100) { Console.WriteLine("Setting " + freq.ToString() + "Hz PWM on loop pin 1"); FX3.StartPWM(freq, 0.5, FX3.FX3_LOOPBACK1); Assert.AreEqual(freq, FX3.MeasurePinFreq(FX3.FX3_LOOPBACK2, 1, 1000, 100), 0.02 * freq, "ERROR: Invalid value measured on loop pin 2"); FX3.StopPWM(FX3.FX3_LOOPBACK1); Console.WriteLine("Setting " + freq.ToString() + "Hz PWM on loop pin 2"); FX3.StartPWM(freq, 0.5, FX3.FX3_LOOPBACK2); Assert.AreEqual(freq, FX3.MeasurePinFreq(FX3.FX3_LOOPBACK1, 1, 1000, 100), 0.02 * freq, "ERROR: Invalid value measured on loop pin 1"); FX3.StopPWM(FX3.FX3_LOOPBACK2); } Console.WriteLine("Testing SPI triggering with loop back pins..."); FX3.StartPWM(100, 0.5, FX3.FX3_LOOPBACK1); FX3.DrPin = FX3.FX3_LOOPBACK2; FX3.DrActive = true; expectedTime = 1000 * 1000 / 100; timer.Start(); FX3.TransferArray(new uint[1], 1, 1000); timer.Stop(); Console.WriteLine("Elapsed stream time " + timer.ElapsedMilliseconds.ToString() + "ms"); Assert.AreEqual(expectedTime, timer.ElapsedMilliseconds, 0.05 * expectedTime, "ERROR: Invalid stream time"); }
public void PinFunctionTimeoutTest() { Console.WriteLine("Starting pin functions timeout functionality test..."); /* Timer for measuring elapsed time */ Stopwatch timer = new Stopwatch(); for (uint timeout = 100; timeout <= 800; timeout += 100) { Console.WriteLine("Testing timeout of " + timeout.ToString() + "ms..."); FX3.SetPin(FX3.DIO4, 1); /* Pulse wait */ timer.Restart(); FX3.PulseWait(FX3.DIO3, 0, 0, timeout); timer.Stop(); Console.WriteLine("Pulse wait time: " + timer.ElapsedMilliseconds.ToString() + "ms"); Assert.GreaterOrEqual(timer.ElapsedMilliseconds, timeout, "ERROR: Function returned in less than timeout period"); Assert.LessOrEqual(timer.ElapsedMilliseconds, timeout + 100, "ERROR: Function returned in over 100ms more than timeout period"); CheckFirmwareResponsiveness(); /* Measure pin freq */ timer.Restart(); Assert.AreEqual(double.PositiveInfinity, FX3.MeasurePinFreq(FX3.DIO4, 0, timeout, 1), "ERROR: Invalid pin freq. Expected timeout"); timer.Stop(); Console.WriteLine("Measure pin freq time: " + timer.ElapsedMilliseconds.ToString() + "ms"); Assert.GreaterOrEqual(timer.ElapsedMilliseconds, timeout, "ERROR: Function returned in less than timeout period"); Assert.LessOrEqual(timer.ElapsedMilliseconds, timeout + 100, "ERROR: Function returned in over 100ms more than timeout period"); CheckFirmwareResponsiveness(); /* Measure pin delay */ timer.Restart(); FX3.MeasurePinDelay(FX3.DIO4, 0, FX3.DIO1, timeout); timer.Stop(); Console.WriteLine("Measure pin delay time: " + timer.ElapsedMilliseconds.ToString() + "ms"); Assert.GreaterOrEqual(timer.ElapsedMilliseconds, timeout, "ERROR: Function returned in less than timeout period"); Assert.LessOrEqual(timer.ElapsedMilliseconds, timeout + 100, "ERROR: Function returned in over 100ms more than timeout period"); CheckFirmwareResponsiveness(); /* Measure busy pulse */ timer.Restart(); Assert.AreEqual(double.PositiveInfinity, FX3.MeasureBusyPulse(FX3.DIO4, 1, 1, FX3.DIO1, 0, timeout), "ERROR: Expected measure busy pulse to return timeout"); timer.Stop(); Console.WriteLine("Measure busy pulse time: " + timer.ElapsedMilliseconds.ToString() + "ms"); Assert.GreaterOrEqual(timer.ElapsedMilliseconds, timeout, "ERROR: Function returned in less than timeout period"); Assert.LessOrEqual(timer.ElapsedMilliseconds, timeout + 100, "ERROR: Function returned in over 100ms more than timeout period"); CheckFirmwareResponsiveness(); } }
public void PinFreqMeasureTest() { Console.WriteLine("Starting pin frequency measure test..."); const double MIN_FREQ = 5; const double MAX_FREQ = 10000; double measuredFreq, expectedFreq; Console.WriteLine("Sweeping PWM duty cycle with fixed frequency..."); expectedFreq = 4000; for (double dutyCycle = 0.02; dutyCycle < 0.98; dutyCycle += 0.01) { Console.WriteLine("Testing duty cycle of " + dutyCycle.ToString()); FX3.StartPWM(4000, dutyCycle, FX3.DIO3); measuredFreq = FX3.MeasurePinFreq(FX3.DIO4, 1, 500, 5); Console.WriteLine("Pin freq measured on DIO2: " + measuredFreq.ToString() + "Hz"); Assert.AreEqual(expectedFreq, measuredFreq, 0.02 * expectedFreq, "ERROR: Invalid freq read back on DIO2"); } FX3.StopPWM(FX3.DIO3); Console.WriteLine("Sweeping freq range..."); for (expectedFreq = MIN_FREQ; expectedFreq < MAX_FREQ; expectedFreq = expectedFreq * 1.08) { Console.WriteLine("Testing PWM freq of " + expectedFreq.ToString() + "Hz"); FX3.StartPWM(expectedFreq, 0.5, FX3.DIO3); measuredFreq = FX3.MeasurePinFreq(FX3.DIO4, 1, 2000, 3); Console.WriteLine("Pin freq measured on DIO4: " + measuredFreq.ToString() + "Hz"); Assert.AreEqual(expectedFreq, measuredFreq, 0.02 * expectedFreq, "ERROR: Invalid freq read back on DIO4"); FX3.StopPWM(FX3.DIO3); FX3.StartPWM(expectedFreq, 0.5, FX3.DIO4); measuredFreq = FX3.MeasurePinFreq(FX3.DIO3, 1, 2000, 3); Console.WriteLine("Pin freq measured on DIO3: " + measuredFreq.ToString() + "Hz"); Assert.AreEqual(expectedFreq, measuredFreq, 0.02 * expectedFreq, "ERROR: Invalid freq read back on DIO3"); FX3.StopPWM(FX3.DIO4); } Console.WriteLine("Testing averaging..."); expectedFreq = 4000; FX3.StartPWM(expectedFreq, 0.5, FX3.DIO3); for (ushort average = 1; average < 1000; average += 2) { Console.WriteLine("Testing pin freq measure with " + average.ToString() + " averages..."); measuredFreq = FX3.MeasurePinFreq(FX3.DIO4, 1, 1000, average); Console.WriteLine("Pin freq measured on DIO4: " + measuredFreq.ToString() + "Hz"); Assert.AreEqual(expectedFreq, measuredFreq, 0.02 * expectedFreq, "ERROR: Invalid freq read back on DIO4"); } }