Accumulators wait for the next sample after reset

Analog accumulators now wait for the amount of time a full sample
(including oversampling and averaging) lasts after
AnalogInput::ResetAccumulator() is called, so they don't return
old values after being reset.

This delay should be microseconds long and will only happen
when an accumulator is reset.

A new test is is the C++ TiltPanCameraTest that tests this behavior
with the Gyro class.

Change-Id: I1b3ffdeec187959f95c5e637a6d428c9a4bc2cf4
This commit is contained in:
Thomas Clark
2014-07-31 15:46:14 -04:00
parent 2735406bfb
commit 8fe888dbc9
3 changed files with 34 additions and 6 deletions

View File

@@ -310,6 +310,14 @@ public class AnalogInput extends SensorBase implements PIDSource,
status.order(ByteOrder.LITTLE_ENDIAN);
AnalogJNI.resetAccumulator(m_port, status.asIntBuffer());
HALUtil.checkStatus(status.asIntBuffer());
// Wait until the next sample, so the next call to getAccumulator*()
// won't have old values.
final double sampleTime = 1.0 / getGlobalSampleRate();
final double overSamples = 1 << getOversampleBits();
final double averageSamples = 1 << getAverageBits();
Timer.delay(sampleTime * overSamples * averageSamples);
}
/**